bugfixes
This commit is contained in:
@@ -407,72 +407,79 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
//if there is no base, simulate a new game and place the right loadout at the spawn position
|
//if there is no base, simulate a new game and place the right loadout at the spawn position
|
||||||
if(state.rules.defaultTeam.cores().isEmpty() || hadNoCore){
|
if(state.rules.defaultTeam.cores().isEmpty() || hadNoCore){
|
||||||
|
|
||||||
//no spawn set -> delete the sector save
|
if(sector.planet.clearSectorOnLose){
|
||||||
if(sector.info.spawnPosition == 0){
|
playNewSector(origin, sector, reloader);
|
||||||
//delete old save
|
}else{
|
||||||
sector.save = null;
|
//no spawn set -> delete the sector save
|
||||||
slot.delete();
|
if(sector.info.spawnPosition == 0){
|
||||||
//play again
|
//delete old save
|
||||||
playSector(origin, sector, reloader);
|
sector.save = null;
|
||||||
return;
|
slot.delete();
|
||||||
}
|
//play again
|
||||||
|
playSector(origin, sector, reloader);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//set spawn for sector damage to use
|
//set spawn for sector damage to use
|
||||||
Tile spawn = world.tile(sector.info.spawnPosition);
|
Tile spawn = world.tile(sector.info.spawnPosition);
|
||||||
spawn.setBlock(Blocks.coreShard, state.rules.defaultTeam);
|
spawn.setBlock(Blocks.coreShard, state.rules.defaultTeam);
|
||||||
|
|
||||||
//add extra damage.
|
//add extra damage.
|
||||||
SectorDamage.apply(1f);
|
SectorDamage.apply(1f);
|
||||||
|
|
||||||
//reset wave so things are more fair
|
//reset wave so things are more fair
|
||||||
state.wave = 1;
|
state.wave = 1;
|
||||||
//set up default wave time
|
//set up default wave time
|
||||||
state.wavetime = state.rules.initialWaveSpacing <= 0f ? (state.rules.waveSpacing * (sector.preset == null ? 2f : sector.preset.startWaveTimeMultiplier)) : state.rules.initialWaveSpacing;
|
state.wavetime = state.rules.initialWaveSpacing <= 0f ? (state.rules.waveSpacing * (sector.preset == null ? 2f : sector.preset.startWaveTimeMultiplier)) : state.rules.initialWaveSpacing;
|
||||||
//reset captured state
|
//reset captured state
|
||||||
sector.info.wasCaptured = false;
|
sector.info.wasCaptured = false;
|
||||||
|
|
||||||
if(state.rules.sector.planet.allowWaves){
|
if(state.rules.sector.planet.allowWaves){
|
||||||
//re-enable waves
|
//re-enable waves
|
||||||
state.rules.waves = true;
|
state.rules.waves = true;
|
||||||
//reset win wave??
|
//reset win wave??
|
||||||
state.rules.winWave = state.rules.attackMode ? -1 : sector.preset != null && sector.preset.captureWave > 0 ? sector.preset.captureWave : state.rules.winWave > state.wave ? state.rules.winWave : 30;
|
state.rules.winWave = state.rules.attackMode ? -1 : sector.preset != null && sector.preset.captureWave > 0 ? sector.preset.captureWave : state.rules.winWave > state.wave ? state.rules.winWave : 30;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if there's still an enemy base left, fix it
|
//if there's still an enemy base left, fix it
|
||||||
if(state.rules.attackMode){
|
if(state.rules.attackMode){
|
||||||
//replace all broken blocks
|
//replace all broken blocks
|
||||||
for(var plan : state.rules.waveTeam.data().plans){
|
for(var plan : state.rules.waveTeam.data().plans){
|
||||||
Tile tile = world.tile(plan.x, plan.y);
|
Tile tile = world.tile(plan.x, plan.y);
|
||||||
if(tile != null){
|
if(tile != null){
|
||||||
tile.setBlock(content.block(plan.block), state.rules.waveTeam, plan.rotation);
|
tile.setBlock(content.block(plan.block), state.rules.waveTeam, plan.rotation);
|
||||||
if(plan.config != null && tile.build != null){
|
if(plan.config != null && tile.build != null){
|
||||||
tile.build.configureAny(plan.config);
|
tile.build.configureAny(plan.config);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
state.rules.waveTeam.data().plans.clear();
|
||||||
}
|
}
|
||||||
state.rules.waveTeam.data().plans.clear();
|
|
||||||
|
//kill all units, since they should be dead anyway
|
||||||
|
Groups.unit.clear();
|
||||||
|
Groups.fire.clear();
|
||||||
|
Groups.puddle.clear();
|
||||||
|
|
||||||
|
//reset to 0, so replaced cores don't count
|
||||||
|
state.rules.defaultTeam.data().unitCap = 0;
|
||||||
|
Schematics.placeLaunchLoadout(spawn.x, spawn.y);
|
||||||
|
|
||||||
|
//set up camera/player locations
|
||||||
|
player.set(spawn.x * tilesize, spawn.y * tilesize);
|
||||||
|
camera.position.set(player);
|
||||||
|
|
||||||
|
Events.fire(new SectorLaunchEvent(sector));
|
||||||
|
Events.fire(Trigger.newGame);
|
||||||
|
|
||||||
|
state.set(State.playing);
|
||||||
|
reloader.end();
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
//kill all units, since they should be dead anyway
|
state.set(State.playing);
|
||||||
Groups.unit.clear();
|
reloader.end();
|
||||||
Groups.fire.clear();
|
|
||||||
Groups.puddle.clear();
|
|
||||||
|
|
||||||
//reset to 0, so replaced cores don't count
|
|
||||||
state.rules.defaultTeam.data().unitCap = 0;
|
|
||||||
Schematics.placeLaunchLoadout(spawn.x, spawn.y);
|
|
||||||
|
|
||||||
//set up camera/player locations
|
|
||||||
player.set(spawn.x * tilesize, spawn.y * tilesize);
|
|
||||||
camera.position.set(player);
|
|
||||||
|
|
||||||
Events.fire(new SectorLaunchEvent(sector));
|
|
||||||
Events.fire(Trigger.newGame);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
state.set(State.playing);
|
|
||||||
reloader.end();
|
|
||||||
|
|
||||||
}catch(SaveException e){
|
}catch(SaveException e){
|
||||||
Log.err(e);
|
Log.err(e);
|
||||||
sector.save = null;
|
sector.save = null;
|
||||||
@@ -482,21 +489,26 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
}
|
}
|
||||||
ui.planet.hide();
|
ui.planet.hide();
|
||||||
}else{
|
}else{
|
||||||
reloader.begin();
|
playNewSector(origin, sector, reloader);
|
||||||
world.loadSector(sector);
|
|
||||||
state.rules.sector = sector;
|
|
||||||
//assign origin when launching
|
|
||||||
sector.info.origin = origin;
|
|
||||||
sector.info.destination = origin;
|
|
||||||
logic.play();
|
|
||||||
control.saves.saveSector(sector);
|
|
||||||
Events.fire(new SectorLaunchEvent(sector));
|
|
||||||
Events.fire(Trigger.newGame);
|
|
||||||
reloader.end();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void playNewSector(@Nullable Sector origin, Sector sector, WorldReloader reloader){
|
||||||
|
reloader.begin();
|
||||||
|
world.loadSector(sector);
|
||||||
|
state.rules.sector = sector;
|
||||||
|
//assign origin when launching
|
||||||
|
sector.info.origin = origin;
|
||||||
|
sector.info.destination = origin;
|
||||||
|
logic.play();
|
||||||
|
control.saves.saveSector(sector);
|
||||||
|
Events.fire(new SectorLaunchEvent(sector));
|
||||||
|
Events.fire(Trigger.newGame);
|
||||||
|
reloader.end();
|
||||||
|
state.set(State.playing);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isHighScore(){
|
public boolean isHighScore(){
|
||||||
return hiscore;
|
return hiscore;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -323,7 +323,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean canSelect(Sector sector){
|
boolean canSelect(Sector sector){
|
||||||
if(mode == select) return sector.hasBase();
|
if(mode == select) return sector.hasBase() && launchSector != null && sector.planet == launchSector.planet;
|
||||||
//cannot launch to existing sector w/ accelerator TODO test
|
//cannot launch to existing sector w/ accelerator TODO test
|
||||||
if(mode == planetLaunch) return sector.id == sector.planet.startSector;
|
if(mode == planetLaunch) return sector.id == sector.planet.startSector;
|
||||||
if(sector.hasBase() || sector.id == sector.planet.startSector) return true;
|
if(sector.hasBase() || sector.id == sector.planet.startSector) return true;
|
||||||
@@ -489,6 +489,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
boolean selectable(Planet planet){
|
boolean selectable(Planet planet){
|
||||||
//TODO what if any sector is selectable?
|
//TODO what if any sector is selectable?
|
||||||
//TODO launch criteria - which planets can be launched to? Where should this be defined? Should planets even be selectable?
|
//TODO launch criteria - which planets can be launched to? Where should this be defined? Should planets even be selectable?
|
||||||
|
if(mode == select) return planet == state.planet;
|
||||||
if(mode == planetLaunch) return launchSector != null && planet != launchSector.planet && launchSector.planet.launchCandidates.contains(planet);
|
if(mode == planetLaunch) return launchSector != null && planet != launchSector.planet && launchSector.planet.launchCandidates.contains(planet);
|
||||||
return (planet.alwaysUnlocked && planet.isLandable()) || planet.sectors.contains(Sector::hasBase) || debugSelect;
|
return (planet.alwaysUnlocked && planet.isLandable()) || planet.sectors.contains(Sector::hasBase) || debugSelect;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user