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