aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2023-02-15 16:31:06 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2025-01-27 16:43:50 +0100
commit0edb119b497bf1283f976693b02e044033d4de08 (patch)
treee088ee82bd402d0b8f9b129a3eb5ea221c80514e
parent55e61b7e74a72178f8c124539318fec9773f0ff7 (diff)
downloadmuhqs-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.go2
-rw-r--r--go/game/cardImplementations.go3
-rw-r--r--go/game/permanent.go9
-rw-r--r--go/game/range.go2
-rw-r--r--go/game/unit.go15
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) {