Major Player refactor

This commit is contained in:
2025-02-07 02:29:50 -08:00
parent 0cdae88952
commit fe1a1e61ef
132 changed files with 2554 additions and 2478 deletions

View File

@@ -1,11 +1,12 @@
using Chickensoft.AutoInject;
using Chickensoft.GodotNodeInterfaces;
using Chickensoft.Introspection;
using GameJamDungeon;
using Godot;
using System.Linq;
using System.Threading.Tasks;
namespace GameJamDungeon;
public interface IInventoryMenu : IControl
{
public Task RedrawInventory();
@@ -18,14 +19,13 @@ public partial class InventoryMenu : Control, IInventoryMenu
{
public override void _Notification(int what) => this.Notify(what);
[Dependency]
public IGameRepo GameRepo => this.DependOn<IGameRepo>();
[Dependency] public IGameRepo GameRepo => this.DependOn<IGameRepo>();
[Dependency]
public IGame Game => this.DependOn<IGame>();
[Dependency] public IGame Game => this.DependOn<IGame>();
[Dependency]
public IGameEventDepot GameEventDepot => this.DependOn<IGameEventDepot>();
[Dependency] public IPlayer Player => this.DependOn<IPlayer>();
[Dependency] public IGameEventDepot GameEventDepot => this.DependOn<IGameEventDepot>();
[Signal]
public delegate void ClosedMenuEventHandler();
@@ -78,20 +78,20 @@ public partial class InventoryMenu : Control, IInventoryMenu
public void OnResolved()
{
GameRepo.PlayerData.CurrentHP.Sync += CurrentHP_Sync;
GameRepo.PlayerData.MaximumHP.Sync += MaximumHP_Sync;
GameRepo.PlayerData.CurrentVT.Sync += CurrentVT_Sync;
GameRepo.PlayerData.MaximumVT.Sync += MaximumVT_Sync;
GameRepo.PlayerData.CurrentAttack.Sync += CurrentAttack_Sync;
GameRepo.PlayerData.MaxAttack.Sync += MaxAttack_Sync;
GameRepo.PlayerData.CurrentDefense.Sync += CurrentDefense_Sync;
GameRepo.PlayerData.MaxDefense.Sync += MaxDefense_Sync;
GameRepo.PlayerData.CurrentExp.Sync += CurrentExp_Sync;
GameRepo.PlayerData.ExpToNextLevel.Sync += ExpToNextLevel_Sync;
GameRepo.PlayerData.CurrentLevel.Sync += CurrentLevel_Sync;
GameRepo.PlayerData.Inventory.EquippedWeapon.Sync += EquippedWeapon_Sync;
GameRepo.PlayerData.Inventory.EquippedArmor.Sync += EquippedArmor_Sync;
GameRepo.PlayerData.Inventory.EquippedAccessory.Sync += EquippedAccessory_Sync;
Player.Stats.CurrentHP.Sync += CurrentHP_Sync;
Player.Stats.MaximumHP.Sync += MaximumHP_Sync;
Player.Stats.CurrentVT.Sync += CurrentVT_Sync;
Player.Stats.MaximumVT.Sync += MaximumVT_Sync;
Player.Stats.CurrentAttack.Sync += CurrentAttack_Sync;
Player.Stats.MaxAttack.Sync += MaxAttack_Sync;
Player.Stats.CurrentDefense.Sync += CurrentDefense_Sync;
Player.Stats.MaxDefense.Sync += MaxDefense_Sync;
Player.Stats.CurrentExp.Sync += CurrentExp_Sync;
Player.Stats.ExpToNextLevel.Sync += ExpToNextLevel_Sync;
Player.Stats.CurrentLevel.Sync += CurrentLevel_Sync;
Player.Inventory.EquippedWeapon.Sync += EquippedWeapon_Sync;
Player.Inventory.EquippedArmor.Sync += EquippedArmor_Sync;
Player.Inventory.EquippedAccessory.Sync += EquippedAccessory_Sync;
Game.StatRaisedAlert += Game_StatRaisedAlert;
SetProcessInput(false);
@@ -110,44 +110,44 @@ public partial class InventoryMenu : Control, IInventoryMenu
private void EquippedAccessory_Sync(Accessory obj)
{
ATKBonusLabel.Text = $"{GameRepo.PlayerData.BonusAttack:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = $"{GameRepo.PlayerData.BonusDefense:+0;-#;\\.\\.\\.}";
ATKBonusLabel.Text = $"{Player.Stats.BonusAttack.Value:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = $"{Player.Stats.BonusDefense.Value:+0;-#;\\.\\.\\.}";
}
private void EquippedArmor_Sync(Armor obj)
{
ATKBonusLabel.Text = $"{GameRepo.PlayerData.BonusAttack:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = $"{GameRepo.PlayerData.BonusDefense:+0;-#;\\.\\.\\.}";
ATKBonusLabel.Text = $"{Player.Stats.BonusAttack.Value:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = $"{Player.Stats.BonusDefense.Value:+0;-#;\\.\\.\\.}";
}
private void EquippedWeapon_Sync(Weapon obj)
{
ATKBonusLabel.Text = $"{GameRepo.PlayerData.BonusAttack:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = $"{GameRepo.PlayerData.BonusDefense:+0;-#;\\.\\.\\.}";
ATKBonusLabel.Text = $"{Player.Stats.BonusAttack.Value:+0;-#;\\.\\.\\.}";
DEFBonusLabel.Text = $"{Player.Stats.BonusDefense.Value:+0;-#;\\.\\.\\.}";
}
private void CurrentLevel_Sync(int obj) => CurrentLevelLabel.Text = $"Level {obj:D2}";
private void ExpToNextLevel_Sync(int obj) => EXPValue.Text = $"{GameRepo.PlayerData.CurrentExp.Value}/{obj}";
private void ExpToNextLevel_Sync(int obj) => EXPValue.Text = $"{Player.Stats.CurrentExp.Value}/{obj}";
// TODO: Change font style when EXP Bonus effect is active
private void CurrentExp_Sync(int obj) => EXPValue.Text = $"{obj}/{GameRepo.PlayerData.ExpToNextLevel.Value}";
private void CurrentExp_Sync(int obj) => EXPValue.Text = $"{obj}/{Player.Stats.ExpToNextLevel.Value}";
private void MaxDefense_Sync(int obj) => DEFValue.Text = $"{GameRepo.PlayerData.CurrentDefense.Value}/{obj}";
private void MaxDefense_Sync(int obj) => DEFValue.Text = $"{Player.Stats.CurrentDefense.Value}/{obj}";
private void CurrentDefense_Sync(int obj) => DEFValue.Text = $"{obj}/{GameRepo.PlayerData.MaxDefense.Value}";
private void CurrentDefense_Sync(int obj) => DEFValue.Text = $"{obj}/{Player.Stats.MaxDefense.Value}";
private void MaxAttack_Sync(int obj) => ATKValue.Text = $"{GameRepo.PlayerData.CurrentAttack.Value}/{obj}";
private void MaxAttack_Sync(int obj) => ATKValue.Text = $"{Player.Stats.CurrentAttack.Value}/{obj}";
private void CurrentAttack_Sync(int obj) => ATKValue.Text = $"{obj}/{GameRepo.PlayerData.MaxAttack.Value}";
private void CurrentAttack_Sync(int obj) => ATKValue.Text = $"{obj}/{Player.Stats.MaxAttack.Value}";
private void MaximumVT_Sync(int obj) => VTValue.Text = $"{GameRepo.PlayerData.CurrentVT.Value}/{obj}";
private void MaximumVT_Sync(int obj) => VTValue.Text = $"{Player.Stats.CurrentVT.Value}/{obj}";
private void CurrentVT_Sync(int obj) => VTValue.Text = $"{obj}/{GameRepo.PlayerData.MaximumVT.Value}";
private void CurrentVT_Sync(int obj) => VTValue.Text = $"{obj}/{Player.Stats.MaximumVT.Value}";
private void MaximumHP_Sync(int obj) => HPValue.Text = $"{GameRepo.PlayerData.CurrentHP.Value}/{obj}";
private void MaximumHP_Sync(int obj) => HPValue.Text = $"{Player.Stats.CurrentHP.Value}/{obj}";
private void CurrentHP_Sync(int obj) => HPValue.Text = $"{obj}/{GameRepo.PlayerData.MaximumHP.Value}";
private void CurrentHP_Sync(int obj) => HPValue.Text = $"{obj}/{Player.Stats.MaximumHP.Value}";
public async Task RedrawInventory()
{
@@ -161,7 +161,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
public override void _Input(InputEvent @event)
{
var inventory = GameRepo.PlayerData.Inventory;
var inventory = Player.Inventory;
if (@event.IsActionPressed(GameInputs.UiCancel))
{
@@ -249,8 +249,8 @@ public partial class InventoryMenu : Control, IInventoryMenu
if (ItemSlots.Any())
{
var item = ItemSlots.ElementAt(_currentIndex).Item;
ItemDescriptionTitle.Text = $"{item.Info.Name}";
ItemEffectLabel.Text = $"{item.Info.Description}";
ItemDescriptionTitle.Text = $"{item.ItemName}";
ItemEffectLabel.Text = $"{item.Description}";
}
}
@@ -267,7 +267,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
if (currentItem is IEquipableItem equipable)
{
var isEquipped = GameRepo.PlayerData.Inventory.IsEquipped(equipable);
var isEquipped = Player.Inventory.IsEquipped(equipable);
UseButton.Text = isEquipped ? "Unequip" : "Equip";
ThrowButton.Disabled = isEquipped ? true : false;
ThrowButton.FocusMode = isEquipped ? FocusModeEnum.None : FocusModeEnum.All;
@@ -311,7 +311,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
private async void PopulateInventory()
{
var inventory = GameRepo.PlayerData.Inventory;
var inventory = Player.Inventory;
var numberOfItemsToDisplay = _currentPageNumber == InventoryPageNumber.FirstPage ? Mathf.Min(inventory.Items.Count, _itemsPerPage) : Mathf.Min(inventory.Items.Count - _itemsPerPage, _itemsPerPage);
var indexToStart = _currentPageNumber == InventoryPageNumber.FirstPage ? 0 : _itemsPerPage;
@@ -338,14 +338,14 @@ public partial class InventoryMenu : Control, IInventoryMenu
itemSlot.Item = item;
ItemsPage.AddChildEx(itemSlot);
if (itemSlot.Item is IEquipableItem equipable && GameRepo.PlayerData.Inventory.IsEquipped(equipable))
if (itemSlot.Item is IEquipableItem equipable && Player.Inventory.IsEquipped(equipable))
itemSlot.SetEquippedItemStyle();
}
if (ItemSlots.Any())
{
ItemSlots.ElementAt(_currentIndex).SetSelectedItemStyle();
if (ItemSlots.ElementAt(_currentIndex).Item is IEquipableItem equipable && GameRepo.PlayerData.Inventory.IsEquipped(equipable))
if (ItemSlots.ElementAt(_currentIndex).Item is IEquipableItem equipable && Player.Inventory.IsEquipped(equipable))
ItemSlots.ElementAt(_currentIndex).SetEquippedSelectedItemStyle();
}
}
@@ -354,7 +354,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
{
await ToSignal(GetTree().CreateTimer(0.1f), "timeout");
itemSlot.SetItemStyle();
if (itemSlot.Item is IEquipableItem equipable && GameRepo.PlayerData.Inventory.IsEquipped(equipable))
if (itemSlot.Item is IEquipableItem equipable && Player.Inventory.IsEquipped(equipable))
itemSlot.SetEquippedItemStyle();
}
@@ -362,8 +362,8 @@ public partial class InventoryMenu : Control, IInventoryMenu
{
await ToSignal(GetTree().CreateTimer(0.1f), "timeout");
itemSlot.SetSelectedItemStyle();
ItemDescriptionTitle.Text = $"{itemSlot.Item.Info.Name}";
ItemEffectLabel.Text = $"{itemSlot.Item.Info.Description}";
ItemDescriptionTitle.Text = $"{itemSlot.Item.ItemName}";
ItemEffectLabel.Text = $"{itemSlot.Item.Description}";
}
private async Task EquipOrUnequipItem()
@@ -371,16 +371,16 @@ public partial class InventoryMenu : Control, IInventoryMenu
var itemSlot = ItemSlots[_currentIndex];
if (itemSlot.Item is IEquipableItem equipableItem)
{
if (GameRepo.PlayerData.Inventory.IsEquipped(equipableItem))
if (Player.Inventory.IsEquipped(equipableItem))
{
ItemEffectLabel.Text = $"{itemSlot.Item.GetType()} unequipped.";
GameRepo.PlayerData.Inventory.Unequip(equipableItem);
Player.Inventory.Unequip(equipableItem);
itemSlot.SetSelectedItemStyle();
}
else
{
ItemEffectLabel.Text = $"{itemSlot.Item.GetType()} equipped.";
GameRepo.PlayerData.Inventory.Equip(equipableItem);
Player.Inventory.Equip(equipableItem);
itemSlot.SetEquippedSelectedItemStyle();
}
@@ -404,7 +404,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
private async void DestroyItem(IUsableItem usableItem)
{
GameRepo.PlayerData.Inventory.Remove(usableItem);
Player.Inventory.Remove(usableItem);
if (_currentIndex >= ItemSlots.Length - 1)
_currentIndex--;
if (_currentIndex <= 0)
@@ -416,7 +416,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
var currentItem = ItemSlots[_currentIndex].Item;
Game.ThrowItem(currentItem);
GameRepo.PlayerData.Inventory.Remove(currentItem);
Player.Inventory.Remove(currentItem);
if (_currentIndex >= ItemSlots.Length - 1)
_currentIndex--;
@@ -430,7 +430,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
{
var currentItem = ItemSlots[_currentIndex].Item;
Game.DropItem(currentItem);
GameRepo.PlayerData.Inventory.Remove(currentItem);
Player.Inventory.Remove(currentItem);
if (_currentIndex >= ItemSlots.Length - 1)
_currentIndex--;

View File

@@ -1,6 +1,8 @@
using GameJamDungeon;
using Godot;
namespace GameJamDungeon;
public partial class ItemLabel : Label
{
public ItemLabel()
@@ -8,8 +10,6 @@ public partial class ItemLabel : Label
LabelSettings = UnequippedItemFont;
}
public IInventoryItem InventoryItem { get; set; } = default!;
private static LabelSettings UnequippedItemFont => GD.Load<LabelSettings>("res://src/ui/label_settings/MainTextRegular.tres");
private static LabelSettings EquippedItemFont => GD.Load<LabelSettings>("res://src/ui/label_settings/MainTextFontEquipped.tres");

View File

@@ -1,9 +1,10 @@
using Chickensoft.AutoInject;
using Chickensoft.GodotNodeInterfaces;
using Chickensoft.Introspection;
using GameJamDungeon;
using Godot;
namespace GameJamDungeon;
public interface IItemSlot : IHBoxContainer
{
public IInventoryItem Item { get; set; }
@@ -22,8 +23,9 @@ public partial class ItemSlot : HBoxContainer, IItemSlot
{
public override void _Notification(int what) => this.Notify(what);
[Dependency]
public IGameRepo GameRepo => this.DependOn<IGameRepo>();
[Dependency] public IGameRepo GameRepo => this.DependOn<IGameRepo>();
[Dependency] public IPlayer Player => this.DependOn<IPlayer>();
//[Node] public Label EquipBonus { get; set; } = default!;
@@ -39,12 +41,12 @@ public partial class ItemSlot : HBoxContainer, IItemSlot
public void OnReady()
{
ItemName.Text = Item.Info.Name;
ItemName.Text = Item.ItemName;
//EquipBonus.Text = "...";
ItemTexture.Texture = Item.Info.Texture;
GameRepo.PlayerData.Inventory.EquippedWeapon.Sync += EquippedWeapon_Sync;
GameRepo.PlayerData.Inventory.EquippedArmor.Sync += EquippedArmor_Sync;
GameRepo.PlayerData.Inventory.EquippedAccessory.Sync += EquippedAccessory_Sync;
ItemTexture.Texture = Item.GetTexture();
Player.Inventory.EquippedWeapon.Sync += EquippedWeapon_Sync;
Player.Inventory.EquippedArmor.Sync += EquippedArmor_Sync;
Player.Inventory.EquippedAccessory.Sync += EquippedAccessory_Sync;
}
private void EquippedWeapon_Sync(Weapon obj)
@@ -90,7 +92,7 @@ public partial class ItemSlot : HBoxContainer, IItemSlot
}
public void SetSelectedItemStyle()
{
if (Item is IEquipableItem equipableItem && GameRepo.PlayerData.Inventory.IsEquipped(equipableItem))
if (Item is IEquipableItem equipableItem && Player.Inventory.IsEquipped(equipableItem))
{
ItemName.LabelSettings = SelectedEquippedItemFont;
//EquipBonus.LabelSettings = EquippedItemFont;