diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-02-15 16:31:06 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-01-27 16:43:50 +0100 |
| commit | 0edb119b497bf1283f976693b02e044033d4de08 (patch) | |
| tree | e088ee82bd402d0b8f9b129a3eb5ea221c80514e | |
| parent | 55e61b7e74a72178f8c124539318fec9773f0ff7 (diff) | |
| download | muhqs-game-0edb119b497bf1283f976693b02e044033d4de08.tar.gz muhqs-game-0edb119b497bf1283f976693b02e044033d4de08.zip | |
fix ai NPE when selecting a unit where to spawn frost pylon
The NPE is caused by any piled permanent with which TilesInRange is
called.
| -rw-r--r-- | go/game/ai.go | 2 | ||||
| -rw-r--r-- | go/game/cardImplementations.go | 3 | ||||
| -rw-r--r-- | go/game/permanent.go | 9 | ||||
| -rw-r--r-- | go/game/range.go | 2 | ||||
| -rw-r--r-- | go/game/unit.go | 15 |
5 files changed, 16 insertions, 15 deletions
diff --git a/go/game/ai.go b/go/game/ai.go index 9b48c2f5..9f1ef488 100644 --- a/go/game/ai.go +++ b/go/game/ai.go @@ -121,7 +121,7 @@ func (m *Map) generateMapGraphFor(u *Unit) *dijkstra.Graph { } func findPathTo(graph *dijkstra.Graph, u *Unit, pos Position) (dijkstra.BestPath, error) { - srcId, err := graph.GetMapping(u.TileOrContainingPermTile().Position.String()) + srcId, err := graph.GetMapping(TileOrContainingPermTile(u).Position.String()) if err != nil { log.Fatalf("No mapping %s in Graph: %s", u.Tile().Position.String(), err) } diff --git a/go/game/cardImplementations.go b/go/game/cardImplementations.go index 32208f09..da348fe1 100644 --- a/go/game/cardImplementations.go +++ b/go/game/cardImplementations.go @@ -176,7 +176,8 @@ type fishTrapImpl struct { aoe areaEffect } -func (*fishTrapImpl) stateBasedActions(s *State, p Permanent) {} +func (*fishTrapImpl) additionalSpawnsFor(Permanent, CardType) []*Tile { return nil } +func (*fishTrapImpl) stateBasedActions(*State, Permanent) {} func (i *fishTrapImpl) onEntering(t *Tile) { s := t.Permanent.Controller().gameState diff --git a/go/game/permanent.go b/go/game/permanent.go index ecc4459a..f211179b 100644 --- a/go/game/permanent.go +++ b/go/game/permanent.go @@ -206,3 +206,12 @@ func leaveTile(p Permanent) { p.SetTile(nil) } } + +func TileOrContainingPermTile(p Permanent) *Tile { + tile := p.Tile() + if tile == nil { + tile = p.ContainingPerm().Tile() + } + + return tile +} diff --git a/go/game/range.go b/go/game/range.go index bb60b54c..5f9d8e80 100644 --- a/go/game/range.go +++ b/go/game/range.go @@ -76,5 +76,5 @@ func TilesInRangeFromOrigin(m *Map, origin Position, r int) []*Tile { } func TilesInRange(m *Map, p Permanent, r int) []*Tile { - return TilesInRangeFromOrigin(m, p.Tile().Position, r) + return TilesInRangeFromOrigin(m, TileOrContainingPermTile(p).Position, r) } diff --git a/go/game/unit.go b/go/game/unit.go index adb608ab..c6c1839a 100644 --- a/go/game/unit.go +++ b/go/game/unit.go @@ -63,11 +63,11 @@ func NewUnit(card *Card, tile *Tile, owner *Player) *Unit { } func (u *Unit) Fmt() string { - return fmt.Sprintf("%s@%v", u.Card().Name, u.TileOrContainingPermTile()) + return fmt.Sprintf("%s@%v", u.Card().Name, TileOrContainingPermTile(u)) } func (u *Unit) FmtWController() string { - return fmt.Sprintf("%s's %s@%v", u.Controller().Name, u.Card().Name, u.TileOrContainingPermTile()) + return fmt.Sprintf("%s's %s@%v", u.Controller().Name, u.Card().Name, TileOrContainingPermTile(u)) } func NewUnitFromPath(cardPath string, tile *Tile, owner *Player) *Unit { @@ -107,20 +107,11 @@ func (u *Unit) move(s *State, tile *Tile) { } } -func (u *Unit) TileOrContainingPermTile() *Tile { - tile := u.tile - if tile == nil { - tile = u.containingPerm.Tile() - } - - return tile -} - func (u *Unit) MoveRangeTiles(m *Map) []*Tile { tiles := []*Tile{} // TODO: build graph only containing possible tile in movement range graph := m.generateMapGraphFor(u) - origin := u.TileOrContainingPermTile().Position + origin := TileOrContainingPermTile(u).Position for _, pos := range PositionsInRange(origin, u.Movement.Range, false) { tile := m.TileAt(pos) if tile == nil || !u.IsAvailableTile(tile) { |
