Compare commits
2 Commits
97cdf26751
...
6af8540bac
Author | SHA1 | Date |
---|---|---|
John Montagu, the 4th Earl of Sandvich | 6af8540bac | |
John Montagu, the 4th Earl of Sandvich | 48dcee72b4 |
|
@ -838,11 +838,6 @@ y_sort_enabled = true
|
||||||
script = ExtResource("30_y2wmw")
|
script = ExtResource("30_y2wmw")
|
||||||
Hotbar = [null, null, null]
|
Hotbar = [null, null, null]
|
||||||
Items = Array[Object]([ExtResource("33_3qyfl"), ExtResource("34_70ron"), ExtResource("35_4pap1")])
|
Items = Array[Object]([ExtResource("33_3qyfl"), ExtResource("34_70ron"), ExtResource("35_4pap1")])
|
||||||
InventoryMap = {
|
|
||||||
"equip_1": 0,
|
|
||||||
"equip_2": 1,
|
|
||||||
"equip_3": 2
|
|
||||||
}
|
|
||||||
|
|
||||||
[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
|
||||||
|
|
|
@ -11,11 +11,10 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
|
||||||
[Export]
|
[Export]
|
||||||
public Array<Item> Hotbar { get; private set; }
|
public Array<Item> Hotbar { get; private set; }
|
||||||
|
|
||||||
[Export]
|
public Array<int> HotbarToItemIndexMap { get; set; } = new();
|
||||||
public Array<ItemMetadata> Items { get; private set; }
|
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Dictionary<string, int> InventoryMap { get; set; }
|
public Array<ItemMetadata> Items { get; set; }
|
||||||
|
|
||||||
[Signal]
|
[Signal]
|
||||||
public delegate void UsedItemEventHandler(Item item);
|
public delegate void UsedItemEventHandler(Item item);
|
||||||
|
@ -62,6 +61,12 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
|
||||||
|
|
||||||
public bool IsUsingItem => SelectedItem?.IsUsing ?? false;
|
public bool IsUsingItem => SelectedItem?.IsUsing ?? false;
|
||||||
|
|
||||||
|
public Inventory()
|
||||||
|
{
|
||||||
|
HotbarToItemIndexMap.Resize(HotbarCapacity);
|
||||||
|
HotbarToItemIndexMap.Fill(-1);
|
||||||
|
}
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
if (Hotbar is null)
|
if (Hotbar is null)
|
||||||
|
@ -130,21 +135,6 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
|
||||||
return EquipIndex(index);
|
return EquipIndex(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Obsolete]
|
|
||||||
public Item GetItemByMap(string keymap)
|
|
||||||
{
|
|
||||||
if (InventoryMap.ContainsKey(keymap))
|
|
||||||
{
|
|
||||||
int idx = InventoryMap[keymap];
|
|
||||||
if (idx < Hotbar.Count)
|
|
||||||
{
|
|
||||||
return Hotbar[InventoryMap[keymap]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else GD.Print(keymap + " does not exist");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Item AddToHotbar(ItemMetadata metadata)
|
public Item AddToHotbar(ItemMetadata metadata)
|
||||||
{
|
{
|
||||||
//AddItemMetadata(metadata);
|
//AddItemMetadata(metadata);
|
||||||
|
@ -155,7 +145,19 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Item SetHotbarIndexToItem(int index, ItemMetadata metadata)
|
public Item SetHotbarIndexToItemIndex(int hotbarIndex, int itemIndex)
|
||||||
|
{
|
||||||
|
HotbarToItemIndexMap[hotbarIndex] = itemIndex;
|
||||||
|
|
||||||
|
if (itemIndex >= 0)
|
||||||
|
{
|
||||||
|
return SetHotbarIndexToItem(hotbarIndex, Items[itemIndex]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Item SetHotbarIndexToItem(int index, ItemMetadata metadata)
|
||||||
{
|
{
|
||||||
var oldItem = Hotbar[index];
|
var oldItem = Hotbar[index];
|
||||||
Item newItem = null;
|
Item newItem = null;
|
||||||
|
|
|
@ -76,6 +76,19 @@ public partial class GlobalState : Node
|
||||||
Progression = save.Progression;
|
Progression = save.Progression;
|
||||||
MapState = save.MapState;
|
MapState = save.MapState;
|
||||||
Stats = save.Stats;
|
Stats = save.Stats;
|
||||||
|
|
||||||
|
var inventory = World.Instance.CurrentPlayer.Inventory;
|
||||||
|
inventory.Items = Stats.Items;
|
||||||
|
|
||||||
|
for (int i = 0; i < Stats.HotbarToItemIndexMap.Count; i++)
|
||||||
|
{
|
||||||
|
int itemIndex = Stats.HotbarToItemIndexMap[i];
|
||||||
|
|
||||||
|
if (itemIndex >= 0)
|
||||||
|
{
|
||||||
|
inventory.SetHotbarIndexToItemIndex(i, itemIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ExportToSave(Save save)
|
public void ExportToSave(Save save)
|
||||||
|
@ -83,5 +96,9 @@ public partial class GlobalState : Node
|
||||||
save.Progression = Progression;
|
save.Progression = Progression;
|
||||||
save.MapState = MapState;
|
save.MapState = MapState;
|
||||||
save.Stats = Stats;
|
save.Stats = Stats;
|
||||||
|
|
||||||
|
var inventory = World.Instance.CurrentPlayer.Inventory;
|
||||||
|
Stats.Items = inventory.Items;
|
||||||
|
Stats.HotbarToItemIndexMap = inventory.HotbarToItemIndexMap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using Godot.Collections;
|
||||||
|
|
||||||
namespace SupaLidlGame.State.Global;
|
namespace SupaLidlGame.State.Global;
|
||||||
|
|
||||||
|
@ -13,4 +14,10 @@ public partial class Stats : Resource
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public int DeathCount { get; set; } = 0;
|
public int DeathCount { get; set; } = 0;
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public Array<Items.ItemMetadata> Items { get; set; } = new();
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public Array<int> HotbarToItemIndexMap { get; set; } = new();
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,7 @@ public partial class InventoryGrid : GridContainer
|
||||||
|
|
||||||
ItemMetadata item = items.Current;
|
ItemMetadata item = items.Current;
|
||||||
slot.Item = item;
|
slot.Item = item;
|
||||||
|
slot.Index = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
// make remaining slots display empty
|
// make remaining slots display empty
|
||||||
|
@ -80,6 +81,7 @@ public partial class InventoryGrid : GridContainer
|
||||||
InventorySlot slot = children[i] as InventorySlot;
|
InventorySlot slot = children[i] as InventorySlot;
|
||||||
|
|
||||||
slot.Item = null;
|
slot.Item = null;
|
||||||
|
slot.Index = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,6 @@ public partial class InventoryMenu : BaseMenu, IModal
|
||||||
{
|
{
|
||||||
int slot = button.GetMeta("slot").AsInt32();
|
int slot = button.GetMeta("slot").AsInt32();
|
||||||
GD.Print("Equipping item at slot " + slot);
|
GD.Print("Equipping item at slot " + slot);
|
||||||
Source.SetHotbarIndexToItem(slot, _selected.Item);
|
Source.SetHotbarIndexToItemIndex(slot, _selected.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@ public partial class InventorySlot : Button
|
||||||
|
|
||||||
private static Texture2D _placeholderTexture;
|
private static Texture2D _placeholderTexture;
|
||||||
|
|
||||||
|
public int Index { get; set; }
|
||||||
|
|
||||||
private Items.ItemMetadata _item;
|
private Items.ItemMetadata _item;
|
||||||
|
|
||||||
public Items.ItemMetadata Item
|
public Items.ItemMetadata Item
|
||||||
|
|
|
@ -21,7 +21,12 @@ public partial class ScenePath : ResourcePath
|
||||||
|
|
||||||
// add scene to loaded to not have to reload scene when called again
|
// add scene to loaded to not have to reload scene when called again
|
||||||
var scene = base.Load<PackedScene>();
|
var scene = base.Load<PackedScene>();
|
||||||
|
|
||||||
|
if (useCached)
|
||||||
|
{
|
||||||
_loaded.Add(Path, scene);
|
_loaded.Add(Path, scene);
|
||||||
|
}
|
||||||
|
|
||||||
return scene;
|
return scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,6 +84,13 @@ public partial class World : Node
|
||||||
{
|
{
|
||||||
throw new System.Exception("Another World instance is running.");
|
throw new System.Exception("Another World instance is running.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Debug = new DebugCommands(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
~World()
|
||||||
|
{
|
||||||
|
Debug.Free();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
|
@ -335,4 +342,23 @@ public partial class World : Node
|
||||||
}
|
}
|
||||||
|
|
||||||
public Node FindEntity(string name) => CurrentMap.Entities.GetNode(name);
|
public Node FindEntity(string name) => CurrentMap.Entities.GetNode(name);
|
||||||
|
|
||||||
|
internal DebugCommands Debug { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
internal partial class DebugCommands : GodotObject
|
||||||
|
{
|
||||||
|
private World _world;
|
||||||
|
|
||||||
|
internal DebugCommands(World world)
|
||||||
|
{
|
||||||
|
_world = world;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void GiveItem(string item)
|
||||||
|
{
|
||||||
|
var itemMetadata = ResourceLoader
|
||||||
|
.Load<Items.ItemMetadata>($"res://Items/{item}.tres");
|
||||||
|
_world.CurrentPlayer.Inventory.Items.Add(itemMetadata);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue