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)
{
ATKBonusLabel.Text = GameRepo.PlayerData.BonusAttack != 0 ? $"{GameRepo.PlayerData.BonusAttack:+0;-#}" : "...";
DEFBonusLabel.Text = GameRepo.PlayerData.BonusDefense != 0 ? $"{GameRepo.PlayerData.BonusDefense:+0;-#}" : "...";
ATKBonusLabel.Text = $"{GameRepo.PlayerData.BonusAttack:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = $"{GameRepo.PlayerData.BonusDefense:+0;-#;\\.\\.\\.}";
}
private void EquippedArmor_Sync(Armor obj)
{
ATKBonusLabel.Text = GameRepo.PlayerData.BonusAttack != 0 ? $"{GameRepo.PlayerData.BonusAttack:+0;-#}" : "...";
DEFBonusLabel.Text = GameRepo.PlayerData.BonusDefense != 0 ? $"{GameRepo.PlayerData.BonusDefense:+0;-#}" : "...";
ATKBonusLabel.Text = $"{GameRepo.PlayerData.BonusAttack:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = $"{GameRepo.PlayerData.BonusDefense:+0;-#;\\.\\.\\.}";
}
private void EquippedWeapon_Sync(Weapon obj)
{
ATKBonusLabel.Text = GameRepo.PlayerData.BonusAttack != 0 ? $"{GameRepo.PlayerData.BonusAttack:+0;-#}" : "...";
DEFBonusLabel.Text = GameRepo.PlayerData.BonusDefense != 0 ? $"{GameRepo.PlayerData.BonusDefense:+0;-#}" : "...";
ATKBonusLabel.Text = $"{GameRepo.PlayerData.BonusAttack:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = $"{GameRepo.PlayerData.BonusDefense:+0;-#;\\.\\.\\.}";
}
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");
itemSlot.SetSelectedItemStyle();
if (itemSlot.Item is IEquipable newEquipable && GameRepo.PlayerData.Inventory.IsEquipped(newEquipable))
itemSlot.SetEquippedSelectedItemStyle();
ItemDescriptionTitle.Text = $"{itemSlot.Item.Info.Name}";
ItemEffectLabel.Text = $"{itemSlot.Item.Info.Description}";
}

View File

@@ -49,18 +49,36 @@ public partial class ItemSlot : HBoxContainer, IItemSlot
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)
{
EquipBonus.Text = $"...";
SetItemStyle();
}
}
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)
{
EquipBonus.Text = $"...";
SetItemStyle();
}
}
private void EquippedAccessory_Sync(Accessory obj)
{
if (Item is Accessory accessory && accessory == obj)
SetEquippedSelectedItemStyle();
if (Item is Accessory unequippedItem && unequippedItem != obj)
SetItemStyle();
}
@@ -72,8 +90,16 @@ public partial class ItemSlot : HBoxContainer, IItemSlot
}
public void SetSelectedItemStyle()
{
ItemName.LabelSettings = SelectedItemFont;
EquipBonus.LabelSettings = SelectedItemFont;
if (Item is IEquipable equipableItem && GameRepo.PlayerData.Inventory.IsEquipped(equipableItem))
{
ItemName.LabelSettings = SelectedEquippedItemFont;
EquipBonus.LabelSettings = EquippedItemFont;
}
else
{
ItemName.LabelSettings = SelectedItemFont;
EquipBonus.LabelSettings = SelectedItemFont;
}
}
public void SetEquippedItemStyle()
{
@@ -84,7 +110,7 @@ public partial class ItemSlot : HBoxContainer, IItemSlot
public void SetEquippedSelectedItemStyle()
{
ItemName.LabelSettings = SelectedEquippedItemFont;
EquipBonus.LabelSettings = SelectedEquippedItemFont;
EquipBonus.LabelSettings = EquippedItemFont;
}
public IInventoryItem Item { get; set; } = default!;

View File

@@ -3,7 +3,6 @@ using Chickensoft.GodotNodeInterfaces;
using Godot;
using System;
using System.Collections.Generic;
using static GameJamDungeon.Inventory;
namespace GameJamDungeon;
@@ -27,6 +26,8 @@ public interface IInventory : INode
public bool IsEquipped(IEquipable equipable);
event Inventory.InventoryAtCapacityEventHandler InventoryAtCapacity;
event Inventory.AccessoryUnequippedEventHandler AccessoryUnequipped;
}
public partial class Inventory : Node, IInventory
@@ -36,6 +37,8 @@ public partial class Inventory : Node, IInventory
[Signal]
public delegate void InventoryAtCapacityEventHandler(string rejectedItemName);
[Signal]
public delegate void AccessoryUnequippedEventHandler(AccessoryStats unequippedAccessory);
public Inventory()
{
@@ -86,7 +89,10 @@ public partial class Inventory : Node, IInventory
else if (equipable is Armor armor)
_equippedArmor.OnNext(new Armor());
else if (equipable is Accessory accessory)
{
EmitSignal(SignalName.AccessoryUnequipped, _equippedAccessory.Value.AccessoryStats);
_equippedAccessory.OnNext(new Accessory());
}
else
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 accessoryScene = AccessoryScene.Instantiate<Accessory>();
accessoryScene.AccessoryInfo = accessoryInfo;
accessoryScene.AccessoryStats = accessoryInfo;
database.Add(accessoryScene);
}

View File

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

View File

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

View File

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