From 45e5ab8eccf570899feb34df1dcc6b5528e92cfb Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 6 Aug 2022 13:30:47 -0400 Subject: [PATCH] Fixed #7310 --- core/src/mindustry/ai/types/LogicAI.java | 4 +--- core/src/mindustry/content/Blocks.java | 2 -- core/src/mindustry/logic/LExecutor.java | 29 ++++++++++++++++-------- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/core/src/mindustry/ai/types/LogicAI.java b/core/src/mindustry/ai/types/LogicAI.java index 1bc1710eb7..50994efced 100644 --- a/core/src/mindustry/ai/types/LogicAI.java +++ b/core/src/mindustry/ai/types/LogicAI.java @@ -15,7 +15,7 @@ public class LogicAI extends AIController{ public LUnitControl control = LUnitControl.idle; public float moveX, moveY, moveRad; - public float itemTimer, payTimer, controlTimer = logicControlTimeout, targetTimer; + public float controlTimer = logicControlTimeout, targetTimer; @Nullable public Building controller; public BuildPlan plan = new BuildPlan(); @@ -39,8 +39,6 @@ public class LogicAI extends AIController{ @Override public void updateMovement(){ - if(itemTimer >= 0) itemTimer -= Time.delta; - if(payTimer >= 0) payTimer -= Time.delta; if(targetTimer > 0f){ targetTimer -= Time.delta; diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index b48d837f52..0fd9f0d513 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2159,10 +2159,8 @@ public class Blocks{ //reinforced stuff - //TODO different name reinforcedPump = new Pump("reinforced-pump"){{ requirements(Category.liquid, with(Items.beryllium, 40, Items.tungsten, 30, Items.silicon, 20)); - //TODO CUSTOM DRAW ANIMATION - pistons - repurpose DrawBlock? consumeLiquid(Liquids.hydrogen, 1.5f / 60f); pumpAmount = 80f / 60f / 4f; diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index aa6daf4b5a..0405a686fd 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -57,6 +57,17 @@ public class LExecutor{ public Team team = Team.derelict; public boolean privileged = false; + //yes, this is a minor memory leak, but it's probably not significant enough to matter + protected IntFloatMap unitTimeouts = new IntFloatMap(); + + boolean timeoutDone(Unit unit, float delay){ + return Time.time >= unitTimeouts.get(unit.id) + delay; + } + + void updateTimeout(Unit unit){ + unitTimeouts.put(unit.id, Time.time); + } + public boolean initialized(){ return instructions.length > 0; } @@ -428,15 +439,15 @@ public class LExecutor{ } } case payDrop -> { - if(ai.payTimer > 0) return; + if(!exec.timeoutDone(unit, LogicAI.transferDelay)) return; if(unit instanceof Payloadc pay && pay.hasPayload()){ Call.payloadDropped(unit, unit.x, unit.y); - ai.payTimer = LogicAI.transferDelay; + exec.updateTimeout(unit); } } case payTake -> { - if(ai.payTimer > 0) return; + if(!exec.timeoutDone(unit, LogicAI.transferDelay)) return; if(unit instanceof Payloadc pay){ //units @@ -460,7 +471,7 @@ public class LExecutor{ } } } - ai.payTimer = LogicAI.transferDelay; + exec.updateTimeout(unit); } } case payEnter -> { @@ -508,7 +519,7 @@ public class LExecutor{ } } case itemDrop -> { - if(ai.itemTimer > 0) return; + if(!exec.timeoutDone(unit, LogicAI.transferDelay)) return; //clear item when dropping to @air if(exec.obj(p1) == Blocks.air){ @@ -516,7 +527,7 @@ public class LExecutor{ if(!net.client()){ unit.clearItem(); } - ai.itemTimer = LogicAI.transferDelay; + exec.updateTimeout(unit); }else{ Building build = exec.building(p1); int dropped = Math.min(unit.stack.amount, exec.numi(p2)); @@ -524,13 +535,13 @@ public class LExecutor{ int accepted = build.acceptStack(unit.item(), dropped, unit); if(accepted > 0){ Call.transferItemTo(unit, unit.item(), accepted, unit.x, unit.y, build); - ai.itemTimer = LogicAI.transferDelay; + exec.updateTimeout(unit); } } } } case itemTake -> { - if(ai.itemTimer > 0) return; + if(!exec.timeoutDone(unit, LogicAI.transferDelay)) return; Building build = exec.building(p1); int amount = exec.numi(p3); @@ -541,7 +552,7 @@ public class LExecutor{ if(taken > 0){ Call.takeItems(build, item, taken, unit); - ai.itemTimer = LogicAI.transferDelay; + exec.updateTimeout(unit); } } }