aboutsummaryrefslogtreecommitdiff
path: root/go/game/unit.go
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2023-01-24 00:27:50 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2025-01-27 16:43:44 +0100
commit73d40903aecad3efcf7c6055c133f0db86558203 (patch)
treee9c8f00fb186e270da92f273f570579f2d0b0d95 /go/game/unit.go
parentfbba48698d8f8b83dfd7d914b0e37338e0d4e2ef (diff)
downloadmuhqs-game-73d40903aecad3efcf7c6055c133f0db86558203.tar.gz
muhqs-game-73d40903aecad3efcf7c6055c133f0db86558203.zip
intermediate commit
Diffstat (limited to 'go/game/unit.go')
-rw-r--r--go/game/unit.go25
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)
}
}