aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-08-06 09:33:50 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2025-08-20 15:57:33 +0200
commitdeee4b76b6ab1a94e5578818aba4b94e22e6ac89 (patch)
tree084ecc66dc9284e8bd7db4663525470eec244fce
parentc696829f9e37e9f3752fdb89ebaadd4b3b237bea (diff)
downloadmuhqs-game-deee4b76b6ab1a94e5578818aba4b94e22e6ac89.tar.gz
muhqs-game-deee4b76b6ab1a94e5578818aba4b94e22e6ac89.zip
fix parsing of solid artifacts
-rw-r--r--go/game/artifact.go17
-rw-r--r--go/game/artifact_test.go21
-rw-r--r--go/game/card_test.go13
3 files changed, 34 insertions, 17 deletions
diff --git a/go/game/artifact.go b/go/game/artifact.go
index 8c9b74e0..35c05893 100644
--- a/go/game/artifact.go
+++ b/go/game/artifact.go
@@ -1,10 +1,5 @@
package game
-import (
- "log"
- "strconv"
- "strings"
-)
type Artifact struct {
permanentBase
@@ -27,16 +22,8 @@ func NewArtifact(card *Card, tile *Tile, owner *Player) *Artifact {
},
}
- effects := card.getEffects()
- for _, e := range effects {
- if strings.HasPrefix(e, "Solid") {
- tokens := strings.Split(e, " ")
- var err error
- a.Solid, err = strconv.Atoi(tokens[1])
- if err != nil {
- log.Panicf("Invalid Solid definition %s\n", e)
- }
- }
+ if s, err := card.getXEffect("solid"); err == nil {
+ a.Solid = s.x
}
return a
diff --git a/go/game/artifact_test.go b/go/game/artifact_test.go
new file mode 100644
index 00000000..84c15652
--- /dev/null
+++ b/go/game/artifact_test.go
@@ -0,0 +1,21 @@
+package game
+
+import (
+ "testing"
+)
+
+func TestSolid(t *testing.T) {
+ p := NewArtifactFromPath("base/palisade", NewMockTile(), NewMockPlayer())
+ if !p.Attackable() {
+ t.Fatal("palisade not attackable")
+ }
+
+ if p.IsDestroyed() {
+ t.Fatal("palisade already destroyed")
+ }
+
+ p.adjustDamage(6)
+ if !p.IsDestroyed() {
+ t.Fatal("palisade not destroyed")
+ }
+}
diff --git a/go/game/card_test.go b/go/game/card_test.go
index 3e9c8f6f..7e2fefa9 100644
--- a/go/game/card_test.go
+++ b/go/game/card_test.go
@@ -26,12 +26,13 @@ func TestCardReporters(t *testing.T) {
recruit := NewCard("base/recruit")
ritual := NewCard("magic/ritual!")
sword := NewCard("base/sword")
+ palisade := NewCard("base/palisade")
- if !archer.IsBuyable() || !ritual.IsBuyable() || recruit.IsBuyable() || !sword.IsBuyable() {
+ if !archer.IsBuyable() || !ritual.IsBuyable() || !recruit.IsBuyable() || !sword.IsBuyable() || !palisade.IsBuyable() {
t.Fatal("unexpected buyability result")
}
- if !archer.IsPermanent() || ritual.IsPermanent() || !recruit.IsPermanent() || !sword.IsPermanent() {
+ if !archer.IsPermanent() || ritual.IsPermanent() || !recruit.IsPermanent() || !sword.IsPermanent() || !palisade.IsPermanent() {
t.Fatal("unexpected permanent result")
}
@@ -50,4 +51,12 @@ func TestCardReporters(t *testing.T) {
if archer.hasPlacementConstrain("swimmming") {
t.Fatal("archer is not swimming")
}
+
+ x, err := palisade.getXEffect("solid")
+ if err != nil {
+ t.Fatal("xEffect error returned")
+ }
+ if x.x != 6 || !x.set {
+ t.Fatal("invalid palisade solid effect")
+ }
}