summaryrefslogtreecommitdiff
path: root/engine/action.go
diff options
context:
space:
mode:
authorewy <ewy0@protonmail.com>2026-09-14 19:48:36 +0200
committerewy <ewy0@protonmail.com>2026-09-14 19:48:36 +0200
commit899ef7448222f0d087c194b3379b702f8dd2ff8c (patch)
tree8c2b508bb4d01236c7f582e4eee91fd178d09670 /engine/action.go
parentc69e6c0770359e2febafcf487eb21c4aa608c3e9 (diff)
add server and websocket comms
Diffstat (limited to 'engine/action.go')
-rw-r--r--engine/action.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/engine/action.go b/engine/action.go
new file mode 100644
index 0000000..2a73982
--- /dev/null
+++ b/engine/action.go
@@ -0,0 +1,62 @@
+package engine
+
+type BaseAction struct {
+ User *Player
+ BaseSource IsCard
+}
+
+func (b *BaseAction) Actor() *Player {
+ return b.User
+}
+
+func (b *BaseAction) Source() IsCard {
+ return b.BaseSource
+}
+
+func (b *BaseAction) Then(g *Game) {
+}
+
+type Action interface {
+ Actor() *Player
+ Source() IsCard
+ Then(g *Game)
+}
+
+func Interactions(a ...Action) map[InteractionID]Action {
+ m := make(map[InteractionID]Action, len(a))
+ for i, ac := range a {
+ m[InteractionID(i)] = ac
+ }
+ return m
+}
+
+type DamageDecision bool
+
+var (
+ Aura DamageDecision = true
+ Life DamageDecision = false
+)
+
+type DesignateDamage struct {
+ Attacker *Player
+ Defender *Player
+ SourceCard *Card
+}
+
+func (d *DesignateDamage) Actor() *Player {
+ return d.Defender
+}
+func (d *DesignateDamage) Instigator() *Player {
+ return d.Attacker
+}
+
+func (d *DesignateDamage) Then(g *Game) {
+}
+
+func (d *DesignateDamage) Source() IsCard {
+ return d.SourceCard
+}
+
+type PlayCard struct {
+ *BaseAction
+}