From 44ef5148b477756d4c5ae39ff006126b979adb24 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 30 Dec 2019 12:47:40 -0500 Subject: [PATCH] Reduced drone lag --- .../entities/effect/ItemTransfer.java | 2 +- .../mindustry/entities/traits/MinerTrait.java | 21 +++++++++++++++++-- core/src/mindustry/entities/type/Player.java | 5 +++++ core/src/mindustry/world/Tile.java | 2 +- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/entities/effect/ItemTransfer.java b/core/src/mindustry/entities/effect/ItemTransfer.java index ea8366c812..2018d15a69 100644 --- a/core/src/mindustry/entities/effect/ItemTransfer.java +++ b/core/src/mindustry/entities/effect/ItemTransfer.java @@ -44,7 +44,7 @@ public class ItemTransfer extends TimedEntity implements DrawTrait{ create(item, x, y, to, () -> to.addItem(item)); } - @Remote(called = Loc.server) + @Remote(called = Loc.server, unreliable = true) public static void transferItemTo(Item item, int amount, float x, float y, Tile tile){ if(tile == null || tile.entity == null || tile.entity.items == null) return; for(int i = 0; i < Mathf.clamp(amount / 3, 1, 8); i++){ diff --git a/core/src/mindustry/entities/traits/MinerTrait.java b/core/src/mindustry/entities/traits/MinerTrait.java index 4881d3720a..5b3d51c21d 100644 --- a/core/src/mindustry/entities/traits/MinerTrait.java +++ b/core/src/mindustry/entities/traits/MinerTrait.java @@ -7,6 +7,7 @@ import arc.math.*; import arc.util.Time; import mindustry.content.*; import mindustry.entities.Effects; +import mindustry.entities.effect.*; import mindustry.entities.type.*; import mindustry.gen.Call; import mindustry.graphics.*; @@ -38,11 +39,26 @@ public interface MinerTrait extends Entity{ /** Returns whether or not this builder can mine a specific item type. */ boolean canMine(Item item); + /** @return whether to offload mined items immediately at the core. if false, items are collected and dropped in a burst. */ + default boolean offloadImmediately(){ + return false; + } + default void updateMining(){ Unit unit = (Unit)this; Tile tile = getMineTile(); TileEntity core = unit.getClosestCore(); + if(core != null && tile != null && tile.drop() != null && !unit.acceptsItem(tile.drop()) && unit.dst(core) < mineTransferRange){ + int accepted = core.tile.block().acceptStack(unit.item().item, unit.item().amount, core.tile, unit); + if(accepted > 0){ + Call.transferItemTo(unit.item().item, accepted, + tile.worldx() + Mathf.range(tilesize / 2f), + tile.worldy() + Mathf.range(tilesize / 2f), core.tile); + unit.clearItem(); + } + } + if(tile == null || core == null || tile.block() != Blocks.air || dst(tile.worldx(), tile.worldy()) > getMiningRange() || tile.drop() == null || !unit.acceptsItem(tile.drop()) || !canMine(tile.drop())){ setMineTile(null); @@ -52,12 +68,13 @@ public interface MinerTrait extends Entity{ if(Mathf.chance(Time.delta() * (0.06 - item.hardness * 0.01) * getMinePower())){ - if(unit.dst(core) < mineTransferRange && core.tile.block().acceptStack(item, 1, core.tile, unit) == 1){ + if(unit.dst(core) < mineTransferRange && core.tile.block().acceptStack(item, 1, core.tile, unit) == 1 && offloadImmediately()){ Call.transferItemTo(item, 1, tile.worldx() + Mathf.range(tilesize / 2f), tile.worldy() + Mathf.range(tilesize / 2f), core.tile); }else if(unit.acceptsItem(item)){ - Call.transferItemToUnit(item, + //this is clientside, since items are synced anyway + ItemTransfer.transferItemToUnit(item, tile.worldx() + Mathf.range(tilesize / 2f), tile.worldy() + Mathf.range(tilesize / 2f), unit); diff --git a/core/src/mindustry/entities/type/Player.java b/core/src/mindustry/entities/type/Player.java index 8366c01cc6..4077da0e4e 100644 --- a/core/src/mindustry/entities/type/Player.java +++ b/core/src/mindustry/entities/type/Player.java @@ -119,6 +119,11 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ heal(); } + @Override + public boolean offloadImmediately(){ + return true; + } + @Override public TypeID getTypeID(){ return TypeIDs.player; diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index 119af5b8df..fe319fd02e 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -376,7 +376,7 @@ public class Tile implements Position, TargetTrait{ return state.teams.canInteract(team, getTeam()); } - public Item drop(){ + public @Nullable Item drop(){ return overlay == Blocks.air || overlay.itemDrop == null ? floor.itemDrop : overlay.itemDrop; }