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