wip-inventory
John Montagu, the 4th Earl of Sandvich 2024-01-01 22:55:53 -08:00
parent 54bde10278
commit a6a7815b76
Signed by: sandvich
GPG Key ID: 9A39BE37E602B22D
7 changed files with 76 additions and 51 deletions

View File

@ -75,7 +75,9 @@ public sealed partial class Player : Character
this.GetEventBus().EmitSignal(signal, args); this.GetEventBus().EmitSignal(signal, args);
}; };
Inventory.AddItemToHotbar(Inventory.Items[0]); //GD.Print("Inventory: " + Inventory.Items);
//Inventory.AddItemToHotbar(Inventory.Items[0]);
Inventory.SelectedIndex = 0;
} }
public override void _Process(double delta) public override void _Process(double delta)

View File

@ -12,7 +12,6 @@
[ext_resource type="Script" path="res://State/Character/PlayerIdleState.cs" id="6_wkfdm"] [ext_resource type="Script" path="res://State/Character/PlayerIdleState.cs" id="6_wkfdm"]
[ext_resource type="Script" path="res://State/Character/PlayerMoveState.cs" id="7_dfqd8"] [ext_resource type="Script" path="res://State/Character/PlayerMoveState.cs" id="7_dfqd8"]
[ext_resource type="Script" path="res://Utils/AnimationManager.cs" id="7_sdgvb"] [ext_resource type="Script" path="res://Utils/AnimationManager.cs" id="7_sdgvb"]
[ext_resource type="Script" path="res://Items/Inventory.cs" id="7_xyenu"]
[ext_resource type="Script" path="res://State/Character/PlayerRollState.cs" id="8_fy0v5"] [ext_resource type="Script" path="res://State/Character/PlayerRollState.cs" id="8_fy0v5"]
[ext_resource type="Script" path="res://State/Character/PlayerEmoteState.cs" id="8_hd2lw"] [ext_resource type="Script" path="res://State/Character/PlayerEmoteState.cs" id="8_hd2lw"]
[ext_resource type="Animation" uid="uid://8e8r3y1imvsx" path="res://Assets/Animations/stun.res" id="8_m08fh"] [ext_resource type="Animation" uid="uid://8e8r3y1imvsx" path="res://Assets/Animations/stun.res" id="8_m08fh"]
@ -34,7 +33,8 @@
[ext_resource type="PackedScene" uid="uid://ce0ph4wk0ylra" path="res://UI/TargetTracer.tscn" id="22_hxi53"] [ext_resource type="PackedScene" uid="uid://ce0ph4wk0ylra" path="res://UI/TargetTracer.tscn" id="22_hxi53"]
[ext_resource type="Texture2D" uid="uid://bd8l8kafb42dt" path="res://Assets/Sprites/Particles/circle.png" id="22_uefct"] [ext_resource type="Texture2D" uid="uid://bd8l8kafb42dt" path="res://Assets/Sprites/Particles/circle.png" id="22_uefct"]
[ext_resource type="Texture2D" uid="uid://bcgm3r168qjn3" path="res://Assets/Sprites/Particles/cast-effect.png" id="24_njn4h"] [ext_resource type="Texture2D" uid="uid://bcgm3r168qjn3" path="res://Assets/Sprites/Particles/cast-effect.png" id="24_njn4h"]
[ext_resource type="Resource" uid="uid://cl7jvdu2lnv2d" path="res://Items/Weapons/Sword.tres" id="31_vr68e"] [ext_resource type="Script" path="res://Items/PlayerInventory.cs" id="30_y2wmw"]
[ext_resource type="PackedScene" uid="uid://dvqap2uhcah63" path="res://Items/Weapons/Sword.tscn" id="31_ql4as"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_h78y7"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_h78y7"]
shader = ExtResource("2_ngsgt") shader = ExtResource("2_ngsgt")
@ -817,9 +817,8 @@ horizontal_alignment = 1
[node name="Inventory" type="Node2D" parent="." node_paths=PackedStringArray("Hotbar")] [node name="Inventory" type="Node2D" parent="." node_paths=PackedStringArray("Hotbar")]
y_sort_enabled = true y_sort_enabled = true
position = Vector2(0, -2) position = Vector2(0, -2)
script = ExtResource("7_xyenu") script = ExtResource("30_y2wmw")
Hotbar = [] Hotbar = [NodePath("Sword"), null, null]
Items = [ExtResource("31_vr68e")]
InventoryMap = { InventoryMap = {
"equip_1": 0, "equip_1": 0,
"equip_2": 1, "equip_2": 1,
@ -829,6 +828,9 @@ InventoryMap = {
[node name="RemoteTransform2D2" type="RemoteTransform2D" parent="Inventory"] [node name="RemoteTransform2D2" type="RemoteTransform2D" parent="Inventory"]
position = Vector2(0, 4) position = Vector2(0, 4)
[node name="Sword" parent="Inventory" instance=ExtResource("31_ql4as")]
visible = false
[node name="Hurtbox" parent="." node_paths=PackedStringArray("InvincibilityTimer") instance=ExtResource("9_avyu4")] [node name="Hurtbox" parent="." node_paths=PackedStringArray("InvincibilityTimer") instance=ExtResource("9_avyu4")]
visible = false visible = false
InvincibilityTimer = NodePath("Timer") InvincibilityTimer = NodePath("Timer")

View File

@ -27,7 +27,15 @@ public partial class Inventory : Node2D
public Item SelectedItem public Item SelectedItem
{ {
get => _selectedItem; get => _selectedItem;
set => EquipItem(value, ref _selectedItem); set => EquipItem(value);
}
private int _selectedIndex;
public int SelectedIndex
{
get => _selectedIndex;
set => EquipIndex(value);
} }
private int _quickSwitchIndex = -1; private int _quickSwitchIndex = -1;
@ -46,14 +54,6 @@ public partial class Inventory : Node2D
public bool IsUsingItem => SelectedItem?.IsUsing ?? false; public bool IsUsingItem => SelectedItem?.IsUsing ?? false;
public Inventory()
{
//InventoryMap = new Dictionary<string, int>();
//InventoryMap.Add("equip_1", 0);
//InventoryMap.Add("equip_2", 1);
//InventoryMap.Add("equip_3", 2);
}
public override void _Ready() public override void _Ready()
{ {
if (Hotbar is null) if (Hotbar is null)
@ -77,50 +77,50 @@ public partial class Inventory : Node2D
} }
} }
Events.EventBus.Instance.EmitSignal(
Events.EventBus.SignalName.PlayerInventoryUpdate, this);
base._Ready(); base._Ready();
} }
public bool EquipIndex(int index) public virtual bool EquipIndex(int index)
{ {
if (index < Hotbar.Count) if (index >= Hotbar.Count)
{ {
return EquipItem(Hotbar[index], ref _selectedItem);
}
return EquipItem(null, ref _selectedItem);
}
private bool EquipItem(Item item, ref Item slot)
{
if (item is not null)
{
if (!Hotbar.Contains(item))
{
GD.PrintErr("Tried to equip an item not in the inventory.");
return false; return false;
} }
}
if (slot is not null) _selectedItem?.Unequip(Character);
_selectedIndex = index;
if (index >= 0)
{ {
slot.Unequip(Character); _selectedItem = Hotbar[index];
_selectedItem?.Equip(Character);
} }
else
slot = item;
if (item is not null)
{ {
item.Equip(Character); _selectedItem = null;
} }
Events.EventBus.Instance.EmitSignal( GD.Print($"Inventory: {index} is new selected index.");
Events.EventBus.SignalName.PlayerInventoryUpdate, this);
return true; return true;
} }
protected virtual bool EquipItem(Item item)
{
if (item is null)
{
EquipIndex(-1);
}
int index = Hotbar.IndexOf(item);
if (index < 0)
{
GD.PushWarning("Trying to equip item not in the hot inventory.");
}
return EquipIndex(index);
}
[System.Obsolete]
public Item GetItemByMap(string keymap) public Item GetItemByMap(string keymap)
{ {
if (InventoryMap.ContainsKey(keymap)) if (InventoryMap.ContainsKey(keymap))

View File

@ -0,0 +1,17 @@
namespace SupaLidlGame.Items;
public partial class PlayerInventory : Inventory
{
public override bool EquipIndex(int index)
{
bool result = base.EquipIndex(index);
if (result)
{
Events.EventBus.Instance.EmitSignal(
Events.EventBus.SignalName.PlayerInventoryUpdate, this);
}
return result;
}
}

View File

@ -23,15 +23,18 @@ public abstract partial class PlayerState : CharacterState
{ {
if (@event.IsActionPressed("equip_1")) if (@event.IsActionPressed("equip_1"))
{ {
inventory.SelectedItem = inventory.GetItemByMap("equip_1"); //inventory.SelectedItem = inventory.GetItemByMap("equip_1");
inventory.SelectedIndex = 0;
} }
else if (@event.IsActionPressed("equip_2")) else if (@event.IsActionPressed("equip_2"))
{ {
inventory.SelectedItem = inventory.GetItemByMap("equip_2"); //inventory.SelectedItem = inventory.GetItemByMap("equip_2");
inventory.SelectedIndex = 1;
} }
else if (@event.IsActionPressed("equip_3")) else if (@event.IsActionPressed("equip_3"))
{ {
inventory.SelectedItem = inventory.GetItemByMap("equip_3"); //inventory.SelectedItem = inventory.GetItemByMap("equip_3");
inventory.SelectedIndex = 2;
} }
else if (@event.IsActionPressed("next_item")) else if (@event.IsActionPressed("next_item"))
{ {

View File

@ -15,12 +15,12 @@ public partial class Hotbar : GridContainer
public void OnInventoryUpdate(Inventory inventory) public void OnInventoryUpdate(Inventory inventory)
{ {
GD.Print($"UPDATE: {inventory.SelectedIndex} is selected index.");
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
{ {
var slot = _slots[i]; var slot = _slots[i];
slot.Item = inventory.Hotbar[i].Metadata; slot.Item = inventory.Hotbar[i]?.Metadata;
slot.IsSelected = inventory.SelectedItem == inventory.Hotbar[i]; slot.IsSelected = inventory.SelectedIndex == i;
GD.Print(inventory.Hotbar[i].Metadata.Name);
} }
} }
} }

View File

@ -29,7 +29,8 @@ public partial class InventorySlot : ColorRect
if (_item is null) if (_item is null)
{ {
_textureRect.Texture = _placeholderTexture; //_textureRect.Texture = _placeholderTexture;
_textureRect.Texture = null;
} }
else else
{ {