diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-08-12 08:27:38 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-08-20 15:57:36 +0200 |
| commit | a3c22e018791efdfb8f08d148e6528de485be57c (patch) | |
| tree | f2e46a404f40c8445ed0867bb84095521ba8b242 | |
| parent | 8a00fc998d0e803e835c800b50d9c8e4cdb287a0 (diff) | |
| download | muhqs-game-a3c22e018791efdfb8f08d148e6528de485be57c.tar.gz muhqs-game-a3c22e018791efdfb8f08d148e6528de485be57c.zip | |
support shroud
| -rw-r--r-- | go/game/cardParsing_test.go | 31 | ||||
| -rw-r--r-- | go/game/targets.go | 14 |
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)) |
