跳到主要内容

运行时数据类型

Guide

创作资产描述什么可以存在,运行时类型保存某一场战斗此刻正在发生什么

战斗状态与 Controller

类型职责项目代码如何使用
IBattleState只读查看阶段、回合、单位、能量、牌堆、计数器、Encounter、等待状态与变量通过 GCSApi.Battle 或更高层 GCSApi Helper 读取
IBattleController修改 HP、护甲、能量、状态、卡牌、变量、延迟触发与单位的受支持入口自定义 FlowGraph 节点通过 ctx.Controller 使用,外部代码通常使用 GCSApi
BattleStateView同时实现 State 与 Controller Contract 的内部具体对象集成代码不要依赖它的私有实现表面

这种拆分是有意设计的:读取可以广泛,写入必须经过 Controller 路径,Hook、事件、阶段检查、Monitor 记录与表现同步才不会被绕过

单位状态

类型实时数据
UnitState定义引用、当前/最大 HP、护甲、队伍、存活状态、状态、跳过回合标记与活动 Hook
EnemyUnitStateUnitState 的全部内容,以及当前 Intent 与敌人 Pattern 执行状态

GamePlayerUnitGameEnemyUnit 是创作定义,运行时状态会为当前战斗创建一次;敌人的起始 HP 在战斗开始时从定义的闭区间范围中抽取,之后修改定义不会重写已经存在的单位

状态实例以层数形式保存在单位上,并由 GameStatus 作为 Key;GameStatus 继续定义叠层与衰减规则,UnitState 则回答这个单位此刻拥有多少层

卡牌定义与实例

概念运行时表示含义
卡牌定义GameCard创作的名称、文本、基础费用、分类、Target、美术与 Behavior
战斗副本CardInstance一张带实例 ID、升级状态与实例专属费用变化的副本
当前生效定义CardInstance.GetActiveCard()实例已升级时返回升级卡,否则返回基础卡

浏览数据库与构建卡组时使用定义,执行战斗操作时使用实例;两张 Strike 共享同一个 GameCard 定义,但在牌堆中是两个不同的 CardInstance

战斗牌堆与 Master Deck

类型或表面生命周期
手牌、抽牌、弃牌、消耗牌堆一场活动战斗
CardPile 内容有顺序的 CardInstance 列表
Run Master Deck在当前 Run 的多场战斗之间保留,并为后续战斗生成牌堆
CardCostRule作用于一个卡牌实例,按设置时长或战斗结束到期

卡牌区域与牌堆说明移动、洗牌、手牌上限、出牌、生成卡牌,以及 Run Deck 与战斗牌堆的区别

定义与实例如何选择

要修改的内容正确对象
以后所有 Strike 卡面的基础费用GameCard 定义
当前战斗中某一张 Strike 的费用通过受支持费用规则修改该 CardInstance
敌人创作时的 HP 范围GameEnemyUnit 定义
这一个敌人此刻的 HP通过 Controller 修改它的 EnemyUnitState
状态的叠层策略GameStatus 定义
一个单位此刻的 Poison通过 Controller 修改该单位的状态层数
起始卡组配方GameDeck 定义
当前战斗可用的卡牌实时牌堆

在 Play Mode 中修改定义,不会可靠迁移已经实例化的状态;实时数值应在 Game Card Monitor 中检查,不要假设 Inspector 仍然代表正在运行的战斗

安全修改路径

只使用以下三种受支持入口:

  1. 创作行为使用内置 FlowGraph Action 节点
  2. 自定义 FlowGraph 节点内部使用 ctx.Controller
  3. 外部项目代码使用 GCSApi

直接赋值 HP、修改牌堆列表或编辑状态字典,会绕过以下一个或多个行为:

  • Hook 解析
  • 阶段与目标检查
  • 内置事件派发
  • Monitor 证据
  • UI 与表现刷新
  • 战斗结果检查

项目需求没有对应的公开 GCSApi 修改方法时,应通过文档化的 Controller Contract 实现一个职责明确的自定义节点或集成,不要把可以访问的内部字段误当成受支持 API

公开边界

以下是受支持的集成表面:

  • GCSApi
  • IBattleState 与文档化只读模型
  • 通过文档化扩展上下文提供的 IBattleController
  • 公开 FlowGraph 节点基类、端口与执行上下文
  • GCSEventNames 与事件参数类型
  • 四个扩展注册表

没有通过这些表面公开的类型,即使 C# 可见性允许访问,也属于实现细节;运行时层级见运行时架构,项目代码工作流见 GCSApi 指南