Removed junction item voiding
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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{
|
||||||
|
|||||||
Reference in New Issue
Block a user