From d1fb436d6d2be94890bd3739adb12bb786360e1c Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 25 Jul 2021 19:55:07 -0400 Subject: [PATCH] Further bridge cleanup --- .../world/blocks/distribution/ItemBridge.java | 64 ++++++++----------- .../world/blocks/liquid/LiquidBridge.java | 8 +-- gradle.properties | 2 +- 3 files changed, 27 insertions(+), 47 deletions(-) diff --git a/core/src/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/mindustry/world/blocks/distribution/ItemBridge.java index 8f5233f535..f8f3af4ab9 100644 --- a/core/src/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/mindustry/world/blocks/distribution/ItemBridge.java @@ -5,7 +5,6 @@ import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; import arc.struct.*; -import arc.struct.IntSet.*; import arc.util.*; import arc.util.io.*; import mindustry.annotations.Annotations.*; @@ -177,8 +176,7 @@ public class ItemBridge extends Block{ public class ItemBridgeBuild extends Building{ public int link = -1; - //TODO awful - public IntSet incoming = new IntSet(); + public IntSeq incoming = new IntSeq(false, 4); public float warmup; public float time; public boolean wasMoved, moved; @@ -278,13 +276,15 @@ public class ItemBridge extends Block{ } public void checkIncoming(){ - IntSetIterator it = incoming.iterator(); - while(it.hasNext){ - int i = it.next(); + int idx = 0; + while(idx < incoming.size){ + int i = incoming.items[idx]; Tile other = world.tile(i); if(!linkValid(tile, other, false) || ((ItemBridgeBuild)other.build).link != tile.pos()){ - it.remove(); + incoming.removeIndex(idx); + idx --; } + idx ++; } } @@ -304,7 +304,11 @@ public class ItemBridge extends Block{ doDump(); warmup = 0f; }else{ - ((ItemBridgeBuild)other.build).incoming.add(tile.pos()); + var inc = ((ItemBridgeBuild)other.build).incoming; + int pos = tile.pos(); + if(!inc.contains(pos)){ + inc.add(pos); + } warmup = Mathf.approachDelta(warmup, efficiency(), 1f / 30f); updateTransport(other.build); @@ -382,22 +386,7 @@ public class ItemBridge extends Block{ @Override public boolean acceptItem(Building source, Item item){ - if(team != source.team) return false; - - Tile other = world.tile(link); - - if(items.total() >= itemCapacity) return false; - - if(linked(source)) return true; - - if(linkValid(tile, other)){ - int rel = relativeTo(other); - int rel2 = relativeTo(Edges.getFacingEdge(source, this)); - - return rel != rel2; - } - - return false; + return hasItems && team == source.team && items.total() < itemCapacity && checkAccept(source, world.tile(link)); } @Override @@ -407,16 +396,17 @@ public class ItemBridge extends Block{ @Override public boolean acceptLiquid(Building source, Liquid liquid){ - if(team != source.team || !hasLiquids) return false; - - Tile other = world.tile(link); - - if(!(liquids.current() == liquid || liquids.get(liquids.current()) < 0.2f)) return false; + return + hasLiquids && team == source.team && + (liquids.current() == liquid || liquids.get(liquids.current()) < 0.2f) && + checkAccept(source, world.tile(link)); + } + protected boolean checkAccept(Building source, Tile other){ if(linked(source)) return true; if(linkValid(tile, other)){ - int rel = relativeTo(other.x, other.y); + int rel = relativeTo(other); int rel2 = relativeTo(Edges.getFacingEdge(source, this)); return rel != rel2; @@ -440,10 +430,8 @@ public class ItemBridge extends Block{ Tile edge = Edges.getFacingEdge(to.tile, tile); int i = relativeTo(edge.x, edge.y); - IntSetIterator it = incoming.iterator(); - - while(it.hasNext){ - int v = it.next(); + for(int j = 0; j < incoming.size; j++){ + int v = incoming.items[j]; if(relativeTo(Point2.x(v), Point2.y(v)) == i){ return false; } @@ -469,7 +457,7 @@ public class ItemBridge extends Block{ @Override public byte version(){ - return 1; //TODO write cycleSpeed, 1 + return 1; } @Override @@ -479,10 +467,8 @@ public class ItemBridge extends Block{ write.f(warmup); write.b(incoming.size); - IntSetIterator it = incoming.iterator(); - - while(it.hasNext){ - write.i(it.next()); + for(int i = 0; i < incoming.size; i++){ + write.i(incoming.items[i]); } write.bool(wasMoved || moved); diff --git a/core/src/mindustry/world/blocks/liquid/LiquidBridge.java b/core/src/mindustry/world/blocks/liquid/LiquidBridge.java index 4214a1cee9..c58a60c36c 100644 --- a/core/src/mindustry/world/blocks/liquid/LiquidBridge.java +++ b/core/src/mindustry/world/blocks/liquid/LiquidBridge.java @@ -1,7 +1,6 @@ package mindustry.world.blocks.liquid; import mindustry.gen.*; -import mindustry.type.*; import mindustry.world.blocks.distribution.*; import mindustry.world.meta.*; @@ -20,7 +19,7 @@ public class LiquidBridge extends ItemBridge{ @Override public void updateTransport(Building other){ - if(warmup >= 0.5f){ + if(warmup >= 0.25f){ moved |= moveLiquid(other, liquids.current()) > 0.05f; } } @@ -29,10 +28,5 @@ public class LiquidBridge extends ItemBridge{ public void doDump(){ dumpLiquid(liquids.current(), 1f); } - - @Override - public boolean acceptItem(Building source, Item item){ - return false; - } } } diff --git a/gradle.properties b/gradle.properties index 097aaec115..6df565d95f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,4 +10,4 @@ kapt.include.compile.classpath=false kotlin.stdlib.default.dependency=false #needed for android compilation android.useAndroidX=true -archash=c066b6a3db27ce21fa4d07c28c0d70b86a87cd55 +archash=d7b814ff69853e3bc8fa0703d3b2829cbff65e9e