Reduced drone lag
This commit is contained in:
@@ -44,7 +44,7 @@ public class ItemTransfer extends TimedEntity implements DrawTrait{
|
|||||||
create(item, x, y, to, () -> to.addItem(item));
|
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){
|
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;
|
if(tile == null || tile.entity == null || tile.entity.items == null) return;
|
||||||
for(int i = 0; i < Mathf.clamp(amount / 3, 1, 8); i++){
|
for(int i = 0; i < Mathf.clamp(amount / 3, 1, 8); i++){
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import arc.math.*;
|
|||||||
import arc.util.Time;
|
import arc.util.Time;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.entities.Effects;
|
import mindustry.entities.Effects;
|
||||||
|
import mindustry.entities.effect.*;
|
||||||
import mindustry.entities.type.*;
|
import mindustry.entities.type.*;
|
||||||
import mindustry.gen.Call;
|
import mindustry.gen.Call;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
@@ -38,11 +39,26 @@ public interface MinerTrait extends Entity{
|
|||||||
/** Returns whether or not this builder can mine a specific item type. */
|
/** Returns whether or not this builder can mine a specific item type. */
|
||||||
boolean canMine(Item item);
|
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(){
|
default void updateMining(){
|
||||||
Unit unit = (Unit)this;
|
Unit unit = (Unit)this;
|
||||||
Tile tile = getMineTile();
|
Tile tile = getMineTile();
|
||||||
TileEntity core = unit.getClosestCore();
|
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()
|
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())){
|
|| tile.drop() == null || !unit.acceptsItem(tile.drop()) || !canMine(tile.drop())){
|
||||||
setMineTile(null);
|
setMineTile(null);
|
||||||
@@ -52,12 +68,13 @@ public interface MinerTrait extends Entity{
|
|||||||
|
|
||||||
if(Mathf.chance(Time.delta() * (0.06 - item.hardness * 0.01) * getMinePower())){
|
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,
|
Call.transferItemTo(item, 1,
|
||||||
tile.worldx() + Mathf.range(tilesize / 2f),
|
tile.worldx() + Mathf.range(tilesize / 2f),
|
||||||
tile.worldy() + Mathf.range(tilesize / 2f), core.tile);
|
tile.worldy() + Mathf.range(tilesize / 2f), core.tile);
|
||||||
}else if(unit.acceptsItem(item)){
|
}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.worldx() + Mathf.range(tilesize / 2f),
|
||||||
tile.worldy() + Mathf.range(tilesize / 2f),
|
tile.worldy() + Mathf.range(tilesize / 2f),
|
||||||
unit);
|
unit);
|
||||||
|
|||||||
@@ -119,6 +119,11 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
|
|||||||
heal();
|
heal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean offloadImmediately(){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypeID getTypeID(){
|
public TypeID getTypeID(){
|
||||||
return TypeIDs.player;
|
return TypeIDs.player;
|
||||||
|
|||||||
@@ -376,7 +376,7 @@ public class Tile implements Position, TargetTrait{
|
|||||||
return state.teams.canInteract(team, getTeam());
|
return state.teams.canInteract(team, getTeam());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Item drop(){
|
public @Nullable Item drop(){
|
||||||
return overlay == Blocks.air || overlay.itemDrop == null ? floor.itemDrop : overlay.itemDrop;
|
return overlay == Blocks.air || overlay.itemDrop == null ? floor.itemDrop : overlay.itemDrop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user