using System.Text;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Model;
namespace Milimoe.FunGame.Core.Entity
{
public class Inventory
{
///
/// 库存 ID 与用户 ID 绑定
///
public long Id => User.Id;
///
/// 库存的名称,默认为 “的库存”;可更改
///
public string Name { get; set; } = "";
///
/// 库存属于哪个玩家
///
public User User { get; }
///
/// 玩家持有 的数量
///
public double Credits { get; set; } = 0;
///
/// 玩家持有 的数量
///
public double Materials { get; set; } = 0;
///
/// 玩家拥有的角色
///
public HashSet Characters { get; } = [];
///
/// 玩家拥有的物品
///
public HashSet- Items { get; } = [];
///
/// 主战角色
///
public Character MainCharacter
{
get
{
if (_character != null)
{
return _character;
}
else if (Characters.Count > 0)
{
_character = Characters.First();
return _character;
}
throw new GetInstanceException();
}
set
{
_character = value;
}
}
///
/// 小队
///
public HashSet Squad { get; set; } = [];
///
/// 练级中的角色
///
public Dictionary Training { get; set; } = [];
private Character? _character;
internal Inventory(User user)
{
User = user;
Name = user.Username + "的库存";
}
public override string ToString()
{
return Name + $"({User})";
}
public string ToString(bool showAll)
{
StringBuilder builder = new();
builder.AppendLine($"☆★☆ {Name} ☆★☆");
builder.AppendLine($"{General.GameplayEquilibriumConstant.InGameCurrency}:{Credits:0.00}");
builder.AppendLine($"{General.GameplayEquilibriumConstant.InGameMaterial}:{Materials:0.00}");
builder.AppendLine($"======= 角色 =======");
Character[] characters = [.. Characters];
for (int i = 1; i <= characters.Length; i++)
{
Character character = characters[i - 1];
if (showAll)
{
builder.AppendLine($"===== 第 {i} 个角色 =====");
builder.AppendLine($"{character.GetInfo(false)}");
}
else
{
builder.AppendLine($"{i}. {character.ToStringWithLevelWithOutUser()}");
}
}
builder.AppendLine($"======= 物品 =======");
Item[] items = [.. Items];
for (int i = 1; i <= items.Length; i++)
{
Item item = items[i - 1];
if (showAll)
{
builder.AppendLine($"===== 第 {i} 个物品 =====");
}
else
{
builder.AppendLine($"{i}. [{ItemSet.GetQualityTypeName(item.QualityType)}|{ItemSet.GetItemTypeName(item.ItemType)}] {item.Name}");
}
builder.AppendLine($"{item.ToStringInventory(showAll).Trim()}");
if (showAll) builder.AppendLine();
}
return builder.ToString();
}
}
}