Allow setting attack mode wave unit spawn position
This commit is contained in:
@@ -15,6 +15,7 @@ import mindustry.game.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.blocks.storage.CoreBlock.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
@@ -125,39 +126,46 @@ public class WaveSpawner{
|
||||
}
|
||||
}
|
||||
|
||||
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){
|
||||
if(state.rules.wavesSpawnAtCores && state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){
|
||||
Building firstCore = state.teams.playerCores().first();
|
||||
for(Building core : state.rules.waveTeam.cores()){
|
||||
for(CoreBuild core : state.rules.waveTeam.cores()){
|
||||
if(filterPos != -1 && filterPos != core.pos()) continue;
|
||||
|
||||
Tmp.v1.set(firstCore).sub(core).limit(coreMargin + core.block.size * tilesize /2f * Mathf.sqrt2);
|
||||
if(core.commandPos != null){
|
||||
cons.accept(core.commandPos.x, core.commandPos.y, false);
|
||||
}else{
|
||||
boolean valid = false;
|
||||
|
||||
boolean valid = false;
|
||||
int steps = 0;
|
||||
Tmp.v1.set(firstCore).sub(core).limit(coreMargin + core.block.size * tilesize /2f * Mathf.sqrt2);
|
||||
|
||||
//keep moving forward until the max step amount is reached
|
||||
while(steps++ < maxSteps){
|
||||
int tx = World.toTile(core.x + Tmp.v1.x), ty = World.toTile(core.y + Tmp.v1.y);
|
||||
any = false;
|
||||
Geometry.circle(tx, ty, world.width(), world.height(), 3, (x, y) -> {
|
||||
if(world.solid(x, y)){
|
||||
any = true;
|
||||
int steps = 0;
|
||||
|
||||
//keep moving forward until the max step amount is reached
|
||||
while(steps++ < maxSteps){
|
||||
int tx = World.toTile(core.x + Tmp.v1.x), ty = World.toTile(core.y + Tmp.v1.y);
|
||||
any = false;
|
||||
Geometry.circle(tx, ty, world.width(), world.height(), 3, (x, y) -> {
|
||||
if(world.solid(x, y)){
|
||||
any = true;
|
||||
}
|
||||
});
|
||||
|
||||
//nothing is in the way, spawn it
|
||||
if(!any){
|
||||
valid = true;
|
||||
break;
|
||||
}else{
|
||||
//make the vector longer
|
||||
Tmp.v1.setLength(Tmp.v1.len() + tilesize*1.1f);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//nothing is in the way, spawn it
|
||||
if(!any){
|
||||
valid = true;
|
||||
break;
|
||||
}else{
|
||||
//make the vector longer
|
||||
Tmp.v1.setLength(Tmp.v1.len() + tilesize*1.1f);
|
||||
if(valid){
|
||||
cons.accept(core.x + Tmp.v1.x, core.y + Tmp.v1.y, false);
|
||||
}
|
||||
}
|
||||
|
||||
if(valid){
|
||||
cons.accept(core.x + Tmp.v1.x, core.y + Tmp.v1.y, false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user