From 2e1e831195a7dfdd6dde00cb0ee4bfbac69a3415 Mon Sep 17 00:00:00 2001 From: HumanoidSandvichDispenser Date: Sun, 13 Aug 2023 16:49:18 -0700 Subject: [PATCH 1/5] move UI to its own autoload --- Characters/Character.cs | 9 ++++- Characters/Player.cs | 6 ++++ Events/EventBus.cs | 9 +++++ Extensions/Node.cs | 11 ++++++ Scenes/Level.tscn | 77 +++-------------------------------------- Scenes/Maps/Arena.tscn | 4 +-- UI/Base.tscn | 77 +++++++++++++++++++++++++++++++++++++++++ UI/HealthBar.cs | 5 +++ Utils/World.cs | 25 ++++++++----- project.godot | 26 ++++++++++++++ 10 files changed, 165 insertions(+), 84 deletions(-) create mode 100644 UI/Base.tscn diff --git a/Characters/Character.cs b/Characters/Character.cs index 785d11c..9c02342 100644 --- a/Characters/Character.cs +++ b/Characters/Character.cs @@ -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) { diff --git a/Characters/Player.cs b/Characters/Player.cs index b845271..83c22f9 100644 --- a/Characters/Player.cs +++ b/Characters/Player.cs @@ -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) diff --git a/Events/EventBus.cs b/Events/EventBus.cs index 7a8d46b..2661ef1 100644 --- a/Events/EventBus.cs +++ b/Events/EventBus.cs @@ -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); } diff --git a/Extensions/Node.cs b/Extensions/Node.cs index d167a2c..34f47b6 100644 --- a/Extensions/Node.cs +++ b/Extensions/Node.cs @@ -66,4 +66,15 @@ public static class NodeExtensions { return node.GetNode("/root/World"); } + + public static CanvasLayer GetUI(this Node node) + { + return node.GetNode("/root/BaseUI"); + } + + public static UI.UIController GetMainUI(this Node node) + { + return node.GetNode("/root/BaseUI/" + + "SubViewportContainer/UIViewport/CanvasLayer/MainUILayer/Main"); + } } diff --git a/Scenes/Level.tscn b/Scenes/Level.tscn index 28f3a98..e04588f 100644 --- a/Scenes/Level.tscn +++ b/Scenes/Level.tscn @@ -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" diff --git a/Scenes/Maps/Arena.tscn b/Scenes/Maps/Arena.tscn index 1ebf58e..e1687d6 100644 --- a/Scenes/Maps/Arena.tscn +++ b/Scenes/Maps/Arena.tscn @@ -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) diff --git a/UI/Base.tscn b/UI/Base.tscn new file mode 100644 index 0000000..50aacf4 --- /dev/null +++ b/UI/Base.tscn @@ -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 diff --git a/UI/HealthBar.cs b/UI/HealthBar.cs index 896e59a..79345fd 100644 --- a/UI/HealthBar.cs +++ b/UI/HealthBar.cs @@ -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"); + this.GetEventBus().PlayerHealthChanged += (args) => + { + ProgressBar.Value = args.NewHealth; + }; } } diff --git a/Utils/World.cs b/Utils/World.cs index f3c0149..0d26ffd 100644 --- a/Utils/World.cs +++ b/Utils/World.cs @@ -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("res://Dialogue/balloon.tscn"); _dialogueBalloon = scene.Instantiate(); - //_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("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("Top/Margin/HealthBar"); bar.ProgressBar.Value = args.NewHealth; }; + */ return CurrentPlayer; } diff --git a/project.godot b/project.godot index 873cf7c..55cbffc 100644 --- a/project.godot +++ b/project.godot @@ -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] From 24f2c3b9fd31799dc1d70500a1ce627d925f5dc8 Mon Sep 17 00:00:00 2001 From: HumanoidSandvichDispenser Date: Sun, 13 Aug 2023 20:11:40 -0700 Subject: [PATCH 2/5] area labels --- Assets/Fonts/calamity/calamity-spaced.tres | 7 + Assets/Sprites/UI/border.ase | Bin 0 -> 879 bytes Assets/Sprites/UI/border.png | Bin 0 -> 396 bytes Assets/Sprites/UI/border.png.import | 34 ++++ Assets/Sprites/UI/menu-center.ase | Bin 0 -> 1247 bytes Assets/Sprites/UI/menu-center.png | Bin 0 -> 480 bytes Assets/Sprites/UI/menu-center.png.import | 34 ++++ Events/AreaChangedArgs.cs | 6 + Events/EventBus.cs | 3 + Scenes/Maps/Arena.tscn | 4 +- Scenes/Maps/ArenaExterior.tscn | 44 ++--- Shaders/Wipe.gdshader | 11 ++ UI/Base.tscn | 8 +- UI/LocationDisplay.cs | 32 +++ UI/LocationDisplay.tscn | 218 +++++++++++++++++++++ Utils/World.cs | 2 + 16 files changed, 374 insertions(+), 29 deletions(-) create mode 100644 Assets/Fonts/calamity/calamity-spaced.tres create mode 100644 Assets/Sprites/UI/border.ase create mode 100644 Assets/Sprites/UI/border.png create mode 100644 Assets/Sprites/UI/border.png.import create mode 100644 Assets/Sprites/UI/menu-center.ase create mode 100644 Assets/Sprites/UI/menu-center.png create mode 100644 Assets/Sprites/UI/menu-center.png.import create mode 100644 Events/AreaChangedArgs.cs create mode 100644 Shaders/Wipe.gdshader create mode 100644 UI/LocationDisplay.cs create mode 100644 UI/LocationDisplay.tscn diff --git a/Assets/Fonts/calamity/calamity-spaced.tres b/Assets/Fonts/calamity/calamity-spaced.tres new file mode 100644 index 0000000..f794095 --- /dev/null +++ b/Assets/Fonts/calamity/calamity-spaced.tres @@ -0,0 +1,7 @@ +[gd_resource type="FontVariation" load_steps=2 format=3 uid="uid://cnjpt3yy746ob"] + +[ext_resource type="FontFile" uid="uid://6bvgjbmqovau" path="res://Assets/Fonts/calamity/calamity.ttf" id="1_m4w5i"] + +[resource] +base_font = ExtResource("1_m4w5i") +spacing_glyph = 4 diff --git a/Assets/Sprites/UI/border.ase b/Assets/Sprites/UI/border.ase new file mode 100644 index 0000000000000000000000000000000000000000..f593068f9642450438f6acef9bec393d40281514 GIT binary patch literal 879 zcmcJOPe_wt9LIn5PA6uHe`3jN?(HC`=$03qgEXcq%q({qDrmm>ClPHFimO9TLp_KE zhL9qq2fpu>ADkT?g6j(la6b}(#|H=SPb>y=Q!LP_ ztGS*6wWqH_?P=B(!$4~p93HHJpJtxI)rdO7=LeZ^<%tfrU+2Tgt6~x zVo%>aI6lz~r^C#--IPWC#-%~2|Je_!^zEVD38?6 zMqm^=rqpjeYhPe6x&@bhY{2XKeP}Q8L&u#qSn2DB_0PwlIkyP))I3;XQyIO5RnX^D zhC_|&%rgT!Fg*V|zRO69dUI51ltVMrLMIeL8&p9Llt2UM$35b)j&gh>8`EgUF@mv+ zTD&3^qv*sXBC&`<{2>o>Xu}!8u!Sl-Aqhk1!3|=tf)acn0~2V#0Rl)*baE4##Ka{l zK}ktO@)3??#ImbY27iw8MO?AUL-SSVOQY1qL!u$Xwo05=_}_AfCc(M(w!2~`6^pl_ V@y5u!rA$5~-kRD;lEaYZJq6Ed1GxYI literal 0 HcmV?d00001 diff --git a/Assets/Sprites/UI/border.png b/Assets/Sprites/UI/border.png new file mode 100644 index 0000000000000000000000000000000000000000..181cc5e129e71f4fd0fa8647442677145a6eaa4f GIT binary patch literal 396 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sX99deT!AzPGatXOh_t-Cp}9p^ zT4GLHgB-J<6}Pyzqsfgi3{e0j7mE7z^PJ8J66 z^liuM_T6m0{%ppZk2`psWQ4+Gbu09p`|MIz`1c;nVDPI@$Zyq~G{b4{){2`)R=nOX zD(x<>6{csKU>8{8o7bK=XQ?!goUXWztEPRRequw!!kMLKRxbFevCGN_=pUDoAirRS z|CEDG+MZ=V^Rzu(978-hlM^IZP1p||;o#zS7MOB?En$;_OB?Uv1d*PmKm#tfgBl9_ a3=F%?m|ZVN8wvuoF?hQAxvXDO+nDB7rZ(oxLxPpNk||`OR+vkSh-8sEnYNfpnxzuWn3!p3VF@W> z`Cw^al$KPYX&6FCk8T7-P+&!7P5Z<2-Nc0;-~7XT^M^acZun`gmVhkiHp~pNfSojR)YPZaKrXT`sUELk)+^yx~NH?EYy`CplIE zO|NCgqj@`E)rGyVq2mzj89oF1Co16B+pF-y%mcVG+7r5@u7iFh0WhX65@xsWhP8u- zp-7T9YYQr&f4!`Y?z<05CWc`9`^V5#y%TCSrb7R%nJ`j!0w(5HL49)@RNH$&KR20i z`-W{$7a$EA_sE$Wi$`F`^{?hpT3X6~j$9hcVKc0Sov;wL!7A7TOJD=&$35b)j&gh> z8`EgUF@mv+TD&3^qv*sXBC&`<{2>o>Xu}!8u!Sl-Aqhk1!3|=tf)acn0~2V#0Rl)* zbaE4##Ka{lK}ktO@)3??#L~!AS_?S$5LeiU1bu0Cp*CptSUGpb_u}KwrK^LNJ`M@v zIxDTb+ftb4dqfFqQPP~1X%u?vdQtuCh{~t1Ip#f+3ZQ%7TRh zWwn>$)(mJ>F-3O`=Gd)e(oQ%cME7gKib h%I5`BN+)N{^z0-`CQ%n`&+kue)%H9#iB3G z=cFMXXepoQt&<;T)>!T`Z)Vc2%?NEBt#8W-$0wDCD>5O`74fcWcGXBP(9- z7nOFG*9z0KO|T0r@y%;boU>G#M^0B<$5qolP(QIDV&TlvGbV#>< zPqsESHvNURPtqrM=^mTqylMkq!B<@-WBw|s8Ov`m?PghX{{BryS5rReBgyl20-eI( M>FVdQ&MBb@0MNJNqyPW_ literal 0 HcmV?d00001 diff --git a/Assets/Sprites/UI/menu-center.png.import b/Assets/Sprites/UI/menu-center.png.import new file mode 100644 index 0000000..3b4d29e --- /dev/null +++ b/Assets/Sprites/UI/menu-center.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://t467i5xou4ug" +path="res://.godot/imported/menu-center.png-fa37aff35ac70bec324c3aa847f905cd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/UI/menu-center.png" +dest_files=["res://.godot/imported/menu-center.png-fa37aff35ac70bec324c3aa847f905cd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Events/AreaChangedArgs.cs b/Events/AreaChangedArgs.cs new file mode 100644 index 0000000..065103d --- /dev/null +++ b/Events/AreaChangedArgs.cs @@ -0,0 +1,6 @@ +namespace SupaLidlGame.Events; + +public partial class AreaChangedArgs : Args +{ + public Scenes.Map Map { get; set; } +} diff --git a/Events/EventBus.cs b/Events/EventBus.cs index 2661ef1..2f93bbc 100644 --- a/Events/EventBus.cs +++ b/Events/EventBus.cs @@ -7,6 +7,9 @@ public partial class EventBus : Node [Signal] public delegate void RequestMoveToAreaEventHandler(RequestAreaArgs args); + [Signal] + public delegate void AreaChangedEventHandler(Scenes.Map map); + [Signal] public delegate void PlayerDeathEventHandler(HurtArgs args); diff --git a/Scenes/Maps/Arena.tscn b/Scenes/Maps/Arena.tscn index e1687d6..f647150 100644 --- a/Scenes/Maps/Arena.tscn +++ b/Scenes/Maps/Arena.tscn @@ -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_pg4a6"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_7dryp"] 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_pg4a6") +material = SubResource("ShaderMaterial_7dryp") [node name="PointLight2D" type="PointLight2D" parent="Entities" index="1"] position = Vector2(168, -42) diff --git a/Scenes/Maps/ArenaExterior.tscn b/Scenes/Maps/ArenaExterior.tscn index 24cbf76..842a50e 100644 --- a/Scenes/Maps/ArenaExterior.tscn +++ b/Scenes/Maps/ArenaExterior.tscn @@ -161,70 +161,70 @@ size = Vector2(64, 97) [sub_resource type="RectangleShape2D" id="RectangleShape2D_5pcme"] size = Vector2(18, 6) -[sub_resource type="ShaderMaterial" id="ShaderMaterial_vw5b5"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_1q1be"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_8p2xl"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_obny8"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_ndk4b"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_exlka"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_yll4k"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ec2v5"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_yuyxc"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ohpa0"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_ecd57"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_aiu1q"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_ewmj1"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_bf84d"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_k255s"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_7skkn"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_4sns8"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_soae1"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_w1raa"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_to8fm"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) @@ -241,8 +241,8 @@ layer_4/tile_data = PackedInt32Array(2097150, 655360, 2, 2359293, 655360, 1, 235 CameraLowerBound = Vector2(0, 0) CameraUpperBound = Vector2(0, 0) ClearColor = Color(0.105882, 0.0470588, 0.117647, 1) -AreaName = "Depths of the Arena" -MapName = "The Arena" +AreaName = "The Arena" +MapName = "Depths of the Arena" [node name="CanvasModulate" parent="." index="0"] color = Color(0.5, 0.5, 0.5, 1) @@ -677,43 +677,43 @@ position = Vector2(256, -9) position = Vector2(80, 373) [node name="Centurion" parent="Entities" index="7" instance=ExtResource("30_qfl2k")] -material = SubResource("ShaderMaterial_vw5b5") +material = SubResource("ShaderMaterial_1q1be") position = Vector2(-360, 31) [node name="Centurion2" parent="Entities" index="8" instance=ExtResource("30_qfl2k")] -material = SubResource("ShaderMaterial_8p2xl") +material = SubResource("ShaderMaterial_obny8") position = Vector2(-224, 131) [node name="Legionary" parent="Entities" index="9" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_ndk4b") +material = SubResource("ShaderMaterial_exlka") position = Vector2(-214, 72) [node name="Legionary2" parent="Entities" index="10" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_yll4k") +material = SubResource("ShaderMaterial_ec2v5") position = Vector2(-496, 15) [node name="Legionary3" parent="Entities" index="11" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_yuyxc") +material = SubResource("ShaderMaterial_ohpa0") position = Vector2(-240, 152) [node name="Legionary4" parent="Entities" index="12" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_ecd57") +material = SubResource("ShaderMaterial_aiu1q") position = Vector2(-300, 384) [node name="Legionary5" parent="Entities" index="13" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_ewmj1") +material = SubResource("ShaderMaterial_bf84d") position = Vector2(-300, 401) [node name="Legionary6" parent="Entities" index="14" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_k255s") +material = SubResource("ShaderMaterial_7skkn") position = Vector2(-316, 425) [node name="Legionary7" parent="Entities" index="15" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_4sns8") +material = SubResource("ShaderMaterial_soae1") position = Vector2(-300, 449) [node name="Legionary8" parent="Entities" index="16" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_w1raa") +material = SubResource("ShaderMaterial_to8fm") position = Vector2(-404, 505) [editable path="Props/StaticBookshelf"] diff --git a/Shaders/Wipe.gdshader b/Shaders/Wipe.gdshader new file mode 100644 index 0000000..7cebd6d --- /dev/null +++ b/Shaders/Wipe.gdshader @@ -0,0 +1,11 @@ +shader_type canvas_item; + +uniform float amount : hint_range(0.5, 1.0, 0.01) = 1; + +void fragment() { + // Place fragment code here. + //COLOR = texture(TEXTURE, UV); + if (UV.x > amount || UV.x < 1.0 - amount) { + COLOR.a = 0.0; + } +} diff --git a/UI/Base.tscn b/UI/Base.tscn index 50aacf4..7770bdc 100644 --- a/UI/Base.tscn +++ b/UI/Base.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=5 format=3 uid="uid://c271rdjhd1gfo"] +[gd_scene load_steps=6 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"] +[ext_resource type="PackedScene" uid="uid://c77754nvmckn" path="res://UI/LocationDisplay.tscn" id="5_cr6vo"] [node name="BaseUI" type="CanvasLayer"] @@ -71,7 +72,4 @@ alignment = 1 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 +[node name="LocationDisplay" parent="SubViewportContainer/UIViewport/MainUILayer" instance=ExtResource("5_cr6vo")] diff --git a/UI/LocationDisplay.cs b/UI/LocationDisplay.cs new file mode 100644 index 0000000..eb3ab8a --- /dev/null +++ b/UI/LocationDisplay.cs @@ -0,0 +1,32 @@ +using Godot; +using SupaLidlGame.Extensions; + +namespace SupaLidlGame.UI; + +public partial class LocationDisplay : CenterContainer +{ + private Label _mapName; + private Label _subtitle; + private AnimationPlayer _animPlayer; + + public override void _Ready() + { + _mapName = GetNode