Custom spawn locations

This commit is contained in:
Anuken
2018-10-10 13:02:00 -04:00
parent 05201d7012
commit 5f1bc6c6c2
10 changed files with 225 additions and 186 deletions
@@ -1,6 +1,7 @@
package io.anuke.mindustry.ai;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.content.blocks.Blocks;
import io.anuke.mindustry.entities.units.BaseUnit;
import io.anuke.mindustry.entities.units.Squad;
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
@@ -25,6 +26,7 @@ public class WaveSpawner{
private GridBits quadrants;
private Array<SpawnGroup> groups;
private boolean dynamicSpawn;
private Array<FlyerSpawn> flySpawns = new Array<>();
private Array<GroundSpawn> groundSpawns = new Array<>();
@@ -81,10 +83,12 @@ public class WaveSpawner{
int addGround = groundGroups - groundSpawns.size, addFly = flyGroups - flySpawns.size;
//add extra groups if the total exceeds it
for(int i = 0; i < addGround; i++){
GroundSpawn spawn = new GroundSpawn();
findLocation(spawn);
groundSpawns.add(spawn);
if(!dynamicSpawn){
for(int i = 0; i < addGround; i++){
GroundSpawn spawn = new GroundSpawn();
findLocation(spawn);
groundSpawns.add(spawn);
}
}
for(int i = 0; i < addFly; i++){
@@ -117,9 +121,12 @@ public class WaveSpawner{
flyCount++;
}else{
GroundSpawn spawn = groundSpawns.get(groundCount);
checkQuadrant(spawn.x, spawn.y);
if(!getQuad(spawn.x, spawn.y)){
findLocation(spawn);
if(dynamicSpawn){
checkQuadrant(spawn.x, spawn.y);
if(!getQuad(spawn.x, spawn.y)){
findLocation(spawn);
}
}
spawnX = spawn.x * quadsize * tilesize + quadsize * tilesize / 2f;
@@ -165,6 +172,7 @@ public class WaveSpawner{
}
private void reset(WorldLoadEvent event){
dynamicSpawn = false;
flySpawns.clear();
groundSpawns.clear();
quadrants = new GridBits(quadWidth(), quadHeight());
@@ -174,6 +182,20 @@ public class WaveSpawner{
}else{
groups = world.getSector().spawns;
}
dynamicSpawn = true;
for(int x = 0; x < world.width(); x++){
for(int y = 0; y < world.height(); y++){
if(world.tile(x, y).block() == Blocks.spawn){
dynamicSpawn = false;
GroundSpawn spawn = new GroundSpawn();
spawn.x = x/quadsize;
spawn.y = y/quadsize;
groundSpawns.add(spawn);
}
}
}
}
private boolean getQuad(int quadx, int quady){