Improved base generation
This commit is contained in:
@@ -97,7 +97,6 @@ public class Vars{
|
|||||||
public static boolean headless = false;
|
public static boolean headless = false;
|
||||||
public static float controllerMin = 0.25f;
|
public static float controllerMin = 0.25f;
|
||||||
public static float baseControllerSpeed = 11f;
|
public static float baseControllerSpeed = 11f;
|
||||||
//only if smoothCamera
|
|
||||||
public static boolean snapCamera = true;
|
public static boolean snapCamera = true;
|
||||||
public static ContentLoader content;
|
public static ContentLoader content;
|
||||||
public static GameState state;
|
public static GameState state;
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class LiquidBulletType extends BulletType{
|
|||||||
|
|
||||||
if(liquid.canExtinguish()){
|
if(liquid.canExtinguish()){
|
||||||
Tile tile = world.tileWorld(b.x, b.y);
|
Tile tile = world.tileWorld(b.x, b.y);
|
||||||
if(Fire.has(tile.x, tile.y) && tile != null){
|
if(tile != null && Fire.has(tile.x, tile.y)){
|
||||||
Fire.extinguish(tile, 100f);
|
Fire.extinguish(tile, 100f);
|
||||||
b.remove();
|
b.remove();
|
||||||
hit(b);
|
hit(b);
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ public class Sector{
|
|||||||
public transient int difficulty;
|
public transient int difficulty;
|
||||||
/**Items the player starts with on this sector.*/
|
/**Items the player starts with on this sector.*/
|
||||||
public transient Array<ItemStack> startingItems;
|
public transient Array<ItemStack> startingItems;
|
||||||
|
/**Last expansion parameters.*/
|
||||||
|
public transient int lastExpandX, lastExpandY;
|
||||||
|
|
||||||
public Mission currentMission(){
|
public Mission currentMission(){
|
||||||
return completedMissions >= missions.size ? victoryMission : missions.get(completedMissions);
|
return completedMissions >= missions.size ? victoryMission : missions.get(completedMissions);
|
||||||
|
|||||||
@@ -115,6 +115,9 @@ public class Sectors{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sector.lastExpandX = expandX;
|
||||||
|
sector.lastExpandY = expandY;
|
||||||
|
|
||||||
//add new sector spaces
|
//add new sector spaces
|
||||||
for(int x = sector.x; x < sector.x+sector.width; x++){
|
for(int x = sector.x; x < sector.x+sector.width; x++){
|
||||||
for(int y = sector.y; y < sector.y+sector.height; y++){
|
for(int y = sector.y; y < sector.y+sector.height; y++){
|
||||||
@@ -292,7 +295,7 @@ public class Sectors{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initSector(Sector sector){
|
private void initSector(Sector sector){
|
||||||
sector.difficulty = (int)(Mathf.dst(sector.x, sector.y));
|
sector.difficulty = (int)(Mathf.dst(sector.x, sector.y) / 2);
|
||||||
|
|
||||||
if(presets.get(sector.x, sector.y) != null){
|
if(presets.get(sector.x, sector.y) != null){
|
||||||
SectorPreset p = presets.get(sector.x, sector.y);
|
SectorPreset p = presets.get(sector.x, sector.y);
|
||||||
@@ -357,8 +360,12 @@ public class Sectors{
|
|||||||
//expand
|
//expand
|
||||||
addExpandMission(sector, 16);
|
addExpandMission(sector, 16);
|
||||||
|
|
||||||
|
if((sector.width + sector.height) <= 3){
|
||||||
|
sector.difficulty = Math.max(sector.difficulty - 3, 0);
|
||||||
|
}
|
||||||
|
|
||||||
//50% chance to get a wave mission
|
//50% chance to get a wave mission
|
||||||
if(Mathf.randomSeed(sector.getSeed() + 6) < 0.5){
|
if(Mathf.randomSeed(sector.getSeed() + 6) < 0.5 || (sector.width + sector.height) <= 3){
|
||||||
sector.missions.add(new WaveMission(sector.difficulty*5 + Mathf.randomSeed(sector.getSeed(), 0, 3)*5));
|
sector.missions.add(new WaveMission(sector.difficulty*5 + Mathf.randomSeed(sector.getSeed(), 0, 3)*5));
|
||||||
}else{
|
}else{
|
||||||
sector.missions.add(new BattleMission());
|
sector.missions.add(new BattleMission());
|
||||||
|
|||||||
@@ -10,21 +10,23 @@ import io.anuke.mindustry.content.Liquids;
|
|||||||
import io.anuke.mindustry.content.blocks.*;
|
import io.anuke.mindustry.content.blocks.*;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.type.AmmoType;
|
import io.anuke.mindustry.type.AmmoType;
|
||||||
import io.anuke.mindustry.type.Item;
|
|
||||||
import io.anuke.mindustry.type.Recipe;
|
import io.anuke.mindustry.type.Recipe;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Edges;
|
import io.anuke.mindustry.world.Edges;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
import io.anuke.mindustry.world.blocks.PowerBlock;
|
||||||
import io.anuke.mindustry.world.blocks.defense.Door;
|
import io.anuke.mindustry.world.blocks.defense.Door;
|
||||||
|
import io.anuke.mindustry.world.blocks.defense.ForceProjector;
|
||||||
import io.anuke.mindustry.world.blocks.defense.MendProjector;
|
import io.anuke.mindustry.world.blocks.defense.MendProjector;
|
||||||
import io.anuke.mindustry.world.blocks.defense.Wall;
|
import io.anuke.mindustry.world.blocks.defense.Wall;
|
||||||
import io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret;
|
import io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret;
|
||||||
|
import io.anuke.mindustry.world.blocks.defense.turrets.LiquidTurret;
|
||||||
import io.anuke.mindustry.world.blocks.defense.turrets.PowerTurret;
|
import io.anuke.mindustry.world.blocks.defense.turrets.PowerTurret;
|
||||||
import io.anuke.mindustry.world.blocks.defense.turrets.Turret;
|
import io.anuke.mindustry.world.blocks.defense.turrets.Turret;
|
||||||
import io.anuke.mindustry.world.blocks.power.NuclearReactor;
|
import io.anuke.mindustry.world.blocks.power.NuclearReactor;
|
||||||
import io.anuke.mindustry.world.blocks.power.PowerGenerator;
|
import io.anuke.mindustry.world.blocks.power.PowerGenerator;
|
||||||
|
import io.anuke.mindustry.world.blocks.power.SolarGenerator;
|
||||||
import io.anuke.mindustry.world.blocks.production.Drill;
|
import io.anuke.mindustry.world.blocks.production.Drill;
|
||||||
import io.anuke.mindustry.world.blocks.production.Pump;
|
|
||||||
import io.anuke.mindustry.world.blocks.storage.CoreBlock;
|
import io.anuke.mindustry.world.blocks.storage.CoreBlock;
|
||||||
import io.anuke.mindustry.world.blocks.storage.StorageBlock;
|
import io.anuke.mindustry.world.blocks.storage.StorageBlock;
|
||||||
import io.anuke.mindustry.world.blocks.units.UnitFactory;
|
import io.anuke.mindustry.world.blocks.units.UnitFactory;
|
||||||
@@ -34,10 +36,11 @@ import io.anuke.ucore.function.IntPositionConsumer;
|
|||||||
import io.anuke.ucore.function.TriFunction;
|
import io.anuke.ucore.function.TriFunction;
|
||||||
import io.anuke.ucore.util.Geometry;
|
import io.anuke.ucore.util.Geometry;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.content;
|
import static io.anuke.mindustry.Vars.content;
|
||||||
|
|
||||||
public class FortressGenerator{
|
public class FortressGenerator{
|
||||||
private final static int coreDst = 120;
|
private final static int coreDst = 60;
|
||||||
|
|
||||||
private int enemyX, enemyY, coreX, coreY;
|
private int enemyX, enemyY, coreX, coreY;
|
||||||
private Team team;
|
private Team team;
|
||||||
@@ -54,23 +57,11 @@ public class FortressGenerator{
|
|||||||
gen();
|
gen();
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Pass{
|
|
||||||
walls((x, y) -> {
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
final IntPositionConsumer cons;
|
|
||||||
|
|
||||||
Pass(IntPositionConsumer cons){
|
|
||||||
this.cons = cons;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen(){
|
void gen(){
|
||||||
gen.setBlock(enemyX, enemyY, StorageBlocks.core, team);
|
gen.setBlock(enemyX, enemyY, StorageBlocks.core, team);
|
||||||
|
|
||||||
float difficultyScl = Mathf.clamp(gen.sector.difficulty / 20f + gen.random.range(1f/2f), 0f, 0.9999f);
|
float difficultyScl = Mathf.clamp(gen.sector.difficulty / 20f + gen.random.range(1f/2f), 0f, 0.9999f);
|
||||||
int coreDst = FortressGenerator.coreDst*gen.sector.width;
|
int coreDst = FortressGenerator.coreDst*Math.min(gen.sector.width, gen.sector.height);
|
||||||
|
|
||||||
Array<Block> turrets = find(b -> b instanceof ItemTurret);
|
Array<Block> turrets = find(b -> b instanceof ItemTurret);
|
||||||
Array<Block> powerTurrets = find(b -> b instanceof PowerTurret);
|
Array<Block> powerTurrets = find(b -> b instanceof PowerTurret);
|
||||||
@@ -117,68 +108,27 @@ public class FortressGenerator{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
BiFunction<Block, Float, IntPositionConsumer> placer = (block, chance) -> (x, y) -> {
|
||||||
|
if(gen.canPlace(x, y, block) && gen.random.chance(chance)){
|
||||||
|
gen.setBlock(x, y, block, team);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
Array<IntPositionConsumer> passes = Array.with(
|
Array<IntPositionConsumer> passes = Array.with(
|
||||||
//initial seeding solar panels
|
//initial seeding solar panels
|
||||||
(x, y) -> {
|
placer.get(PowerBlocks.largeSolarPanel, 0.001f),
|
||||||
Block block = PowerBlocks.largeSolarPanel;
|
|
||||||
|
|
||||||
if(gen.random.chance(0.001*placeChance) && gen.canPlace(x, y, block)){
|
|
||||||
gen.setBlock(x, y, block, team);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
//extra seeding
|
//extra seeding
|
||||||
seeder.get(PowerBlocks.solarPanel, tile -> tile.block() == PowerBlocks.largeSolarPanel && gen.random.chance(0.3)),
|
seeder.get(PowerBlocks.solarPanel, tile -> tile.block() == PowerBlocks.largeSolarPanel && gen.random.chance(0.3)),
|
||||||
|
|
||||||
//drills (not powered)
|
|
||||||
(x, y) -> {
|
|
||||||
if(!gen.random.chance(0.1*placeChance)) return;
|
|
||||||
|
|
||||||
Item item = gen.drillItem(x, y, drill);
|
|
||||||
if(item != null && item != Items.stone && item != Items.sand && gen.canPlace(x, y, drill)){
|
|
||||||
gen.setBlock(x, y, drill, team);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
//drills (not powered)
|
|
||||||
(x, y) -> {
|
|
||||||
if(!gen.random.chance(0.1*placeChance)) return;
|
|
||||||
|
|
||||||
if(gen.tile(x, y).floor().isLiquid && gen.tile(x, y).floor().liquidDrop == Liquids.water){
|
|
||||||
gen.setBlock(x, y, LiquidBlocks.mechanicalPump, team);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
//coal gens
|
//coal gens
|
||||||
seeder.get(PowerBlocks.combustionGenerator, tile -> tile.block() instanceof Drill && gen.drillItem(tile.x, tile.y, (Drill)tile.block()) == Items.coal && gen.random.chance(0.2)),
|
seeder.get(PowerBlocks.combustionGenerator, tile -> tile.block() instanceof SolarGenerator && gen.random.chance(0.2)),
|
||||||
|
|
||||||
//drills (powered)
|
|
||||||
(x, y) -> {
|
|
||||||
if(gen.random.chance(0.4*placeChance) && gen.canPlace(x, y, powerDrill) && gen.drillItem(x, y, powerDrill) == Items.thorium && checker.get(gen.tile(x, y), powerDrill, other -> other.block() instanceof PowerGenerator)){
|
|
||||||
gen.setBlock(x, y, powerDrill, team);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
//nuclear reactors
|
|
||||||
seeder.get(PowerBlocks.thoriumReactor, tile -> tile.block() instanceof Drill && gen.random.chance(0.2) && gen.drillItem(tile.x, tile.y, (Drill)tile.block()) == Items.thorium && gen.random.chance(0.3)),
|
|
||||||
|
|
||||||
//water extractors
|
//water extractors
|
||||||
seeder.get(ProductionBlocks.waterExtractor, tile -> tile.block() instanceof NuclearReactor && gen.random.chance(0.5)),
|
seeder.get(ProductionBlocks.waterExtractor, tile -> tile.block() instanceof NuclearReactor && gen.random.chance(0.5)),
|
||||||
|
|
||||||
//mend cores
|
//mend projectors
|
||||||
seeder.get(DefenseBlocks.mendProjector, tile -> tile.block() instanceof PowerGenerator && gen.random.chance(0.03)),
|
seeder.get(DefenseBlocks.mendProjector, tile -> tile.block() instanceof PowerGenerator && gen.random.chance(0.04)),
|
||||||
|
|
||||||
//unit pads (assorted)
|
|
||||||
seeder.get(UnitBlocks.daggerFactory, tile -> tile.block() instanceof MendProjector && gen.random.chance(0.3)),
|
|
||||||
|
|
||||||
//unit pads (assorted)
|
|
||||||
seeder.get(UnitBlocks.wraithFactory, tile -> tile.block() instanceof MendProjector && gen.random.chance(0.3)),
|
|
||||||
|
|
||||||
//unit pads (assorted)
|
|
||||||
seeder.get(UnitBlocks.titanFactory, tile -> tile.block() instanceof MendProjector && gen.random.chance(0.23)),
|
|
||||||
|
|
||||||
//unit pads (assorted)
|
|
||||||
seeder.get(UnitBlocks.ghoulFactory, tile -> tile.block() instanceof MendProjector && gen.random.chance(0.23)),
|
|
||||||
|
|
||||||
//power turrets
|
//power turrets
|
||||||
seeder.get(powerTurret, tile -> tile.block() instanceof PowerGenerator && gen.random.chance(0.04)),
|
seeder.get(powerTurret, tile -> tile.block() instanceof PowerGenerator && gen.random.chance(0.04)),
|
||||||
@@ -187,13 +137,28 @@ public class FortressGenerator{
|
|||||||
seeder.get(UnitBlocks.repairPoint, tile -> tile.block() instanceof PowerGenerator && gen.random.chance(0.1)),
|
seeder.get(UnitBlocks.repairPoint, tile -> tile.block() instanceof PowerGenerator && gen.random.chance(0.1)),
|
||||||
|
|
||||||
//turrets1
|
//turrets1
|
||||||
seeder.get(turret1, tile -> tile.block() instanceof Pump && gen.random.chance(0.22 - turret1.size*0.02)),
|
seeder.get(turret1, tile -> tile.block() instanceof PowerBlock && gen.random.chance(0.22 - turret1.size*0.02)),
|
||||||
|
|
||||||
//turrets2
|
//turrets2
|
||||||
seeder.get(turret2, tile -> tile.block() instanceof Drill && gen.random.chance(0.12 - turret2.size*0.02)),
|
seeder.get(turret2, tile -> tile.block() instanceof PowerBlock && gen.random.chance(0.12 - turret2.size*0.02)),
|
||||||
|
|
||||||
|
//shields
|
||||||
|
seeder.get(DefenseBlocks.forceProjector, tile -> tile.block() instanceof CoreBlock || tile.block() instanceof UnitFactory && gen.random.chance(0.08)),
|
||||||
|
|
||||||
|
//unit pads (assorted)
|
||||||
|
seeder.get(UnitBlocks.daggerFactory, tile -> tile.block() instanceof MendProjector || tile.block() instanceof ForceProjector && gen.random.chance(0.3)),
|
||||||
|
|
||||||
|
//unit pads (assorted)
|
||||||
|
seeder.get(UnitBlocks.wraithFactory, tile -> tile.block() instanceof MendProjector || tile.block() instanceof ForceProjector && gen.random.chance(0.3)),
|
||||||
|
|
||||||
|
//unit pads (assorted)
|
||||||
|
seeder.get(UnitBlocks.titanFactory, tile -> tile.block() instanceof MendProjector || tile.block() instanceof ForceProjector && gen.random.chance(0.23)),
|
||||||
|
|
||||||
|
//unit pads (assorted)
|
||||||
|
seeder.get(UnitBlocks.ghoulFactory, tile -> tile.block() instanceof MendProjector || tile.block() instanceof ForceProjector && gen.random.chance(0.23)),
|
||||||
|
|
||||||
//vaults
|
//vaults
|
||||||
seeder.get(StorageBlocks.vault, tile -> tile.block() instanceof CoreBlock && gen.random.chance(0.4)),
|
seeder.get(StorageBlocks.vault, tile -> (tile.block() instanceof CoreBlock || tile.block() instanceof ForceProjector) && gen.random.chance(0.4)),
|
||||||
|
|
||||||
//big turrets
|
//big turrets
|
||||||
seeder.get(bigTurret, tile -> tile.block() instanceof StorageBlock && gen.random.chance(0.65)),
|
seeder.get(bigTurret, tile -> tile.block() instanceof StorageBlock && gen.random.chance(0.65)),
|
||||||
@@ -214,6 +179,9 @@ public class FortressGenerator{
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
//mines
|
||||||
|
placer.get(DefenseBlocks.shockMine, 0.02f * difficultyScl),
|
||||||
|
|
||||||
//fill up turrets w/ ammo
|
//fill up turrets w/ ammo
|
||||||
(x, y) -> {
|
(x, y) -> {
|
||||||
Tile tile = gen.tile(x, y);
|
Tile tile = gen.tile(x, y);
|
||||||
@@ -228,6 +196,8 @@ public class FortressGenerator{
|
|||||||
block.handleStack(type[index].item, block.acceptStack(type[index].item, 1000, tile, null), tile, null);
|
block.handleStack(type[index].item, block.acceptStack(type[index].item, 1000, tile, null), tile, null);
|
||||||
}else if(block instanceof NuclearReactor){
|
}else if(block instanceof NuclearReactor){
|
||||||
tile.entity.items.add(Items.thorium, 30);
|
tile.entity.items.add(Items.thorium, 30);
|
||||||
|
}else if(block instanceof LiquidTurret){
|
||||||
|
tile.entity.liquids.add(Liquids.water, tile.block().liquidCapacity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,15 +1,18 @@
|
|||||||
package io.anuke.mindustry.maps.missions;
|
package io.anuke.mindustry.maps.missions;
|
||||||
|
|
||||||
import com.badlogic.gdx.math.GridPoint2;
|
|
||||||
import com.badlogic.gdx.utils.Array;
|
|
||||||
import io.anuke.mindustry.Vars;
|
import io.anuke.mindustry.Vars;
|
||||||
import io.anuke.mindustry.game.GameMode;
|
import io.anuke.mindustry.game.GameMode;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
|
import io.anuke.mindustry.maps.generation.FortressGenerator;
|
||||||
import io.anuke.mindustry.maps.generation.Generation;
|
import io.anuke.mindustry.maps.generation.Generation;
|
||||||
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.util.Bundles;
|
import io.anuke.ucore.util.Bundles;
|
||||||
|
import io.anuke.ucore.util.SeedRandom;
|
||||||
|
|
||||||
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
public class BattleMission extends Mission{
|
public class BattleMission extends Mission{
|
||||||
private final static int coreX = 60, coreY = 60;
|
final int spacing = 20;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GameMode getMode(){
|
public GameMode getMode(){
|
||||||
@@ -21,19 +24,22 @@ public class BattleMission extends Mission{
|
|||||||
return Bundles.get("text.mission.battle");
|
return Bundles.get("text.mission.battle");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void generate(Generation gen){
|
|
||||||
//int enemyX = gen.width-1-coreX, enemyY = gen.height-1-coreX;
|
|
||||||
|
|
||||||
//generateCoreAt(gen, coreX, coreY, Team.blue);
|
|
||||||
//generateCoreAt(gen, enemyX, enemyY, Team.red);
|
|
||||||
|
|
||||||
//new FortressGenerator().generate(gen, Team.red, coreX, coreY, enemyX, enemyY);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBegin(){
|
public void onBegin(){
|
||||||
|
if(state.teams.get(defaultTeam).cores.size == 0){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Tile core = state.teams.get(defaultTeam).cores.first();
|
||||||
|
Generation gen = new Generation(world.getSector(), world.getTiles(), world.width(), world.height(), new SeedRandom(world.getSector().getSeed()-1));
|
||||||
|
int ex = world.getSector().lastExpandX;
|
||||||
|
int ey = world.getSector().lastExpandY;
|
||||||
|
int enx = world.width() - 1 - spacing;
|
||||||
|
int eny = world.height() - 1 - spacing;
|
||||||
|
if(ex < 0) enx = spacing*gen.sector.width;
|
||||||
|
if(ex > 0) enx = world.width() - 1 - spacing*gen.sector.width;
|
||||||
|
if(ey < 0) eny = spacing*gen.sector.height;
|
||||||
|
if(ey > 0) eny = world.height() - 1 - spacing*gen.sector.height;
|
||||||
|
new FortressGenerator().generate(gen, Team.red, core.x, core.y, enx, eny);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -45,9 +51,4 @@ public class BattleMission extends Mission{
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Array<GridPoint2> getSpawnPoints(Generation gen){
|
|
||||||
return Array.with(new GridPoint2(coreX, coreY), new GridPoint2(gen.width - 1 - coreX, gen.height - 1 - coreY));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ public class Tile implements PosTrait, TargetTrait{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEnemyCheat(){
|
public boolean isEnemyCheat(){
|
||||||
return getTeam() == waveTeam && state.mode.enemyCheat;
|
return getTeam() == waveTeam && !state.mode.isPvp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLinked(){
|
public boolean isLinked(){
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ public class ForceProjector extends Block {
|
|||||||
@Override
|
@Override
|
||||||
public void update(Tile tile){
|
public void update(Tile tile){
|
||||||
ForceEntity entity = tile.entity();
|
ForceEntity entity = tile.entity();
|
||||||
|
boolean cheat = tile.isEnemyCheat();
|
||||||
|
|
||||||
if(entity.shield == null){
|
if(entity.shield == null){
|
||||||
entity.shield = new ShieldEntity(tile);
|
entity.shield = new ShieldEntity(tile);
|
||||||
@@ -89,7 +90,7 @@ public class ForceProjector extends Block {
|
|||||||
Effects.effect(BlockFx.reactorsmoke, tile.drawx() + Mathf.range(tilesize/2f), tile.drawy() + Mathf.range(tilesize/2f));
|
Effects.effect(BlockFx.reactorsmoke, tile.drawx() + Mathf.range(tilesize/2f), tile.drawy() + Mathf.range(tilesize/2f));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!entity.cons.valid()){
|
if(!entity.cons.valid() && !cheat){
|
||||||
entity.warmup = Mathf.lerpDelta(entity.warmup, 0f, 0.1f);
|
entity.warmup = Mathf.lerpDelta(entity.warmup, 0f, 0.1f);
|
||||||
if(entity.warmup <= 0.09f){
|
if(entity.warmup <= 0.09f){
|
||||||
entity.broken = true;
|
entity.broken = true;
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class MendProjector extends Block{
|
|||||||
@Override
|
@Override
|
||||||
public void update(Tile tile){
|
public void update(Tile tile){
|
||||||
MendEntity entity = tile.entity();
|
MendEntity entity = tile.entity();
|
||||||
entity.heat = Mathf.lerpDelta(entity.heat, entity.cons.valid() ? 1f : 0f, 0.08f);
|
entity.heat = Mathf.lerpDelta(entity.heat, entity.cons.valid() || tile.isEnemyCheat() ? 1f : 0f, 0.08f);
|
||||||
entity.charge += entity.heat * entity.delta();
|
entity.charge += entity.heat * entity.delta();
|
||||||
|
|
||||||
entity.phaseHeat = Mathf.lerpDelta(entity.phaseHeat, (float)entity.items.get(consumes.item()) / itemCapacity, 0.1f);
|
entity.phaseHeat = Mathf.lerpDelta(entity.phaseHeat, (float)entity.items.get(consumes.item()) / itemCapacity, 0.1f);
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import java.io.DataOutputStream;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class UnitFactory extends Block{
|
public class UnitFactory extends Block{
|
||||||
protected float gracePeriodMultiplier = 23f;
|
protected float gracePeriodMultiplier = 2f;
|
||||||
protected float speedupTime = 60f * 60f * 20;
|
protected float speedupTime = 60f * 60f * 20;
|
||||||
protected float maxSpeedup = 2f;
|
protected float maxSpeedup = 2f;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user