aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-08-12 08:27:38 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2025-08-20 15:57:36 +0200
commita3c22e018791efdfb8f08d148e6528de485be57c (patch)
treef2e46a404f40c8445ed0867bb84095521ba8b242
parent8a00fc998d0e803e835c800b50d9c8e4cdb287a0 (diff)
downloadmuhqs-game-a3c22e018791efdfb8f08d148e6528de485be57c.tar.gz
muhqs-game-a3c22e018791efdfb8f08d148e6528de485be57c.zip
support shroud
-rw-r--r--go/game/cardParsing_test.go31
-rw-r--r--go/game/targets.go14
2 files changed, 43 insertions, 2 deletions
diff --git a/go/game/cardParsing_test.go b/go/game/cardParsing_test.go
new file mode 100644
index 00000000..2ef7429e
--- /dev/null
+++ b/go/game/cardParsing_test.go
@@ -0,0 +1,31 @@
+package game
+
+import (
+ "errors"
+ "log"
+ "testing"
+)
+
+func TestCloak(t *testing.T) {
+ s := NewLocalState()
+ p := NewMockPlayer()
+ s.SetMap(newEmpty2x2Map())
+ a := s.addNewUnit(NewCard("base/archer"), Position{0, 0}, p)
+ c := s.addNewEquipment(NewCard("equipments/cloak"), Position{1, 0}, p)
+ die := NewCard("magic/die!")
+
+ ea := NewEquipAction(a, c)
+ ea.costFunc = genBaseActionCost(a, 1, 0)
+ s.ResolveAction(ea)
+
+ if !a.HasEffect("shroud") {
+ t.Fatal("archer not shrouded")
+ }
+
+ pa := NewPlayAction(p, die)
+ err := pa.Target().AddSelection(a)
+ log.Println(pa.Target().desc, err)
+ if !errors.Is(err, ErrTargetHasShroud) {
+ t.Fatal("shrouded archer targeted")
+ }
+}
diff --git a/go/game/targets.go b/go/game/targets.go
index 61cf3436..53b8bdcd 100644
--- a/go/game/targets.go
+++ b/go/game/targets.go
@@ -527,8 +527,18 @@ var (
cardTargetConstraint TargetConstraintFunc = typeTargetConstraint[*Card]("*Card")
)
+var ErrTargetHasShroud = errors.New("target has shroud")
+
+func shroudedTargetContraint(t any) (err error) {
+ p := t.(Permanent)
+ if p.HasEffect("shroud") {
+ err = ErrTargetHasShroud
+ }
+ return
+}
+
func parsePermanentTargetConstraint(desc string, s *LocalState, action Action) []TargetConstraintFunc {
- constraints := []TargetConstraintFunc{permanentTargetConstraint}
+ constraints := []TargetConstraintFunc{permanentTargetConstraint, shroudedTargetContraint}
if strings.Contains(desc, "enemy permanent") {
constraints = append(constraints, enemyPermanentTargetConstraint(action))
@@ -551,7 +561,7 @@ func parsePermanentTargetConstraint(desc string, s *LocalState, action Action) [
}
func parseUnitTargetConstraint(desc string, _ *LocalState, action Action) []TargetConstraintFunc {
- constraints := []TargetConstraintFunc{unitTargetConstraint}
+ constraints := []TargetConstraintFunc{unitTargetConstraint, shroudedTargetContraint}
if strings.Contains(desc, "enemy unit") {
constraints = append(constraints, enemyPermanentTargetConstraint(action))