Massive refactor (inventory menu still a little broken but its Good Enough)
This commit is contained in:
@@ -9,6 +9,8 @@ using System.Threading.Tasks;
|
||||
public interface IInventoryMenu : IControl
|
||||
{
|
||||
public Task RedrawInventory();
|
||||
|
||||
event InventoryMenu.ClosedMenuEventHandler ClosedMenu;
|
||||
}
|
||||
|
||||
[Meta(typeof(IAutoNode))]
|
||||
@@ -19,8 +21,8 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
[Dependency]
|
||||
public IGameRepo GameRepo => this.DependOn<IGameRepo>();
|
||||
|
||||
[Dependency]
|
||||
public IGame Game => this.DependOn<IGame>();
|
||||
[Signal]
|
||||
public delegate void ClosedMenuEventHandler();
|
||||
|
||||
private InventoryPageNumber _currentPageNumber = InventoryPageNumber.FirstPage;
|
||||
|
||||
@@ -77,12 +79,12 @@ 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 _UnhandledInput(InputEvent @event)
|
||||
{
|
||||
if (ItemSlots.Length == 0)
|
||||
if (ItemSlots.Length == 0 || GetViewport().GuiGetFocusOwner() is Button)
|
||||
return;
|
||||
|
||||
var inventory = GameRepo.InventoryItems.Value;
|
||||
var inventory = GameRepo.PlayerData.Inventory;
|
||||
|
||||
if (@event.IsActionPressed(GameInputs.UiRight) && _currentPageNumber == InventoryPageNumber.FirstPage && inventory.Count > _itemsPerPage)
|
||||
if (@event.IsActionPressed(GameInputs.UiRight) && _currentPageNumber == InventoryPageNumber.FirstPage && inventory.Items.Count() > _itemsPerPage)
|
||||
ChangeInventoryPage(InventoryPageNumber.SecondPage);
|
||||
|
||||
if (@event.IsActionPressed(GameInputs.UiLeft) && _currentPageNumber == InventoryPageNumber.SecondPage)
|
||||
@@ -104,7 +106,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
|
||||
if (@event.IsActionPressed(GameInputs.UiAccept))
|
||||
{
|
||||
if (ItemSlots.Length == 0 || GetViewport().GuiGetFocusOwner() is Button)
|
||||
if (ItemSlots.Length == 0)
|
||||
return;
|
||||
DisplayUserActionPrompt();
|
||||
}
|
||||
@@ -129,37 +131,37 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
{
|
||||
FloorLabel.Text = $"Level {GameRepo.CurrentFloor:D2}";
|
||||
|
||||
var currentLevel = GameRepo.PlayerStatInfo.Value.CurrentLevel;
|
||||
var currentLevel = GameRepo.PlayerData.CurrentLevel.Value;
|
||||
CurrentLevelLabel.Text = $"Level {currentLevel:D2}";
|
||||
|
||||
var currentHP = GameRepo.PlayerStatInfo.Value.CurrentHP;
|
||||
var maxHP = GameRepo.PlayerStatInfo.Value.MaximumHP;
|
||||
var currentHP = GameRepo.PlayerData.CurrentHP.Value;
|
||||
var maxHP = GameRepo.PlayerData.MaximumHP.Value;
|
||||
|
||||
HPValue.Text = $"{currentHP}/{maxHP}";
|
||||
|
||||
var currentVT = GameRepo.PlayerStatInfo.Value.CurrentVT;
|
||||
var maxVT = GameRepo.PlayerStatInfo.Value.MaximumVT;
|
||||
var currentVT = GameRepo.PlayerData.CurrentVT.Value;
|
||||
var maxVT = GameRepo.PlayerData.MaximumVT.Value;
|
||||
|
||||
VTValue.Text = $"{currentVT}/{maxVT}";
|
||||
|
||||
var currentAttack = GameRepo.PlayerStatInfo.Value.CurrentAttack;
|
||||
var maxAttack = GameRepo.PlayerStatInfo.Value.MaxAttack;
|
||||
var currentAttack = GameRepo.PlayerData.CurrentAttack.Value;
|
||||
var maxAttack = GameRepo.PlayerData.MaxAttack.Value;
|
||||
|
||||
ATKValue.Text = $"{currentAttack}/{maxAttack}";
|
||||
|
||||
var currentDefense = GameRepo.PlayerStatInfo.Value.CurrentDefense;
|
||||
var maxDefense = GameRepo.PlayerStatInfo.Value.MaxDefense;
|
||||
var currentDefense = GameRepo.PlayerData.CurrentDefense.Value;
|
||||
var maxDefense = GameRepo.PlayerData.MaxDefense.Value;
|
||||
DEFValue.Text = $"{currentDefense}/{maxDefense}";
|
||||
|
||||
var atkBonus = GameRepo.PlayerStatInfo.Value.BonusAttack;
|
||||
var defBonus = GameRepo.PlayerStatInfo.Value.BonusDefense;
|
||||
var atkBonus = GameRepo.PlayerData.BonusAttack.Value;
|
||||
var defBonus = GameRepo.PlayerData.BonusDefense.Value;
|
||||
|
||||
ATKBonusLabel.Text = atkBonus != 0 ? $"{atkBonus:+0;-#}" : "...";
|
||||
DEFBonusLabel.Text = defBonus != 0 ? $"{defBonus:+0;-#}" : "...";
|
||||
|
||||
// TODO: Change font style when EXP Bonus effect is active
|
||||
var currentExp = GameRepo.PlayerStatInfo.Value.CurrentEXP;
|
||||
var expToNextLevel = GameRepo.PlayerStatInfo.Value.EXPToNextLevel;
|
||||
var currentExp = GameRepo.PlayerData.CurrentExp.Value;
|
||||
var expToNextLevel = GameRepo.PlayerData.ExpToNextLevel.Value;
|
||||
EXPValue.Text = $"{currentExp}/{expToNextLevel}";
|
||||
|
||||
if (ItemSlots.Any())
|
||||
@@ -183,7 +185,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
|
||||
if (currentItem is IEquipable equipable)
|
||||
{
|
||||
var isEquipped = GameRepo.IsItemEquipped(equipable);
|
||||
var isEquipped = GameRepo.PlayerData.Inventory.IsEquipped(equipable);
|
||||
UseButton.Text = isEquipped ? "Unequip" : "Equip";
|
||||
ThrowButton.Disabled = isEquipped ? true : false;
|
||||
ThrowButton.FocusMode = isEquipped ? FocusModeEnum.None : FocusModeEnum.All;
|
||||
@@ -219,14 +221,14 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
|
||||
private void PopulateInventory()
|
||||
{
|
||||
var inventory = GameRepo.InventoryItems.Value;
|
||||
var numberOfItemsToDisplay = _currentPageNumber == InventoryPageNumber.FirstPage ? Mathf.Min(inventory.Count, _itemsPerPage) : Mathf.Min(inventory.Count - _itemsPerPage, _itemsPerPage);
|
||||
var inventory = GameRepo.PlayerData.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 - 1;
|
||||
|
||||
ForwardArrow.Text = "";
|
||||
BackArrow.Text = "";
|
||||
|
||||
if (_currentPageNumber == InventoryPageNumber.FirstPage && inventory.Count > _itemsPerPage)
|
||||
if (_currentPageNumber == InventoryPageNumber.FirstPage && inventory.Items.Count > _itemsPerPage)
|
||||
{
|
||||
ForwardArrow.Text = "►";
|
||||
BackArrow.Text = "";
|
||||
@@ -240,20 +242,20 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
|
||||
for (var i = 0; i < numberOfItemsToDisplay; i++)
|
||||
{
|
||||
var item = inventory.ElementAt(i + indexToStart);
|
||||
var item = inventory.Items.ElementAt(i + indexToStart);
|
||||
var itemScene = GD.Load<PackedScene>(ITEM_SLOT_SCENE);
|
||||
var itemSlot = itemScene.Instantiate<IItemSlot>();
|
||||
itemSlot.Item = item;
|
||||
ItemsPage.AddChildEx(itemSlot);
|
||||
|
||||
if (itemSlot.Item is IEquipable equipable && GameRepo.IsItemEquipped(equipable))
|
||||
if (itemSlot.Item is IEquipable equipable && GameRepo.PlayerData.Inventory.IsEquipped(equipable))
|
||||
itemSlot.SetEquippedItemStyle();
|
||||
}
|
||||
|
||||
if (ItemSlots.Any())
|
||||
{
|
||||
ItemSlots.ElementAt(_currentIndex).SetSelectedItemStyle();
|
||||
if (ItemSlots.ElementAt(_currentIndex).Item is IEquipable equipable && GameRepo.IsItemEquipped(equipable))
|
||||
if (ItemSlots.ElementAt(_currentIndex).Item is IEquipable equipable && GameRepo.PlayerData.Inventory.IsEquipped(equipable))
|
||||
ItemSlots.ElementAt(_currentIndex).SetEquippedSelectedItemStyle();
|
||||
}
|
||||
}
|
||||
@@ -262,7 +264,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
{
|
||||
await ToSignal(GetTree().CreateTimer(0.1f), "timeout");
|
||||
itemSlot.SetItemStyle();
|
||||
if (itemSlot.Item is IEquipable equipable && GameRepo.IsItemEquipped(equipable))
|
||||
if (itemSlot.Item is IEquipable equipable && GameRepo.PlayerData.Inventory.IsEquipped(equipable))
|
||||
itemSlot.SetEquippedItemStyle();
|
||||
}
|
||||
|
||||
@@ -270,7 +272,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
{
|
||||
await ToSignal(GetTree().CreateTimer(0.1f), "timeout");
|
||||
itemSlot.SetSelectedItemStyle();
|
||||
if (itemSlot.Item is IEquipable newEquipable && GameRepo.IsItemEquipped(newEquipable))
|
||||
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}";
|
||||
@@ -282,14 +284,14 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
await ToSignal(GetTree().CreateTimer(0.2f), "timeout");
|
||||
if (itemSlot.Item is IEquipable equipableItem)
|
||||
{
|
||||
if (GameRepo.IsItemEquipped(equipableItem))
|
||||
if (GameRepo.PlayerData.Inventory.IsEquipped(equipableItem))
|
||||
{
|
||||
GameRepo.UnequipItem(equipableItem);
|
||||
GameRepo.PlayerData.Inventory.Unequip(equipableItem);
|
||||
itemSlot.SetSelectedItemStyle();
|
||||
}
|
||||
else
|
||||
{
|
||||
GameRepo.EquipItem(equipableItem);
|
||||
GameRepo.PlayerData.Inventory.Equip(equipableItem);
|
||||
itemSlot.SetEquippedSelectedItemStyle();
|
||||
}
|
||||
|
||||
@@ -299,20 +301,13 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
|
||||
private void UpdateStatBonusInfo()
|
||||
{
|
||||
var atkBonus = GameRepo.PlayerStatInfo.Value.BonusAttack;
|
||||
var atkBonus = GameRepo.PlayerData.BonusAttack.Value;
|
||||
ATKBonusLabel.Text = atkBonus != 0 ? $"{atkBonus:+0;-#}" : "...";
|
||||
var defBonus = GameRepo.PlayerStatInfo.Value.BonusDefense;
|
||||
var defBonus = GameRepo.PlayerData.BonusDefense.Value;
|
||||
DEFBonusLabel.Text = defBonus != 0 ? $"{defBonus:+0;-#}" : "...";
|
||||
|
||||
var currentHP = GameRepo.PlayerStatInfo.Value.CurrentHP;
|
||||
var maxHP = GameRepo.PlayerStatInfo.Value.MaximumHP;
|
||||
|
||||
HPValue.Text = $"{currentHP}/{maxHP}";
|
||||
|
||||
var currentVT = GameRepo.PlayerStatInfo.Value.CurrentVT;
|
||||
var maxVT = GameRepo.PlayerStatInfo.Value.MaximumVT;
|
||||
|
||||
VTValue.Text = $"{currentVT}/{maxVT}";
|
||||
HPValue.Text = $"{GameRepo.PlayerData.CurrentHP.Value}/{GameRepo.PlayerData.MaximumHP.Value}";
|
||||
VTValue.Text = $"{GameRepo.PlayerData.CurrentVT.Value}/{GameRepo.PlayerData.MaximumVT.Value}";
|
||||
}
|
||||
|
||||
private async void UseButtonPressed()
|
||||
@@ -321,7 +316,10 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
if (currentItem is IEquipable)
|
||||
await EquipOrUnequipItem();
|
||||
if (currentItem is ConsumableItem consumable)
|
||||
{
|
||||
EmitSignal(SignalName.ClosedMenu);
|
||||
consumable.Use();
|
||||
}
|
||||
|
||||
if (_currentIndex >= ItemSlots.Length - 1)
|
||||
_currentIndex--;
|
||||
@@ -341,7 +339,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
_currentIndex--;
|
||||
if (_currentIndex <= 0)
|
||||
_currentIndex = 0;
|
||||
Game.ToggleInventory();
|
||||
EmitSignal(SignalName.ClosedMenu);
|
||||
currentItem.Throw();
|
||||
}
|
||||
|
||||
@@ -354,7 +352,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
if (_currentIndex <= 0)
|
||||
_currentIndex = 0;
|
||||
|
||||
Game.ToggleInventory();
|
||||
EmitSignal(SignalName.ClosedMenu);
|
||||
currentItem.Drop();
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +102,6 @@ font_size = 80
|
||||
font_color = Color(0.737255, 0.705882, 0.690196, 1)
|
||||
|
||||
[node name="InventoryMenu" type="Control"]
|
||||
process_mode = 2
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
|
||||
@@ -42,9 +42,9 @@ public partial class ItemSlot : HBoxContainer, IItemSlot
|
||||
ItemName.Text = Item.Info.Name;
|
||||
EquipBonus.Text = "...";
|
||||
ItemTexture.Texture = Item.Info.Texture;
|
||||
GameRepo.EquippedWeapon.Sync += EquippedWeapon_Sync;
|
||||
GameRepo.EquippedArmor.Sync += EquippedArmor_Sync;
|
||||
GameRepo.EquippedAccessory.Sync += EquippedAccessory_Sync;
|
||||
GameRepo.PlayerData.Inventory.EquippedWeapon.Sync += EquippedWeapon_Sync;
|
||||
GameRepo.PlayerData.Inventory.EquippedArmor.Sync += EquippedArmor_Sync;
|
||||
GameRepo.PlayerData.Inventory.EquippedAccessory.Sync += EquippedAccessory_Sync;
|
||||
}
|
||||
|
||||
private void EquippedWeapon_Sync(Weapon obj)
|
||||
|
||||
Reference in New Issue
Block a user