mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-01-20 01:07:16 +07:00
Disabled Erekir invasions & planet simulation
This commit is contained in:
parent
1ad3f83e17
commit
3f8a7f591a
BIN
core/assets-raw/sprites/units/conquer.aseprite
Normal file
BIN
core/assets-raw/sprites/units/conquer.aseprite
Normal file
Binary file not shown.
BIN
core/assets-raw/sprites/units/conquer.png
Normal file
BIN
core/assets-raw/sprites/units/conquer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
@ -616,6 +616,7 @@ sectors.rename = Rename Sector
|
||||
sectors.enemybase = [scarlet]Enemy Base
|
||||
sectors.vulnerable = [scarlet]Vulnerable
|
||||
sectors.underattack = [scarlet]Under attack! [accent]{0}% damaged
|
||||
sectors.underattack.nodamage = [scarlet]Under attack!
|
||||
sectors.survives = [accent]Survives {0} waves
|
||||
sectors.go = Go
|
||||
sector.curcapture = Sector Captured
|
||||
@ -626,6 +627,9 @@ sector.lost = Sector [accent]{0}[white] lost!
|
||||
#note: the missing space in the line below is intentional
|
||||
sector.captured = Sector [accent]{0}[white]captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
sector.view = View Sector
|
||||
|
||||
threat.low = Low
|
||||
threat.medium = Medium
|
||||
@ -1590,8 +1594,8 @@ block.core-foundation.description = Core of the base. Well armored. Stores more
|
||||
block.core-foundation.details = The second iteration.
|
||||
block.core-nucleus.description = Core of the base. Extremely well armored. Stores massive amounts of resources.
|
||||
block.core-nucleus.details = The third and final iteration.
|
||||
block.vault.description = Stores a large amount of items of each type. Contents can be retrieved with an unloader.
|
||||
block.container.description = Stores a small amount of items of each type. Contents can be retrieved with an unloader.
|
||||
block.vault.description = Stores a large amount of items of each type. Expands storage when placed next to a core. Contents can be retrieved with an unloader.
|
||||
block.container.description = Stores a small amount of items of each type. Expands storage when placed next to a core. Contents can be retrieved with an unloader.
|
||||
block.unloader.description = Unloads the selected item from nearby blocks.
|
||||
block.launch-pad.description = Launches batches of items to selected sectors.
|
||||
block.launch-pad.details = Sub-orbital system for point-to-point transportation of resources. Payload pods are fragile and incapable of surviving re-entry.
|
||||
|
@ -100,6 +100,8 @@ public class Planets{
|
||||
new HexSkyMesh(this, 1, 0.6f, 0.16f, 5, Color.white.cpy().lerp(Pal.spore, 0.55f).a(0.75f), 2, 0.45f, 1f, 0.41f)
|
||||
);
|
||||
|
||||
allowWaveSimulation = true;
|
||||
allowSectorInvasion = true;
|
||||
allowLaunchSchematics = true;
|
||||
atmosphereColor = Color.valueOf("3c1b8f");
|
||||
atmosphereRadIn = 0.02f;
|
||||
|
@ -2435,7 +2435,7 @@ public class UnitTypes{
|
||||
speed = 0.6f;
|
||||
health = 9000;
|
||||
armor = 20f;
|
||||
areaDamage = 10f;
|
||||
areaDamage = 12f;
|
||||
treadRect = new Rect(22f, 16f, 28f, 130f);
|
||||
|
||||
weapons.add(new Weapon("vanquish-weapon"){{
|
||||
|
@ -64,25 +64,28 @@ public class Logic implements ApplicationListener{
|
||||
SectorInfo info = state.rules.sector.info;
|
||||
info.write();
|
||||
|
||||
//how much wave time has passed
|
||||
int wavesPassed = info.wavesPassed;
|
||||
//only simulate waves if the planet allows it
|
||||
if(state.rules.sector.planet.allowWaveSimulation){
|
||||
//how much wave time has passed
|
||||
int wavesPassed = info.wavesPassed;
|
||||
|
||||
//wave has passed, remove all enemies, they are assumed to be dead
|
||||
if(wavesPassed > 0){
|
||||
Groups.unit.each(u -> {
|
||||
if(u.team == state.rules.waveTeam){
|
||||
u.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
//wave has passed, remove all enemies, they are assumed to be dead
|
||||
if(wavesPassed > 0){
|
||||
Groups.unit.each(u -> {
|
||||
if(u.team == state.rules.waveTeam){
|
||||
u.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//simulate passing of waves
|
||||
if(wavesPassed > 0){
|
||||
//simulate wave counter moving forward
|
||||
state.wave += wavesPassed;
|
||||
state.wavetime = state.rules.waveSpacing;
|
||||
//simulate passing of waves
|
||||
if(wavesPassed > 0){
|
||||
//simulate wave counter moving forward
|
||||
state.wave += wavesPassed;
|
||||
state.wavetime = state.rules.waveSpacing;
|
||||
|
||||
SectorDamage.applyCalculatedDamage();
|
||||
SectorDamage.applyCalculatedDamage();
|
||||
}
|
||||
}
|
||||
|
||||
//reset values
|
||||
|
@ -204,7 +204,9 @@ public class SectorInfo{
|
||||
state.rules.sector.saveInfo();
|
||||
}
|
||||
|
||||
SectorDamage.writeParameters(this);
|
||||
if(state.rules.sector != null && state.rules.sector.planet.allowWaveSimulation){
|
||||
SectorDamage.writeParameters(this);
|
||||
}
|
||||
}
|
||||
|
||||
/** Update averages of various stats, updates some special sector logic.
|
||||
|
@ -194,7 +194,7 @@ public class Universe{
|
||||
}
|
||||
|
||||
int wavesPassed = (int)(sector.info.secondsPassed*60f / sector.info.waveSpacing);
|
||||
boolean attacked = sector.info.waves;
|
||||
boolean attacked = sector.info.waves && sector.planet.allowWaveSimulation;
|
||||
|
||||
if(attacked){
|
||||
sector.info.wavesPassed = wavesPassed;
|
||||
@ -243,7 +243,7 @@ public class Universe{
|
||||
}
|
||||
|
||||
//queue random invasions
|
||||
if(!sector.isAttacked() && sector.info.minutesCaptured > invasionGracePeriod && sector.info.hasSpawns){
|
||||
if(!sector.isAttacked() && sector.planet.allowSectorInvasion && sector.info.minutesCaptured > invasionGracePeriod && sector.info.hasSpawns){
|
||||
int count = sector.near().count(Sector::hasEnemyBase);
|
||||
|
||||
//invasion chance depends on # of nearby bases
|
||||
|
@ -90,6 +90,10 @@ public class Planet extends UnlockableContent{
|
||||
public boolean hasAtmosphere = true;
|
||||
/** Whether to allow users to specify a custom launch schematic for this map. */
|
||||
public boolean allowLaunchSchematics = false;
|
||||
/** Whether to allow sectors to simulate waves in the background. */
|
||||
public boolean allowWaveSimulation = false;
|
||||
/** Whether to simulate sector invasions from enemy bases. */
|
||||
public boolean allowSectorInvasion = false;
|
||||
/** Parent body that this planet orbits around. If null, this planet is considered to be in the middle of the solar system.*/
|
||||
public @Nullable Planet parent;
|
||||
/** The root parent of the whole solar system this planet is in. */
|
||||
|
@ -412,13 +412,14 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
if(state.uiAlpha > 0.001f){
|
||||
for(Sector sec : planet.sectors){
|
||||
if(sec.hasBase()){
|
||||
for(Sector enemy : sec.near()){
|
||||
if(enemy.hasEnemyBase()){
|
||||
planets.drawArc(planet, enemy.tile.v, sec.tile.v, Team.crux.color.write(Tmp.c2).a(state.uiAlpha), Color.clear, 0.24f, 110f, 25);
|
||||
if(planet.allowSectorInvasion){
|
||||
for(Sector enemy : sec.near()){
|
||||
if(enemy.hasEnemyBase()){
|
||||
planets.drawArc(planet, enemy.tile.v, sec.tile.v, Team.crux.color.write(Tmp.c2).a(state.uiAlpha), Color.clear, 0.24f, 110f, 25);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(selected != null && selected != sec && selected.hasBase()){
|
||||
//imports
|
||||
if(sec.info.getRealDestination() == selected && sec.info.anyExports()){
|
||||
@ -889,10 +890,10 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
|
||||
void addSurvivedInfo(Sector sector, Table table, boolean wrap){
|
||||
if(!wrap){
|
||||
table.add(Core.bundle.format("sectors.underattack", (int)(sector.info.damage * 100))).wrapLabel(wrap).row();
|
||||
table.add(sector.planet.allowWaveSimulation ? Core.bundle.format("sectors.underattack", (int)(sector.info.damage * 100)) : "@sectors.underattack.nodamage").wrapLabel(wrap).row();
|
||||
}
|
||||
|
||||
if(sector.info.wavesSurvived >= 0 && sector.info.wavesSurvived - sector.info.wavesPassed >= 0 && !sector.isBeingPlayed()){
|
||||
if(sector.planet.allowWaveSimulation && sector.info.wavesSurvived >= 0 && sector.info.wavesSurvived - sector.info.wavesPassed >= 0 && !sector.isBeingPlayed()){
|
||||
int toCapture = sector.info.attack || sector.info.winWave <= 1 ? -1 : sector.info.winWave - (sector.info.wave + sector.info.wavesPassed);
|
||||
boolean plus = (sector.info.wavesSurvived - sector.info.wavesPassed) >= SectorDamage.maxRetWave - 1;
|
||||
table.add(Core.bundle.format("sectors.survives", Math.min(sector.info.wavesSurvived - sector.info.wavesPassed, toCapture <= 0 ? 200 : toCapture) +
|
||||
@ -1019,7 +1020,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
|
||||
if(sector.isAttacked()){
|
||||
addSurvivedInfo(sector, stable, false);
|
||||
}else if(sector.hasBase() && sector.near().contains(Sector::hasEnemyBase)){
|
||||
}else if(sector.hasBase() && sector.planet.allowSectorInvasion && sector.near().contains(Sector::hasEnemyBase)){
|
||||
stable.add("@sectors.vulnerable");
|
||||
stable.row();
|
||||
}else if(!sector.hasBase() && sector.hasEnemyBase()){
|
||||
@ -1073,6 +1074,33 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
return;
|
||||
}
|
||||
|
||||
//make sure there are no under-attack sectors (other than this one)
|
||||
//TODO abandon button?
|
||||
for(Planet planet : content.planets()){
|
||||
if(!planet.allowWaveSimulation){
|
||||
int attackedCount = planet.sectors.count(s -> s.isAttacked() && s != sector);
|
||||
|
||||
//if there are two or more attacked sectors... something went wrong, don't show the dialog to prevent softlock
|
||||
if(attackedCount < 2){
|
||||
Sector attacked = planet.sectors.find(s -> s.isAttacked() && s != sector);
|
||||
if(attacked != null){
|
||||
BaseDialog dialog = new BaseDialog("@sector.noswitch.title");
|
||||
dialog.cont.add(bundle.format("sector.noswitch", attacked.name(), attacked.planet.localizedName)).maxWidth(400f).labelAlign(Align.center).center().wrap();
|
||||
dialog.addCloseButton();
|
||||
dialog.buttons.button("@sector.view", Icon.eyeSmall, () -> {
|
||||
dialog.hide();
|
||||
lookAt(attacked);
|
||||
selected = attacked;
|
||||
updateSelected();
|
||||
});
|
||||
dialog.show();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boolean shouldHide = true;
|
||||
|
||||
//save before launch.
|
||||
|
Loading…
Reference in New Issue
Block a user