diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 816051df2b..b48e251f78 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -30,6 +30,7 @@ public class PlacementFragment extends Fragment{ 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); }