fix dialogue balloon not refocusing after choice

controller-support
HumanoidSandvichDispenser 2023-08-06 02:53:49 -07:00
parent 58ad2382fe
commit 3c6fd6088f
Signed by: sandvich
GPG Key ID: 9A39BE37E602B22D
3 changed files with 33 additions and 6 deletions

View File

@ -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);
}
};

View File

@ -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"]

View File

@ -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<PackedScene>("res://Dialogue/balloon.tscn");
_dialogueBalloon = scene.Instantiate<Dialogue.Balloon>();
//_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<SubViewport>("CanvasLayer/SubViewportContainer/UIViewport");
// create a player (currently unparented)
CreatePlayer();