diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-01-24 00:27:50 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-01-27 16:43:44 +0100 |
| commit | 73d40903aecad3efcf7c6055c133f0db86558203 (patch) | |
| tree | e9c8f00fb186e270da92f273f570579f2d0b0d95 /go/game/unit.go | |
| parent | fbba48698d8f8b83dfd7d914b0e37338e0d4e2ef (diff) | |
| download | muhqs-game-73d40903aecad3efcf7c6055c133f0db86558203.tar.gz muhqs-game-73d40903aecad3efcf7c6055c133f0db86558203.zip | |
intermediate commit
Diffstat (limited to 'go/game/unit.go')
| -rw-r--r-- | go/game/unit.go | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/go/game/unit.go b/go/game/unit.go index 028ff274..02ba9830 100644 --- a/go/game/unit.go +++ b/go/game/unit.go @@ -31,18 +31,23 @@ func (a *Attack) String() string { return fmt.Sprintf("%d range %d", a.Damage, a.Range) } -func parseAttack(attack string) Attack { - tokens := strings.Split(attack, " ") +func parseAttack(attack interface{}) Attack { + if damage, ok := attack.(int); ok { + return Attack{damage, 1} + } + + attackStr := attack.(string) + tokens := strings.Split(attackStr, " ") a, err := strconv.Atoi(tokens[0]) if err != nil { - log.Fatalf("Attack %s has no valid Damage value\n", attack) + log.Fatalf("Attack %s has no valid Damage value\n", attackStr) } r := 1 if len(tokens) == 3 { r, err = strconv.Atoi(tokens[2]) if err != nil { - log.Fatalf("Attack %s has no valid Range value\n", attack) + log.Fatalf("Attack %s has no valid Range value\n", attackStr) } } return Attack{a, r} @@ -62,14 +67,12 @@ type Unit struct { AvailAttackActions int } -func NewUnit(cardPath string, tile *Tile, owner *Player) *Unit { - card := NewCard(cardPath) - +func NewUnit(card *Card, tile *Tile, owner *Player) *Unit { u := &Unit{ NewPermanentBase(card, tile, owner), card.Values["health"].(int), card.Values["movement"].(int), - parseAttack(card.Values["attack"].(string)), + parseAttack(card.Values["attack"]), card.Values["upkeep"].(int), []*FullActionPrototype{}, []*FreeActionPrototype{}, @@ -82,6 +85,10 @@ func NewUnit(cardPath string, tile *Tile, owner *Player) *Unit { return u } +func NewUnitFromPath(cardPath string, tile *Tile, owner *Player) *Unit { + return NewUnit(NewCard(cardPath), tile, owner) +} + func (u *Unit) move(s *State, tile *Tile) { if !slices.Contains(u.MoveRangeTiles(s.Map), tile) { log.Panicf("Unit %s at %v can not move to %v", u.Card.Name, u.Tile.Position, tile.Position) @@ -98,7 +105,7 @@ func (u *Unit) MoveRangeTiles(m *Map) []*Tile { tiles := []*Tile{} for _, pos := range PositionsInRange(u.Tile.Position, u.Movement, false) { tile := m.TileAt(pos) - if u.IsAvailableTile(tile) { + if tile != nil && u.IsAvailableTile(tile) { tiles = append(tiles, tile) } } |
