using System;
namespace Models;
///
/// UnitModel(组合式数据容器)
/// 设计说明:
/// 1) 该类不再是“基类”,而是用于聚合组件的纯数据对象。
/// 2) 这样 Student/Mentor/Staff 可以按需组合组件,避免继承链的耦合。
/// 3) 任何业务逻辑应放在 System/Controller 层,Model 保持可序列化、可测试。
/// 注意事项:
/// - 不引用 Godot 类型,保证与视图层隔离。
/// - 通过 Name 属性提供便捷访问,便于旧代码过渡。
/// 未来扩展:
/// - 可以增加“能力衰减/成长曲线”等组件,而不影响现有对象结构。
/// - 可引入“只读快照”用于回放/结算等需求。
///
public sealed class UnitModel
{
///
/// 身份组件
///
public UnitComponents.UnitIdentity Identity { get; }
///
/// 属性组件
///
public UnitComponents.UnitAttributes Attributes { get; }
///
/// 状态组件
///
public UnitComponents.UnitStatuses Statuses { get; }
///
/// 标签组件
///
public UnitComponents.UnitTags Tags { get; }
///
/// 指派组件
///
public UnitComponents.UnitAssignment Assignment { get; }
///
/// 位置组件
///
public UnitComponents.UnitPlacement Placement { get; }
///
/// 装备组件
///
public UnitComponents.UnitEquipment Equipment { get; }
///
/// 名字(便捷访问)
///
public string Name
{
get => Identity.Name;
set => Identity.Name = value;
}
///
/// 构造函数
///
/// 名字
/// 随机数生成器
public UnitModel(string name, Random random = null)
{
Identity = new UnitComponents.UnitIdentity(name);
Attributes = new UnitComponents.UnitAttributes(random);
Statuses = new UnitComponents.UnitStatuses();
Tags = new UnitComponents.UnitTags();
Assignment = new UnitComponents.UnitAssignment();
Placement = new UnitComponents.UnitPlacement();
Equipment = new UnitComponents.UnitEquipment();
}
}