Implement saving and loading hotbar state (#45)
parent
b687b49e52
commit
c85aeb6b5b
|
@ -11,10 +11,11 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
|
|||
[Export]
|
||||
public Array<Item> Hotbar { get; private set; }
|
||||
|
||||
[Export]
|
||||
public Array<ItemMetadata> Items { get; private set; }
|
||||
public Array<int> HotbarToItemIndexMap { get; set; } = new();
|
||||
|
||||
[Export]
|
||||
public Array<ItemMetadata> Items { get; set; }
|
||||
|
||||
public Dictionary<string, int> InventoryMap { get; set; }
|
||||
|
||||
[Signal]
|
||||
|
@ -62,6 +63,12 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
|
|||
|
||||
public bool IsUsingItem => SelectedItem?.IsUsing ?? false;
|
||||
|
||||
public Inventory()
|
||||
{
|
||||
HotbarToItemIndexMap.Resize(HotbarCapacity);
|
||||
HotbarToItemIndexMap.Fill(-1);
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
if (Hotbar is null)
|
||||
|
@ -155,7 +162,19 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
|
|||
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];
|
||||
Item newItem = null;
|
||||
|
|
|
@ -76,6 +76,19 @@ public partial class GlobalState : Node
|
|||
Progression = save.Progression;
|
||||
MapState = save.MapState;
|
||||
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)
|
||||
|
@ -83,5 +96,9 @@ public partial class GlobalState : Node
|
|||
save.Progression = Progression;
|
||||
save.MapState = MapState;
|
||||
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.Collections;
|
||||
|
||||
namespace SupaLidlGame.State.Global;
|
||||
|
||||
|
@ -13,4 +14,10 @@ public partial class Stats : Resource
|
|||
|
||||
[Export]
|
||||
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;
|
||||
slot.Item = item;
|
||||
slot.Index = i;
|
||||
}
|
||||
|
||||
// make remaining slots display empty
|
||||
|
@ -80,6 +81,7 @@ public partial class InventoryGrid : GridContainer
|
|||
InventorySlot slot = children[i] as InventorySlot;
|
||||
|
||||
slot.Item = null;
|
||||
slot.Index = i;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -76,6 +76,6 @@ public partial class InventoryMenu : BaseMenu, IModal
|
|||
{
|
||||
int slot = button.GetMeta("slot").AsInt32();
|
||||
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;
|
||||
|
||||
public int Index { get; set; }
|
||||
|
||||
private 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
|
||||
var scene = base.Load<PackedScene>();
|
||||
_loaded.Add(Path, scene);
|
||||
|
||||
if (useCached)
|
||||
{
|
||||
_loaded.Add(Path, scene);
|
||||
}
|
||||
|
||||
return scene;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue