From 5caa446e8d95bb55c66cd79b5fb10e6f7cf61aec Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Thu, 3 Aug 2023 19:41:20 +0200 Subject: add skeleton for triggers and triggered actions --- go/game/trigger.go | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 go/game/trigger.go (limited to 'go/game/trigger.go') diff --git a/go/game/trigger.go b/go/game/trigger.go new file mode 100644 index 00000000..39901d71 --- /dev/null +++ b/go/game/trigger.go @@ -0,0 +1,90 @@ +package game + +import ( + "fmt" + "log" +) + +type eventType int + +const ( + destruction eventType = iota + eot + sacrifice + play +) + +var EventTypes = struct { + Destruction eventType + Eot eventType + Sacrifice eventType + Play eventType +}{ + Destruction: destruction, + Eot: eot, + Play: play, +} + +func (e eventType) String() string { + switch e { + case destruction: + return "destruction" + case eot: + return "eot" + case sacrifice: + return "sacrifice" + case play: + return "play" + } + + log.Panicf("Unknown evenType", e) + return "" +} + +type Event struct { + eventType eventType + sources []interface{} +} + +func (e Event) String() string { + if len(e.sources) == 0 { + return e.eventType.String() + } + + return fmt.Sprintf("%v:%v", e.sources, e.eventType) +} + +func newEotEvent() Event { + return Event{eventType: eot} +} + +type Trigger interface { + Card() *Card + String() string + trigger(*State, Event) ([]Action, bool) +} + +type triggerBase struct { + card *Card + condition func(*State, Event) (bool, bool) + resolveFunc ActionResolveFunc + costFunc ActionCostFunc + desc string +} + +func (t *triggerBase) Card() *Card { + return t.card +} + +func (t *triggerBase) String() string { + return t.desc +} + +func (t *triggerBase) trigger(s *State, e Event) ([]Action, bool) { + triggered, remove := t.condition(s, e) + if !triggered { + return nil, remove + } + + return []Action{newTriggeredAction(e, t, t.resolveFunc, t.costFunc)}, remove +} -- cgit v1.2.3