Wave versions

This commit is contained in:
Anuken
2020-10-28 18:51:42 -04:00
parent 68ab48a1d3
commit 44286cee59
12 changed files with 33 additions and 22 deletions

View File

@@ -33,6 +33,7 @@ import mindustry.world.blocks.power.*;
import mindustry.world.blocks.production.*;
import mindustry.world.blocks.sandbox.*;
import mindustry.world.blocks.storage.*;
import mindustry.world.meta.*;
import java.io.*;
import java.util.zip.*;
@@ -297,7 +298,8 @@ public class Schematics implements Loadable{
Stile core = s.tiles.find(t -> t.block instanceof CoreBlock);
//make sure a core exists, and that the schematic is small enough.
if(core == null || (validate && (s.width > core.block.size + maxLoadoutSchematicPad *2 || s.height > core.block.size + maxLoadoutSchematicPad *2))) return;
if(core == null || (validate && (s.width > core.block.size + maxLoadoutSchematicPad *2 || s.height > core.block.size + maxLoadoutSchematicPad *2
|| s.tiles.contains(t -> t.block.buildVisibility == BuildVisibility.sandboxOnly)))) return;
//place in the cache
loadouts.get((CoreBlock)core.block, Seq::new).add(s);

View File

@@ -57,6 +57,8 @@ public class SectorInfo{
public float secondsPassed;
/** Display name. */
public @Nullable String name;
/** Version of generated waves. When it doesn't match, new waves are generated. */
public int waveVersion = -1;
/** Special variables for simulation. */
public float sumHealth, sumRps, sumDps, waveHealthBase, waveHealthSlope, waveDpsBase, waveDpsSlope;
@@ -118,6 +120,11 @@ public class SectorInfo{
state.rules.winWave = winWave;
state.rules.attackMode = attack;
//assign new wave patterns when the version changes
if(waveVersion != Waves.waveVersion && state.rules.sector.preset == null){
state.rules.spawns = Waves.generate(state.rules.sector.baseCoverage);
}
CoreBuild entity = state.rules.defaultTeam.core();
if(entity != null){
entity.items.clear();
@@ -143,6 +150,7 @@ public class SectorInfo{
spawnPosition = entity.pos();
}
waveVersion = Waves.waveVersion;
waveSpacing = state.rules.waveSpacing;
wave = state.wave;
winWave = state.rules.winWave;

View File

@@ -9,7 +9,9 @@ import mindustry.type.*;
import static mindustry.content.UnitTypes.*;
public class DefaultWaves{
public class Waves{
public static final int waveVersion = 1;
private Seq<SpawnGroup> spawns;
public Seq<SpawnGroup> get(){
@@ -337,7 +339,7 @@ public class DefaultWaves{
step += (int)(rand.random(15, 30) * Mathf.lerp(1f, 0.5f, difficulty));
}
int bossWave = (int)(rand.random(30, 60) * Mathf.lerp(1f, 0.7f, difficulty));
int bossWave = (int)(rand.random(50, 70) * Mathf.lerp(1f, 0.6f, difficulty));
int bossSpacing = (int)(rand.random(25, 40) * Mathf.lerp(1f, 0.6f, difficulty));
//main boss progression