feat(city): add plaza exercise system with health tracking
- Adds CityPlazas support class for deterministic public plaza generation with outdoor gym equipment - Implements exercise and stop-exercise actions with proximity validation to equipment - Introduces health (0-100) and exercise_count attributes to Character model - Reduces hospital stay duration from two game days to one game hour - Adds 3D gym equipment rendering (bench, bars, bike, treadmill) in city viewer - Includes exercise state machine handling in world ticker with energy drain - Adds comprehensive PlazaExerciseTest and updates HospitalAdmissionTest - Provides localized UI strings for health HUD and exercise prompts
This commit is contained in:
@@ -27,6 +27,13 @@
|
||||
{{ __('city.error') }}
|
||||
</div>
|
||||
|
||||
{{-- Gym equipment proximity prompt --}}
|
||||
<div id="exercise-prompt"
|
||||
style="display:none; position:absolute; bottom:1.4rem; left:50%; transform:translateX(-50%);
|
||||
z-index:20; background:rgba(20,83,45,.92); color:#bbf7d0; border:1px solid #4ade80;
|
||||
border-radius:.6rem; padding:.5rem 1rem; font-size:.95rem; font-weight:600; white-space:nowrap;">
|
||||
</div>
|
||||
|
||||
{{-- Hospital admission banner --}}
|
||||
<div id="hospital-banner"
|
||||
style="display:none; position:absolute; top:5.2rem; left:50%; transform:translateX(-50%);
|
||||
@@ -44,9 +51,11 @@
|
||||
<div>{{ __('city.hud_hunger') }}: <span id="hud-hunger" style="color:#fca5a5;">—</span></div>
|
||||
<div>{{ __('city.hud_thirst') }}: <span id="hud-thirst" style="color:#7dd3fc;">—</span></div>
|
||||
<div>{{ __('city.hud_energy') }}: <span id="hud-energy" style="color:#86efac;">—</span></div>
|
||||
<div>{{ __('city.hud_health') }}: <span id="hud-health" style="color:#f9a8d4;">—</span></div>
|
||||
<div>{{ __('city.hud_money') }}: <span id="hud-money" style="color:#fde68a;">—</span></div>
|
||||
<div>{{ __('city.hud_state') }}: <span id="hud-char-state" style="color:#c4b5fd;">—</span></div>
|
||||
<div>{{ __('city.hud_education') }}: <span id="hud-education">—</span></div>
|
||||
<div>{{ __('city.hud_exercise') }}: <span id="hud-exercise-count" style="color:#c4b5fd;">—</span></div>
|
||||
<div style="margin-top:.35rem; color:#cbd5e1;">{{ __('city.hud_inventory') }}: <span id="hud-inv">—</span></div>
|
||||
|
||||
<div style="margin-top:.6rem; color:#fff; font-weight:600;">{{ __('city.hud_actions') }}</div>
|
||||
@@ -267,6 +276,12 @@
|
||||
hospitalTitle: @json(__('city.hospital_title')),
|
||||
hospitalLeft: @json(__('city.hospital_left')),
|
||||
hospitalReleased: @json(__('city.hospital_released')),
|
||||
exerciseUse: @json(__('city.exercise_use')),
|
||||
exerciseActive: @json(__('city.exercise_active')),
|
||||
exerciseStopHint: @json(__('city.exercise_stopHint')),
|
||||
exerciseStart: @json(__('city.exerciseStart')),
|
||||
exerciseStop: @json(__('city.exerciseStop')),
|
||||
exerciseMaxHealth: @json(__('city.exercise_max_health')),
|
||||
},
|
||||
citySlug: @json($city->slug),
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user