using System.Collections.Generic;
namespace Models;
///
/// 任务定义与枚举(配置层)
/// 设计说明:
/// 1) Definition 描述“任务是什么”,TaskModel 描述“任务正在发生什么”。
/// 2) 任务类别与难度与设计文档一致,方便 UI/系统层做分流。
/// 3) Requirements/Rewards 以组合结构表示,便于 Mod 追加新条件。
/// 注意事项:
/// - 不在此处写具体数值表,仅提供结构骨架。
/// - 业务系统应优先读取 Definition,而不是硬编码逻辑。
/// 未来扩展:
/// - 可加入“阶段式任务”与“事件触发任务”字段。
/// - 可加入“动态难度曲线”,用于 Roguelite 调整强度。
///
public enum TaskTrack
{
Tenure, // 生涯考核
LabProject // 实验室项目
}
public enum TaskKind
{
AcademicExploration, // 学术探索:产出论文
GrantVertical, // 纵向基金:强制门票
GrantHorizontal, // 横向项目:搞钱
Administrative, // 行政事务:干扰项
Milestone, // 目标型考核
Conference // 会议大招
}
public enum TaskDifficulty
{
Water,
Standard,
Hardcore,
BlackBox
}
public enum PaperRank
{
C,
B,
A,
S,
SPlus
}
public sealed class TaskDefinition
{
public DefinitionHeader Header { get; set; } = new();
public TaskTrack Track { get; set; }
public TaskKind Kind { get; set; }
public TaskDifficulty Difficulty { get; set; }
public TaskRuntimeConfig Runtime { get; set; } = new();
public TaskRequirements Requirements { get; set; } = new();
public TaskRewards Rewards { get; set; } = new();
public List AllowedDisciplineIds { get; } = new();
public List RecommendedRoleIds { get; } = new();
public List RecommendedArchetypeIds { get; } = new();
}
public sealed class TaskRuntimeConfig
{
public float Workload { get; set; }
public int DeadlineTurns { get; set; }
public float DifficultyScale { get; set; } = 1.0f;
public int MaxAssignedSlots { get; set; } = 3;
}
public sealed class TaskRequirements
{
public List PaperTickets { get; } = new();
public List AttributeChecks { get; } = new();
public List RequiredRoleIds { get; } = new();
}
public sealed class PaperRequirement
{
public PaperRank Rank { get; set; }
public int Count { get; set; }
}
public sealed class AttributeRequirement
{
public AttributeType Type { get; set; }
public int MinValue { get; set; }
}
public sealed class TaskRewards
{
public int Money { get; set; }
public int Reputation { get; set; }
public List PaperIds { get; } = new();
public List ItemIds { get; } = new();
public List BuffIds { get; } = new();
}