diff options
| -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) |
