diff --git a/Scenes/Actors/fsm_player.tscn b/Scenes/Actors/fsm_player.tscn index 9101b00f..c88a8f56 100644 --- a/Scenes/Actors/fsm_player.tscn +++ b/Scenes/Actors/fsm_player.tscn @@ -385,8 +385,10 @@ Shield = NodePath("../DamageReceiver/ShieldProvider") [node name="CollisionShape2D2" type="CollisionShape2D" parent="InteractionController"] shape = SubResource("CircleShape2D_g3wua") -[node name="ItemUser" type="Node2D" parent="."] +[node name="ItemUser" type="Node2D" parent="." node_paths=PackedStringArray("Health", "Shield")] script = ExtResource("29_m323t") +Health = NodePath("../DamageReceiver/HealthProvider") +Shield = NodePath("../DamageReceiver/ShieldProvider") [node name="Sprite2D" type="Sprite2D" parent="."] visible = false diff --git a/Scenes/HUD/HUD.tscn b/Scenes/HUD/HUD.tscn index bc01f96e..ddaf66a5 100644 --- a/Scenes/HUD/HUD.tscn +++ b/Scenes/HUD/HUD.tscn @@ -177,10 +177,11 @@ visible = false [node name="DebugContainer" type="PanelContainer" parent="."] visible = false -offset_left = 66.0 -offset_top = 45.0 -offset_right = 259.0 -offset_bottom = 156.0 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 [node name="PauseMenuContainer" type="PanelContainer" parent="."] visible = false diff --git a/Scenes/HUD/debug_menu.tscn b/Scenes/HUD/debug_menu.tscn index 159517b2..806be8ae 100644 --- a/Scenes/HUD/debug_menu.tscn +++ b/Scenes/HUD/debug_menu.tscn @@ -6,7 +6,7 @@ [ext_resource type="Resource" uid="uid://d1lc8lhq1b05p" path="res://Resources/Debug/DebugLevels.tres" id="3_cvgqx"] [ext_resource type="Texture2D" uid="uid://d1a0nwd4wdph7" path="res://Sprites/UI/Back_Small.png" id="5_1xl3a"] -[node name="DebugMenu" type="VBoxContainer" node_paths=PackedStringArray("ButtonsContainer", "DefaultSelectedButton")] +[node name="DebugMenu" type="VBoxContainer" node_paths=PackedStringArray("ButtonsContainer", "CheatsContainer", "DefaultSelectedButton")] process_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -17,6 +17,7 @@ script = ExtResource("1_5vtnj") ButtonTheme = ExtResource("2_6il8q") Levels = ExtResource("3_cvgqx") ButtonsContainer = NodePath("ScrollContainer/Level Select") +CheatsContainer = NodePath("HBoxContainer/ScrollContainer/CheatsContainer") DefaultSelectedButton = NodePath("ScrollContainer/Level Select/BackButton") [node name="HBoxContainer" type="HBoxContainer" parent="."] @@ -35,6 +36,15 @@ theme_override_font_sizes/font_size = 14 text = "God Mode " +[node name="ScrollContainer" type="ScrollContainer" parent="HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="CheatsContainer" type="HBoxContainer" parent="HBoxContainer/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + [node name="ScrollContainer" type="ScrollContainer" parent="."] layout_mode = 2 size_flags_vertical = 3 diff --git a/Scripts/Components/FSM/Player/PlayerFSMItemUseModule.cs b/Scripts/Components/FSM/Player/PlayerFSMItemUseModule.cs index 85a42f5d..72364c4b 100644 --- a/Scripts/Components/FSM/Player/PlayerFSMItemUseModule.cs +++ b/Scripts/Components/FSM/Player/PlayerFSMItemUseModule.cs @@ -1,4 +1,5 @@ using System; +using Cirno.Scripts.Components.Actors; using Cirno.Scripts.Resources; using Godot; @@ -6,6 +7,12 @@ namespace Cirno.Scripts.Components.FSM.Player; public partial class PlayerFSMItemUseModule : ModuleBase { + [Export] + public ActorResourceProvider Health { get; set; } + + [Export] + public ActorResourceProvider Shield { get; set; } + public bool Enabled { get; set; } = false; public override void EnterState(PlayerState state) @@ -43,15 +50,18 @@ public partial class PlayerFSMItemUseModule : ModuleBase(); diff --git a/Scripts/Components/FSM/PlayerStateMachine.cs b/Scripts/Components/FSM/PlayerStateMachine.cs index 8553ad7d..1ee6660f 100644 --- a/Scripts/Components/FSM/PlayerStateMachine.cs +++ b/Scripts/Components/FSM/PlayerStateMachine.cs @@ -6,5 +6,15 @@ namespace Cirno.Scripts.Components.FSM; public partial class PlayerStateMachine : StateMachineBase { [Export] public override PlayerState InitialState { get; protected set; } = PlayerState.Init; + + public void RefillHealth() + { + GD.Print("Refilling health"); + } + + public void RefilleShield() + { + GD.Print("Refilling shield"); + } } diff --git a/Scripts/InventoryManager.cs b/Scripts/InventoryManager.cs index e12f98e3..7b4047c1 100644 --- a/Scripts/InventoryManager.cs +++ b/Scripts/InventoryManager.cs @@ -130,14 +130,15 @@ public partial class InventoryManager : Node2D switch (itm.Item.Item) { case ItemTypes.Medkit: - // Heal case ItemTypes.FrogBomb: - // Use Bomb case ItemTypes.Bomb: - // Bomb case ItemTypes.Mine: case ItemTypes.Battery: EmitSignal(SignalName.ItemUsed, itm.Item, itm.Count); + if (itm.Item.ConsumeOnUse) + { + RemoveItem(itm.Item.ItemKey, 1); + } break; case ItemTypes.Weapon: // Equip weapon diff --git a/Scripts/UI/DebugMenu.cs b/Scripts/UI/DebugMenu.cs index cc15af94..bf1cf8f0 100644 --- a/Scripts/UI/DebugMenu.cs +++ b/Scripts/UI/DebugMenu.cs @@ -17,6 +17,9 @@ public partial class DebugMenu : MenuBase [Export] public Container ButtonsContainer { get; private set; } + [Export] + public Container CheatsContainer { get; private set; } + [Export] public Button DefaultSelectedButton { get; private set; } @@ -28,17 +31,47 @@ public partial class DebugMenu : MenuBase foreach (var level in Levels.Maps) { if (!level.Enabled) continue; - var button = new Button(); - //button.Text = level.Split("/")[^1].Split(".")[0]; - button.Text = level.DisplayName; - button.Icon = level.Icon; - //button.Text = level; - button.Theme = ButtonTheme; - ButtonsContainer.CallDeferred("add_child", button); + var button = MakeButton(ButtonsContainer, level.DisplayName, level.Icon); + + // var button = new Button(); + // //button.Text = level.Split("/")[^1].Split(".")[0]; + // button.Text = level.DisplayName; + // button.Icon = level.Icon; + // //button.Text = level; + // button.Theme = ButtonTheme; + // + // ButtonsContainer.CallDeferred("add_child", button); button.Pressed += () => ButtonOnPressed(level); } + + var refillHealthButton = MakeButton(CheatsContainer, "Health", null); + refillHealthButton.Pressed += RefillHealthButtonOnPressed; + + var refillShieldButton = MakeButton(CheatsContainer, "Shield", null); + refillShieldButton.Pressed += RefillShieldButtonOnPressed; + + } + + private void RefillHealthButtonOnPressed() + { + GameManager.Instance?.Player?.RefillHealth(); + } + + private void RefillShieldButtonOnPressed() + { + GameManager.Instance?.Player?.RefilleShield(); + } + + private Button MakeButton(Control parent, string text, Texture2D icon) + { + var button = new Button(); + button.Text = text; + button.Icon = icon; + button.Theme = ButtonTheme; + parent.CallDeferred("add_child", button); + return button; } private void ButtonOnPressed(DebugMapSelectResource scene)