mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-07-11 16:28:09 +07:00
More multiplayer fixes
This commit is contained in:
@ -13,7 +13,6 @@ 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.*;
|
||||||
@ -22,10 +21,9 @@ 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 static arc.Core.scene;
|
import static arc.Core.*;
|
||||||
|
import static mindustry.Vars.net;
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
import static mindustry.input.PlaceMode.*;
|
import static mindustry.input.PlaceMode.*;
|
||||||
|
|
||||||
@ -601,33 +599,24 @@ public class DesktopInput extends InputHandler{
|
|||||||
player.mouseX = unit.aimX();
|
player.mouseX = unit.aimX();
|
||||||
player.mouseY = unit.aimY();
|
player.mouseY = unit.aimY();
|
||||||
|
|
||||||
//TODO netsync this
|
|
||||||
if(unit instanceof Payloadc){
|
if(unit instanceof Payloadc){
|
||||||
Payloadc pay = (Payloadc)unit;
|
Payloadc pay = (Payloadc)unit;
|
||||||
|
|
||||||
if(Core.input.keyTap(Binding.pickupCargo) && pay.payloads().size < unit.type().payloadCapacity){
|
if(Core.input.keyTap(Binding.pickupCargo) && pay.payloads().size < unit.type().payloadCapacity){
|
||||||
Unit target = Units.closest(player.team(), pay.x(), pay.y(), 30f, u -> u.isAI() && u.isGrounded());
|
Unit target = Units.closest(player.team(), pay.x(), pay.y(), unit.type().hitsize * 1.1f, u -> u.isAI() && u.isGrounded());
|
||||||
if(target != null){
|
if(target != null){
|
||||||
pay.pickup(target);
|
Call.pickupUnitPayload(player, target);
|
||||||
}else if(!pay.hasPayload()){
|
}else if(!pay.hasPayload()){
|
||||||
Building tile = world.entWorld(pay.x(), pay.y());
|
Building tile = world.entWorld(pay.x(), pay.y());
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if(tile != null && tile.team() == unit.team){
|
||||||
|
Call.pickupBlockPayload(player, tile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Core.input.keyTap(Binding.dropCargo)){
|
if(Core.input.keyTap(Binding.dropCargo)){
|
||||||
|
Call.dropPayload(player, player.x, player.y);
|
||||||
pay.dropLastPayload();
|
pay.dropLastPayload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,8 +33,10 @@ import mindustry.ui.fragments.*;
|
|||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.*;
|
import mindustry.world.blocks.*;
|
||||||
import mindustry.world.blocks.BuildBlock.*;
|
import mindustry.world.blocks.BuildBlock.*;
|
||||||
|
import mindustry.world.blocks.payloads.*;
|
||||||
import mindustry.world.blocks.power.*;
|
import mindustry.world.blocks.power.*;
|
||||||
import mindustry.world.blocks.storage.CoreBlock.*;
|
import mindustry.world.blocks.storage.CoreBlock.*;
|
||||||
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@ -104,6 +106,50 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
player.builder().removeBuild(x, y, breaking);
|
player.builder().removeBuild(x, y, breaking);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Remote(targets = Loc.both, called = Loc.server, forward = true)
|
||||||
|
public static void pickupUnitPayload(Player player, Unit target){
|
||||||
|
Unit unit = player.unit();
|
||||||
|
Payloadc pay = (Payloadc)unit;
|
||||||
|
|
||||||
|
if(target.isAI() && target.isGrounded() && pay.payloads().size < unit.type().payloadCapacity
|
||||||
|
&& target.within(unit, unit.type().hitsize * 1.5f)){
|
||||||
|
pay.pickup(target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Remote(targets = Loc.both, called = Loc.server, forward = true)
|
||||||
|
public static void pickupBlockPayload(Player player, Building tile){
|
||||||
|
Unit unit = player.unit();
|
||||||
|
Payloadc pay = (Payloadc)unit;
|
||||||
|
|
||||||
|
if(tile != null && tile.team() == unit.team && pay.payloads().size < unit.type().payloadCapacity
|
||||||
|
&& unit.within(tile, tilesize * tile.block.size * 1.2f)){
|
||||||
|
//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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Remote(targets = Loc.both, called = Loc.server, forward = true)
|
||||||
|
public static void dropPayload(Player player, float x, float y){
|
||||||
|
Payloadc pay = (Payloadc)player.unit();
|
||||||
|
|
||||||
|
//allow a slight margin of error
|
||||||
|
if(pay.within(x, y, tilesize * 2f)){
|
||||||
|
float prevx = pay.x(), prevy = pay.y();
|
||||||
|
pay.set(x, y);
|
||||||
|
pay.dropLastPayload();
|
||||||
|
pay.set(prevx, prevy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Remote(targets = Loc.client, called = Loc.server)
|
@Remote(targets = Loc.client, called = Loc.server)
|
||||||
public static void dropItem(Player player, float angle){
|
public static void dropItem(Player player, float angle){
|
||||||
if(net.server() && player.unit().stack.amount <= 0){
|
if(net.server() && player.unit().stack.amount <= 0){
|
||||||
|
@ -103,7 +103,7 @@ public class MassDriver extends Block{
|
|||||||
|
|
||||||
//reload regardless of state
|
//reload regardless of state
|
||||||
if(reload > 0f){
|
if(reload > 0f){
|
||||||
reload = Mathf.clamp(reload - delta() / reloadTime * efficiency());
|
reload = Mathf.clamp(reload - edelta() / reloadTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
//cleanup waiting shooters that are not valid
|
//cleanup waiting shooters that are not valid
|
||||||
|
Reference in New Issue
Block a user