From dbee30a412a5ecc06f640022e2d17bce7e2aaa23 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 9 Jul 2018 18:14:55 -0400 Subject: [PATCH] Updated uCore / Made splitter distribute properly --- build.gradle | 2 +- core/src/io/anuke/mindustry/Mindustry.java | 2 -- .../content/blocks/ProductionBlocks.java | 4 +-- .../io/anuke/mindustry/world/ItemBuffer.java | 22 ++++++++++++-- .../world/blocks/distribution/Splitter.java | 30 ++++++++----------- .../world/blocks/power/PowerNode.java | 2 +- 6 files changed, 36 insertions(+), 26 deletions(-) diff --git a/build.gradle b/build.gradle index cd13ee0ad0..ede4be0f00 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ allprojects { gdxVersion = '1.9.8' roboVMVersion = '2.3.0' aiVersion = '1.8.1' - uCoreVersion = '2241e5402e' + uCoreVersion = 'f937c5cad6' getVersionString = { String buildVersion = getBuildVersion() diff --git a/core/src/io/anuke/mindustry/Mindustry.java b/core/src/io/anuke/mindustry/Mindustry.java index 79c208d4cb..86cc421e96 100644 --- a/core/src/io/anuke/mindustry/Mindustry.java +++ b/core/src/io/anuke/mindustry/Mindustry.java @@ -1,6 +1,5 @@ package io.anuke.mindustry; -import com.badlogic.gdx.utils.async.AsyncExecutor; import io.anuke.mindustry.core.*; import io.anuke.mindustry.io.BundleLoader; import io.anuke.ucore.core.Timers; @@ -10,7 +9,6 @@ import io.anuke.ucore.util.Log; import static io.anuke.mindustry.Vars.*; public class Mindustry extends ModuleCore { - private AsyncExecutor exec = new AsyncExecutor(1); @Override public void init(){ diff --git a/core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java b/core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java index 8bbdba1f1e..0e3ae62edd 100644 --- a/core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java @@ -84,12 +84,12 @@ public class ProductionBlocks extends BlockList implements ContentList { updateEffect = BlockFx.pulverize; liquidCapacity = 50f; updateEffectChance = 0.05f; - pumpAmount = 0.06f; + pumpAmount = 0.08f; size = 3; liquidCapacity = 30f; consumes.item(Items.sand); - consumes.power(0.6f); + consumes.power(0.5f); consumes.liquid(Liquids.water, 0.3f); }}; diff --git a/core/src/io/anuke/mindustry/world/ItemBuffer.java b/core/src/io/anuke/mindustry/world/ItemBuffer.java index fa0ba89eb5..d09583d6d1 100644 --- a/core/src/io/anuke/mindustry/world/ItemBuffer.java +++ b/core/src/io/anuke/mindustry/world/ItemBuffer.java @@ -20,9 +20,13 @@ public class ItemBuffer { return index < buffer.length; } - public void accept(Item item){ + public void accept(Item item, short data){ //if(!accepts()) return; - buffer[index ++] = Bits.packLong(NumberUtils.floatToIntBits(Timers.time()), item.id); + buffer[index ++] = Bits.packLong(NumberUtils.floatToIntBits(Timers.time()), Bits.packInt((short)item.id, data)); + } + + public void accept(Item item){ + accept(item, (short)-1); } public Item poll(){ @@ -31,12 +35,24 @@ public class ItemBuffer { float time = NumberUtils.intBitsToFloat(Bits.getLeftInt(l)); if(Timers.time() >= time + speed || Timers.time() < time){ - return Item.getByID(Bits.getRightInt(l)); + return Item.getByID(Bits.getLeftShort(Bits.getRightInt(l))); } } return null; } + public short pollData(){ + if(index > 0){ + long l = buffer[0]; + float time = NumberUtils.intBitsToFloat(Bits.getLeftInt(l)); + + if(Timers.time() >= time + speed || Timers.time() < time){ + return Bits.getRightShort(Bits.getRightInt(l)); + } + } + return -1; + } + public void remove(){ System.arraycopy(buffer, 1, buffer, 0, index - 1); index --; diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Splitter.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Splitter.java index 86301fb49c..e42a3f721c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Splitter.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Splitter.java @@ -1,21 +1,19 @@ package io.anuke.mindustry.world.blocks.distribution; -import com.badlogic.gdx.math.GridPoint2; +import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Edges; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.meta.BlockGroup; -import static io.anuke.mindustry.Vars.world; - public class Splitter extends Block{ + protected float speed = 30f; public Splitter(String name){ super(name); solid = true; instantTransfer = true; - destructible = true; + update = true; group = BlockGroup.transportation; } @@ -23,26 +21,24 @@ public class Splitter extends Block{ public boolean acceptItem(Item item, Tile tile, Tile source){ Tile to = getTileTarget(item, tile, source, false); - return to != null && to.block().acceptItem(item, to, tile); + return to != null; } @Override public void handleItem(Item item, Tile tile, Tile source){ Tile to = getTileTarget(item, tile, source, true); - to.block().handleItem(item, to, tile); } - Tile getTileTarget(Item item, Tile dest, Tile source, boolean flip){ - GridPoint2[] points = Edges.getEdges(size); - int counter = source.getDump(); - for (int i = 0; i < points.length; i++) { - GridPoint2 point = points[(i + counter++) % points.length]; - source.setDump((byte)(counter % points.length)); - Tile tile = world.tile(dest.x + point.x, dest.y + point.y); - if(tile != source && !(tile.block().instantTransfer && source.block().instantTransfer) && - tile.block().acceptItem(item, tile, dest)){ - return tile; + Tile getTileTarget(Item item, Tile tile, Tile source, boolean flip){ + Array proximity = tile.entity.proximity(); + int counter = tile.getDump(); + for (int i = 0; i < proximity.size; i++) { + Tile other = proximity.get((i + counter) % proximity.size); + if(flip) tile.setDump((byte)((tile.getDump() + 1) % proximity.size)); + if(other != source && !(source.block().instantTransfer && other.block().instantTransfer && !(other.block() instanceof Splitter)) && + other.block().acceptItem(item, other, tile)){ + return other; } } return null; diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java index 3f7db1fffe..84b3769fdd 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java @@ -70,7 +70,7 @@ public class PowerNode extends PowerBlock{ super.setStats(); stats.add(BlockStat.powerRange, laserRange, StatUnit.blocks); - stats.add(BlockStat.powerTransferSpeed, powerSpeed * 60, StatUnit.powerSecond); + stats.add(BlockStat.powerTransferSpeed, powerSpeed * 60 / 2f, StatUnit.powerSecond); //divided by 2 since passback exists } @Override