Files
gd-playground/Docs/Architecture/RFC_Battle_Card_Architecture.md
54shitaimzf e465f1cbb0 feat: 基础卡牌场景与卡牌逻辑可扩展框架,以及todo文档
- Added BattleState class to manage battle flow, including turn management and event handling.
- Introduced BuffInstance class to represent buffs applied to combatants.
- Created CardInstance class to handle card definitions and cost calculations.
- Developed CombatantState class to manage combatant attributes and actions.
- Implemented EffectRegistry to apply effects based on event specifications.
- Added various handlers (BlockHandler, DamageHandler, DrawHandler, etc.) to process specific events.
- Created IntentPlanner and IntentState classes to manage enemy actions and intents.
- Established a queue system for handling battle events with BattleEventQueue and BattleEventTask.
- Introduced triggers for applying effects based on game events (e.g., OnCardDrawnGainBlockTrigger).
- Added necessary UID files for new scripts to ensure proper resource management.
2026-04-22 21:58:15 +08:00

112 lines
3.9 KiB
Markdown
Raw Permalink 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.
# RFC: 可扩展战斗卡牌架构Godot 4.6 + GDScript
## 1. 摘要
本 RFC 覆盖局内战斗重构,目标是把当前流程升级为统一事件内核。
核心方案:
1. 统一事件队列是唯一执行路径。
2. 卡牌效果和 Buff 效果统一为事件生产者。
3. 出牌器和抽牌器策略化,并通过单点入口切换。
## 2. 目标与非目标
### 2.1 目标
1. 新增普通卡尽量只新增一个 CardDef 资源文件。
2. 支持触发器机制:抽牌、伤害、出牌、弃牌、回合事件可连锁。
3. 战斗链路可追踪、可调试、可回归测试。
4. 保留未来由局外系统接管规则的单点入口。
### 2.2 非目标
1. 本阶段不实现局外系统逻辑。
2. 本阶段不实现复杂表达式引擎。
3. 本阶段不实现并发结算。
## 3. 架构原则
1. 命令层只发请求事件,不直改 hp/block/strength/weak。
2. 所有效果先入队,再由处理器执行。
3. 二次触发统一追加队尾,禁止插队。
4. 同帧顺序按速度/权重,实体内按 Buff 获得顺序。
5. 策略返回空动作时不自动结束回合。
## 4. 核心分层
### 4.1 ContentResource
1. CardDef卡牌静态定义卡面、描述、费用、目标、标签、效果
2. EffectSpec事件模板定义event_type、payload、conditions
3. ConditionSpec过滤条件定义。
### 4.2 RuntimeState + Queue + Handler
1. BattleState状态容器和原子操作不负责编排。
2. BattleEventQueue唯一执行队列。
3. EventHandler处理事件并更新状态必要时产出后续事件。
4. BuffInstance触发订阅实例包含 acquire_index、stack、duration
### 4.3 ApplicationCommand
1. PlayCardCommand发布 CARD_PLAY_REQUESTED。
2. EndTurnCommand发布 TURN_END_REQUESTED 与敌方行动请求。
### 4.4 Infrastructure
1. BattleEventBus事件广播和观测输出。
2. DebugLogger统一链路日志。
### 4.5 Presentation
1. BattleController读取规则提供器、驱动流程、订阅事件更新 UI。
2. BaseCardView纯展示和交互不写战斗规则。
## 5. 统一事件模型
### 5.1 EventType首批
1. CARD_PLAY_REQUESTED
2. CARD_PLAY_RESOLVED
3. CARD_DRAW_REQUESTED
4. CARD_DRAWN
5. CARD_DISCARDED
6. DAMAGE_REQUESTED
7. DAMAGE_APPLIED
8. BLOCK_REQUESTED
9. BLOCK_APPLIED
10. WEAK_APPLIED
11. TURN_START_REQUESTED
12. TURN_STARTED
13. TURN_END_REQUESTED
14. TURN_ENDED
### 5.2 EventPayload最小字段
1. source
2. owner
3. target
4. card_id
5. amount
6. tags
7. chain_id
8. queue_index
9. producer
## 6. 策略入口(可迁移)
1. BattleRuleProvider 是唯一规则入口。
2. active_auto_play_policy出牌器策略。
3. active_draw_policy抽牌器策略。
4. 当前为代码配置,未来可替换为局外系统数据源。
## 7. 实施顺序
1. 文档先行:先完成重构交接文档和现有文档修正。
2. 事件内核:落地 EventType/Payload/Task/Queue 和防循环。
3. 处理器:伤害/格挡/虚弱/抽牌/弃牌。
4. Buff触发器监听事件并队尾追加后续事件。
5. 命令事件化PlayCard/EndTurn 禁止直改状态。
6. 策略化:出牌器和抽牌器接入 BattleRuleProvider。
7. 内容模型CardDef 单文件生产EffectSpec 事件模板化。
8. 测试:顺序、防循环、触发器、策略切换、单卡新增。
## 8. 验收标准
1. 命令层无战斗属性直改。
2. 所有效果经 BattleEventQueue 执行。
3. 触发器顺序可复现:速度/权重 -> acquire_index -> 队尾追加。
4. 仅改 BattleRuleProvider 即可切换出牌器与抽牌器。
5. 新增普通卡仅需一个 CardDef 文件。
## 9. 风险与控制
1. 风险:激进重构期间不可玩时间过长。
控制:每个阶段必须可运行并有最小验收。
2. 风险:触发链死循环。
控制:深度阈值、步数阈值、去重键。
3. 风险:术语和流程理解不一致。
控制:文档先行并与代码同步更新。