From 0c0174e0ab7a222da671622e5fcdfde1eb30c034 Mon Sep 17 00:00:00 2001 From: Marco Date: Tue, 25 Feb 2025 18:11:57 +0100 Subject: [PATCH] Inventory Menu --- Resources/Items/Ammo1.tres | 2 + Resources/Items/Blue_Keycard.tres | 2 + Resources/Items/Cheat_Gun_Item.tres | 2 + Resources/Items/Green_Keycard.tres | 2 + Resources/Items/IceShotgun.tres | 2 + Resources/Items/IcicleGun.tres | 2 + Resources/Items/Power_Pickup.tres | 4 +- Resources/Items/Red_Keycard.tres | 2 + Scenes/HUD/HUD.tscn | 26 ++++++++++- Scenes/HUD/InventorySelector.tscn | 3 ++ Scripts/Resources/LootItem.cs | 3 +- Scripts/UI/ItemsMenu.cs | 72 +++++++++++++++++++++++++++++ Scripts/UI/ItemsMenu.cs.uid | 1 + project.godot | 6 +++ 14 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 Scenes/HUD/InventorySelector.tscn create mode 100644 Scripts/UI/ItemsMenu.cs create mode 100644 Scripts/UI/ItemsMenu.cs.uid diff --git a/Resources/Items/Ammo1.tres b/Resources/Items/Ammo1.tres index 238ba7d7..f066496e 100644 --- a/Resources/Items/Ammo1.tres +++ b/Resources/Items/Ammo1.tres @@ -10,6 +10,7 @@ atlas = ExtResource("1_bpftr") [resource] script = ExtResource("1_31o2l") ItemName = "Ammo 1" +ItemDescription = "Ammunition" ItemKey = "Ammo1" Item = 3 Amount = 25 @@ -17,5 +18,6 @@ Max = 400 PickupIfMaxed = false ConsumeOnUse = true UiType = 2 +Selectable = false InventorySprite = SubResource("AtlasTexture_3y0hf") HudItemScene = ExtResource("1_qkp4b") diff --git a/Resources/Items/Blue_Keycard.tres b/Resources/Items/Blue_Keycard.tres index c33d9875..d8ab0dc0 100644 --- a/Resources/Items/Blue_Keycard.tres +++ b/Resources/Items/Blue_Keycard.tres @@ -10,6 +10,7 @@ region = Rect2(0, 0, 16, 16) [resource] script = ExtResource("1_k8cnp") ItemName = "Blue Keycard" +ItemDescription = "Keycard that opens blue coded readers" ItemKey = "KeycardBlue" Item = 1 Amount = 1 @@ -17,4 +18,5 @@ Max = 1 PickupIfMaxed = false ConsumeOnUse = false UiType = 1 +Selectable = false InventorySprite = SubResource("AtlasTexture_ebbst") diff --git a/Resources/Items/Cheat_Gun_Item.tres b/Resources/Items/Cheat_Gun_Item.tres index 997c4556..310845e1 100644 --- a/Resources/Items/Cheat_Gun_Item.tres +++ b/Resources/Items/Cheat_Gun_Item.tres @@ -8,6 +8,7 @@ [resource] script = ExtResource("3_i0e51") ItemName = "Cheat Gun" +ItemDescription = "Cheat gun that deals massive damage" ItemKey = "CheatGun" Item = 9 WeaponData = ExtResource("2_0na1t") @@ -16,5 +17,6 @@ Max = 1 PickupIfMaxed = true ConsumeOnUse = false UiType = 1 +Selectable = true InventorySprite = ExtResource("2_5g5j1") HudItemScene = ExtResource("1_i6xgq") diff --git a/Resources/Items/Green_Keycard.tres b/Resources/Items/Green_Keycard.tres index e77606bf..f354544d 100644 --- a/Resources/Items/Green_Keycard.tres +++ b/Resources/Items/Green_Keycard.tres @@ -10,6 +10,7 @@ region = Rect2(0, 0, 16, 16) [resource] script = ExtResource("1_t0s5w") ItemName = "Green Keycard" +ItemDescription = "Keycard that opens green coded readers" ItemKey = "KeycardGreen" Item = 2 Amount = 1 @@ -17,4 +18,5 @@ Max = 1 PickupIfMaxed = false ConsumeOnUse = false UiType = 1 +Selectable = false InventorySprite = SubResource("AtlasTexture_iasoh") diff --git a/Resources/Items/IceShotgun.tres b/Resources/Items/IceShotgun.tres index 23da9451..09b47f82 100644 --- a/Resources/Items/IceShotgun.tres +++ b/Resources/Items/IceShotgun.tres @@ -8,6 +8,7 @@ [resource] script = ExtResource("3_cjfxs") ItemName = "Ice Shotgun" +ItemDescription = "A shotgun transformed by Cirno's magic, requires ammunition to shoot" ItemKey = "IceShotgun" Item = 9 WeaponData = ExtResource("2_3le6e") @@ -16,5 +17,6 @@ Max = 1 PickupIfMaxed = false ConsumeOnUse = false UiType = 1 +Selectable = true InventorySprite = ExtResource("2_4ibag") HudItemScene = ExtResource("1_13ven") diff --git a/Resources/Items/IcicleGun.tres b/Resources/Items/IcicleGun.tres index d1e4b799..73e66d51 100644 --- a/Resources/Items/IcicleGun.tres +++ b/Resources/Items/IcicleGun.tres @@ -8,6 +8,7 @@ [resource] script = ExtResource("2_hy2hk") ItemName = "Icicle Gun" +ItemDescription = "Cirno's basic gun, never runs out of ammo" ItemKey = "IcicleGun" Item = 9 WeaponData = ExtResource("1_itajb") @@ -16,5 +17,6 @@ Max = 1 PickupIfMaxed = false ConsumeOnUse = false UiType = 1 +Selectable = true InventorySprite = ExtResource("2_eaoas") HudItemScene = ExtResource("1_lfbsh") diff --git a/Resources/Items/Power_Pickup.tres b/Resources/Items/Power_Pickup.tres index fd262548..98f2ca90 100644 --- a/Resources/Items/Power_Pickup.tres +++ b/Resources/Items/Power_Pickup.tres @@ -5,7 +5,8 @@ [resource] script = ExtResource("1_vw5ht") -ItemName = "Power Pickup" +ItemName = "Power" +ItemDescription = "Restores Health when used" ItemKey = "PowerPickup" Item = 4 Amount = 1 @@ -13,4 +14,5 @@ Max = 10 PickupIfMaxed = false ConsumeOnUse = true UiType = 2 +Selectable = true InventorySprite = ExtResource("1_cang8") diff --git a/Resources/Items/Red_Keycard.tres b/Resources/Items/Red_Keycard.tres index 0622cead..d100d889 100644 --- a/Resources/Items/Red_Keycard.tres +++ b/Resources/Items/Red_Keycard.tres @@ -8,6 +8,7 @@ [resource] script = ExtResource("1_istlt") ItemName = "Red Keycard" +ItemDescription = "Keycard that opens red coded readers" ItemKey = "KeycardRed" Item = 0 Amount = 1 @@ -15,6 +16,7 @@ Max = 1 PickupIfMaxed = false ConsumeOnUse = false UiType = 1 +Selectable = false InventorySprite = ExtResource("1_glhfu") WorldSprite = ExtResource("1_1j6xs") HudItemScene = ExtResource("1_30txj") diff --git a/Scenes/HUD/HUD.tscn b/Scenes/HUD/HUD.tscn index d2659b80..b749478f 100644 --- a/Scenes/HUD/HUD.tscn +++ b/Scenes/HUD/HUD.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=3 uid="uid://dkwi1hu1bixoe"] +[gd_scene load_steps=20 format=3 uid="uid://dkwi1hu1bixoe"] [ext_resource type="Script" uid="uid://baf6pxbvhqmjk" path="res://Scripts/Hud.cs" id="1_m0hb0"] [ext_resource type="FontFile" uid="uid://ccm3u37q1hvux" path="res://fonts/Xolonium-Regular.ttf" id="2_0xmx2"] @@ -8,6 +8,8 @@ [ext_resource type="PackedScene" uid="uid://bemu3l6b1e84y" path="res://Scenes/HUD/debug_menu.tscn" id="4_gd1k6"] [ext_resource type="PackedScene" uid="uid://bwlstkdibs7oc" path="res://Scenes/HUD/BossHud.tscn" id="5_vmict"] [ext_resource type="FontFile" uid="uid://coek1e2q257pq" path="res://fonts/at01.ttf" id="6_sk1eq"] +[ext_resource type="Theme" uid="uid://dnsadvmunm76k" path="res://Resources/Styles/MainMenuButtons.tres" id="9_sx5r0"] +[ext_resource type="Script" uid="uid://bobo5f4ud60qw" path="res://Scripts/UI/ItemsMenu.cs" id="10_oflr6"] [sub_resource type="LabelSettings" id="LabelSettings_a7f6n"] font = ExtResource("2_0xmx2") @@ -180,3 +182,25 @@ offset_left = 106.0 offset_top = 26.0 offset_right = 226.0 offset_bottom = 144.0 + +[node name="Control" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 0 +offset_left = 68.0 +offset_top = 16.0 +offset_right = 291.0 +offset_bottom = 146.0 +metadata/_edit_group_ = true + +[node name="ItemList" type="ItemList" parent="Control"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("9_sx5r0") +allow_search = false +max_columns = 3 +same_column_width = true +script = ExtResource("10_oflr6") diff --git a/Scenes/HUD/InventorySelector.tscn b/Scenes/HUD/InventorySelector.tscn new file mode 100644 index 00000000..14b2c94a --- /dev/null +++ b/Scenes/HUD/InventorySelector.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://4ejuqujufso5"] + +[node name="InventorySelector" type="CanvasLayer"] diff --git a/Scripts/Resources/LootItem.cs b/Scripts/Resources/LootItem.cs index a2af2466..9faf4e8f 100644 --- a/Scripts/Resources/LootItem.cs +++ b/Scripts/Resources/LootItem.cs @@ -6,6 +6,7 @@ namespace Cirno.Scripts.Resources; public partial class LootItem : Resource { [Export] public string ItemName { get; set; } + [Export] public string ItemDescription { get; set; } [Export] public string ItemKey { get; set; } [Export] public ItemTypes Item; [Export] public WeaponResource WeaponData { get; set; } @@ -14,7 +15,7 @@ public partial class LootItem : Resource [Export] public bool PickupIfMaxed; [Export] public bool ConsumeOnUse; [Export] public UiItemType UiType; - + [Export] public bool Selectable; [Export] public Texture2D InventorySprite; [Export] public SpriteFrames WorldSprite; [Export] public PackedScene HudItemScene; diff --git a/Scripts/UI/ItemsMenu.cs b/Scripts/UI/ItemsMenu.cs new file mode 100644 index 00000000..d7fa6dd2 --- /dev/null +++ b/Scripts/UI/ItemsMenu.cs @@ -0,0 +1,72 @@ +using Godot; +using System; +using Cirno.Scripts; +using Godot.Collections; + +public partial class ItemsMenu : ItemList +{ + private InventoryManager _inventoryManager; + private Dictionary _itemsDic = new(); + + public override void _Ready() + { + CallDeferred(MethodName.DeferredInitialize); + this.Hide(); + } + + public override void _Process(double delta) + { + if (Input.IsActionJustPressed("inventory")) + { + if (!Visible) + { + ShowInventory(); + } + else + { + HideInventory(); + } + } + } + + private void DeferredInitialize() + { + _inventoryManager = GameManager.Instance.GetInventoryManager(); + + ItemSelected += OnItemSelected; + Clear(); + + ItemActivated += OnItemSelected; + } + + private void OnItemSelected(long index) + { + var item = _itemsDic[index]; + GD.Print("Item: " + item); + + HideInventory(); + } + + public void HideInventory() + { + this.Hide(); + Clear(); + _itemsDic.Clear(); + } + + public void ShowInventory() + { + this.Show(); + foreach (var itm in _inventoryManager.Items) + { + var item = itm.Value; + var index = this.AddItem($"{item.Item.ItemName} x{item.Count}", item.Item.InventorySprite, + item.Item.Selectable); + + this.SetItemTooltip(index, item.Item.ItemDescription); + + _itemsDic.Add(index, item.Item.ItemKey); + + } + } +} diff --git a/Scripts/UI/ItemsMenu.cs.uid b/Scripts/UI/ItemsMenu.cs.uid new file mode 100644 index 00000000..be343143 --- /dev/null +++ b/Scripts/UI/ItemsMenu.cs.uid @@ -0,0 +1 @@ +uid://bobo5f4ud60qw diff --git a/project.godot b/project.godot index d26db842..f534fba8 100644 --- a/project.godot +++ b/project.godot @@ -248,6 +248,12 @@ debug_camera_2={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194337,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } +inventory={ +"deadzone": 0.2, +"events": [null, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":73,"key_label":0,"unicode":105,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":false,"script":null) +] +} [layer_names]