diff options
Diffstat (limited to 'go/game/trigger.go')
| -rw-r--r-- | go/game/trigger.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/go/game/trigger.go b/go/game/trigger.go index e5b00a9c..6ab42856 100644 --- a/go/game/trigger.go +++ b/go/game/trigger.go @@ -56,6 +56,30 @@ func newTargetedTrigger(p Permanent, singleshot bool, resolveFunc func(*LocalSta return &t } +func newDiscardTrigger(p Permanent, singleshot, singleturn bool, resolveFunc func(*LocalState, Event) ActionResolveFunc, cond func(Event) bool, desc string) Trigger { + t := triggerBase{source: p, resolveFunc: resolveFunc, desc: desc} + t.condition = func(_ *LocalState, event Event) (bool, bool) { + if event.eventType == EventTypes.Eot && singleturn { + return false, true + } + + if event.eventType != EventTypes.Discard { + return false, false + } + + c := cond(event) + remove := singleshot && c + return c, remove + } + return &t +} + +func newOwnDiscardTrigger(p Permanent, singleshot, singleturn bool, resolveFunc func(*LocalState, Event) ActionResolveFunc, desc string) Trigger { + return newDiscardTrigger(p, singleshot, singleturn, resolveFunc, func(e Event) bool { + return e.sources[0] == p.Controller() + }, desc) +} + func newDeathTrigger(p Permanent, singleshot bool, resolveFunc func(*LocalState, Event) ActionResolveFunc, permCond func(Permanent) bool, desc string) Trigger { t := triggerBase{source: p, resolveFunc: resolveFunc, desc: desc} t.condition = func(_ *LocalState, event Event) (bool, bool) { |
