supervisor-simulator/scripts/Models/Task.cs
wjsjwr b8fecd080f 已把模型层改成组合式结构并补齐 MVC/内容配置骨架:Unit/任务/运行时状态现在通过组件组合,GameManager 作为桥接层改为驱动 GameSession/Controller;同时新增学科/羁绊/装备/任务/肉鸽等定义结构,预留 i18n 与 Mod 内容加载接口。
- 组合式单位与数值基础重构: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
2025-12-31 23:54:31 +08:00

80 lines
2.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}