This commit is contained in:
Anuken 2020-10-18 19:21:59 -04:00
parent 3a52fb2afe
commit c7622198fd
7 changed files with 36 additions and 21 deletions

View File

@ -23,7 +23,6 @@ public enum Gamemode{
rules.waveTimer = true; rules.waveTimer = true;
rules.waveSpacing /= 2f; rules.waveSpacing /= 2f;
rules.teams.get(rules.waveTeam).ai = true;
rules.teams.get(rules.waveTeam).infiniteResources = true; rules.teams.get(rules.waveTeam).infiniteResources = true;
}, map -> map.teams.contains(state.rules.waveTeam.id)), }, map -> map.teams.contains(state.rules.waveTeam.id)),
pvp(rules -> { pvp(rules -> {

View File

@ -426,7 +426,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(controlledType != null){ if(controlledType != null){
Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type == controlledType && !u.dead); Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type == controlledType && !u.dead);
if(unit == null && controlledType == UnitTypes.block){ if(unit == null && controlledType == UnitTypes.block){
unit = world.buildWorld(player.x, player.y) instanceof ControlBlock ? ((ControlBlock)world.buildWorld(player.x, player.y)).unit() : null; unit = world.buildWorld(player.x, player.y) instanceof ControlBlock cont && cont.canControl() ? cont.unit() : null;
} }
if(unit != null){ if(unit != null){
@ -990,8 +990,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
} }
Building tile = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y); Building tile = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
if(tile instanceof ControlBlock && tile.team == player.team()){ if(tile instanceof ControlBlock cont && cont.canControl() && tile.team == player.team()){
return ((ControlBlock)tile).unit(); return cont.unit();
} }
return null; return null;

View File

@ -24,6 +24,7 @@ import mindustry.graphics.*;
import mindustry.type.*; import mindustry.type.*;
import mindustry.ui.*; import mindustry.ui.*;
import mindustry.world.*; import mindustry.world.*;
import mindustry.world.blocks.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
import static mindustry.input.PlaceMode.*; import static mindustry.input.PlaceMode.*;
@ -936,7 +937,7 @@ public class MobileInput extends InputHandler implements GestureListener{
unit.aim(player.mouseX = Core.input.mouseWorldX(), player.mouseY = Core.input.mouseWorldY()); unit.aim(player.mouseX = Core.input.mouseWorldX(), player.mouseY = Core.input.mouseWorldY());
}else if(target == null){ }else if(target == null){
player.shooting = false; player.shooting = false;
if(Core.settings.getBool("autotarget")){ if(Core.settings.getBool("autotarget") && !(player.unit() instanceof BlockUnitUnit u && u.tile() instanceof ControlBlock c && !c.shouldAutoTarget())){
target = Units.closestTarget(unit.team, unit.x, unit.y, range, u -> u.team != Team.derelict, u -> u.team != Team.derelict); target = Units.closestTarget(unit.team, unit.x, unit.y, range, u -> u.team != Team.derelict, u -> u.team != Team.derelict);
if(allowHealing && target == null){ if(allowHealing && target == null){

View File

@ -185,7 +185,7 @@ public class TypeIO{
return unit == null ? Nulls.unit : unit; return unit == null ? Nulls.unit : unit;
}else if(type == 1){ //block }else if(type == 1){ //block
Building tile = world.build(id); Building tile = world.build(id);
return tile instanceof ControlBlock ? ((ControlBlock)tile).unit() : Nulls.unit; return tile instanceof ControlBlock cont ? cont.unit() : Nulls.unit;
} }
return Nulls.unit; return Nulls.unit;
} }

View File

@ -92,7 +92,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
launching = false; launching = false;
zoom = 1f; zoom = 1f;
planets.zoom = 2f; planets.zoom = 1f;
selectAlpha = 0f; selectAlpha = 0f;
launchSector = state.getSector(); launchSector = state.getSector();
@ -112,7 +112,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
//update view to sector //update view to sector
lookAt(sector); lookAt(sector);
zoom = 1f; zoom = 1f;
planets.zoom = 2f; planets.zoom = 1f;
selectAlpha = 0f; selectAlpha = 0f;
launchSector = sector; launchSector = sector;
@ -159,10 +159,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
if(selectAlpha > 0.01f){ if(selectAlpha > 0.01f){
if(canSelect(sec) || sec.unlocked()){ if(canSelect(sec) || sec.unlocked()){
//TODO remove completely?
//if(sec.baseCoverage > 0){
//planets.fill(sec, Tmp.c1.set(Team.crux.color).a(0.5f * sec.baseCoverage * selectAlpha), -0.002f);
//}
Color color = Color color =
sec.hasBase() ? Team.sharded.color : sec.hasBase() ? Team.sharded.color :

View File

@ -10,4 +10,14 @@ public interface ControlBlock{
default boolean isControlled(){ default boolean isControlled(){
return unit().isPlayer(); return unit().isPlayer();
} }
/** @return whether this block can be controlled at all. */
default boolean canControl(){
return true;
}
/** @return whether targets should automatically be selected (on mobile) */
default boolean shouldAutoTarget(){
return true;
}
} }

View File

@ -1,7 +1,7 @@
package mindustry.world.blocks.distribution; package mindustry.world.blocks.distribution;
import arc.math.*; import arc.math.*;
import arc.util.ArcAnnotate.*; import arc.util.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.type.*; import mindustry.type.*;
@ -27,19 +27,27 @@ public class Router extends Block{
public Item lastItem; public Item lastItem;
public Tile lastInput; public Tile lastInput;
public float time; public float time;
public @NonNull BlockUnitc unit = Nulls.blockUnit; public @Nullable BlockUnitc unit;
@Override
public void created(){
unit = (BlockUnitc)UnitTypes.block.create(team);
unit.tile(this);
}
@Override @Override
public Unit unit(){ public Unit unit(){
if(unit == null){
unit = (BlockUnitc)UnitTypes.block.create(team);
unit.tile(this);
}
return (Unit)unit; return (Unit)unit;
} }
@Override
public boolean canControl(){
return size == 1;
}
@Override
public boolean shouldAutoTarget(){
return false;
}
@Override @Override
public void updateTile(){ public void updateTile(){
if(lastItem == null && items.any()){ if(lastItem == null && items.any()){
@ -87,8 +95,9 @@ public class Router extends Block{
} }
public Building getTileTarget(Item item, Tile from, boolean set){ public Building getTileTarget(Item item, Tile from, boolean set){
if(isControlled()){ if(unit != null && isControlled()){
unit.health(health); unit.health(health);
unit.ammo(unit.type().ammoCapacity * (items.total() > 0 ? 1f : 0f));
unit.team(team); unit.team(team);
int angle = Mathf.mod((int)((angleTo(unit.aimX(), unit.aimY()) + 45) / 90), 4); int angle = Mathf.mod((int)((angleTo(unit.aimX(), unit.aimY()) + 45) / 90), 4);