Fix final remaining issues with inventory

This commit is contained in:
2024-09-12 10:28:34 -07:00
parent af384d3ddb
commit 043d7f1ba8
7 changed files with 59 additions and 28 deletions

View File

@@ -88,20 +88,20 @@ public partial class InventoryMenu : Control, IInventoryMenu
private void EquippedAccessory_Sync(Accessory obj) private void EquippedAccessory_Sync(Accessory obj)
{ {
ATKBonusLabel.Text = GameRepo.PlayerData.BonusAttack != 0 ? $"{GameRepo.PlayerData.BonusAttack:+0;-#}" : "..."; ATKBonusLabel.Text = $"{GameRepo.PlayerData.BonusAttack:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = GameRepo.PlayerData.BonusDefense != 0 ? $"{GameRepo.PlayerData.BonusDefense:+0;-#}" : "..."; DEFBonusLabel.Text = $"{GameRepo.PlayerData.BonusDefense:+0;-#;\\.\\.\\.}";
} }
private void EquippedArmor_Sync(Armor obj) private void EquippedArmor_Sync(Armor obj)
{ {
ATKBonusLabel.Text = GameRepo.PlayerData.BonusAttack != 0 ? $"{GameRepo.PlayerData.BonusAttack:+0;-#}" : "..."; ATKBonusLabel.Text = $"{GameRepo.PlayerData.BonusAttack:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = GameRepo.PlayerData.BonusDefense != 0 ? $"{GameRepo.PlayerData.BonusDefense:+0;-#}" : "..."; DEFBonusLabel.Text = $"{GameRepo.PlayerData.BonusDefense:+0;-#;\\.\\.\\.}";
} }
private void EquippedWeapon_Sync(Weapon obj) private void EquippedWeapon_Sync(Weapon obj)
{ {
ATKBonusLabel.Text = GameRepo.PlayerData.BonusAttack != 0 ? $"{GameRepo.PlayerData.BonusAttack:+0;-#}" : "..."; ATKBonusLabel.Text = $"{GameRepo.PlayerData.BonusAttack:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = GameRepo.PlayerData.BonusDefense != 0 ? $"{GameRepo.PlayerData.BonusDefense:+0;-#}" : "..."; DEFBonusLabel.Text = $"{GameRepo.PlayerData.BonusDefense:+0;-#;\\.\\.\\.}";
} }
private void CurrentLevel_Sync(int obj) => CurrentLevelLabel.Text = $"Level {obj:D2}"; private void CurrentLevel_Sync(int obj) => CurrentLevelLabel.Text = $"Level {obj:D2}";
@@ -298,8 +298,6 @@ public partial class InventoryMenu : Control, IInventoryMenu
{ {
await ToSignal(GetTree().CreateTimer(0.1f), "timeout"); await ToSignal(GetTree().CreateTimer(0.1f), "timeout");
itemSlot.SetSelectedItemStyle(); itemSlot.SetSelectedItemStyle();
if (itemSlot.Item is IEquipable newEquipable && GameRepo.PlayerData.Inventory.IsEquipped(newEquipable))
itemSlot.SetEquippedSelectedItemStyle();
ItemDescriptionTitle.Text = $"{itemSlot.Item.Info.Name}"; ItemDescriptionTitle.Text = $"{itemSlot.Item.Info.Name}";
ItemEffectLabel.Text = $"{itemSlot.Item.Info.Description}"; ItemEffectLabel.Text = $"{itemSlot.Item.Info.Description}";
} }

View File

@@ -49,18 +49,36 @@ public partial class ItemSlot : HBoxContainer, IItemSlot
private void EquippedWeapon_Sync(Weapon obj) private void EquippedWeapon_Sync(Weapon obj)
{ {
if (Item is Weapon weapon && weapon == obj)
{
EquipBonus.Text = $"{obj.WeaponStats.Damage:+0;-#;\\.\\.\\.}";
SetEquippedSelectedItemStyle();
}
if (Item is Weapon unequippedItem && unequippedItem != obj) if (Item is Weapon unequippedItem && unequippedItem != obj)
{
EquipBonus.Text = $"...";
SetItemStyle(); SetItemStyle();
} }
}
private void EquippedArmor_Sync(Armor obj) private void EquippedArmor_Sync(Armor obj)
{ {
if (Item is Armor armor && armor == obj)
{
EquipBonus.Text = $"{obj.ArmorStats.Defense:+0;-#;\\.\\.\\.}";
SetEquippedSelectedItemStyle();
}
if (Item is Armor unequippedItem && unequippedItem != obj) if (Item is Armor unequippedItem && unequippedItem != obj)
{
EquipBonus.Text = $"...";
SetItemStyle(); SetItemStyle();
} }
}
private void EquippedAccessory_Sync(Accessory obj) private void EquippedAccessory_Sync(Accessory obj)
{ {
if (Item is Accessory accessory && accessory == obj)
SetEquippedSelectedItemStyle();
if (Item is Accessory unequippedItem && unequippedItem != obj) if (Item is Accessory unequippedItem && unequippedItem != obj)
SetItemStyle(); SetItemStyle();
} }
@@ -71,10 +89,18 @@ public partial class ItemSlot : HBoxContainer, IItemSlot
EquipBonus.LabelSettings = ItemFont; EquipBonus.LabelSettings = ItemFont;
} }
public void SetSelectedItemStyle() public void SetSelectedItemStyle()
{
if (Item is IEquipable equipableItem && GameRepo.PlayerData.Inventory.IsEquipped(equipableItem))
{
ItemName.LabelSettings = SelectedEquippedItemFont;
EquipBonus.LabelSettings = EquippedItemFont;
}
else
{ {
ItemName.LabelSettings = SelectedItemFont; ItemName.LabelSettings = SelectedItemFont;
EquipBonus.LabelSettings = SelectedItemFont; EquipBonus.LabelSettings = SelectedItemFont;
} }
}
public void SetEquippedItemStyle() public void SetEquippedItemStyle()
{ {
ItemName.LabelSettings = EquippedItemFont; ItemName.LabelSettings = EquippedItemFont;
@@ -84,7 +110,7 @@ public partial class ItemSlot : HBoxContainer, IItemSlot
public void SetEquippedSelectedItemStyle() public void SetEquippedSelectedItemStyle()
{ {
ItemName.LabelSettings = SelectedEquippedItemFont; ItemName.LabelSettings = SelectedEquippedItemFont;
EquipBonus.LabelSettings = SelectedEquippedItemFont; EquipBonus.LabelSettings = EquippedItemFont;
} }
public IInventoryItem Item { get; set; } = default!; public IInventoryItem Item { get; set; } = default!;

View File

@@ -3,7 +3,6 @@ using Chickensoft.GodotNodeInterfaces;
using Godot; using Godot;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using static GameJamDungeon.Inventory;
namespace GameJamDungeon; namespace GameJamDungeon;
@@ -27,6 +26,8 @@ public interface IInventory : INode
public bool IsEquipped(IEquipable equipable); public bool IsEquipped(IEquipable equipable);
event Inventory.InventoryAtCapacityEventHandler InventoryAtCapacity; event Inventory.InventoryAtCapacityEventHandler InventoryAtCapacity;
event Inventory.AccessoryUnequippedEventHandler AccessoryUnequipped;
} }
public partial class Inventory : Node, IInventory public partial class Inventory : Node, IInventory
@@ -36,6 +37,8 @@ public partial class Inventory : Node, IInventory
[Signal] [Signal]
public delegate void InventoryAtCapacityEventHandler(string rejectedItemName); public delegate void InventoryAtCapacityEventHandler(string rejectedItemName);
[Signal]
public delegate void AccessoryUnequippedEventHandler(AccessoryStats unequippedAccessory);
public Inventory() public Inventory()
{ {
@@ -86,7 +89,10 @@ public partial class Inventory : Node, IInventory
else if (equipable is Armor armor) else if (equipable is Armor armor)
_equippedArmor.OnNext(new Armor()); _equippedArmor.OnNext(new Armor());
else if (equipable is Accessory accessory) else if (equipable is Accessory accessory)
{
EmitSignal(SignalName.AccessoryUnequipped, _equippedAccessory.Value.AccessoryStats);
_equippedAccessory.OnNext(new Accessory()); _equippedAccessory.OnNext(new Accessory());
}
else else
throw new NotImplementedException("Item type is not supported."); throw new NotImplementedException("Item type is not supported.");
} }

View File

@@ -49,7 +49,7 @@ namespace GameJamDungeon
{ {
var accessoryInfo = GD.Load<AccessoryStats>($"res://src/items/accessory/resources/{accessory}"); var accessoryInfo = GD.Load<AccessoryStats>($"res://src/items/accessory/resources/{accessory}");
var accessoryScene = AccessoryScene.Instantiate<Accessory>(); var accessoryScene = AccessoryScene.Instantiate<Accessory>();
accessoryScene.AccessoryInfo = accessoryInfo; accessoryScene.AccessoryStats = accessoryInfo;
database.Add(accessoryScene); database.Add(accessoryScene);
} }

View File

@@ -13,10 +13,10 @@ public partial class Accessory : Node3D, IInventoryItem, IEquipable
[Dependency] public IGameRepo GameRepo => this.DependOn<IGameRepo>(); [Dependency] public IGameRepo GameRepo => this.DependOn<IGameRepo>();
public InventoryItemStats Info => AccessoryInfo; public InventoryItemStats Info => AccessoryStats;
[Export] [Export]
public AccessoryStats AccessoryInfo { get; set; } = new AccessoryStats(); public AccessoryStats AccessoryStats { get; set; } = new AccessoryStats();
[Node] public Sprite3D Sprite { get; set; } = default!; [Node] public Sprite3D Sprite { get; set; } = default!;
@@ -26,7 +26,7 @@ public partial class Accessory : Node3D, IInventoryItem, IEquipable
public void OnReady() public void OnReady()
{ {
Sprite.Texture = AccessoryInfo.Texture; Sprite.Texture = AccessoryStats.Texture;
Pickup.BodyEntered += OnEntered; Pickup.BodyEntered += OnEntered;
} }

View File

@@ -125,13 +125,7 @@ namespace GameJamDungeon
GameRepo.PlayerGlobalPosition.Sync += PlayerGlobalPosition_Sync; GameRepo.PlayerGlobalPosition.Sync += PlayerGlobalPosition_Sync;
HealthTimer.Timeout += OnHealthTimerTimeout; HealthTimer.Timeout += OnHealthTimerTimeout;
CollisionDetector.AreaEntered += OnEnemyHitBoxEntered; CollisionDetector.AreaEntered += OnEnemyHitBoxEntered;
} PlayerData.Inventory.AccessoryUnequipped += Inventory_AccessoryUnequipped;
private void Inventory_AccessoryUnequipped(Accessory unequippedAccessory)
{
PlayerData.SetMaximumHP(PlayerData.MaximumHP.Value - unequippedAccessory.AccessoryInfo.MaxHPUp);
PlayerData.SetMaximumVT(PlayerData.MaximumVT.Value - unequippedAccessory.AccessoryInfo.MaxVTUp);
PlayerData.SetLuck(PlayerData.Luck.Value - unequippedAccessory.AccessoryInfo.LUCKUp);
} }
public void OnReady() public void OnReady()
@@ -224,9 +218,16 @@ namespace GameJamDungeon
private void EquippedAccessory_Sync(Accessory equippedItem) private void EquippedAccessory_Sync(Accessory equippedItem)
{ {
PlayerData.SetMaximumHP(PlayerData.MaximumHP.Value + equippedItem.AccessoryInfo.MaxHPUp); PlayerData.SetMaximumHP(PlayerData.MaximumHP.Value + equippedItem.AccessoryStats.MaxHPUp);
PlayerData.SetMaximumVT(PlayerData.MaximumVT.Value + equippedItem.AccessoryInfo.MaxVTUp); PlayerData.SetMaximumVT(PlayerData.MaximumVT.Value + equippedItem.AccessoryStats.MaxVTUp);
PlayerData.SetLuck(PlayerData.Luck.Value + equippedItem.AccessoryInfo.LUCKUp); PlayerData.SetLuck(PlayerData.Luck.Value + equippedItem.AccessoryStats.LUCKUp);
}
private void Inventory_AccessoryUnequipped(AccessoryStats unequippedAccessory)
{
PlayerData.SetMaximumHP(PlayerData.MaximumHP.Value - unequippedAccessory.MaxHPUp);
PlayerData.SetMaximumVT(PlayerData.MaximumVT.Value - unequippedAccessory.MaxVTUp);
PlayerData.SetLuck(PlayerData.Luck.Value - unequippedAccessory.LUCKUp);
} }
private void OnEnemyHitBoxEntered(Area3D area) private void OnEnemyHitBoxEntered(Area3D area)

View File

@@ -36,8 +36,8 @@ namespace GameJamDungeon
public IAutoProp<int> MaxAttack => _maxAttack; public IAutoProp<int> MaxAttack => _maxAttack;
[Save("maxDefense")] [Save("maxDefense")]
public IAutoProp<int> MaxDefense => _maxDefense; public IAutoProp<int> MaxDefense => _maxDefense;
public int BonusAttack => Inventory.EquippedWeapon.Value.WeaponStats.Damage + Inventory.EquippedAccessory.Value.AccessoryInfo.ATKUp; public int BonusAttack => Inventory.EquippedWeapon.Value.WeaponStats.Damage + Inventory.EquippedAccessory.Value.AccessoryStats.ATKUp;
public int BonusDefense => Inventory.EquippedArmor.Value.ArmorStats.Defense + Inventory.EquippedAccessory.Value.AccessoryInfo.DEFUp; public int BonusDefense => Inventory.EquippedArmor.Value.ArmorStats.Defense + Inventory.EquippedAccessory.Value.AccessoryStats.DEFUp;
[Save("expToNextLevel")] [Save("expToNextLevel")]
public IAutoProp<int> ExpToNextLevel => _expToNextLevel; public IAutoProp<int> ExpToNextLevel => _expToNextLevel;
[Save("luck")] [Save("luck")]