From 6a2802281c2d8e9ce237d22759d7c54b5fd3e312 Mon Sep 17 00:00:00 2001 From: Marco Date: Mon, 24 Feb 2025 10:50:14 +0100 Subject: [PATCH] Pause mode for dialogue --- Scripts/Activables/DialogueStarter.cs | 12 ++++++----- Scripts/GameManager.cs | 17 +++++++++++++++ .../Resources/Events/DialogueStartEvent.cs | 21 +++++++++---------- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/Scripts/Activables/DialogueStarter.cs b/Scripts/Activables/DialogueStarter.cs index 5d5c372f..2baaa9bc 100644 --- a/Scripts/Activables/DialogueStarter.cs +++ b/Scripts/Activables/DialogueStarter.cs @@ -21,12 +21,13 @@ public partial class DialogueStarter : ChainActivable _gameManager = this.GetGameManager(); _dialogic = GetNode("/root/Dialogic"); + _dialogic.ProcessMode = ProcessModeEnum.Always; } private void OnTimelineEnded() { - - if (_dialogic.IsConnected("timeline_ended", Callable.From(OnTimelineEnded))) + _gameManager.ChangeState(GameState.Playing); + if (_dialogic.IsConnected("timeline_ended", Callable.From(OnTimelineEnded))) { _dialogic.Disconnect("timeline_ended", Callable.From(OnTimelineEnded)); } @@ -36,11 +37,12 @@ public partial class DialogueStarter : ChainActivable public override void Activate(ActivationType activationType = ActivationType.Toggle) { - _gameManager.ChangeState(GameState.Dialogue); - _dialogic.Connect("timeline_ended", Callable.From(OnTimelineEnded)); - _dialogic.Call("start", _trackName); + var dialogicNode = _dialogic.Call("start", _trackName); + ((Node)dialogicNode).ProcessMode = ProcessModeEnum.Always; + _gameManager.ChangeState(GameState.Dialogue); + // Script dialogic = ResourceLoader.Load("res://addons/dialogic/Other/DialogicClass.gd") as Script; // var dialog = (Node) dialogic.Call("start","timeline"); // AddChild(dialog); diff --git a/Scripts/GameManager.cs b/Scripts/GameManager.cs index 53b23bd8..873a0915 100644 --- a/Scripts/GameManager.cs +++ b/Scripts/GameManager.cs @@ -307,6 +307,23 @@ public partial class GameManager : Node2D GameState = state; EmitSignal(nameof(GameStateChange), (int)GameState); GD.Print($"Game state changed to {state}"); + + switch (state) + { + case GameState.Menu: + GetTree().SetPause(false); + break; + case GameState.Paused: + case GameState.Dialogue: + GetTree().SetPause(true); + break; + case GameState.Playing: + GetTree().SetPause(false); + break; + case GameState.Controlling: + GetTree().SetPause(false); + break; + } } } diff --git a/Scripts/Resources/Events/DialogueStartEvent.cs b/Scripts/Resources/Events/DialogueStartEvent.cs index 6d136f96..a8a17e0b 100644 --- a/Scripts/Resources/Events/DialogueStartEvent.cs +++ b/Scripts/Resources/Events/DialogueStartEvent.cs @@ -12,39 +12,38 @@ public partial class DialogueStartEvent : EventResource public override void Init(Node2D parent) { - _gameManager = parent.GetGameManager(); + _gameManager = parent.GetGameManager(); _dialogic = parent.GetNode("/root/Dialogic"); + _dialogic.ProcessMode = Node.ProcessModeEnum.Always; } public override void Start(Node2D parent) { - _gameManager.ChangeState(GameState.Dialogue); - _dialogic.Connect("timeline_ended", Callable.From(OnTimelineEnded)); - - _dialogic.Call("start", TimelineName); + + var dialogicNode =_dialogic.Call("start", TimelineName); + ((Node)dialogicNode).ProcessMode = Node.ProcessModeEnum.Always; + _gameManager.ChangeState(GameState.Dialogue); } - + private void OnTimelineEnded() { - + _gameManager.ChangeState(GameState.Playing); if (_dialogic.IsConnected("timeline_ended", Callable.From(OnTimelineEnded))) { _dialogic.Disconnect("timeline_ended", Callable.From(OnTimelineEnded)); } - + DialogueEndAction(); } - + private void DialogueEndAction() { - _gameManager.ChangeState(GameState.Playing); _isComplete = true; } public override void UpdateEvent(double delta) { - } public override bool IsComplete()