move UI to its own autoload
parent
d762a843f4
commit
2e1e831195
|
@ -30,7 +30,7 @@ public partial class Character : CharacterBody2D, IFaction
|
|||
public float Stealth { get; protected set; } = 0;
|
||||
|
||||
[Signal]
|
||||
public delegate void HealthChangedEventHandler(float oldHP, float newHP);
|
||||
public delegate void HealthChangedEventHandler(Events.HealthChangedArgs args);
|
||||
|
||||
[Signal]
|
||||
public delegate void HurtEventHandler(Events.HurtArgs args);
|
||||
|
@ -60,6 +60,13 @@ public partial class Character : CharacterBody2D, IFaction
|
|||
return;
|
||||
}
|
||||
|
||||
var args = new Events.HealthChangedArgs
|
||||
{
|
||||
OldHealth = _health,
|
||||
NewHealth = value,
|
||||
};
|
||||
EmitSignal(SignalName.HealthChanged, args);
|
||||
|
||||
_health = value;
|
||||
if (_health <= 0)
|
||||
{
|
||||
|
|
|
@ -40,6 +40,12 @@ public sealed partial class Player : Character
|
|||
AttackAnimation.Play("sword");
|
||||
}
|
||||
};
|
||||
|
||||
HealthChanged += (args) =>
|
||||
{
|
||||
var signal = Events.EventBus.SignalName.PlayerHealthChanged;
|
||||
this.GetEventBus().EmitSignal(signal, args);
|
||||
};
|
||||
}
|
||||
|
||||
public override void _Input(InputEvent @event)
|
||||
|
|
|
@ -6,4 +6,13 @@ public partial class EventBus : Node
|
|||
{
|
||||
[Signal]
|
||||
public delegate void RequestMoveToAreaEventHandler(RequestAreaArgs args);
|
||||
|
||||
[Signal]
|
||||
public delegate void PlayerDeathEventHandler(HurtArgs args);
|
||||
|
||||
[Signal]
|
||||
public delegate void PlayerHurtEventHandler(HurtArgs args);
|
||||
|
||||
[Signal]
|
||||
public delegate void PlayerHealthChangedEventHandler(HealthChangedArgs args);
|
||||
}
|
||||
|
|
|
@ -66,4 +66,15 @@ public static class NodeExtensions
|
|||
{
|
||||
return node.GetNode<Utils.World>("/root/World");
|
||||
}
|
||||
|
||||
public static CanvasLayer GetUI(this Node node)
|
||||
{
|
||||
return node.GetNode<CanvasLayer>("/root/BaseUI");
|
||||
}
|
||||
|
||||
public static UI.UIController GetMainUI(this Node node)
|
||||
{
|
||||
return node.GetNode<UI.UIController>("/root/BaseUI/" +
|
||||
"SubViewportContainer/UIViewport/CanvasLayer/MainUILayer/Main");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,82 +1,14 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://1pb3mpmrl7lc"]
|
||||
[gd_scene load_steps=3 format=3 uid="uid://1pb3mpmrl7lc"]
|
||||
|
||||
[ext_resource type="Script" path="res://Utils/World.cs" id="1_1k6ew"]
|
||||
[ext_resource type="PackedScene" uid="uid://bxo553hblp6nf" path="res://UI/HealthBar.tscn" id="3_5rhge"]
|
||||
[ext_resource type="Script" path="res://UI/UIController.cs" id="3_fe62s"]
|
||||
[ext_resource type="PackedScene" uid="uid://01d24ij5av1y" path="res://UI/BossBar.tscn" id="5_8njq4"]
|
||||
[ext_resource type="PackedScene" uid="uid://73jm5qjy52vq" path="res://Dialogue/balloon.tscn" id="6_2bdwl"]
|
||||
[ext_resource type="PackedScene" uid="uid://c271rdjhd1gfo" path="res://UI/Base.tscn" id="2_mm0qt"]
|
||||
|
||||
[node name="World" type="Node2D" node_paths=PackedStringArray("UIController", "MusicPlayer", "DialogueBalloon")]
|
||||
[node name="World" type="Node2D" node_paths=PackedStringArray("MusicPlayer", "DialogueBalloon")]
|
||||
script = ExtResource("1_1k6ew")
|
||||
UIController = NodePath("CanvasLayer/SubViewportContainer/UIViewport/CanvasLayer/UI")
|
||||
MusicPlayer = NodePath("MusicPlayer")
|
||||
DialogueBalloon = NodePath("CanvasLayer/SubViewportContainer/UIViewport/DialogBalloon")
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="SubViewportContainer" type="SubViewportContainer" parent="CanvasLayer"]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
stretch = true
|
||||
stretch_shrink = 3
|
||||
|
||||
[node name="UIViewport" type="SubViewport" parent="CanvasLayer/SubViewportContainer"]
|
||||
transparent_bg = true
|
||||
handle_input_locally = false
|
||||
size = Vector2i(640, 360)
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="DialogBalloon" parent="CanvasLayer/SubViewportContainer/UIViewport" instance=ExtResource("6_2bdwl")]
|
||||
layer = 2
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="CanvasLayer/SubViewportContainer/UIViewport"]
|
||||
|
||||
[node name="UI" type="Control" parent="CanvasLayer/SubViewportContainer/UIViewport/CanvasLayer" node_paths=PackedStringArray("BossBar")]
|
||||
z_index = 128
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
script = ExtResource("3_fe62s")
|
||||
BossBar = NodePath("Bottom/BossBar")
|
||||
|
||||
[node name="Top" type="HBoxContainer" parent="CanvasLayer/SubViewportContainer/UIViewport/CanvasLayer/UI"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_bottom = 40.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="CanvasLayer/SubViewportContainer/UIViewport/CanvasLayer/UI/Top"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 16
|
||||
|
||||
[node name="HealthBar" parent="CanvasLayer/SubViewportContainer/UIViewport/CanvasLayer/UI/Top/Margin" instance=ExtResource("3_5rhge")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="Bottom" type="HBoxContainer" parent="CanvasLayer/SubViewportContainer/UIViewport/CanvasLayer/UI"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 12
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_top = -44.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
alignment = 1
|
||||
|
||||
[node name="BossBar" parent="CanvasLayer/SubViewportContainer/UIViewport/CanvasLayer/UI/Bottom" instance=ExtResource("5_8njq4")]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
[node name="CanvasLayer" parent="." instance=ExtResource("2_mm0qt")]
|
||||
|
||||
[node name="DebugUI" type="CanvasLayer" parent="."]
|
||||
layer = 2
|
||||
|
@ -90,3 +22,4 @@ grow_horizontal = 2
|
|||
grow_vertical = 2
|
||||
|
||||
[node name="MusicPlayer" type="AudioStreamPlayer" parent="."]
|
||||
bus = &"Music"
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
[ext_resource type="PackedScene" uid="uid://dldnp8eunxj3q" path="res://BoundingBoxes/InteractionTrigger.tscn" id="9_3401j"]
|
||||
[ext_resource type="Script" path="res://BoundingBoxes/ConnectorBox.cs" id="9_fg062"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ltk3d"]
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_pg4a6"]
|
||||
resource_local_to_scene = true
|
||||
shader = ExtResource("5_h8k5p")
|
||||
shader_parameter/color = Vector4(1, 1, 1, 1)
|
||||
|
@ -113,7 +113,7 @@ visible = false
|
|||
position = Vector2(120, -112)
|
||||
|
||||
[node name="Doc" parent="Entities" index="0" instance=ExtResource("4_ej0f3")]
|
||||
material = SubResource("ShaderMaterial_ltk3d")
|
||||
material = SubResource("ShaderMaterial_pg4a6")
|
||||
|
||||
[node name="PointLight2D" type="PointLight2D" parent="Entities" index="1"]
|
||||
position = Vector2(168, -42)
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://c271rdjhd1gfo"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://73jm5qjy52vq" path="res://Dialogue/balloon.tscn" id="1_atjb1"]
|
||||
[ext_resource type="Script" path="res://UI/UIController.cs" id="2_b4b6l"]
|
||||
[ext_resource type="PackedScene" uid="uid://bxo553hblp6nf" path="res://UI/HealthBar.tscn" id="3_j1j6h"]
|
||||
[ext_resource type="PackedScene" uid="uid://01d24ij5av1y" path="res://UI/BossBar.tscn" id="4_igi28"]
|
||||
|
||||
[node name="BaseUI" type="CanvasLayer"]
|
||||
|
||||
[node name="SubViewportContainer" type="SubViewportContainer" parent="."]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
stretch = true
|
||||
stretch_shrink = 3
|
||||
|
||||
[node name="UIViewport" type="SubViewport" parent="SubViewportContainer"]
|
||||
transparent_bg = true
|
||||
handle_input_locally = false
|
||||
size = Vector2i(640, 360)
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="DialogBalloon" parent="SubViewportContainer/UIViewport" instance=ExtResource("1_atjb1")]
|
||||
layer = 2
|
||||
|
||||
[node name="MainUILayer" type="CanvasLayer" parent="SubViewportContainer/UIViewport"]
|
||||
|
||||
[node name="Main" type="Control" parent="SubViewportContainer/UIViewport/MainUILayer" node_paths=PackedStringArray("BossBar")]
|
||||
z_index = 128
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
script = ExtResource("2_b4b6l")
|
||||
BossBar = NodePath("Bottom/BossBar")
|
||||
|
||||
[node name="Top" type="HBoxContainer" parent="SubViewportContainer/UIViewport/MainUILayer/Main"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_bottom = 40.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="SubViewportContainer/UIViewport/MainUILayer/Main/Top"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 16
|
||||
|
||||
[node name="HealthBar" parent="SubViewportContainer/UIViewport/MainUILayer/Main/Top/Margin" instance=ExtResource("3_j1j6h")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="Bottom" type="HBoxContainer" parent="SubViewportContainer/UIViewport/MainUILayer/Main"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 12
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_top = -44.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
alignment = 1
|
||||
|
||||
[node name="BossBar" parent="SubViewportContainer/UIViewport/MainUILayer/Main/Bottom" instance=ExtResource("4_igi28")]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Location" type="Control" parent="SubViewportContainer/UIViewport/MainUILayer/Main"]
|
||||
anchors_preset = 0
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
|
@ -1,4 +1,5 @@
|
|||
using Godot;
|
||||
using SupaLidlGame.Extensions;
|
||||
|
||||
namespace SupaLidlGame.UI;
|
||||
|
||||
|
@ -9,5 +10,9 @@ public partial class HealthBar : Control
|
|||
public override void _Ready()
|
||||
{
|
||||
ProgressBar = GetNode<TextureProgressBar>("TextureProgressBar");
|
||||
this.GetEventBus().PlayerHealthChanged += (args) =>
|
||||
{
|
||||
ProgressBar.Value = args.NewHealth;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@ public partial class World : Node
|
|||
[Export]
|
||||
public Boss CurrentBoss { get; set; }
|
||||
|
||||
[Export]
|
||||
public UI.UIController UIController { get; set; }
|
||||
|
||||
[Export]
|
||||
|
@ -30,11 +29,10 @@ public partial class World : Node
|
|||
{
|
||||
get
|
||||
{
|
||||
if (_dialogueBalloon is null || !IsInstanceValid(_dialogueBalloon))
|
||||
if (!IsDialogueOpen)
|
||||
{
|
||||
var scene = GD.Load<PackedScene>("res://Dialogue/balloon.tscn");
|
||||
_dialogueBalloon = scene.Instantiate<Dialogue.Balloon>();
|
||||
//_uiViewport.AddChild(_dialogueBalloon);
|
||||
_uiViewport.AddChild(_dialogueBalloon);
|
||||
}
|
||||
return _dialogueBalloon;
|
||||
|
@ -49,6 +47,11 @@ public partial class World : Node
|
|||
}
|
||||
}
|
||||
|
||||
public bool IsDialogueOpen
|
||||
{
|
||||
get => _dialogueBalloon is not null && IsInstanceValid(_dialogueBalloon);
|
||||
}
|
||||
|
||||
private Dialogue.Balloon _dialogueBalloon;
|
||||
|
||||
private SubViewport _uiViewport;
|
||||
|
@ -89,6 +92,14 @@ public partial class World : Node
|
|||
|
||||
Godot.RenderingServer.SetDefaultClearColor(Godot.Colors.Black);
|
||||
|
||||
UIController = this.GetMainUI();
|
||||
|
||||
EventBus = this.GetEventBus();
|
||||
EventBus.RequestMoveToArea += (Events.RequestAreaArgs args) =>
|
||||
{
|
||||
MoveToArea(args.Area, args.Connector);
|
||||
};
|
||||
|
||||
_uiViewport = GetNode<SubViewport>("CanvasLayer/SubViewportContainer/UIViewport");
|
||||
|
||||
// create a player (currently unparented)
|
||||
|
@ -97,12 +108,6 @@ public partial class World : Node
|
|||
// TODO: create start menu and load game from there
|
||||
LoadGame();
|
||||
|
||||
EventBus = this.GetEventBus();
|
||||
EventBus.RequestMoveToArea += (Events.RequestAreaArgs args) =>
|
||||
{
|
||||
MoveToArea(args.Area, args.Connector);
|
||||
};
|
||||
|
||||
base._Ready();
|
||||
}
|
||||
|
||||
|
@ -224,12 +229,14 @@ public partial class World : Node
|
|||
};
|
||||
};
|
||||
|
||||
/*
|
||||
CurrentPlayer.Hurt += (Events.HurtArgs args) =>
|
||||
{
|
||||
// TODO: move this to UI controller and add a setup method
|
||||
var bar = UIController.GetNode<UI.HealthBar>("Top/Margin/HealthBar");
|
||||
bar.ProgressBar.Value = args.NewHealth;
|
||||
};
|
||||
*/
|
||||
|
||||
return CurrentPlayer;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ config/icon="res://icon.svg"
|
|||
DialogueManager="*res://addons/dialogue_manager/dialogue_manager.gd"
|
||||
GlobalState="*res://State/Global/GlobalState.cs"
|
||||
EventBus="*res://Events/EventBus.cs"
|
||||
BaseUI="*res://UI/Base.tscn"
|
||||
World="*res://Scenes/Level.tscn"
|
||||
DebugConsole="*res://Debug/DebugConsole.cs"
|
||||
Panku="*res://addons/panku_console/console.tscn"
|
||||
|
@ -50,6 +51,7 @@ ui_accept={
|
|||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":4194309,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":4194310,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
ui_left={
|
||||
|
@ -80,16 +82,19 @@ roll={
|
|||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":3,"pressed":false,"double_click":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":7,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
attack1={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"pressed":false,"double_click":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
attack2={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"pressed":false,"double_click":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
equip={
|
||||
|
@ -100,6 +105,7 @@ equip={
|
|||
interact={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
equip_1={
|
||||
|
@ -146,6 +152,26 @@ right={
|
|||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
look_up={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
look_down={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
look_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
look_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[internationalization]
|
||||
|
||||
|
|
Loading…
Reference in New Issue