Refactor pause handling; implement GameBus for pause state management and update event popup behavior

This commit is contained in:
2025-08-24 00:37:06 +02:00
parent 6d8139fd44
commit 1b3657b03a
5 changed files with 101 additions and 5 deletions

View File

@@ -50,7 +50,7 @@ public partial class EventManager : Node
private void FireEvent(EventDefinition eventDef)
{
GetTree().Paused = true;
GameBus.Instance.SetPause(true);
var popup = _eventPopupScene.Instantiate<EventPopup>();
_eventPopupContainer.AddChild(popup);

View File

@@ -1,4 +1,5 @@
using Godot;
using ParasiticGod.Scripts.Singletons;
namespace ParasiticGod.Scripts.Components;
@@ -13,17 +14,30 @@ public partial class PauseManager : CanvasLayer
ProcessMode = ProcessModeEnum.Always;
_pauseMenu.Hide();
_pauseButton.Pressed += TogglePause;
GameBus.Instance.PauseStateChanged += OnPauseStateChanged;
}
public override void _Input(InputEvent @event)
{
if (@event.IsActionPressed("pause")) TogglePause();
}
public override void _ExitTree()
{
if (GameBus.Instance != null)
{
GameBus.Instance.PauseStateChanged -= OnPauseStateChanged;
}
}
private void TogglePause()
{
var isPaused = !GetTree().Paused;
GetTree().Paused = isPaused;
GameBus.Instance.SetPause(!GetTree().Paused);
}
private void OnPauseStateChanged(bool isPaused)
{
_pauseMenu.Visible = isPaused;
}
}

View File

@@ -32,6 +32,7 @@ public partial class GameBus : Node
public event Action PopulationVisualsUpdated;
public event Action<string> AgeAdvanced;
public event Action GameWon;
public event Action<bool> PauseStateChanged;
public override void _EnterTree()
{
@@ -133,12 +134,18 @@ public partial class GameBus : Node
{
effect.Execute(_gameState);
}
GetTree().Paused = false;
SetPause(false);
}
public void SubscribeToStat(Stat stat, Action<double> listener) => _gameState.Subscribe(stat, listener);
public void UnsubscribeFromStat(Stat stat, Action<double> listener) => _gameState.Unsubscribe(stat, listener);
public void SetPause(bool isPaused)
{
GetTree().Paused = isPaused;
PauseStateChanged?.Invoke(isPaused);
}
public GameState CurrentState => _gameState;
[ConsoleCommand("set_stat", "Sets the value of a specified stat.")]

View File

@@ -16,7 +16,12 @@ public partial class EventPopup : PanelContainer
private EventDefinition _eventDef;
private Timer _timeoutTimer;
private readonly RandomNumberGenerator _rng = new();
public override void _Ready()
{
ProcessMode = ProcessModeEnum.Always;
}
public void DisplayEvent(EventDefinition eventDef)
{
_eventDef = eventDef;