From a18e1854aba1182b3fe16e7c4e331d095d008ff9 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 15 Dec 2020 10:58:03 -0500 Subject: [PATCH] Null checks & cleanup of upgrade pathing --- core/src/mindustry/entities/Puddles.java | 8 ++++---- core/src/mindustry/entities/comp/PuddleComp.java | 2 +- core/src/mindustry/input/InputHandler.java | 9 ++++----- core/src/mindustry/input/Placement.java | 12 +++++------- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/core/src/mindustry/entities/Puddles.java b/core/src/mindustry/entities/Puddles.java index a57f689884..74115bcef4 100644 --- a/core/src/mindustry/entities/Puddles.java +++ b/core/src/mindustry/entities/Puddles.java @@ -38,9 +38,9 @@ public class Puddles{ Puddle p = map.get(tile.pos()); - if(generation == 0 && p != null && p.lastRipple() <= Time.time - 40f){ + if(generation == 0 && p != null && p.lastRipple <= Time.time - 40f){ Fx.ripple.at((tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f, 1f, tile.floor().liquidDrop.color); - p.lastRipple(Time.time); + p.lastRipple = Time.time; } return; } @@ -62,9 +62,9 @@ public class Puddles{ }else if(p.liquid() == liquid){ p.accepting(Math.max(amount, p.accepting())); - if(generation == 0 && p.lastRipple() <= Time.time - 40f && p.amount() >= maxLiquid / 2f){ + if(generation == 0 && p.lastRipple <= Time.time - 40f && p.amount() >= maxLiquid / 2f){ Fx.ripple.at((tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f, 1f, p.liquid().color); - p.lastRipple(Time.time); + p.lastRipple = Time.time; } }else{ p.amount(p.amount() + reactPuddle(p.liquid(), liquid, amount, p.tile(), (p.x() + source.worldx())/2f, (p.y() + source.worldy())/2f)); diff --git a/core/src/mindustry/entities/comp/PuddleComp.java b/core/src/mindustry/entities/comp/PuddleComp.java index 2ff876ba2c..6fd8e02b03 100644 --- a/core/src/mindustry/entities/comp/PuddleComp.java +++ b/core/src/mindustry/entities/comp/PuddleComp.java @@ -28,7 +28,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ @Import float x, y; - transient float accepting, updateTime; + transient float accepting, updateTime, lastRipple; float amount; int generation; Tile tile; diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 62026d0c35..b6512c2430 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -1162,11 +1162,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } if(diagonal){ - Tile start = world.tile(startX, startY); - Tile end = world.tile(endX, endY); - if(block != null && block instanceof Autotiler - && start.build instanceof ChainedBuilding && end.build instanceof ChainedBuilding - && block.canReplace(end.build.block) && block.canReplace(start.build.block)){ + var start = world.build(startX, startY); + var end = world.build(endX, endY); + if(block != null && start instanceof ChainedBuilding && end instanceof ChainedBuilding + && block.canReplace(end.block) && block.canReplace(start.block)){ points = Placement.upgradeLine(startX, startY, endX, endY); }else{ points = Placement.pathfindLine(block != null && block.conveyorPlacement, startX, startY, endX, endY); diff --git a/core/src/mindustry/input/Placement.java b/core/src/mindustry/input/Placement.java index ee09e21a14..62ae4932b0 100644 --- a/core/src/mindustry/input/Placement.java +++ b/core/src/mindustry/input/Placement.java @@ -5,7 +5,6 @@ import arc.math.*; import arc.math.geom.*; import arc.struct.*; import arc.util.pooling.*; -import mindustry.gen.*; import mindustry.world.*; import mindustry.world.blocks.distribution.*; @@ -58,13 +57,12 @@ public class Placement{ public static Seq upgradeLine(int startX, int startY, int endX, int endY){ Pools.freeAll(points); points.clear(); - Building building = world.tile(startX, startY).build; + var build = world.build(startX, startY); points.add(Pools.obtain(Point2.class, Point2::new).set(startX, startY)); - while(building.tile.x != endX || building.tile.y != endY){ - ChainedBuilding chained = (ChainedBuilding)building; - if(chained.next() == null) return pathfindLine(true, startX, startY, endX, endY); - building = chained.next(); - points.add(Pools.obtain(Point2.class, Point2::new).set(building.tile.x, building.tile.y)); + while(build instanceof ChainedBuilding chain && (build.tile.x != endX || build.tile.y != endY)){ + if(chain.next() == null) return pathfindLine(true, startX, startY, endX, endY); + build = chain.next(); + points.add(Pools.obtain(Point2.class, Point2::new).set(build.tile.x, build.tile.y)); } return points; }