New system for Serpulo sector loss (WIP)
This commit is contained in:
@@ -483,8 +483,8 @@ public class SectorDamage{
|
||||
Tile other = tiles.getn(cx, cy);
|
||||
float resultDamage = currDamage;
|
||||
|
||||
//damage the tile if it's not friendly
|
||||
if(other.build != null && other.team() != state.rules.waveTeam){
|
||||
//damage the tile if it's the player team (derelict blocks get ignored)
|
||||
if(other.build != null && other.team() == state.rules.defaultTeam){
|
||||
resultDamage -= other.build.health();
|
||||
|
||||
other.build.health -= currDamage;
|
||||
|
||||
@@ -29,7 +29,7 @@ public abstract class BasicGenerator implements WorldGenerator{
|
||||
public Schematic defaultLoadout = Loadouts.basicShard;
|
||||
|
||||
@Override
|
||||
public void generate(Tiles tiles){
|
||||
public void generate(Tiles tiles, WorldParams params){
|
||||
this.tiles = tiles;
|
||||
this.width = tiles.width;
|
||||
this.height = tiles.height;
|
||||
|
||||
@@ -13,14 +13,14 @@ public class BlankPlanetGenerator extends PlanetGenerator{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generate(Tiles tiles, Sector sec, int seed){
|
||||
public void generate(Tiles tiles, Sector sec, WorldParams params){
|
||||
this.tiles = tiles;
|
||||
this.sector = sec;
|
||||
this.rand.setSeed(sec.id + seed + baseSeed);
|
||||
this.rand.setSeed(sec.id + params.seedOffset + baseSeed);
|
||||
|
||||
tiles.fill();
|
||||
|
||||
generate(tiles);
|
||||
generate(tiles, params);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import mindustry.maps.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.blocks.storage.*;
|
||||
import mindustry.world.blocks.storage.CoreBlock.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
@@ -38,7 +39,7 @@ public class FileMapGenerator implements WorldGenerator{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generate(Tiles tiles){
|
||||
public void generate(Tiles tiles, WorldParams params){
|
||||
if(map == null) throw new RuntimeException("Generator has null map, cannot be used.");
|
||||
|
||||
Sector sector = state.rules.sector;
|
||||
@@ -72,6 +73,9 @@ public class FileMapGenerator implements WorldGenerator{
|
||||
|
||||
boolean anyCores = false;
|
||||
|
||||
//TODO: unsure if indexer even works at this stage
|
||||
Block coreTypeToUse = state.rules.defaultTeam.cores().isEmpty() ? sector.planet.defaultCore : state.rules.defaultTeam.core().block;
|
||||
|
||||
for(Tile tile : tiles){
|
||||
|
||||
if(tile.overlay() == Blocks.spawn){
|
||||
@@ -83,8 +87,26 @@ public class FileMapGenerator implements WorldGenerator{
|
||||
});
|
||||
}
|
||||
|
||||
if(tile.isCenter() && tile.block() instanceof CoreBlock && tile.team() == state.rules.defaultTeam && !anyCores){
|
||||
if(state.rules.sector != null && state.rules.sector.allowLaunchLoadout()){
|
||||
if(params.corePositionOverride != 0 && sector != null){
|
||||
if(tile.pos() == params.corePositionOverride){
|
||||
if(sector.allowLaunchLoadout()){
|
||||
Schematics.placeLaunchLoadout(tile.x, tile.y);
|
||||
}else{
|
||||
//if there's an override and no loadout schematic is allowed, try to place a fitting core instead.
|
||||
tile.setBlock(coreTypeToUse, state.rules.defaultTeam, 0);
|
||||
}
|
||||
anyCores = true;
|
||||
|
||||
if(preset.addStartingItems || !preset.planet.allowLaunchLoadout){
|
||||
tile.build.items.clear();
|
||||
tile.build.items.add(state.rules.loadout);
|
||||
}
|
||||
}else if(tile.build instanceof CoreBuild && tile.build.pos() != params.corePositionOverride){
|
||||
//other cores placed must be cleared; they have been overridden
|
||||
tile.remove();
|
||||
}
|
||||
}else if(tile.isCenter() && tile.block() instanceof CoreBlock && tile.team() == state.rules.defaultTeam && !anyCores){
|
||||
if(sector != null && sector.allowLaunchLoadout()){
|
||||
Schematics.placeLaunchLoadout(tile.x, tile.y);
|
||||
}
|
||||
anyCores = true;
|
||||
|
||||
@@ -178,13 +178,13 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe
|
||||
return res % 2 == 0 ? res : res + 1;
|
||||
}
|
||||
|
||||
public void generate(Tiles tiles, Sector sec, int seed){
|
||||
public void generate(Tiles tiles, Sector sec, WorldParams params){
|
||||
this.tiles = tiles;
|
||||
this.seed = seed + baseSeed;
|
||||
this.seed = params.seedOffset + baseSeed;
|
||||
this.sector = sec;
|
||||
this.width = tiles.width;
|
||||
this.height = tiles.height;
|
||||
this.rand.setSeed(sec.id + seed + baseSeed);
|
||||
this.rand.setSeed(sec.id + params.seedOffset + baseSeed);
|
||||
|
||||
TileGen gen = new TileGen();
|
||||
for(int y = 0; y < height; y++){
|
||||
@@ -197,6 +197,6 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe
|
||||
}
|
||||
}
|
||||
|
||||
generate(tiles);
|
||||
generate(tiles, params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package mindustry.maps.generators;
|
||||
import mindustry.world.*;
|
||||
|
||||
public interface WorldGenerator{
|
||||
void generate(Tiles tiles);
|
||||
void generate(Tiles tiles, WorldParams params);
|
||||
|
||||
/** Do not modify tiles here. This is only for specialized configuration. */
|
||||
default void postGenerate(Tiles tiles){}
|
||||
|
||||
Reference in New Issue
Block a user