From ec61734f5d4687aee1994e799bb893e9ce60bc98 Mon Sep 17 00:00:00 2001 From: Summet-V Date: Wed, 4 Nov 2020 19:10:25 +0300 Subject: [PATCH 1/5] [editor] Searchable blocks --- .../src/mindustry/editor/MapEditorDialog.java | 49 +++++++++++++------ 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index d429d408ec..fe9f21736e 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -42,6 +42,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ private MapGenerateDialog generateDialog; private ScrollPane pane; private BaseDialog menu; + private Table blockSelection; private Rules lastSavedRules; private boolean saved = false; private boolean shownWithMap = false; @@ -666,8 +667,8 @@ public class MapEditorDialog extends Dialog implements Disposable{ } private void addBlockSelection(Table table){ - Table content = new Table(); - pane = new ScrollPane(content); + blockSelection = new Table(); + pane = new ScrollPane(blockSelection); pane.setFadeScrollBars(false); pane.setOverscroll(true, false); pane.exited(() -> { @@ -675,9 +676,25 @@ public class MapEditorDialog extends Dialog implements Disposable{ Core.scene.setScrollFocus(view); } }); - ButtonGroup group = new ButtonGroup<>(); - int i = 0; + Table searchBar = new Table(); + searchBar.image(Icon.zoom); + searchBar.field(null, this::rebuildBlockSelection) + .name("editor/search").maxTextLength(maxNameLength).get().setMessageText("@players.search"); + + table.add(searchBar).pad(10); + table.row(); + table.table(Tex.underline, extra -> extra.labelWrap(() -> editor.drawBlock.localizedName).width(200f).center()).growX(); + table.row(); + table.add(pane).expandY().top().left(); + + rebuildBlockSelection(""); + } + + private void rebuildBlockSelection(String searchText){ + blockSelection.clear(); + + ButtonGroup group = new ButtonGroup<>(); blocksOut.clear(); blocksOut.addAll(Vars.content.blocks()); @@ -691,10 +708,15 @@ public class MapEditorDialog extends Dialog implements Disposable{ return Integer.compare(b1.id, b2.id); }); + int i = 0; + for(Block block : blocksOut){ TextureRegion region = block.icon(Cicon.medium); - if(!Core.atlas.isFound(region) || !block.inEditor || (block.buildVisibility == BuildVisibility.debugOnly)) continue; + if(!Core.atlas.isFound(region) || !block.inEditor + || block.buildVisibility == BuildVisibility.debugOnly + || (!block.localizedName.toLowerCase().contains(searchText.toLowerCase()) && !searchText.isEmpty()) + ) continue; ImageButton button = new ImageButton(Tex.whiteui, Styles.clearTogglei); button.getStyle().imageUp = new TextureRegionDrawable(region); @@ -702,17 +724,16 @@ public class MapEditorDialog extends Dialog implements Disposable{ button.resizeImage(8 * 4f); button.update(() -> button.setChecked(editor.drawBlock == block)); group.add(button); - content.add(button).size(50f).tooltip(block.localizedName); + blockSelection.add(button).size(50f).grow().top().left().tooltip(block.localizedName); - if(++i % 4 == 0){ - content.row(); - } + if(++i % 4 == 0) blockSelection.row(); } - group.getButtons().get(2).setChecked(true); - - table.table(Tex.underline, extra -> extra.labelWrap(() -> editor.drawBlock.localizedName).width(200f).center()).growX(); - table.row(); - table.add(pane).growY().fillX(); + if(group.getButtons().isEmpty()){ + blockSelection.add("@none"); + }else{ + // Select first block + group.getButtons().first().fireClick(); + } } } From fce5f23a49cb081261807d97f384e9ec28fb231e Mon Sep 17 00:00:00 2001 From: Summet-V Date: Wed, 4 Nov 2020 21:46:50 +0300 Subject: [PATCH 2/5] [editor] Searchbar label --- core/src/mindustry/editor/MapEditorDialog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index fe9f21736e..1cd41281cc 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -724,13 +724,13 @@ public class MapEditorDialog extends Dialog implements Disposable{ button.resizeImage(8 * 4f); button.update(() -> button.setChecked(editor.drawBlock == block)); group.add(button); - blockSelection.add(button).size(50f).grow().top().left().tooltip(block.localizedName); + blockSelection.add(button).size(50f).tooltip(block.localizedName); if(++i % 4 == 0) blockSelection.row(); } if(group.getButtons().isEmpty()){ - blockSelection.add("@none"); + blockSelection.add("@none").padLeft(80f).padTop(10f); }else{ // Select first block group.getButtons().first().fireClick(); From c3a57a744c7fdb2afbfc25592dc822953a8625a5 Mon Sep 17 00:00:00 2001 From: Summet-V Date: Wed, 4 Nov 2020 22:09:46 +0300 Subject: [PATCH 3/5] Cleanup --- core/src/mindustry/editor/MapEditorDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index 1cd41281cc..27f329c120 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -679,7 +679,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ Table searchBar = new Table(); searchBar.image(Icon.zoom); - searchBar.field(null, this::rebuildBlockSelection) + searchBar.field("", this::rebuildBlockSelection) .name("editor/search").maxTextLength(maxNameLength).get().setMessageText("@players.search"); table.add(searchBar).pad(10); From 275395b5536586a90ce0b79fe20ce90f198963b9 Mon Sep 17 00:00:00 2001 From: Summet-V Date: Fri, 6 Nov 2020 14:28:08 +0300 Subject: [PATCH 4/5] Cleanup & Padding changes --- .../src/mindustry/editor/MapEditorDialog.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index 27f329c120..c7824890d3 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -666,7 +666,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ ui.showConfirm("@confirm", "@editor.unsaved", this::hide); } - private void addBlockSelection(Table table){ + private void addBlockSelection(Table cont){ blockSelection = new Table(); pane = new ScrollPane(blockSelection); pane.setFadeScrollBars(false); @@ -677,16 +677,15 @@ public class MapEditorDialog extends Dialog implements Disposable{ } }); - Table searchBar = new Table(); - searchBar.image(Icon.zoom); - searchBar.field("", this::rebuildBlockSelection) - .name("editor/search").maxTextLength(maxNameLength).get().setMessageText("@players.search"); - - table.add(searchBar).pad(10); - table.row(); - table.table(Tex.underline, extra -> extra.labelWrap(() -> editor.drawBlock.localizedName).width(200f).center()).growX(); - table.row(); - table.add(pane).expandY().top().left(); + cont.table(search -> { + search.image(Icon.zoom).padRight(8); + search.field("", this::rebuildBlockSelection) + .name("editor/search").maxTextLength(maxNameLength).get().setMessageText("@players.search"); + }).pad(5); + cont.row(); + cont.table(Tex.underline, extra -> extra.labelWrap(() -> editor.drawBlock.localizedName).width(200f).center()).growX(); + cont.row(); + cont.add(pane).expandY().top().left(); rebuildBlockSelection(""); } @@ -694,7 +693,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ private void rebuildBlockSelection(String searchText){ blockSelection.clear(); - ButtonGroup group = new ButtonGroup<>(); + Seq filteredBlocks = new Seq<>(); blocksOut.clear(); blocksOut.addAll(Vars.content.blocks()); @@ -718,22 +717,22 @@ public class MapEditorDialog extends Dialog implements Disposable{ || (!block.localizedName.toLowerCase().contains(searchText.toLowerCase()) && !searchText.isEmpty()) ) continue; + filteredBlocks.add(block); + ImageButton button = new ImageButton(Tex.whiteui, Styles.clearTogglei); button.getStyle().imageUp = new TextureRegionDrawable(region); button.clicked(() -> editor.drawBlock = block); button.resizeImage(8 * 4f); button.update(() -> button.setChecked(editor.drawBlock == block)); - group.add(button); blockSelection.add(button).size(50f).tooltip(block.localizedName); if(++i % 4 == 0) blockSelection.row(); } - if(group.getButtons().isEmpty()){ + if(filteredBlocks.isEmpty()){ blockSelection.add("@none").padLeft(80f).padTop(10f); }else{ - // Select first block - group.getButtons().first().fireClick(); + editor.drawBlock = filteredBlocks.first(); } } } From 255d1c511ef07c6e7cbb9cf3353f3ff616026e62 Mon Sep 17 00:00:00 2001 From: Summet-V Date: Fri, 6 Nov 2020 17:45:35 +0300 Subject: [PATCH 5/5] Optimization tweaks --- core/src/mindustry/editor/MapEditorDialog.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index c7824890d3..fc96184ec4 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -693,8 +693,6 @@ public class MapEditorDialog extends Dialog implements Disposable{ private void rebuildBlockSelection(String searchText){ blockSelection.clear(); - Seq filteredBlocks = new Seq<>(); - blocksOut.clear(); blocksOut.addAll(Vars.content.blocks()); blocksOut.sort((b1, b2) -> { @@ -714,11 +712,9 @@ public class MapEditorDialog extends Dialog implements Disposable{ if(!Core.atlas.isFound(region) || !block.inEditor || block.buildVisibility == BuildVisibility.debugOnly - || (!block.localizedName.toLowerCase().contains(searchText.toLowerCase()) && !searchText.isEmpty()) + || (!searchText.isEmpty() && !block.localizedName.toLowerCase().contains(searchText.toLowerCase())) ) continue; - filteredBlocks.add(block); - ImageButton button = new ImageButton(Tex.whiteui, Styles.clearTogglei); button.getStyle().imageUp = new TextureRegionDrawable(region); button.clicked(() -> editor.drawBlock = block); @@ -726,13 +722,15 @@ public class MapEditorDialog extends Dialog implements Disposable{ button.update(() -> button.setChecked(editor.drawBlock == block)); blockSelection.add(button).size(50f).tooltip(block.localizedName); - if(++i % 4 == 0) blockSelection.row(); + if(i == 0) editor.drawBlock = block; + + if(++i % 4 == 0){ + blockSelection.row(); + } } - if(filteredBlocks.isEmpty()){ + if(i == 0){ blockSelection.add("@none").padLeft(80f).padTop(10f); - }else{ - editor.drawBlock = filteredBlocks.first(); } } }