diff --git a/core/src/io/anuke/mindustry/ai/BlockIndexer.java b/core/src/io/anuke/mindustry/ai/BlockIndexer.java index 761140642e..1da77c3db6 100644 --- a/core/src/io/anuke/mindustry/ai/BlockIndexer.java +++ b/core/src/io/anuke/mindustry/ai/BlockIndexer.java @@ -261,6 +261,8 @@ public class BlockIndexer{ } private void updateQuadrant(Tile tile){ + if(structQuadrants == null) return; + //this quadrant is now 'dirty', re-scan the whole thing int quadrantX = tile.x / structQuadrantSize; int quadrantY = tile.y / structQuadrantSize; diff --git a/core/src/io/anuke/mindustry/ai/Pathfinder.java b/core/src/io/anuke/mindustry/ai/Pathfinder.java index 9121162cfb..5fb4dbdf18 100644 --- a/core/src/io/anuke/mindustry/ai/Pathfinder.java +++ b/core/src/io/anuke/mindustry/ai/Pathfinder.java @@ -90,7 +90,7 @@ public class Pathfinder{ * This only occurs for active teams.*/ private void update(Tile tile, Team team){ //make sure team exists - if(paths[team.ordinal()] != null && paths[team.ordinal()].weights != null){ + if(paths != null && paths[team.ordinal()] != null && paths[team.ordinal()].weights != null){ PathData path = paths[team.ordinal()]; //impassable tiles have a weight of float.max diff --git a/core/src/io/anuke/mindustry/ai/WaveSpawner.java b/core/src/io/anuke/mindustry/ai/WaveSpawner.java index 6978140083..7d5a153f56 100644 --- a/core/src/io/anuke/mindustry/ai/WaveSpawner.java +++ b/core/src/io/anuke/mindustry/ai/WaveSpawner.java @@ -5,8 +5,7 @@ import io.anuke.arc.collection.Array; import io.anuke.arc.collection.IntArray; import io.anuke.arc.math.Angles; import io.anuke.arc.math.Mathf; -import io.anuke.arc.util.Time; -import io.anuke.arc.util.Tmp; +import io.anuke.arc.util.*; import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.entities.Damage; @@ -120,11 +119,13 @@ public class WaveSpawner{ for(int x = 0; x < world.width(); x++){ for(int y = 0; y < world.height(); y++){ + if(world.tile(x, y).block() == Blocks.spawn){ addSpawns(x, y); //hide spawnpoints, they have served their purpose world.tile(x, y).setBlock(Blocks.air); + Log.info("Add spawn "+ x + " " + y); } } } diff --git a/tests/src/test/java/ApplicationTests.java b/tests/src/test/java/ApplicationTests.java index 24167f3550..95484142d7 100644 --- a/tests/src/test/java/ApplicationTests.java +++ b/tests/src/test/java/ApplicationTests.java @@ -25,9 +25,14 @@ import static org.junit.jupiter.api.Assertions.*; public class ApplicationTests{ static Map testMap; + static boolean initialized; @BeforeAll static void launchApplication(){ + //only gets called once + if(initialized) return; + initialized = true; + try{ boolean[] begins = {false}; Throwable[] exceptionThrown = {null}; @@ -102,6 +107,7 @@ public class ApplicationTests{ @Test void spawnWaves(){ world.loadMap(testMap); + assertTrue(world.spawner.countSpawns() > 0, "No spawns present."); logic.runWave(); //force trigger delayed spawns Time.setDeltaProvider(() -> 1000f); @@ -109,7 +115,7 @@ public class ApplicationTests{ Time.update(); Time.setDeltaProvider(() -> 1f); unitGroups[waveTeam.ordinal()].updateEvents(); - assertFalse(unitGroups[waveTeam.ordinal()].isEmpty()); + assertFalse(unitGroups[waveTeam.ordinal()].isEmpty(), "No enemies spawned."); } @Test diff --git a/tests/src/test/java/ZoneTests.java b/tests/src/test/java/ZoneTests.java index 9061f29833..1807f1e453 100644 --- a/tests/src/test/java/ZoneTests.java +++ b/tests/src/test/java/ZoneTests.java @@ -1,7 +1,6 @@ import io.anuke.arc.collection.Array; import io.anuke.arc.collection.ObjectSet; -import io.anuke.arc.util.Structs; -import io.anuke.arc.util.Time; +import io.anuke.arc.util.*; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Zone; @@ -51,7 +50,7 @@ public class ZoneTests{ } assertTrue(hasSpawnPoint, "Zone \"" + zone.name + "\" has no spawn points."); - //assertTrue(world.spawner.countSpawns() > 0, "Zone \"" + zone.name + "\" has no enemy spawn points: " + world.spawner.countSpawns()); + assertTrue(world.spawner.countSpawns() > 0, "Zone \"" + zone.name + "\" has no enemy spawn points: " + world.spawner.countSpawns()); for(Item item : resources){ assertTrue(Structs.contains(zone.resources, item), "Zone \"" + zone.name + "\" is missing item in resource list: \"" + item.name + "\"");