From 3c6fd6088ffe00bade41751c581c218db7a76650 Mon Sep 17 00:00:00 2001 From: HumanoidSandvichDispenser Date: Sun, 6 Aug 2023 02:53:49 -0700 Subject: [PATCH] fix dialogue balloon not refocusing after choice --- Dialogue/Balloon.cs | 7 +++++-- Dialogue/balloon.tscn | 3 --- Utils/World.cs | 29 ++++++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/Dialogue/Balloon.cs b/Dialogue/Balloon.cs index 1299e49..09c248c 100644 --- a/Dialogue/Balloon.cs +++ b/Dialogue/Balloon.cs @@ -59,7 +59,6 @@ public partial class Balloon : CanvasLayer balloon.GuiInput += (inputEvent) => { - if (!isWaitingForInput) return; if (GetResponses().Count > 0) return; @@ -69,7 +68,7 @@ public partial class Balloon : CanvasLayer { Next(dialogueLine.NextId); } - else if (inputEvent.IsActionPressed("ui_accept") && GetViewport().GuiGetFocusOwner() == balloon) + else if (inputEvent.IsActionPressed("ui_accept")) { Next(dialogueLine.NextId); } @@ -160,10 +159,14 @@ public partial class Balloon : CanvasLayer if (inputEvent is InputEventMouseButton && inputEvent.IsPressed() && (inputEvent as InputEventMouseButton).ButtonIndex == MouseButton.Left) { + balloon.FocusMode = Control.FocusModeEnum.All; + balloon.GrabFocus(); Next(dialogueLine.Responses[item.GetIndex()].NextId); } else if (inputEvent.IsActionPressed("ui_accept") && GetResponses().Contains(item)) { + balloon.FocusMode = Control.FocusModeEnum.All; + balloon.GrabFocus(); Next(dialogueLine.Responses[item.GetIndex()].NextId); } }; diff --git a/Dialogue/balloon.tscn b/Dialogue/balloon.tscn index 16a7bb0..4923f5b 100644 --- a/Dialogue/balloon.tscn +++ b/Dialogue/balloon.tscn @@ -86,6 +86,3 @@ scroll_active = false shortcut_keys_enabled = false meta_underlined = false hint_underlined = false - -[connection signal="gui_input" from="Balloon" to="." method="_on_balloon_gui_input"] -[connection signal="resized" from="Balloon/Margin" to="." method="_on_margin_resized"] diff --git a/Utils/World.cs b/Utils/World.cs index 786ed36..24f54d5 100644 --- a/Utils/World.cs +++ b/Utils/World.cs @@ -26,7 +26,32 @@ public partial class World : Node public AudioStreamPlayer MusicPlayer { get; set; } [Export] - public Dialogue.Balloon DialogueBalloon { get; set; } + public Dialogue.Balloon DialogueBalloon + { + get + { + if (_dialogueBalloon is null || !IsInstanceValid(_dialogueBalloon)) + { + var scene = GD.Load("res://Dialogue/balloon.tscn"); + _dialogueBalloon = scene.Instantiate(); + //_uiViewport.AddChild(_dialogueBalloon); + _uiViewport.AddChild(_dialogueBalloon); + } + return _dialogueBalloon; + } + set + { + if (_dialogueBalloon != value && _dialogueBalloon is not null) + { + _dialogueBalloon.QueueFree(); + } + _dialogueBalloon = value; + } + } + + private Dialogue.Balloon _dialogueBalloon; + + private SubViewport _uiViewport; public State.Global.GlobalState GlobalState { get; set; } @@ -66,6 +91,8 @@ public partial class World : Node Godot.RenderingServer.SetDefaultClearColor(Godot.Colors.Black); + _uiViewport = GetNode("CanvasLayer/SubViewportContainer/UIViewport"); + // create a player (currently unparented) CreatePlayer();