aboutsummaryrefslogtreecommitdiff
path: root/go/game/trigger.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/game/trigger.go')
-rw-r--r--go/game/trigger.go24
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) {