Dump like bridges do

This commit is contained in:
Patrick 'Quezler' Mounier
2020-03-05 12:11:55 +01:00
parent e7298702a1
commit ecb09c0f04
2 changed files with 35 additions and 12 deletions

View File

@@ -109,7 +109,7 @@ public abstract class BlockStorage extends UnlockableContent{
public void tryDumpLiquid(Tile tile, Liquid liquid){ public void tryDumpLiquid(Tile tile, Liquid liquid){
Array<Tile> proximity = tile.entity.proximity(); Array<Tile> proximity = tile.entity.proximity();
int dump = tile.rotation(); int dump = retrieveDump(tile);
for(int i = 0; i < proximity.size; i++){ for(int i = 0; i < proximity.size; i++){
incrementDump(tile, proximity.size); incrementDump(tile, proximity.size);
@@ -197,7 +197,7 @@ public abstract class BlockStorage extends UnlockableContent{
*/ */
public void offloadNear(Tile tile, Item item){ public void offloadNear(Tile tile, Item item){
Array<Tile> proximity = tile.entity.proximity(); Array<Tile> proximity = tile.entity.proximity();
int dump = tile.rotation(); int dump = retrieveDump(tile);
for(int i = 0; i < proximity.size; i++){ for(int i = 0; i < proximity.size; i++){
incrementDump(tile, proximity.size); incrementDump(tile, proximity.size);
@@ -227,7 +227,7 @@ public abstract class BlockStorage extends UnlockableContent{
return false; return false;
Array<Tile> proximity = entity.proximity(); Array<Tile> proximity = entity.proximity();
int dump = tile.rotation(); int dump = retrieveDump(tile);
if(proximity.size == 0) return false; if(proximity.size == 0) return false;
@@ -263,6 +263,10 @@ public abstract class BlockStorage extends UnlockableContent{
return false; return false;
} }
protected int retrieveDump(Tile tile){
return tile.rotation();
}
protected void incrementDump(Tile tile, int prox){ protected void incrementDump(Tile tile, int prox){
tile.rotation((byte)((tile.rotation() + 1) % prox)); tile.rotation((byte)((tile.rotation() + 1) % prox));
} }

View File

@@ -171,6 +171,18 @@ public class CraterConveyor extends Block implements Autotiler{
} }
if(shouldLaunch(tile)){ if(shouldLaunch(tile)){
// when near the center of the target tile...
if(entity.reload < 0.25f){
if(entity.blendbit2 != 5 && (entity.from != tile.pos() || entity.blendbit2 == 6)){ // ...and if its not a crater conveyor, start unloading (everything)
while(true) if(!tryDump(tile)) break;
if(entity.items.total() == 0){
Effects.effect(Fx.plasticburn, tile.drawx(), tile.drawy());
bump(tile);
}
}
}
Tile destination = tile.front(); Tile destination = tile.front();
// failsafe // failsafe
@@ -182,15 +194,6 @@ public class CraterConveyor extends Block implements Autotiler{
// update the target first to potentially make room // update the target first to potentially make room
destination.block().update(destination); destination.block().update(destination);
// when near the center of the target tile...
if(entity.reload < 0.25f){
if(entity.blendbit2 != 5 && (entity.from != tile.pos() || entity.blendbit2 == 6)){ // ...and if its not a crater conveyor, start unloading (everything)
while(entity.items.total() > 0 && entity.items.first() != null && offloadDir(tile, entity.items.first())) entity.items.remove(entity.items.first(), 1);
if(entity.items.total() == 0) Effects.effect(Fx.plasticburn, tile.drawx(), tile.drawy());
if(entity.items.total() == 0) bump(tile);
}
}
// when basically exactly on the center: // when basically exactly on the center:
if(entity.reload == 0){ if(entity.reload == 0){
if(destination.block() instanceof CraterConveyor){ if(destination.block() instanceof CraterConveyor){
@@ -254,11 +257,14 @@ public class CraterConveyor extends Block implements Autotiler{
int from = Pos.invalid; int from = Pos.invalid;
float reload; float reload;
byte dump;
@Override @Override
public void write(DataOutput stream) throws IOException{ public void write(DataOutput stream) throws IOException{
super.write(stream); super.write(stream);
stream.writeInt(from); stream.writeInt(from);
stream.writeByte(dump);
stream.writeFloat(reload); stream.writeFloat(reload);
} }
@@ -267,6 +273,7 @@ public class CraterConveyor extends Block implements Autotiler{
super.read(stream, revision); super.read(stream, revision);
from = stream.readInt(); from = stream.readInt();
dump = stream.readByte();
reload = stream.readFloat(); reload = stream.readFloat();
} }
} }
@@ -322,4 +329,16 @@ public class CraterConveyor extends Block implements Autotiler{
|| (entity.items.total() >= getMaximumAccepted(tile, item)) // filled to capacity || (entity.items.total() >= getMaximumAccepted(tile, item)) // filled to capacity
|| (tile.front() == source)); // fed from the front || (tile.front() == source)); // fed from the front
} }
@Override
protected int retrieveDump(Tile tile){
return tile.<CraterConveyorEntity>ent().dump;
}
@Override
protected void incrementDump(Tile tile, int prox){
CraterConveyorEntity entity = tile.ent();
entity.dump = (byte)((entity.dump + 1) % prox);
}
} }