mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-07-18 11:47:47 +07:00
Direct block payload pickup
This commit is contained in:
@ -538,6 +538,11 @@ abstract class TileComp implements Posc, Teamc, Healthc, Tilec, Timerc, QuadTree
|
|||||||
return this;
|
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
|
* Tries to put this item into a nearby container, if there are no available
|
||||||
* containers, it gets added to the block's inventory.
|
* containers, it gets added to the block's inventory.
|
||||||
|
@ -13,6 +13,7 @@ import arc.scene.ui.layout.*;
|
|||||||
import arc.util.ArcAnnotate.*;
|
import arc.util.ArcAnnotate.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
|
import mindustry.content.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
import mindustry.entities.units.*;
|
import mindustry.entities.units.*;
|
||||||
import mindustry.game.EventType.*;
|
import mindustry.game.EventType.*;
|
||||||
@ -21,6 +22,7 @@ import mindustry.gen.*;
|
|||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
import mindustry.world.blocks.payloads.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
import static arc.Core.scene;
|
import static arc.Core.scene;
|
||||||
@ -590,8 +592,18 @@ public class DesktopInput extends InputHandler{
|
|||||||
pay.pickup(target);
|
pay.pickup(target);
|
||||||
}else if(!pay.hasPayload()){
|
}else if(!pay.hasPayload()){
|
||||||
Tilec tile = world.entWorld(pay.x(), pay.y());
|
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){
|
if(tile != null && tile.team() == unit.team() && tile.block().synthetic()){
|
||||||
pay.pickup(tile);
|
//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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,13 @@ public class PayloadConveyor extends Block{
|
|||||||
public boolean blocked;
|
public boolean blocked;
|
||||||
public int step = -1, stepAccepted = -1;
|
public int step = -1, stepAccepted = -1;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Payload takePayload(){
|
||||||
|
Payload t = item;
|
||||||
|
item = null;
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onProximityUpdate(){
|
public void onProximityUpdate(){
|
||||||
super.onProximityUpdate();
|
super.onProximityUpdate();
|
||||||
|
@ -51,6 +51,13 @@ public class PayloadAcceptor extends Block{
|
|||||||
updatePayload();
|
updatePayload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Payload takePayload(){
|
||||||
|
T t = payload;
|
||||||
|
payload = null;
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
public void updatePayload(){
|
public void updatePayload(){
|
||||||
if(payload != null){
|
if(payload != null){
|
||||||
payload.set(x + payVector.x, y + payVector.y, payRotation);
|
payload.set(x + payVector.x, y + payVector.y, payRotation);
|
||||||
|
Reference in New Issue
Block a user