using System; using System.Collections.Generic; namespace Models; /// /// 任务运行时模型 (TaskModel) /// 设计说明: /// 1) TaskDefinition 描述“配置”,TaskModel 描述“运行时进度”。二者分离利于 Mod 追加内容。 /// 2) 任务状态只保存必要字段,展示文本统一由 Definition + i18n 输出。 /// 3) 任务参与单位只记录 Id,避免模型直接引用 Node。 /// 注意事项: /// - 如果没有 DefinitionId,可使用 Name 作为临时演示数据。 /// - Deadline 语义是“剩余回合数”,由 TurnSystem 递减。 /// 未来扩展: /// - 可加入阶段状态(灵感/写作/实验/审核),与 UI 进度条分段对应。 /// - 可加入失败原因/完成评级,用于结算与肉鸽评分。 /// public sealed class TaskModel { public Guid Id { get; } = Guid.NewGuid(); public string DefinitionId { get; set; } public string Name { get; set; } public TaskTrack Track { get; set; } public TaskKind Kind { get; set; } public TaskDifficulty Difficulty { get; set; } public TaskRuntime Runtime { get; } public TaskRewardSnapshot Reward { get; set; } = new(); public List AssignedUnitIds { get; } = new(); public bool IsCompleted => Runtime.CurrentProgress >= Runtime.TotalWorkload; public bool IsFailed => Runtime.RemainingTurns <= 0 && !IsCompleted; public TaskModel(string name, TaskKind kind, float workload, int deadline) { Name = name; Kind = kind; Track = TaskTrack.LabProject; Difficulty = TaskDifficulty.Standard; Runtime = new TaskRuntime(workload, deadline); } public void AddProgress(float amount) { Runtime.CurrentProgress += amount; if (Runtime.CurrentProgress > Runtime.TotalWorkload) { Runtime.CurrentProgress = Runtime.TotalWorkload; } } } /// /// 任务运行参数(进度与截止) /// public sealed class TaskRuntime { public float TotalWorkload { get; set; } public float CurrentProgress { get; set; } public float DifficultyScale { get; set; } = 1.0f; public int RemainingTurns { get; set; } public TaskRuntime(float totalWorkload, int remainingTurns) { TotalWorkload = totalWorkload; RemainingTurns = remainingTurns; } } /// /// 运行时奖励快照(避免 Definition 被动态修改) /// public sealed class TaskRewardSnapshot { public int Money { get; set; } public int Reputation { get; set; } public List PaperIds { get; } = new(); }