Direct block payload pickup

This commit is contained in:
Anuken
2020-06-04 10:19:25 -04:00
parent 95354f6d11
commit f112226178
4 changed files with 33 additions and 2 deletions

View File

@ -538,6 +538,11 @@ abstract class TileComp implements Posc, Teamc, Healthc, Tilec, Timerc, QuadTree
return this;
}
/** Tries to take the payload. Returns null if no payload is present. */
public @Nullable Payload takePayload(){
return null;
}
/**
* Tries to put this item into a nearby container, if there are no available
* containers, it gets added to the block's inventory.

View File

@ -13,6 +13,7 @@ import arc.scene.ui.layout.*;
import arc.util.ArcAnnotate.*;
import arc.util.*;
import mindustry.*;
import mindustry.content.*;
import mindustry.entities.*;
import mindustry.entities.units.*;
import mindustry.game.EventType.*;
@ -21,6 +22,7 @@ import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.ui.*;
import mindustry.world.*;
import mindustry.world.blocks.payloads.*;
import mindustry.world.meta.*;
import static arc.Core.scene;
@ -590,8 +592,18 @@ public class DesktopInput extends InputHandler{
pay.pickup(target);
}else if(!pay.hasPayload()){
Tilec tile = world.entWorld(pay.x(), pay.y());
if(tile != null && tile.team() == unit.team() && tile.block().synthetic() && tile.block().buildVisibility != BuildVisibility.hidden && tile.block().size <= 3){
pay.pickup(tile);
if(tile != null && tile.team() == unit.team() && tile.block().synthetic()){
//pick up block directly
if(tile.block().buildVisibility != BuildVisibility.hidden && tile.block().size <= 2){
pay.pickup(tile);
}else{ //pick up block payload
Payload taken = tile.takePayload();
if(taken != null){
pay.addPayload(taken);
Fx.unitPickup.at(tile);
}
}
}
}
}

View File

@ -55,6 +55,13 @@ public class PayloadConveyor extends Block{
public boolean blocked;
public int step = -1, stepAccepted = -1;
@Override
public Payload takePayload(){
Payload t = item;
item = null;
return t;
}
@Override
public void onProximityUpdate(){
super.onProximityUpdate();

View File

@ -51,6 +51,13 @@ public class PayloadAcceptor extends Block{
updatePayload();
}
@Override
public Payload takePayload(){
T t = payload;
payload = null;
return t;
}
public void updatePayload(){
if(payload != null){
payload.set(x + payVector.x, y + payVector.y, payRotation);