diff --git a/core/src/io/anuke/mindustry/ai/Pathfinder.java b/core/src/io/anuke/mindustry/ai/Pathfinder.java index 7710c48588..8ee044e32b 100644 --- a/core/src/io/anuke/mindustry/ai/Pathfinder.java +++ b/core/src/io/anuke/mindustry/ai/Pathfinder.java @@ -66,7 +66,7 @@ public class Pathfinder{ if(other == null) continue; if(values[dx][dy] < value && (target == null || values[dx][dy] < tl) && - !other.solid() && + !other.solid() && other.floor().drownTime <= 0 && !(point.x != 0 && point.y != 0 && (world.solid(tile.x + point.x, tile.y) || world.solid(tile.x, tile.y + point.y)))){ //diagonal corner trap target = other; tl = values[dx][dy]; diff --git a/core/src/io/anuke/mindustry/net/Net.java b/core/src/io/anuke/mindustry/net/Net.java index 92448d9c90..7b6b770e65 100644 --- a/core/src/io/anuke/mindustry/net/Net.java +++ b/core/src/io/anuke/mindustry/net/Net.java @@ -67,7 +67,7 @@ public class Net{ }else if(error.equals("alreadyconnected")){ error = Core.bundle.get("error.alreadyconnected"); }else if(!error.isEmpty()){ - error = Core.bundle.get("error.any"); + error = Core.bundle.get("error.any") + "\n" + t.getClass().getSimpleName() + "\n" + (t.getMessage() == null ? "" : t.getMessage()); } ui.showText("", Core.bundle.format("connectfail", error)); diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 60cc34dc89..c3aa1ec35e 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -433,15 +433,17 @@ public class Block extends BlockStorage{ }else{ current = entity -> entity.liquids.current(); } - bars.add("liquid", entity -> new Bar(() -> entity.liquids.get(current.get(entity)) <= 0.001f ? Core.bundle.get("bar.liquid") : current.get(entity).localizedName(), () -> current.get(entity).color, () -> entity.liquids.get(current.get(entity)) / liquidCapacity)); + bars.add("liquid", entity -> new Bar(() -> entity.liquids.get(current.get(entity)) <= 0.001f ? Core.bundle.get("bar.liquid") : current.get(entity).localizedName(), + () -> current.get(entity).color, () -> entity.liquids.get(current.get(entity)) / liquidCapacity)); } if(hasPower && consumes.hasPower()){ - boolean buffered = consumes.getPower().buffered; - float capacity = consumes.getPower().capacity; + ConsumePower cons = consumes.getPower(); + boolean buffered = cons.buffered; + float capacity = cons.capacity; bars.add("power", entity -> new Bar(() -> buffered ? Core.bundle.format("bar.poweramount", Float.isNaN(entity.power.satisfaction * capacity) ? "" : (int)(entity.power.satisfaction * capacity)) : - Core.bundle.get("bar.power"), () -> Pal.powerBar, () -> entity.power.satisfaction)); + Core.bundle.get("bar.power"), () -> Pal.powerBar, () -> Mathf.isZero(cons.requestedPower(entity)) && entity.power.graph.getPowerProduced() + entity.power.graph.getBatteryStored() > 0f ? 1f : entity.power.satisfaction)); } if(hasItems && configurable){ diff --git a/core/src/io/anuke/mindustry/world/Tile.java b/core/src/io/anuke/mindustry/world/Tile.java index 0427d6da09..94400da648 100644 --- a/core/src/io/anuke/mindustry/world/Tile.java +++ b/core/src/io/anuke/mindustry/world/Tile.java @@ -384,7 +384,7 @@ public class Tile implements Position, TargetTrait{ Point2 point = Geometry.d8[i]; Tile tile = world.tile(x + point.x, y + point.y); if(tile != null && tile.floor.isLiquid){ - cost += 3; + cost += 4; } if(tile != null && tile.solid()){ occluded = true; @@ -392,17 +392,35 @@ public class Tile implements Position, TargetTrait{ } } + //+24 + if(occluded){ cost += 2; } + //+26 + if(target().synthetic()){ cost += Mathf.clamp(target().block().health / 10f, 0, 20); } + //+46 + if(floor.isLiquid){ cost += 10; } + + //+56 + + if(floor.drownTime > 0){ + cost += 70; + } + + //+126 + + if(cost < 0){ + cost = Byte.MAX_VALUE; + } } protected void preChanged(){ diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/PowerTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/PowerTurret.java index d48777f128..1c11cd3da2 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/PowerTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/PowerTurret.java @@ -26,8 +26,8 @@ public abstract class PowerTurret extends CooledTurret{ @Override public boolean hasAmmo(Tile tile){ - //only shoot if there's power - return tile.entity.cons.valid(); + //you can always rotate, but never shoot if there's no power + return true; } @Override @@ -37,6 +37,6 @@ public abstract class PowerTurret extends CooledTurret{ @Override protected float baseReloadSpeed(Tile tile){ - return tile.entity.power.satisfaction; + return tile.isEnemyCheat() ? 1f : tile.entity.power.satisfaction; } } diff --git a/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java b/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java index a90cb448b7..3069d844a2 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java @@ -172,7 +172,6 @@ public class UnitFactory extends Block{ entity.cons.trigger(); } } - @Override public int getMaximumAccepted(Tile tile, Item item){ return capacities[item.id]; @@ -199,6 +198,7 @@ public class UnitFactory extends Block{ public void write(DataOutput stream) throws IOException{ super.write(stream); stream.writeFloat(buildTime); + stream.writeFloat(0f); stream.writeInt(spawned); }