supervisor-simulator/scripts/Models/GameState.cs
2026-01-18 20:05:23 +08:00

207 lines
4.6 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.Collections.Generic;
namespace Models;
/// <summary>
/// 运行时全局状态GameState
/// 设计说明:
/// 1) 将“局内状态”集中在一个聚合对象中,便于存档与调试快照。
/// 2) 具体子状态按职责拆分:回合/经济/人员/任务/库存/羁绊。
/// 3) Controller/System 只依赖这份数据,不直接操作 View。
/// 注意事项:
/// - 这是运行时数据,不是配置数据;配置请看 *Definition 类。
/// - 禁止在这里引用 Godot Node保持纯数据。
/// 未来扩展:
/// - 可加入“存档版本号”和“迁移器”,支持版本升级。
/// - 可加入“局外 Roguelite 状态”,与局内共享接口。
/// </summary>
public sealed class GameState {
/// <summary>
/// 回合状态
/// </summary>
public TurnState Turn { get; } = new();
/// <summary>
/// 经济状态
/// </summary>
public EconomyState Economy { get; } = new();
/// <summary>
/// 人员状态
/// </summary>
public RosterState Roster { get; } = new();
/// <summary>
/// 任务状态
/// </summary>
public TaskState Tasks { get; } = new();
/// <summary>
/// 库存状态
/// </summary>
public InventoryState Inventory { get; } = new();
/// <summary>
/// 协同状态
/// </summary>
public SynergyState Synergy { get; } = new();
/// <summary>
/// 肉鸽状态
/// </summary>
public RogueliteState Roguelite { get; } = new();
}
/// <summary>
/// 游戏阶段
/// </summary>
public enum GamePhase {
Planning, // 筹备阶段
Execution, // 执行阶段
Review // 结算阶段
}
/// <summary>
/// 回合状态数据
/// </summary>
public sealed class TurnState {
/// <summary>
/// 当前回合
/// </summary>
public int CurrentTurn { get; set; } = 1;
/// <summary>
/// 最大回合
/// </summary>
public int MaxTurns { get; set; } = 30;
/// <summary>
/// 当前阶段
/// </summary>
public GamePhase Phase { get; set; } = GamePhase.Planning;
}
/// <summary>
/// 经济状态数据
/// </summary>
public sealed class EconomyState {
/// <summary>
/// 资金
/// </summary>
public int Money { get; set; } = 50000;
/// <summary>
/// 声望
/// </summary>
public int Reputation { get; set; }
/// <summary>
/// 科研点数
/// </summary>
public int ResearchPoints { get; set; }
/// <summary>
/// 利率
/// </summary>
public float InterestRate { get; set; } = 0.0f;
}
/// <summary>
/// 人员状态数据
/// </summary>
public sealed class RosterState {
/// <summary>
/// 导师模型
/// </summary>
public MentorModel Mentor { get; set; } = new("Player");
/// <summary>
/// 学生列表
/// </summary>
public List<StudentModel> Students { get; } = new();
/// <summary>
/// 职工列表
/// </summary>
public List<StaffModel> Staffs { get; } = new();
}
/// <summary>
/// 任务状态数据
/// </summary>
public sealed class TaskState {
/// <summary>
/// 活动任务列表
/// </summary>
public List<TaskModel> ActiveTasks { get; } = new();
/// <summary>
/// 已完成任务列表
/// </summary>
public List<TaskModel> CompletedTasks { get; } = new();
/// <summary>
/// 失败任务列表
/// </summary>
public List<TaskModel> FailedTasks { get; } = new();
}
/// <summary>
/// 库存状态数据
/// </summary>
public sealed class InventoryState {
/// <summary>
/// 物品计数
/// </summary>
public Dictionary<string, int> ItemCounts { get; } = new();
/// <summary>
/// 论文计数
/// </summary>
public Dictionary<PaperRank, int> PaperCounts { get; } = new();
}
/// <summary>
/// 协同状态数据
/// </summary>
public sealed class SynergyState {
/// <summary>
/// 原型堆叠数
/// </summary>
public Dictionary<string, int> ArchetypeStacks { get; } = new();
/// <summary>
/// 角色堆叠数
/// </summary>
public Dictionary<string, int> RoleStacks { get; } = new();
/// <summary>
/// 激活的协同ID列表
/// </summary>
public List<string> ActiveSynergyIds { get; } = new();
/// <summary>
/// 激活的修正包
/// </summary>
public ModifierBundle ActiveModifiers { get; } = new();
}
/// <summary>
/// 肉鸽状态数据
/// </summary>
public sealed class RogueliteState {
/// <summary>
/// 校友卡ID列表
/// </summary>
public List<string> AlumniCardIds { get; } = new();
/// <summary>
/// 遗产解锁ID列表
/// </summary>
public List<string> LegacyUnlockIds { get; } = new();
/// <summary>
/// 头衔保留等级
/// </summary>
public int TitleRetentionLevel { get; set; }
}