diff --git a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java index c9297a26a1..180a5899c6 100644 --- a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java @@ -12,8 +12,11 @@ import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.game.*; import io.anuke.mindustry.input.*; +import io.anuke.mindustry.type.Category; import io.anuke.mindustry.ui.Cicon; import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.blocks.units.MechPad; +import io.anuke.mindustry.world.meta.BlockFlag; import static io.anuke.mindustry.Vars.*; @@ -57,6 +60,20 @@ public class OverlayRenderer{ Draw.reset(); } }); + + if(ui.hudfrag.blockfrag.currentCategory == Category.upgrade){ + for(Tile mechpad: indexer.getAllied(player.getTeam(), BlockFlag.mechPad)){ + if(!rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f) + .setCenter(Core.camera.position.x, Core.camera.position.y).contains(mechpad.x, mechpad.y)){ + + Tmp.v1.set(mechpad.worldx(), mechpad.worldy()).sub(Core.camera.position.x, Core.camera.position.y).setLength(indicatorLength); + + Lines.stroke(2f, ((MechPad) mechpad.block()).mech.engineColor); + Lines.lineAngle(Core.camera.position.x + Tmp.v1.x, Core.camera.position.y + Tmp.v1.y, Tmp.v1.angle(), 0.5f); + Draw.reset(); + } + } + } } if(player.isDead()) return; //dead players don't draw diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index f288943515..cc960d75fa 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -26,10 +26,11 @@ import static io.anuke.mindustry.Vars.*; public class PlacementFragment extends Fragment{ final int rowWidth = 4; + public Category currentCategory = Category.distribution; Array returnArray = new Array<>(); Array returnCatArray = new Array<>(); boolean[] categoryEmpty = new boolean[Category.all.length]; - Category currentCategory = Category.distribution; + ObjectMap selectedBlocks = new ObjectMap(); Block hovered, lastDisplay; Tile lastHover; Tile hoverTile; @@ -49,6 +50,10 @@ public class PlacementFragment extends Fragment{ rebuild(); } }); + + Events.on(ResetEvent.class, event -> { + selectedBlocks.clear(); + }); } void rebuild(){ @@ -112,6 +117,7 @@ public class PlacementFragment extends Fragment{ ImageButton button = blockTable.addImageButton(Icon.lockedSmall, Styles.selecti, () -> { if(unlocked(block)){ control.input.block = control.input.block == block ? null : block; + selectedBlocks.put(currentCategory, control.input.block); } }).size(46f).group(group).name("block-" + block.name).get(); @@ -266,6 +272,12 @@ public class PlacementFragment extends Fragment{ categories.addImageButton(Core.atlas.drawable("icon-" + cat.name() + "-smaller"), Styles.clearToggleTransi, () -> { currentCategory = cat; + if(control.input.block != null){ + if(selectedBlocks.get(currentCategory) == null){ + selectFirstBlock(currentCategory); + } + control.input.block = selectedBlocks.get(currentCategory); + } rebuildCategory.run(); }).group(group).update(i -> i.setChecked(currentCategory == cat)).name("category-" + cat.name()); } @@ -301,6 +313,16 @@ public class PlacementFragment extends Fragment{ return returnArray; } + Block selectFirstBlock(Category cat) { + for(Block block : getByCategory(currentCategory)){ + if(unlocked(block)){ + selectedBlocks.put(currentCategory, block); + return block; + } + } + return null; + } + boolean unlocked(Block block){ return !world.isZone() || data.isUnlocked(block); } diff --git a/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java b/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java index abe1f113b7..031bf1db42 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.world.blocks.units; import io.anuke.annotations.Annotations.*; import io.anuke.arc.*; +import io.anuke.arc.collection.EnumSet; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.*; import io.anuke.arc.math.geom.*; @@ -24,7 +25,7 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class MechPad extends Block{ - protected @NonNull Mech mech; + public @NonNull Mech mech; protected float buildTime = 60 * 5; public MechPad(String name){ @@ -33,6 +34,7 @@ public class MechPad extends Block{ solid = false; hasPower = true; layer = Layer.overlay; + flags = EnumSet.of(BlockFlag.mechPad); } @Override diff --git a/core/src/io/anuke/mindustry/world/meta/BlockFlag.java b/core/src/io/anuke/mindustry/world/meta/BlockFlag.java index ea5887abba..477d6a6ce6 100644 --- a/core/src/io/anuke/mindustry/world/meta/BlockFlag.java +++ b/core/src/io/anuke/mindustry/world/meta/BlockFlag.java @@ -13,7 +13,9 @@ public enum BlockFlag{ /** Only the command center block.*/ comandCenter, /** Repair point. */ - repair; + repair, + /** Upgrade pad. */ + mechPad; public final static BlockFlag[] all = values(); }