Skip to content

Instantly share code, notes, and snippets.

@webxoss
Last active May 29, 2017 15:45
Show Gist options
  • Save webxoss/4a83bed68b543af2bbe085d6bd8aff0f to your computer and use it in GitHub Desktop.
Save webxoss/4a83bed68b543af2bbe085d6bd8aff0f to your computer and use it in GitHub Desktop.
WEBXOSS 逻辑备忘录

触发效果

发现已经看不懂自己以前写的逻辑了。。。😂
仔细看了一遍,这里做一下备忘📝。

把触发延迟到帧结束

「效果原型」注册在 timing 上,
timing.trigger() 的时候,把「效果原型」和对应的事件添加到 game.triggeringEffectsgame.triggeringEvents
帧结束时,才触发这些「效果原型」(effect.trigger())。

为什么?
考虑 A, B, C 为三个只 SIGNI 的「这只 SIGNI 被驱逐时,你的场上没有 SIGNI 的场合,xxx」效果,三只同时被驱逐时:

  1. 帧开始
  2. A 被驱逐,触发时点
  3. B 被驱逐,触发时点
  4. C 被驱逐,触发时点
  5. 帧结束

将效果的触发延迟到帧结束,保证了「触发条件」(triggerCondition)调用时,参考的是同时处理结束后的状态。

把处理延迟到块结束

触发时(如果「效果原型」为一回合一次,且该「效果原型」存在于「已触发效果队列」,跳过触发),
以「效果原型」为原型,创建「效果」,在「效果」上增加 proto, event, triggerZone 属性。
将「效果」推入「待处理效果队列」(playerTriggeredEffects, opponentTriggeredEffects)。
块结束时,再处理这些「效果」。

为什么?

  • 块的处理中不能插入其他处理。
  • 区分「效果」和「效果原型」: 1个「效果原型」可以多次触发,生成的不同「效果」要绑定不同的事件。

效果处理

回合玩家优先,各玩家选择已触发的效果并处理。
处理前,判断处理条件(condition)和一回合一次限制(「效果原型」是否存在于「已触发效果队列」)。
处理时,如果「效果」的「效果原型」为一回合一次,把「效果原型」推入「已触发效果队列」。

注意:

  • 「一回合一次」记录的是「效果原型」;「待处理效果队列」记录的是「效果」。
  • 「一回合一次」是在处理时记录,而不是触发时。因为对于选发效果,选择发动才记为发动。(这点存疑,有待调研)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment