summaryrefslogtreecommitdiff
path: root/engine/card
diff options
context:
space:
mode:
Diffstat (limited to 'engine/card')
-rw-r--r--engine/card/attack.go26
-rw-r--r--engine/card/card.go16
-rw-r--r--engine/card/damage.go4
-rw-r--r--engine/card/predicate/predicate.go18
-rw-r--r--engine/card/reaction.go7
5 files changed, 52 insertions, 19 deletions
diff --git a/engine/card/attack.go b/engine/card/attack.go
index 19ad196..d05d44a 100644
--- a/engine/card/attack.go
+++ b/engine/card/attack.go
@@ -1,11 +1,31 @@
package card
+import (
+ "sakura/engine"
+ "sakura/engine/pool"
+)
+
type Attack struct {
- *Card
+ *engine.Card
MinDistance RangeValue
MaxDistance RangeValue
- AuraDamage DamageValue
- HealthDamage DamageValue
+ AuraDamage DamageValue
+ LifeDamage DamageValue
+
+ Unreactable bool
+}
+
+func (a *Attack) Attack() *Attack {
+ return a
+}
+
+func (a *Attack) Do(g *engine.Game, to *pool.Pool) {
+}
+
+type IsAttack interface {
+ Attack() *Attack
+ Prepare(g *engine.Game)
+ Do(g *engine.Game, to *pool.Pool)
}
diff --git a/engine/card/card.go b/engine/card/card.go
deleted file mode 100644
index f2dce83..0000000
--- a/engine/card/card.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package card
-
-type Card struct {
- Name string
- AllOut bool
- Text string
- Flavor string
-}
-
-func (c *Card) Base() *Card {
- return c
-}
-
-type IsCard interface {
- Base() *Card
-}
diff --git a/engine/card/damage.go b/engine/card/damage.go
index fccb073..6d7dafd 100644
--- a/engine/card/damage.go
+++ b/engine/card/damage.go
@@ -3,3 +3,7 @@ package card
type DamageValue int
const Unselectable = DamageValue(-1)
+
+func (d DamageValue) Value() int {
+ return int(d)
+}
diff --git a/engine/card/predicate/predicate.go b/engine/card/predicate/predicate.go
new file mode 100644
index 0000000..5770c3d
--- /dev/null
+++ b/engine/card/predicate/predicate.go
@@ -0,0 +1,18 @@
+package predicate
+
+import (
+ "sakura/engine"
+ "sakura/engine/card"
+)
+
+func Reaction(c engine.IsCard) bool {
+ _, ok := c.(card.IsReaction)
+ return ok
+}
+
+func ReactionApplicable(c engine.IsCard) bool {
+ r, isReaction := c.(card.IsReaction)
+ if isReaction {
+ return r.Applicable(c)
+ }
+}
diff --git a/engine/card/reaction.go b/engine/card/reaction.go
new file mode 100644
index 0000000..3eed8c4
--- /dev/null
+++ b/engine/card/reaction.go
@@ -0,0 +1,7 @@
+package card
+
+import "sakura/engine"
+
+type IsReaction interface {
+ Applicable(c engine.IsCard) bool
+}