Building tile > Building build @ Inputhandler.java (#4241)

Was weird to see `if(player != null) tile.lastAccessed = player.name;` in there.
This commit is contained in:
Patrick 'Quezler' Mounier
2021-01-03 22:18:39 +01:00
committed by GitHub
parent 0f3716b8dd
commit 3eb0857906

View File

@@ -129,11 +129,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
@Remote(called = Loc.server, targets = Loc.both, forward = true)
public static void requestItem(Player player, Building tile, Item item, int amount){
if(player == null || tile == null || !tile.interactable(player.team()) || !player.within(tile, buildingRange) || player.dead()) return;
public static void requestItem(Player player, Building build, Item item, int amount){
if(player == null || build == null || !build.interactable(player.team()) || !player.within(build, buildingRange) || player.dead()) return;
if(net.server() && (!Units.canInteract(player, tile) ||
!netServer.admins.allowAction(player, ActionType.withdrawItem, tile.tile(), action -> {
if(net.server() && (!Units.canInteract(player, build) ||
!netServer.admins.allowAction(player, ActionType.withdrawItem, build.tile(), action -> {
action.item = item;
action.itemAmount = amount;
}))){
@@ -142,20 +142,20 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
//remove item for every controlling unit
player.unit().eachGroup(unit -> {
Call.takeItems(tile, item, unit.maxAccepted(item), unit);
Call.takeItems(build, item, unit.maxAccepted(item), unit);
if(unit == player.unit()){
Events.fire(new WithdrawEvent(tile, player, item, amount));
Events.fire(new WithdrawEvent(build, player, item, amount));
}
});
}
@Remote(targets = Loc.both, forward = true, called = Loc.server)
public static void transferInventory(Player player, Building tile){
if(player == null || tile == null || !player.within(tile, buildingRange) || tile.items == null || player.dead()) return;
public static void transferInventory(Player player, Building build){
if(player == null || build == null || !player.within(build, buildingRange) || build.items == null || player.dead()) return;
if(net.server() && (player.unit().stack.amount <= 0 || !Units.canInteract(player, tile) ||
!netServer.admins.allowAction(player, ActionType.depositItem, tile.tile, action -> {
if(net.server() && (player.unit().stack.amount <= 0 || !Units.canInteract(player, build) ||
!netServer.admins.allowAction(player, ActionType.depositItem, build.tile, action -> {
action.itemAmount = player.unit().stack.amount;
action.item = player.unit().item();
}))){
@@ -165,12 +165,12 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
//deposit for every controlling unit
player.unit().eachGroup(unit -> {
Item item = unit.item();
int accepted = tile.acceptStack(item, unit.stack.amount, unit);
int accepted = build.acceptStack(item, unit.stack.amount, unit);
Call.transferItemTo(unit, item, accepted, unit.x, unit.y, tile);
Call.transferItemTo(unit, item, accepted, unit.x, unit.y, build);
if(unit == player.unit()){
Events.fire(new DepositEvent(tile, player, item, accepted));
Events.fire(new DepositEvent(build, player, item, accepted));
}
});
}
@@ -194,22 +194,22 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
@Remote(targets = Loc.both, called = Loc.server)
public static void requestBuildPayload(Player player, Building tile){
public static void requestBuildPayload(Player player, Building build){
if(player == null) return;
Unit unit = player.unit();
Payloadc pay = (Payloadc)unit;
if(tile != null && tile.team == unit.team
&& unit.within(tile, tilesize * tile.block.size * 1.2f + tilesize * 5f)){
if(build != null && build.team == unit.team
&& unit.within(build, tilesize * build.block.size * 1.2f + tilesize * 5f)){
//pick up block's payload
Payload current = tile.getPayload();
Payload current = build.getPayload();
if(current != null && pay.canPickupPayload(current)){
Call.pickedBuildPayload(unit, tile, false);
Call.pickedBuildPayload(unit, build, false);
//pick up whole building directly
}else if(tile.block.buildVisibility != BuildVisibility.hidden && tile.canPickup() && pay.canPickup(tile)){
Call.pickedBuildPayload(unit, tile, true);
}else if(build.block.buildVisibility != BuildVisibility.hidden && build.canPickup() && pay.canPickup(build)){
Call.pickedBuildPayload(unit, build, true);
}
}
}
@@ -224,29 +224,29 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
@Remote(targets = Loc.server, called = Loc.server)
public static void pickedBuildPayload(Unit unit, Building tile, boolean onGround){
if(tile != null && unit instanceof Payloadc pay){
public static void pickedBuildPayload(Unit unit, Building build, boolean onGround){
if(build != null && unit instanceof Payloadc pay){
if(onGround){
if(tile.block.buildVisibility != BuildVisibility.hidden && tile.canPickup() && pay.canPickup(tile)){
pay.pickup(tile);
if(build.block.buildVisibility != BuildVisibility.hidden && build.canPickup() && pay.canPickup(build)){
pay.pickup(build);
}else{
Fx.unitPickup.at(tile);
tile.tile.remove();
Fx.unitPickup.at(build);
build.tile.remove();
}
}else{
Payload current = tile.getPayload();
Payload current = build.getPayload();
if(current != null && pay.canPickupPayload(current)){
Payload taken = tile.takePayload();
Payload taken = build.takePayload();
if(taken != null){
pay.addPayload(taken);
Fx.unitPickup.at(tile);
Fx.unitPickup.at(build);
}
}
}
}else if(tile != null && onGround){
Fx.unitPickup.at(tile);
tile.tile.remove();
}else if(build != null && onGround){
Fx.unitPickup.at(build);
build.tile.remove();
}
}
@@ -293,27 +293,27 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
@Remote(targets = Loc.both, called = Loc.server, forward = true, unreliable = true)
public static void rotateBlock(@Nullable Player player, Building tile, boolean direction){
if(tile == null) return;
public static void rotateBlock(@Nullable Player player, Building build, boolean direction){
if(build == null) return;
if(net.server() && (!Units.canInteract(player, tile) ||
!netServer.admins.allowAction(player, ActionType.rotate, tile.tile(), action -> action.rotation = Mathf.mod(tile.rotation + Mathf.sign(direction), 4)))){
if(net.server() && (!Units.canInteract(player, build) ||
!netServer.admins.allowAction(player, ActionType.rotate, build.tile(), action -> action.rotation = Mathf.mod(build.rotation + Mathf.sign(direction), 4)))){
throw new ValidateException(player, "Player cannot rotate a block.");
}
if(player != null) tile.lastAccessed = player.name;
tile.rotation = Mathf.mod(tile.rotation + Mathf.sign(direction), 4);
tile.updateProximity();
tile.noSleep();
if(player != null) build.lastAccessed = player.name;
build.rotation = Mathf.mod(build.rotation + Mathf.sign(direction), 4);
build.updateProximity();
build.noSleep();
}
@Remote(targets = Loc.both, called = Loc.both, forward = true)
public static void tileConfig(@Nullable Player player, Building tile, @Nullable Object value){
if(tile == null) return;
if(net.server() && (!Units.canInteract(player, tile) ||
!netServer.admins.allowAction(player, ActionType.configure, tile.tile, action -> action.config = value))) throw new ValidateException(player, "Player cannot configure a tile.");
tile.configured(player == null || player.dead() ? null : player.unit(), value);
Core.app.post(() -> Events.fire(new ConfigEvent(tile, player, value)));
public static void tileConfig(@Nullable Player player, Building build, @Nullable Object value){
if(build == null) return;
if(net.server() && (!Units.canInteract(player, build) ||
!netServer.admins.allowAction(player, ActionType.configure, build.tile, action -> action.config = value))) throw new ValidateException(player, "Player cannot configure a tile.");
build.configured(player == null || player.dead() ? null : player.unit(), value);
Core.app.post(() -> Events.fire(new ConfigEvent(build, player, value)));
}
//only useful for servers or local mods, and is not replicated across clients
@@ -461,10 +461,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(target != null){
Call.requestUnitPayload(player, target);
}else{
Building tile = world.buildWorld(pay.x(), pay.y());
Building build = world.buildWorld(pay.x(), pay.y());
if(tile != null && tile.team == unit.team){
Call.requestBuildPayload(player, tile);
if(build != null && build.team == unit.team){
Call.requestBuildPayload(player, build);
}
}
}
@@ -866,8 +866,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
/** Handles tile tap events that are not platform specific. */
boolean tileTapped(@Nullable Building tile){
if(tile == null){
boolean tileTapped(@Nullable Building build){
if(build == null){
frag.inv.hide();
frag.config.hideConfig();
return false;
@@ -875,18 +875,18 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
boolean consumed = false, showedInventory = false;
//check if tapped block is configurable
if(tile.block.configurable && tile.interactable(player.team())){
if(build.block.configurable && build.interactable(player.team())){
consumed = true;
if(((!frag.config.isShown() && tile.shouldShowConfigure(player)) //if the config fragment is hidden, show
if(((!frag.config.isShown() && build.shouldShowConfigure(player)) //if the config fragment is hidden, show
//alternatively, the current selected block can 'agree' to switch config tiles
|| (frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(tile)))){
Sounds.click.at(tile);
frag.config.showConfig(tile);
|| (frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(build)))){
Sounds.click.at(build);
frag.config.showConfig(build);
}
//otherwise...
}else if(!frag.config.hasConfigMouse()){ //make sure a configuration fragment isn't on the cursor
//then, if it's shown and the current block 'agrees' to hide, hide it.
if(frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(tile)){
if(frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(build)){
consumed = true;
frag.config.hideConfig();
}
@@ -897,16 +897,16 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
//call tapped event
if(!consumed && tile.interactable(player.team())){
tile.tapped();
if(!consumed && build.interactable(player.team())){
build.tapped();
}
//consume tap event if necessary
if(tile.interactable(player.team()) && tile.block.consumesTap){
if(build.interactable(player.team()) && build.block.consumesTap){
consumed = true;
}else if(tile.interactable(player.team()) && tile.block.synthetic() && !consumed){
if(tile.block.hasItems && tile.items.total() > 0){
frag.inv.showFor(tile);
}else if(build.interactable(player.team()) && build.block.synthetic() && !consumed){
if(build.block.hasItems && build.items.total() > 0){
frag.inv.showFor(build);
consumed = true;
showedInventory = true;
}
@@ -1006,8 +1006,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
}
Building tile = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
if(tile instanceof ControlBlock cont && cont.canControl() && tile.team == player.team()){
Building build = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
if(build instanceof ControlBlock cont && cont.canControl() && build.team == player.team()){
return cont.unit();
}
@@ -1071,7 +1071,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
return droppingItem && !canTapPlayer(Core.input.mouseWorldX(), Core.input.mouseWorldY());
}
public void tryDropItems(@Nullable Building tile, float x, float y){
public void tryDropItems(@Nullable Building build, float x, float y){
if(!droppingItem || player.unit().stack.amount <= 0 || canTapPlayer(x, y) || state.isPaused() ){
droppingItem = false;
return;
@@ -1081,8 +1081,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
ItemStack stack = player.unit().stack;
if(tile != null && tile.acceptStack(stack.item, stack.amount, player.unit()) > 0 && tile.interactable(player.team()) && tile.block.hasItems && player.unit().stack().amount > 0 && tile.interactable(player.team())){
Call.transferInventory(player, tile);
if(build != null && build.acceptStack(stack.item, stack.amount, player.unit()) > 0 && build.interactable(player.team()) && build.block.hasItems && player.unit().stack().amount > 0 && build.interactable(player.team())){
Call.transferInventory(player, build);
}else{
Call.dropItem(player.angleTo(x, y));
}