Removed junction item voiding

This commit is contained in:
Anuken
2018-11-22 08:39:05 -05:00
parent c5241eaaf6
commit 5447c71790
2 changed files with 14 additions and 61 deletions

View File

@@ -21,7 +21,7 @@ import static io.anuke.ucore.core.Core.camera;
public class BlockRenderer{ public class BlockRenderer{
private final static int initialRequests = 32 * 32; private final static int initialRequests = 32 * 32;
private final static int expandr = 4; private final static int expandr = 6;
private FloorRenderer floorRenderer; private FloorRenderer floorRenderer;

View File

@@ -1,6 +1,5 @@
package io.anuke.mindustry.world.blocks.distribution; package io.anuke.mindustry.world.blocks.distribution;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.NumberUtils; import com.badlogic.gdx.utils.NumberUtils;
import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item;
@@ -8,10 +7,9 @@ import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.meta.BlockGroup; import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.ucore.core.Timers; import io.anuke.ucore.core.Timers;
import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.util.Bits; import io.anuke.ucore.util.Bits;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.content;
public class Junction extends Block{ public class Junction extends Block{
protected float speed = 26; //frames taken to go through this junction protected float speed = 26; //frames taken to go through this junction
@@ -34,8 +32,8 @@ public class Junction extends Block{
public void update(Tile tile){ public void update(Tile tile){
JunctionEntity entity = tile.entity(); JunctionEntity entity = tile.entity();
for(int i = 0; i < 2; i++){ for(int i = 0; i < 4; i++){
Buffer buffer = (i == 0 ? entity.bx : entity.by); Buffer buffer = entity.buffers[i];
if(buffer.index > 0){ if(buffer.index > 0){
if(buffer.index > buffer.items.length) buffer.index = buffer.items.length; if(buffer.index > buffer.items.length) buffer.index = buffer.items.length;
@@ -44,17 +42,11 @@ public class Junction extends Block{
if(Timers.time() >= time + speed || Timers.time() < time){ if(Timers.time() >= time + speed || Timers.time() < time){
int val = Bits.getRightInt(l); Item item = content.item(Bits.getRightInt(l));
Tile dest = tile.getNearby(i);
Item item = content.item(Bits.getLeftShort(val));
int direction = Bits.getRightShort(val);
Tile dest = tile.getNearby(direction);
//skip blocks that don't want the item, keep waiting until they do
if(dest == null || !dest.block().acceptItem(item, dest, tile)){ if(dest == null || !dest.block().acceptItem(item, dest, tile)){
if(buffer.index > 1 && Bits.getRightShort(Bits.getRightInt(buffer.items[1])) != direction){
System.arraycopy(buffer.items, 1, buffer.items, 0, buffer.index - 1);
buffer.index--;
}
continue; continue;
} }
@@ -69,25 +61,19 @@ public class Junction extends Block{
@Override @Override
public void handleItem(Item item, Tile tile, Tile source){ public void handleItem(Item item, Tile tile, Tile source){
JunctionEntity entity = tile.entity(); JunctionEntity entity = tile.entity();
boolean x = tile.x == source.x; long value = Bits.packLong(NumberUtils.floatToIntBits(Timers.time()), item.id);
long value = Bits.packLong(NumberUtils.floatToIntBits(Timers.time()), Bits.packInt((short) item.id, source.relativeTo(tile.x, tile.y))); int relative = source.relativeTo(tile.x, tile.y);
if(x){ entity.buffers[relative].add(value);
entity.bx.add(value);
}else{
entity.by.add(value);
}
} }
@Override @Override
public boolean acceptItem(Item item, Tile tile, Tile source){ public boolean acceptItem(Item item, Tile tile, Tile source){
JunctionEntity entity = tile.entity(); JunctionEntity entity = tile.entity();
boolean x = tile.x == source.x; int relative = source.relativeTo(tile.x, tile.y);
if(entity == null || entity.bx == null || entity.by == null || (x && entity.bx.full()) || (!x && entity.by.full())) if(entity == null || relative == -1 || entity.buffers[relative].full())
return false; return false;
int dir = source.relativeTo(tile.x, tile.y); Tile to = tile.getNearby(relative);
if(dir == -1) return false;
Tile to = tile.getNearby(dir);
return to != null && to.block().acceptItem(item, to, tile); return to != null && to.block().acceptItem(item, to, tile);
} }
@@ -96,41 +82,8 @@ public class Junction extends Block{
return new JunctionEntity(); return new JunctionEntity();
} }
@Override
public Array<Object> getDebugInfo(Tile tile){
JunctionEntity entity = tile.entity();
Array<Object> arr = super.getDebugInfo(tile);
for(int i = 0; i < 4; i++){
arr.add("nearby." + i);
arr.add(tile.getNearby(i));
}
Consumer<Buffer> write = b -> {
for(int i = 0; i < b.index; i++){
long l = b.items[i];
float time = NumberUtils.intBitsToFloat(Bits.getLeftInt(l));
int val = Bits.getRightInt(l);
Item item = content.item(Bits.getLeftShort(val));
int direction = Bits.getRightShort(val);
Tile dest = tile.getNearby(direction);
arr.add(" bufferx.item");
arr.add(time + " | " + item.name + " | " + dest.block() + ":" + dest.floor());
}
};
arr.add("buffer.bx");
arr.add(entity.bx.index);
write.accept(entity.bx);
arr.add("buffer.by");
arr.add(entity.bx.index);
write.accept(entity.by);
return arr;
}
class JunctionEntity extends TileEntity{ class JunctionEntity extends TileEntity{
Buffer bx = new Buffer(); Buffer[] buffers = {new Buffer(), new Buffer(), new Buffer(), new Buffer()};
Buffer by = new Buffer();
} }
class Buffer{ class Buffer{