Close every top modal through one Esc and right-click path
- Add Help, Settings, Pause and review to the top-modal close chain so right-click and Esc behave consistently. - Restore the venue menu after menu Settings and prevent Help from opening Pause behind itself. - Reopen pause after in-shift Settings apply and recapture the mouse/unfreeze state on close. - Extend the session smoke for menu Settings, right-click Help and guard unfreeze.
This commit is contained in:
1 parent
8f65751975
commit
26e6dd6413
8 files changed
+111
-6
No files matched your search
@@ -99,6 +99,9 @@ var shift_review_panel: ShiftReview = null
|
||||
var start_menu: StartMenu = null
|
||||
var pause_overlay: PauseOverlay = null
|
||||
var settings_panel: SettingsPanel = null
|
||||
## Settings opened from the venue menu must return there on Cancel/Apply;
|
||||
## settings opened from pause must not leave a menu visible or the guard frozen.
|
||||
var _settings_from_start_menu := false
|
||||
var event_timeline: EventTimeline = null
|
||||
var tutorial_overlay: TutorialOverlay = null
|
||||
var help_overlay: HelpOverlay = null
|
||||
@@ -352,8 +355,15 @@ func _phase_start_s(phase: int) -> float:
|
||||
|
||||
func _show_start_menu() -> void:
|
||||
_shift_running = false
|
||||
_settings_from_start_menu = false
|
||||
if pause_overlay:
|
||||
pause_overlay.close()
|
||||
if settings_panel:
|
||||
settings_panel.close()
|
||||
if help_overlay:
|
||||
help_overlay.close_panel()
|
||||
if event_timeline:
|
||||
event_timeline.close()
|
||||
if shift_review_panel:
|
||||
shift_review_panel.hide()
|
||||
if guard:
|
||||
@@ -411,11 +421,21 @@ func _on_settings_applied(settings: Dictionary) -> void:
|
||||
Save.save_campaign(campaign.summary())
|
||||
if coordinator:
|
||||
coordinator.scheduler.spawn_rate_multiplier = float(_difficulty()["spawn"])
|
||||
if start_menu and start_menu.visible:
|
||||
start_menu.open(campaign.summary() if campaign else {})
|
||||
elif _shift_running:
|
||||
# A settings panel opened from the venue menu is restored by
|
||||
# `_on_settings_closed`; an in-shift panel returns to pause. Close it before
|
||||
# opening pause so the new top-modal pass cannot cancel it twice.
|
||||
if _shift_running:
|
||||
if settings_panel:
|
||||
settings_panel.close()
|
||||
_open_pause()
|
||||
|
||||
func _on_settings_closed() -> void:
|
||||
if _settings_from_start_menu:
|
||||
_settings_from_start_menu = false
|
||||
_show_start_menu()
|
||||
else:
|
||||
_refresh_freeze()
|
||||
|
||||
## Clear the tutorial completion/skip flags and restart the Hollywood shift so
|
||||
## the next player can replay the first-shift lesson from Settings.
|
||||
func _on_reset_campaign() -> void:
|
||||
@@ -423,6 +443,7 @@ func _on_reset_campaign() -> void:
|
||||
Save.reset_campaign()
|
||||
if campaign:
|
||||
campaign.setup({})
|
||||
_settings_from_start_menu = false
|
||||
if settings_panel:
|
||||
settings_panel.close()
|
||||
if pause_overlay:
|
||||
@@ -434,6 +455,7 @@ func _on_replay_tutorial() -> void:
|
||||
player_settings["tutorial_skipped"] = false
|
||||
if Save:
|
||||
Save.save_settings(player_settings)
|
||||
_settings_from_start_menu = false
|
||||
if settings_panel:
|
||||
settings_panel.close()
|
||||
if pause_overlay:
|
||||
@@ -445,6 +467,7 @@ func _open_help() -> void:
|
||||
help_overlay.open(selected_scenario.policy_summary if selected_scenario else "")
|
||||
|
||||
func _open_settings() -> void:
|
||||
_settings_from_start_menu = start_menu != null and start_menu.visible
|
||||
if start_menu:
|
||||
start_menu.close()
|
||||
if pause_overlay:
|
||||
@@ -517,6 +540,7 @@ func _build_ui() -> void:
|
||||
settings_panel.applied.connect(_on_settings_applied)
|
||||
settings_panel.replay_tutorial_requested.connect(_on_replay_tutorial)
|
||||
settings_panel.reset_campaign_requested.connect(_on_reset_campaign)
|
||||
settings_panel.closed.connect(_on_settings_closed)
|
||||
|
||||
event_timeline = EventTimeline.new()
|
||||
add_child(event_timeline)
|
||||
@@ -1367,6 +1391,18 @@ func _close_top_modal() -> bool:
|
||||
if event_timeline and event_timeline.visible:
|
||||
event_timeline.close()
|
||||
return true
|
||||
if help_overlay and help_overlay.visible:
|
||||
help_overlay.close_panel()
|
||||
return true
|
||||
if settings_panel and settings_panel.visible:
|
||||
settings_panel._on_cancel()
|
||||
return true
|
||||
if pause_overlay and pause_overlay.visible:
|
||||
_close_pause()
|
||||
return true
|
||||
if shift_review_panel and shift_review_panel.visible:
|
||||
_on_review_restart()
|
||||
return true
|
||||
return false
|
||||
|
||||
func _open_radial() -> void:
|
||||
|
||||
@@ -22,6 +22,33 @@ func _initialize() -> void:
|
||||
|
||||
func _process(_delta: float) -> bool:
|
||||
_frames += 1
|
||||
if _frames == 5:
|
||||
_manager = _main.get_node_or_null("GameManager")
|
||||
if _manager == null or _manager.start_menu == null or not _manager.start_menu.visible:
|
||||
printerr("start menu not visible before settings check")
|
||||
quit(1)
|
||||
return true
|
||||
_manager._open_settings()
|
||||
if _frames == 7:
|
||||
if _manager.settings_panel == null or not _manager.settings_panel.visible:
|
||||
printerr("settings did not open from the venue menu")
|
||||
quit(1)
|
||||
return true
|
||||
_manager.settings_panel._on_cancel()
|
||||
if _frames == 8:
|
||||
if not _manager.start_menu.visible:
|
||||
printerr("cancelling menu settings did not return to the venue menu")
|
||||
quit(1)
|
||||
return true
|
||||
print("boot: menu settings cancel returns to menu")
|
||||
_manager._open_help()
|
||||
_manager._handle_cancel(true)
|
||||
if _frames == 9:
|
||||
if _manager.help_overlay.visible or not _manager.start_menu.visible:
|
||||
printerr("right-click did not close Help and keep the venue menu")
|
||||
quit(1)
|
||||
return true
|
||||
print("boot: help closes on right-click")
|
||||
if _frames == 10:
|
||||
_manager = _main.get_node_or_null("GameManager")
|
||||
if _manager.start_menu == null or not _manager.start_menu.visible:
|
||||
@@ -65,6 +92,10 @@ func _process(_delta: float) -> bool:
|
||||
return true
|
||||
print("boot: settings visible")
|
||||
_manager.settings_panel._on_cancel()
|
||||
if _manager.guard.input_locked:
|
||||
printerr("guard stayed frozen after settings cancel")
|
||||
quit(1)
|
||||
return true
|
||||
_manager._quit_to_menu()
|
||||
if _frames == 290:
|
||||
if not _manager.start_menu.visible:
|
||||
|
||||
Reference in new issue
Block a user