diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-09-03 12:37:04 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-09-03 12:39:42 +0200 |
| commit | 1f6b30ebec826fe886829c2618ed0b109009e3b8 (patch) | |
| tree | 56fb8874083f1168292d748e9b6b59e283720e5c | |
| parent | fb755f3d325720b1e42df5bea049781b538afa5c (diff) | |
| download | muhqs-game-1f6b30ebec826fe886829c2618ed0b109009e3b8.tar.gz muhqs-game-1f6b30ebec826fe886829c2618ed0b109009e3b8.zip | |
do not parse free actions granting x effects as x effects
| -rw-r--r-- | go/game/cardParsing.go | 12 | ||||
| -rw-r--r-- | go/game/effect.go | 4 | ||||
| -rw-r--r-- | go/game/effect_test.go | 5 |
3 files changed, 21 insertions, 0 deletions
diff --git a/go/game/cardParsing.go b/go/game/cardParsing.go index ee40406d..b214f7b7 100644 --- a/go/game/cardParsing.go +++ b/go/game/cardParsing.go @@ -135,9 +135,15 @@ func (impl *dynamicCardImplementation) parseEffect(effect string) { if strings.Contains(effect, "can be played") { impl.parsePlayModification(effect) } + if m := additionalActionRegex.FindStringSubmatch(effect); m != nil { impl.parseAdditionalAction(effect, m) } + + if m := freeActionRegex.FindStringSubmatch(effect); m != nil { + impl.parseFreeAction(m[1], m[2]) + } + // TODO: support gets and has effects if strings.Contains(effect, "equipped unit gets") { impl.parseEquipmentGetEffect(effect) @@ -180,6 +186,12 @@ func (impl *dynamicCardImplementation) parseFullAction(fullAction string) { } } +var freeActionRegex = regexp.MustCompile(`([^:]*):(.*)`) + +func (impl *dynamicCardImplementation) parseFreeAction(cost, action string) { + log.Error("Parsing free actions is not implemented yet") +} + func parseUnitConstrain(constrain string) func(ctx any, u *Unit) bool { enemy := strings.Contains(constrain, "enemy") if enemy { diff --git a/go/game/effect.go b/go/game/effect.go index 184f2013..3b96082e 100644 --- a/go/game/effect.go +++ b/go/game/effect.go @@ -92,6 +92,10 @@ var ( ) func parseXEffect(desc string) (e xEffect, err error) { + if freeActionRegex.FindString(desc) != "" { + return e, ErrXEffectFormat + } + e.raw = desc m := xEffectXSuffix.FindAllStringSubmatch(desc, -1) if len(m) == 0 { diff --git a/go/game/effect_test.go b/go/game/effect_test.go index 53058e72..2fe25d25 100644 --- a/go/game/effect_test.go +++ b/go/game/effect_test.go @@ -17,6 +17,11 @@ func TestParseXEffect(t *testing.T) { t.Fatal("expected x == 1") } + _, err = parseXEffect("1: +1 armor") + if err == nil { + t.Fatal("parsed free action as X effect") + } + e, err = parseXEffect("crew 3") if err != nil { t.Fatal("unexpected", err) |
