From f112226178e41d9b81a8ee45a7a22ab45d05b08c Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 4 Jun 2020 10:19:25 -0400 Subject: [PATCH] Direct block payload pickup --- core/src/mindustry/entities/comp/TileComp.java | 5 +++++ core/src/mindustry/input/DesktopInput.java | 16 ++++++++++++++-- .../blocks/distribution/PayloadConveyor.java | 7 +++++++ .../world/blocks/production/PayloadAcceptor.java | 7 +++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/entities/comp/TileComp.java b/core/src/mindustry/entities/comp/TileComp.java index cc02265511..3d6f721544 100644 --- a/core/src/mindustry/entities/comp/TileComp.java +++ b/core/src/mindustry/entities/comp/TileComp.java @@ -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. diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 6da45de40b..6ae7cfb81c 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -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); + } + } + } } } diff --git a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java index 4010d58b81..cc91fda1d1 100644 --- a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java @@ -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(); diff --git a/core/src/mindustry/world/blocks/production/PayloadAcceptor.java b/core/src/mindustry/world/blocks/production/PayloadAcceptor.java index 9583bffe25..56a485befe 100644 --- a/core/src/mindustry/world/blocks/production/PayloadAcceptor.java +++ b/core/src/mindustry/world/blocks/production/PayloadAcceptor.java @@ -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);