- 任务推进与结算:执行阶段按任务类型用属性权重计算进度、考虑角色/学科匹配、状态衰减与难度缩放,回合结束统一扣 Deadline、判定完成/失败并派发事件,同时记录署名贡献度 scripts/Core/GameSystems.cs - 经济结算:接收任务事件发奖惩,学术探索根据难度生成论文卡;回合结束统一扣工资并结息(经济学学科触发基础利率)scripts/Core/GameSystems.cs - 羁绊层数与效果:统计人群画像/职能分工堆叠,激活层级并聚合为全局 ModifierBundle 给数值解析器使用 scripts/Core/GameSystems.cs, scripts/Models/GameState.cs - 事件与数值解析支撑:新增领域事件与统一属性合成器,兼容羁绊/学科/特质/装备的叠加 scripts/Core/DomainEvents.cs, scripts/Core/StatResolver.cs - 回合结算入口调整:Review 阶段改由系统处理并发布回合结束事件 scripts/GameManager.cs
81 lines
2.5 KiB
C#
81 lines
2.5 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();
|
||
public List<string> ItemIds { get; set; }
|
||
}
|