equipping items with keys
parent
4d70037685
commit
abed26d13b
|
@ -163,8 +163,10 @@ shape = SubResource("RectangleShape2D_8lxmf")
|
|||
[node name="Inventory" type="Node2D" parent="."]
|
||||
y_sort_enabled = true
|
||||
script = ExtResource("7_43gq8")
|
||||
Items = [null]
|
||||
|
||||
[node name="Sword" parent="Inventory" instance=ExtResource("8_s3c8r")]
|
||||
Knockback = 100.0
|
||||
|
||||
[node name="FlashAnimation" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
|
|
|
@ -193,6 +193,10 @@ horizontal_alignment = 1
|
|||
y_sort_enabled = true
|
||||
position = Vector2(0, 2)
|
||||
script = ExtResource("7_xyenu")
|
||||
InventoryMap = {
|
||||
"equip_1": 0,
|
||||
"equip_2": 1
|
||||
}
|
||||
|
||||
[node name="Sword" parent="Inventory" instance=ExtResource("7_4rxuv")]
|
||||
|
||||
|
|
|
@ -13,13 +13,32 @@ namespace SupaLidlGame.Characters.State
|
|||
|
||||
public override CharacterState Input(InputEvent @event)
|
||||
{
|
||||
var inventory = Character.Inventory;
|
||||
|
||||
#if DEBUG
|
||||
if (@event.IsActionPressed("equip"))
|
||||
{
|
||||
Character.Inventory.SelectedItem = Character.Inventory.GetNode<Items.Item>("Sword");
|
||||
}
|
||||
//if (@event.IsActionPressed("equip"))
|
||||
//{
|
||||
// inventory.SelectedItem = inventory.GetNode<Items.Item>("Sword");
|
||||
//}
|
||||
#endif
|
||||
|
||||
if (this is PlayerIdleState or PlayerMoveState
|
||||
&& !_player.Inventory.IsUsingItem)
|
||||
{
|
||||
if (@event.IsActionPressed("equip_1"))
|
||||
{
|
||||
inventory.SelectedItem = inventory.GetItemByMap("equip_1");
|
||||
}
|
||||
else if (@event.IsActionPressed("equip_2"))
|
||||
{
|
||||
inventory.SelectedItem = inventory.GetItemByMap("equip_2");
|
||||
}
|
||||
else if (@event.IsActionPressed("equip_3"))
|
||||
{
|
||||
inventory.SelectedItem = inventory.GetItemByMap("equip_3");
|
||||
}
|
||||
}
|
||||
|
||||
return base.Input(@event);
|
||||
}
|
||||
|
||||
|
@ -36,6 +55,10 @@ namespace SupaLidlGame.Characters.State
|
|||
Character.Target = dirToMouse;
|
||||
}
|
||||
}
|
||||
else if (!Character.Direction.IsZeroApprox())
|
||||
{
|
||||
Character.Target = Character.Direction;
|
||||
}
|
||||
|
||||
if (Godot.Input.IsActionPressed("attack1"))
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using System.Collections.Generic;
|
||||
using Godot;
|
||||
using SupaLidlGame.Characters;
|
||||
using Godot.Collections;
|
||||
|
||||
namespace SupaLidlGame.Items
|
||||
{
|
||||
|
@ -8,7 +8,11 @@ namespace SupaLidlGame.Items
|
|||
{
|
||||
public Character Character { get; private set; }
|
||||
|
||||
public List<Item> Items { get; private set; } = new List<Item>();
|
||||
[Export]
|
||||
public Array<Item> Items { get; private set; } = new Array<Item>();
|
||||
|
||||
[Export]
|
||||
public Dictionary<string, int> InventoryMap { get; set; }
|
||||
|
||||
public const int MaxCapacity = 32;
|
||||
|
||||
|
@ -28,30 +32,44 @@ namespace SupaLidlGame.Items
|
|||
set => EquipItem(value, ref _offhandItem);
|
||||
}
|
||||
|
||||
public bool IsUsingItem => (SelectedItem?.IsUsing ?? false) ||
|
||||
(OffhandItem?.IsUsing ?? false);
|
||||
|
||||
public Inventory()
|
||||
{
|
||||
InventoryMap = new Dictionary<string, int>();
|
||||
InventoryMap.Add("equip_1", 0);
|
||||
InventoryMap.Add("equip_2", 1);
|
||||
InventoryMap.Add("equip_3", 2);
|
||||
}
|
||||
|
||||
private bool EquipItem(Item item, ref Item slot)
|
||||
{
|
||||
if (item is not null && item.IsOneHanded)
|
||||
if (item is not null)
|
||||
{
|
||||
// we can not equip this if either hand is occupied by
|
||||
// two-handed item
|
||||
|
||||
if (_selectedItem is not null && !_selectedItem.IsOneHanded)
|
||||
if (item.IsOneHanded)
|
||||
{
|
||||
return false;
|
||||
// we can not equip this if either hand is occupied by
|
||||
// two-handed item
|
||||
|
||||
if (_selectedItem is not null && !_selectedItem.IsOneHanded)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_offhandItem is not null && !_offhandItem.IsOneHanded)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (_offhandItem is not null && !_offhandItem.IsOneHanded)
|
||||
if (!Items.Contains(item))
|
||||
{
|
||||
GD.PrintErr("Tried to equip an item not in the inventory.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Items.Contains(item))
|
||||
{
|
||||
GD.PrintErr("Tried to equip an item not in the inventory.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (slot is not null)
|
||||
{
|
||||
slot.Unequip(Character);
|
||||
|
@ -67,6 +85,20 @@ namespace SupaLidlGame.Items
|
|||
return true;
|
||||
}
|
||||
|
||||
public Item GetItemByMap(string keymap)
|
||||
{
|
||||
if (InventoryMap.ContainsKey(keymap))
|
||||
{
|
||||
int idx = InventoryMap[keymap];
|
||||
if (idx < Items.Count)
|
||||
{
|
||||
return Items[InventoryMap[keymap]];
|
||||
}
|
||||
}
|
||||
else GD.Print(keymap + " does not exist");
|
||||
return null;
|
||||
}
|
||||
|
||||
public Item AddItem(Item item)
|
||||
{
|
||||
if (Items.Count >= MaxCapacity)
|
||||
|
@ -76,7 +108,10 @@ namespace SupaLidlGame.Items
|
|||
|
||||
item.CharacterOwner = Character;
|
||||
item.Visible = false;
|
||||
Items.Add(item);
|
||||
if (!Items.Contains(item))
|
||||
{
|
||||
Items.Add(item);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,8 @@ namespace SupaLidlGame.Items
|
|||
|
||||
public Character CharacterOwner { get; set; }
|
||||
|
||||
public virtual bool IsUsing => false;
|
||||
|
||||
/// <summary>
|
||||
/// Determines if this item can directly stack with other items
|
||||
/// </summary>
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace SupaLidlGame.Items
|
|||
{
|
||||
public double RemainingUseTime { get; protected set; } = 0;
|
||||
|
||||
public bool IsUsing => RemainingUseTime > 0;
|
||||
public override bool IsUsing => RemainingUseTime > 0;
|
||||
|
||||
/// <summary>
|
||||
/// How much damage in HP that this weapon deals.
|
||||
|
|
|
@ -66,6 +66,21 @@ interact={
|
|||
"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)
|
||||
]
|
||||
}
|
||||
equip_1={
|
||||
"deadzone": 0.5,
|
||||
"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":49,"key_label":0,"unicode":49,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
equip_2={
|
||||
"deadzone": 0.5,
|
||||
"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":50,"key_label":0,"unicode":50,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
equip_3={
|
||||
"deadzone": 0.5,
|
||||
"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":51,"key_label":0,"unicode":51,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[layer_names]
|
||||
|
||||
|
|
Loading…
Reference in New Issue