- 组合式单位与数值基础重构:scripts/Models/UnitModel.cs, scripts/Models/UnitComponents.cs, scripts/Models/StudentModel.cs, scripts/Models/MentorModel.cs, scripts/Models/StaffModel.cs, scripts/Models/PropertyValue.cs, scripts/Models/StatusValue.cs - 任务与运行时状态骨架:scripts/Models/Task.cs, scripts/Models/TaskDefinitions.cs, scripts/Models/GameState.cs - 配置与规则定义骨架:scripts/Models/DefinitionSupport.cs, scripts/Models/DomainEnums.cs, scripts/Models/Modifiers.cs, scripts/Models/DisciplineDefinitions.cs, scripts/Models/SynergyDefinitions.cs, scripts/Models/ItemDefinitions.cs, scripts/Models/PaperDefinitions.cs, scripts/Models/RogueliteDefinitions.cs, scripts/Models/GameContentDatabase.cs, scripts/Models/CoreIds.cs - MVC/会话/系统/i18n/Mod 支撑:scripts/Core/GameSession.cs, scripts/Core/GameSystems.cs, scripts/Core/GameController.cs, scripts/Core/Mvc.cs, scripts/Core/LocalizationService.cs, scripts/Core/ContentRegistry.cs, scripts/Core/ModManifest.cs, scripts/Core/EventBus.cs - 主控流程衔接:scripts/GameManager.cs
80 lines
2.4 KiB
C#
80 lines
2.4 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
|
||
namespace Models;
|
||
|
||
/// <summary>
|
||
/// 任务运行时模型 (TaskModel)
|
||
/// 设计说明:
|
||
/// 1) TaskDefinition 描述“配置”,TaskModel 描述“运行时进度”。二者分离利于 Mod 追加内容。
|
||
/// 2) 任务状态只保存必要字段,展示文本统一由 Definition + i18n 输出。
|
||
/// 3) 任务参与单位只记录 Id,避免模型直接引用 Node。
|
||
/// 注意事项:
|
||
/// - 如果没有 DefinitionId,可使用 Name 作为临时演示数据。
|
||
/// - Deadline 语义是“剩余回合数”,由 TurnSystem 递减。
|
||
/// 未来扩展:
|
||
/// - 可加入阶段状态(灵感/写作/实验/审核),与 UI 进度条分段对应。
|
||
/// - 可加入失败原因/完成评级,用于结算与肉鸽评分。
|
||
/// </summary>
|
||
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<Guid> 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;
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 任务运行参数(进度与截止)
|
||
/// </summary>
|
||
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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 运行时奖励快照(避免 Definition 被动态修改)
|
||
/// </summary>
|
||
public sealed class TaskRewardSnapshot
|
||
{
|
||
public int Money { get; set; }
|
||
public int Reputation { get; set; }
|
||
public List<string> PaperIds { get; } = new();
|
||
}
|