Erekir rule option

This commit is contained in:
Anuken
2022-02-18 18:06:33 -05:00
parent 0c0adea2a4
commit 9633c57fe0
16 changed files with 38 additions and 16 deletions

View File

@@ -640,6 +640,7 @@ threat.eradication = Eradication
planets = Planets planets = Planets
planet.serpulo.name = Serpulo planet.serpulo.name = Serpulo
planet.erekir.name = Erekir
planet.sun.name = Sun planet.sun.name = Sun
sector.impact0078.name = Impact 0078 sector.impact0078.name = Impact 0078
@@ -1085,6 +1086,7 @@ rules.title.unit = Units
rules.title.experimental = Experimental rules.title.experimental = Experimental
rules.title.environment = Environment rules.title.environment = Environment
rules.title.teams = Teams rules.title.teams = Teams
rules.title.planet = Planet
rules.lighting = Lighting rules.lighting = Lighting
rules.enemyLights = Enemy Lights rules.enemyLights = Enemy Lights
rules.fire = Fire rules.fire = Fire

View File

@@ -319,7 +319,7 @@ public class Renderer implements ApplicationListener{
//render all matching environments //render all matching environments
for(var renderer : envRenderers){ for(var renderer : envRenderers){
if((renderer.env & state.rules.environment) == renderer.env){ if((renderer.env & state.rules.env) == renderer.env){
renderer.renderer.run(); renderer.renderer.run();
} }
} }

View File

@@ -308,7 +308,7 @@ public class World{
} }
state.rules.cloudColor = sector.planet.landCloudColor; state.rules.cloudColor = sector.planet.landCloudColor;
state.rules.environment = sector.planet.defaultEnv; state.rules.env = sector.planet.defaultEnv;
state.rules.hiddenBuildItems.clear(); state.rules.hiddenBuildItems.clear();
state.rules.hiddenBuildItems.addAll(sector.planet.hiddenItems); state.rules.hiddenBuildItems.addAll(sector.planet.hiddenItems);
sector.planet.ruleSetter.get(state.rules); sector.planet.ruleSetter.get(state.rules);

View File

@@ -502,7 +502,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
/** @return whether this block is allowed to update based on team/environment */ /** @return whether this block is allowed to update based on team/environment */
public boolean allowUpdate(){ public boolean allowUpdate(){
return team != Team.derelict && block.supportsEnv(state.rules.environment); return team != Team.derelict && block.supportsEnv(state.rules.env);
} }
public BlockStatus status(){ public BlockStatus status(){

View File

@@ -382,7 +382,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
wasHealed = false; wasHealed = false;
//check if environment is unsupported //check if environment is unsupported
if(!type.supportsEnv(state.rules.environment) && !dead){ if(!type.supportsEnv(state.rules.env) && !dead){
Call.unitEnvDeath(self()); Call.unitEnvDeath(self());
team.data().updateCount(type, -1); team.data().updateCount(type, -1);
} }

View File

@@ -92,7 +92,7 @@ public class Rules{
/** Environment drag multiplier. */ /** Environment drag multiplier. */
public float dragMultiplier = 1f; public float dragMultiplier = 1f;
/** Environmental flags that dictate visuals & how blocks function. */ /** Environmental flags that dictate visuals & how blocks function. */
public int environment = Env.terrestrial | Env.spores | Env.groundOil | Env.groundWater | Env.oxygen; public int env = Env.terrestrial | Env.spores | Env.groundOil | Env.groundWater | Env.oxygen;
/** Attributes of the environment. */ /** Attributes of the environment. */
public Attributes attributes = new Attributes(); public Attributes attributes = new Attributes();
/** Sector for saves that have them. */ /** Sector for saves that have them. */
@@ -176,7 +176,7 @@ public class Rules{
} }
public boolean hasEnv(int env){ public boolean hasEnv(int env){
return (environment & env) != 0; return (this.env & env) != 0;
} }
public float unitBuildSpeed(Team team){ public float unitBuildSpeed(Team team){

View File

@@ -142,7 +142,7 @@ public class AsteroidGenerator extends BlankPlanetGenerator{
state.rules.dragMultiplier = 0.7f; //yes, space actually has 0 drag but true 0% drag is very annoying state.rules.dragMultiplier = 0.7f; //yes, space actually has 0 drag but true 0% drag is very annoying
state.rules.borderDarkness = false; state.rules.borderDarkness = false;
state.rules.environment = Env.space; state.rules.env = Env.space;
state.rules.waves = true; state.rules.waves = true;
//TODO ??? //TODO ???

View File

@@ -443,7 +443,7 @@ public class ErekirPlanetGenerator extends PlanetGenerator{
//it is very hot //it is very hot
state.rules.attributes.set(Attribute.heat, 0.8f); state.rules.attributes.set(Attribute.heat, 0.8f);
state.rules.environment = sector.planet.defaultEnv; state.rules.env = sector.planet.defaultEnv;
state.rules.placeRangeCheck = true; state.rules.placeRangeCheck = true;
//TODO remove slag and arkycite around core. //TODO remove slag and arkycite around core.

View File

@@ -645,7 +645,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f)); state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f));
state.rules.waves = sector.info.waves = true; state.rules.waves = sector.info.waves = true;
state.rules.environment = sector.planet.defaultEnv; state.rules.env = sector.planet.defaultEnv;
state.rules.enemyCoreBuildRadius = 600f; state.rules.enemyCoreBuildRadius = 600f;
//spawn air only when spawn is blocked //spawn air only when spawn is blocked

View File

@@ -87,7 +87,7 @@ public class TantrosPlanetGenerator extends PlanetGenerator{
Schematics.placeLaunchLoadout(width / 2, height / 2); Schematics.placeLaunchLoadout(width / 2, height / 2);
Vars.state.rules.environment = Env.underwater; Vars.state.rules.env = Env.underwater;
state.rules.canGameOver = false; state.rules.canGameOver = false;
} }

View File

@@ -214,6 +214,26 @@ public class CustomRulesDialog extends BaseDialog{
main.button("@rules.weather", this::weatherDialog).width(250f).left().row(); main.button("@rules.weather", this::weatherDialog).width(250f).left().row();
title("@rules.title.planet");
main.table(Tex.button, t -> {
t.margin(10f);
var group = new ButtonGroup<>();
var style = Styles.clearTogglet;
t.defaults().size(140f, 50f);
//TODO dynamic selection
for(Planet planet : new Planet[]{Planets.serpulo, Planets.erekir}){
t.button(planet.localizedName, style, () -> {
rules.env = planet.defaultEnv;
rules.hiddenBuildItems.clear();
rules.hiddenBuildItems.addAll(planet.hiddenItems);
planet.ruleSetter.get(rules);
}).group(group).checked(rules.env == planet.defaultEnv);
}
}).left().fill(false).expand(false, false).row();
title("@rules.title.teams"); title("@rules.title.teams");
team("@rules.playerteam", t -> rules.defaultTeam = t, () -> rules.defaultTeam); team("@rules.playerteam", t -> rules.defaultTeam = t, () -> rules.defaultTeam);

View File

@@ -373,7 +373,7 @@ public class PlacementFragment extends Fragment{
topTable.row(); topTable.row();
topTable.table(b -> { topTable.table(b -> {
b.image(Icon.cancel).padRight(2).color(Color.scarlet); b.image(Icon.cancel).padRight(2).color(Color.scarlet);
b.add(!player.isBuilder() ? "@unit.nobuild" : !displayBlock.supportsEnv(state.rules.environment) ? "@unsupported.environment" : "@banned").width(190f).wrap(); b.add(!player.isBuilder() ? "@unit.nobuild" : !displayBlock.supportsEnv(state.rules.env) ? "@unsupported.environment" : "@banned").width(190f).wrap();
b.left(); b.left();
}).padTop(2).left(); }).padTop(2).left();
} }
@@ -552,7 +552,7 @@ public class PlacementFragment extends Fragment{
boolean unlocked(Block block){ boolean unlocked(Block block){
return block.unlockedNow() && block.placeablePlayer && block.environmentBuildable() && return block.unlockedNow() && block.placeablePlayer && block.environmentBuildable() &&
block.supportsEnv(state.rules.environment); //TODO this hides env unsupported blocks, not always a good thing block.supportsEnv(state.rules.env); //TODO this hides env unsupported blocks, not always a good thing
} }
boolean hasInfoBox(){ boolean hasInfoBox(){

View File

@@ -809,7 +809,7 @@ public class Block extends UnlockableContent implements Senseable{
} }
public boolean isPlaceable(){ public boolean isPlaceable(){
return isVisible() && (!state.rules.bannedBlocks.contains(this) || state.rules.editor) && supportsEnv(state.rules.environment); return isVisible() && (!state.rules.bannedBlocks.contains(this) || state.rules.editor) && supportsEnv(state.rules.env);
} }
/** @return whether this block supports a specific environment. */ /** @return whether this block supports a specific environment. */

View File

@@ -48,7 +48,7 @@ public class PayloadRouter extends PayloadConveyor{
} }
public boolean canSort(UnitType t){ public boolean canSort(UnitType t){
return !t.isHidden() && !t.isBanned() && t.supportsEnv(state.rules.environment); return !t.isHidden() && !t.isBanned() && t.supportsEnv(state.rules.env);
} }
public class PayloadRouterBuild extends PayloadConveyorBuild{ public class PayloadRouterBuild extends PayloadConveyorBuild{

View File

@@ -77,7 +77,7 @@ public class PayloadSource extends PayloadBlock{
} }
public boolean canProduce(UnitType t){ public boolean canProduce(UnitType t){
return !t.isHidden() && !t.isBanned() && t.supportsEnv(state.rules.environment); return !t.isHidden() && !t.isBanned() && t.supportsEnv(state.rules.env);
} }
public class PayloadSourceBuild extends PayloadBlockBuild<Payload>{ public class PayloadSourceBuild extends PayloadBlockBuild<Payload>{

View File

@@ -276,7 +276,7 @@ public class CoreBlock extends StorageBlock{
public void requestSpawn(Player player){ public void requestSpawn(Player player){
//do not try to respawn in unsupported environments at all //do not try to respawn in unsupported environments at all
if(!unitType.supportsEnv(state.rules.environment)) return; if(!unitType.supportsEnv(state.rules.env)) return;
Call.playerSpawn(tile, player); Call.playerSpawn(tile, player);
} }