mirror of
http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite.git
synced 2025-11-20 10:27:13 +08:00
(client) feat:健康给予,路径优化,结算界面,商店界面 (#60)
Co-authored-by: m0_75251201 <m0_75251201@noreply.gitcode.com> Reviewed-on: http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite/pulls/60
This commit is contained in:
@@ -1,72 +1,71 @@
|
||||
using System;
|
||||
using Configs;
|
||||
using Data;
|
||||
using Item;
|
||||
using Managers;
|
||||
using UnityEngine;
|
||||
|
||||
// 添加 System 命名空间以使用 Action
|
||||
|
||||
namespace Entity
|
||||
{
|
||||
public class Character : LivingEntity
|
||||
{
|
||||
public override Attributes defAttributes
|
||||
private int _currentWeaponIndex; // 私有字段用于存储实际值
|
||||
private Attributes _defAttributes;
|
||||
|
||||
public override Attributes DefAttributes
|
||||
{
|
||||
get
|
||||
{
|
||||
var def = base.defAttributes;
|
||||
var weaponDef = GetCurrentWeapon()?.Attributes;
|
||||
if (weaponDef != null)
|
||||
{
|
||||
weaponDef.health = def.health;
|
||||
weaponDef.moveSpeed = def.moveSpeed;
|
||||
return weaponDef;
|
||||
}
|
||||
|
||||
return def;
|
||||
var weaponAttributes = GetCurrentWeapon()?.Attributes;
|
||||
_defAttributes ??= weaponAttributes != null
|
||||
? new Attributes(weaponAttributes)
|
||||
: new Attributes(base.DefAttributes);
|
||||
_defAttributes.health = base.DefAttributes.health;
|
||||
_defAttributes.defense = base.DefAttributes.defense;
|
||||
return _defAttributes;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private int _currentSelected; // 私有字段用于存储实际值
|
||||
|
||||
/// <summary>
|
||||
/// 当前选中的背包槽位索引。
|
||||
/// 当此值被设置时,如果与旧值不同,将触发 OnCurrentSelectedChanged 事件。
|
||||
/// </summary>
|
||||
public int CurrentSelected
|
||||
public int CurrentWeaponIndex
|
||||
{
|
||||
get => _currentSelected;
|
||||
get => _currentWeaponIndex;
|
||||
set
|
||||
{
|
||||
var maxIndex = PlayerInventory != null && PlayerInventory.Capacity > 0 ? PlayerInventory.Capacity - 1 : 0;
|
||||
var maxIndex = WeaponInventory != null && WeaponInventory.Capacity > 0
|
||||
? WeaponInventory.Capacity - 1
|
||||
: 0;
|
||||
var clampedValue = Mathf.Clamp(value, 0, maxIndex);
|
||||
_currentSelected = clampedValue;
|
||||
_currentWeaponIndex = clampedValue;
|
||||
InitWeaponAnimator();
|
||||
}
|
||||
}
|
||||
|
||||
public Inventory PlayerInventory { get; private set; }
|
||||
public InventorySlot Coin{get;private set;}
|
||||
public Inventory WeaponInventory { get; private set; }
|
||||
public Inventory ItemInventory { get; private set; }
|
||||
public InventorySlot Coin { get; private set; }
|
||||
|
||||
public CharacterDef characterDef => entityDef as CharacterDef;
|
||||
|
||||
public override void Init(EntityDef entityDefine)
|
||||
{
|
||||
PlayerInventory = new Inventory(this, 3);
|
||||
WeaponInventory = new Inventory(this, 3);
|
||||
ItemInventory = new Inventory(this, 99999);
|
||||
var coinItem = ItemResourceManager.Instance.GetItem(ConfigManager.Instance.GetValue<string>("CoinItem"));
|
||||
if(!KeyValueArchiveManager.Instance.HasKey("coinCount"))
|
||||
{
|
||||
if (!KeyValueArchiveManager.Instance.HasKey("coinCount"))
|
||||
KeyValueArchiveManager.Instance.Set("coinCount", 0);
|
||||
}
|
||||
|
||||
Coin = Program.Instance.OutsidePlayDimension == null
|
||||
? new InventorySlot(coinItem, Program.Instance.CoinCount)
|
||||
: new InventorySlot(coinItem, 0);
|
||||
Coin = new InventorySlot(coinItem, 0);
|
||||
|
||||
PlayerInventory.OnInventoryChanged += InventoryChange;
|
||||
CurrentSelected = 0;
|
||||
WeaponInventory.OnInventoryChanged += InventoryChange;
|
||||
CurrentWeaponIndex = 0;
|
||||
base.Init(entityDefine);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 尝试将指定物品添加到角色的背包中。
|
||||
@@ -81,22 +80,19 @@ namespace Entity
|
||||
/// </returns>
|
||||
public int TryPickupItem(ItemResource itemResource, int quantity)
|
||||
{
|
||||
if (PlayerInventory == null)
|
||||
{
|
||||
Debug.LogError($"Character '{name}' inventory is not initialized. Cannot pickup item.");
|
||||
return quantity; // 如果背包未初始化,则视为未能添加任何物品
|
||||
}
|
||||
|
||||
|
||||
var remainingQuantity = PlayerInventory.AddItem(itemResource, quantity);
|
||||
|
||||
return remainingQuantity;
|
||||
if (Coin.Item == itemResource)
|
||||
return quantity - Coin.AddQuantity(quantity);
|
||||
if (itemResource is not WeaponResource weaponResource)
|
||||
return ItemInventory.AddItem(itemResource, quantity);
|
||||
var remainingQuantity = WeaponInventory.AddItem(weaponResource, quantity);
|
||||
return remainingQuantity > 0 ? ItemInventory.AddItem(itemResource, quantity) : remainingQuantity;
|
||||
}
|
||||
|
||||
public override WeaponResource GetCurrentWeapon()
|
||||
{
|
||||
var currentSelectItem = PlayerInventory.GetSlot(CurrentSelected);
|
||||
return currentSelectItem?.Item as WeaponResource;
|
||||
var currentSelectItem = WeaponInventory.GetSlot(CurrentWeaponIndex);
|
||||
return currentSelectItem?.Item as WeaponResource ??
|
||||
ItemResourceManager.Instance.GetItem(characterDef?.defaultWeapon) as WeaponResource;
|
||||
}
|
||||
|
||||
private void InventoryChange()
|
||||
|
||||
Reference in New Issue
Block a user