diff --git a/art/textures/filter-down.png b/art/textures/filter-down.png new file mode 100644 index 00000000..1d37d273 Binary files /dev/null and b/art/textures/filter-down.png differ diff --git a/art/textures/filter-over.png b/art/textures/filter-over.png new file mode 100644 index 00000000..3844ef8c Binary files /dev/null and b/art/textures/filter-over.png differ diff --git a/art/textures/filter.png b/art/textures/filter.png new file mode 100644 index 00000000..fc964d3e Binary files /dev/null and b/art/textures/filter.png differ diff --git a/assets/plugins/plugin-9patch-0.0.7.jar b/assets/plugins/plugin-9patch-0.0.7.jar index ee35c3dd..6df74351 100644 Binary files a/assets/plugins/plugin-9patch-0.0.7.jar and b/assets/plugins/plugin-9patch-0.0.7.jar differ diff --git a/assets/plugins/plugin-performance-0.0.7.jar b/assets/plugins/plugin-performance-0.0.7.jar index 2f41efe9..53370b6e 100644 Binary files a/assets/plugins/plugin-performance-0.0.7.jar and b/assets/plugins/plugin-performance-0.0.7.jar differ diff --git a/assets/plugins/plugin-skin-composer-0.0.7.jar b/assets/plugins/plugin-skin-composer-0.0.7.jar index 3883b5a6..692e4a1e 100644 Binary files a/assets/plugins/plugin-skin-composer-0.0.7.jar and b/assets/plugins/plugin-skin-composer-0.0.7.jar differ diff --git a/assets/plugins/plugin-tiled-0.0.7.jar b/assets/plugins/plugin-tiled-0.0.7.jar index 6a763947..c7cb383e 100644 Binary files a/assets/plugins/plugin-tiled-0.0.7.jar and b/assets/plugins/plugin-tiled-0.0.7.jar differ diff --git a/assets/style/uiskin.atlas b/assets/style/uiskin.atlas index 214a0bc5..b8d1faef 100644 --- a/assets/style/uiskin.atlas +++ b/assets/style/uiskin.atlas @@ -30,27 +30,27 @@ arrow arrow-down bounds: 729, 191, 13, 15 arrow-over - bounds: 778, 192, 13, 15 + bounds: 829, 192, 13, 15 border - bounds: 771, 185, 5, 5 + bounds: 225, 23, 5, 5 split: 2, 2, 2, 2 pad: 1, 1, 1, 1 border-circle - bounds: 793, 193, 14, 14 + bounds: 844, 193, 14, 14 border-circle-error - bounds: 809, 193, 14, 14 + bounds: 860, 193, 14, 14 border-error - bounds: 674, 177, 11, 11 + bounds: 570, 167, 11, 11 split: 5, 5, 5, 5 pad: 1, 1, 1, 1 border-textfield - bounds: 210, 25, 11, 5 + bounds: 726, 184, 11, 5 split: 5, 5, 2, 2 pad: 5, 5, 1, 1 box-colapse-off - bounds: 78, 1, 11, 11 + bounds: 583, 167, 11, 11 box-colapse-on - bounds: 91, 1, 11, 11 + bounds: 596, 167, 11, 11 button bounds: 501, 112, 12, 20 split: 5, 5, 5, 4 @@ -105,30 +105,30 @@ button-window-bg split: 5, 5, 4, 3 pad: 4, 4, 1, 1 close-node - bounds: 344, 72, 12, 12 + bounds: 392, 69, 12, 12 close-node-hover - bounds: 358, 72, 12, 12 + bounds: 632, 175, 12, 12 close-node-pressed - bounds: 372, 72, 12, 12 + bounds: 646, 178, 12, 12 color-picker-bar-selector - bounds: 687, 174, 7, 14 + bounds: 609, 164, 7, 14 color-picker-cross - bounds: 778, 185, 5, 5 + bounds: 222, 16, 5, 5 color-picker-selector-horizontal - bounds: 550, 129, 3, 1 + bounds: 1020, 210, 3, 1 color-picker-selector-vertical - bounds: 75, 1, 1, 3 + bounds: 628, 204, 1, 3 console-background bounds: 486, 174, 64, 81 split: 23, 22, 42, 23 pad: 16, 15, 20, 15 cursor - bounds: 484, 131, 1, 1 + bounds: 207, 23, 1, 1 default-pane bounds: 53, 1, 5, 3 split: 1, 1, 1, 1 default-pane-noborder - bounds: 628, 206, 1, 1 + bounds: 484, 131, 1, 1 split: 0, 0, 0, 0 default-select bounds: 305, 104, 27, 24 @@ -147,30 +147,36 @@ expandable-properties-active-bg bounds: 551, 135, 4, 17 split: 1, 2, 0, 17 expandable-properties-collapse-off - bounds: 737, 182, 7, 7 + bounds: 210, 23, 7, 7 expandable-properties-collapse-on - bounds: 746, 183, 7, 7 + bounds: 557, 133, 7, 7 expandable-properties-inactive-bg bounds: 550, 154, 4, 18 split: 1, 2, 0, 18 +filter + bounds: 487, 78, 15, 15 +filter-down + bounds: 646, 192, 15, 15 +filter-over + bounds: 663, 190, 15, 15 icon-animation bounds: 357, 130, 22, 22 icon-arrow-left - bounds: 1017, 194, 6, 11 + bounds: 688, 177, 6, 11 icon-arrow-right - bounds: 1017, 181, 6, 11 + bounds: 557, 142, 6, 11 icon-close bounds: 711, 233, 22, 22 icon-close-panel bounds: 454, 106, 18, 22 icon-close-small - bounds: 632, 175, 12, 12 + bounds: 660, 176, 12, 12 icon-close-white bounds: 486, 154, 22, 18 icon-composite bounds: 381, 130, 22, 22 icon-composite2 - bounds: 825, 193, 14, 14 + bounds: 876, 193, 14, 14 icon-drive bounds: 735, 233, 22, 22 icon-file-audio @@ -200,9 +206,9 @@ icon-library icon-library-over bounds: 812, 209, 22, 22 icon-link-active - bounds: 487, 78, 15, 15 + bounds: 695, 191, 15, 15 icon-link-inactive - bounds: 646, 192, 15, 15 + bounds: 712, 191, 15, 15 icon-list-settings bounds: 855, 233, 22, 22 icon-lock-active @@ -220,7 +226,7 @@ icon-particle-white icon-refresh bounds: 927, 233, 22, 22 icon-root - bounds: 841, 193, 14, 14 + bounds: 892, 193, 14, 14 icon-spine bounds: 908, 209, 22, 22 icon-star @@ -234,9 +240,9 @@ icon-trash-disabled icon-trash-over bounds: 329, 68, 13, 15 icon-unlink-active - bounds: 663, 190, 15, 15 + bounds: 744, 192, 15, 15 icon-unlink-inactive - bounds: 695, 191, 15, 15 + bounds: 761, 192, 15, 15 icon-visible-off bounds: 975, 233, 22, 22 icon-visible-on @@ -254,7 +260,7 @@ icon-zoomout-disabled icon-zoomout-over bounds: 375, 86, 17, 17 image-up - bounds: 712, 191, 15, 15 + bounds: 778, 192, 15, 15 layer-bg bounds: 225, 30, 5, 19 split: 2, 2, 0, 19 @@ -262,11 +268,11 @@ layer-bg-over bounds: 225, 51, 5, 19 split: 2, 2, 0, 19 library-up - bounds: 744, 192, 15, 15 + bounds: 795, 192, 15, 15 list-selection bounds: 232, 62, 1, 1 list-selection-white - bounds: 646, 175, 1, 1 + bounds: 299, 65, 1, 1 logo bounds: 53, 6, 23, 23 menu-bg @@ -296,7 +302,7 @@ menu-item-over missing-image bounds: 1, 105, 232, 150 origin-anchor - bounds: 504, 78, 9, 9 + bounds: 556, 155, 9, 9 padded-list-selection bounds: 41, 2, 10, 3 split: 4, 4, 1, 1 @@ -305,56 +311,56 @@ panel bounds: 139, 14, 11, 36 split: 3, 3, 33, 2 particle-up - bounds: 761, 192, 15, 15 + bounds: 812, 192, 15, 15 pin bounds: 152, 69, 36, 34 popup-menu bounds: 999, 233, 22, 22 split: 7, 7, 7, 7 progressbar - bounds: 232, 65, 1, 5 + bounds: 550, 125, 1, 5 progressbar-filled - bounds: 235, 66, 1, 5 + bounds: 232, 65, 1, 5 progressbar-filled-vertical bounds: 477, 131, 5, 1 progressbar-vertical bounds: 515, 113, 5, 1 scroll - bounds: 386, 70, 5, 6 + bounds: 215, 7, 5, 6 split: 2, 2, 2, 2 scroll-horizontal - bounds: 755, 185, 6, 5 + bounds: 207, 8, 6, 5 split: 2, 2, 0, 5 pad: -1, -1, 2, 2 scroll-knob-horizontal - bounds: 763, 185, 6, 5 + bounds: 207, 1, 6, 5 split: 2, 2, 0, 5 pad: -1, -1, 2, 2 scroll-knob-vertical - bounds: 785, 184, 5, 6 + bounds: 215, 15, 5, 6 split: 2, 2, 2, 2 select-box-list-bg - bounds: 207, 23, 1, 1 + bounds: 646, 175, 1, 1 select-box-list-bg-white - bounds: 394, 80, 1, 1 + bounds: 618, 177, 1, 1 select-down bounds: 11, 1, 7, 4 select-up bounds: 20, 1, 7, 4 selection - bounds: 344, 69, 1, 1 + bounds: 567, 163, 1, 1 selection-anchor - bounds: 696, 180, 9, 9 + bounds: 504, 78, 9, 9 separator - bounds: 709, 177, 1, 1 + bounds: 570, 164, 1, 1 separator-menu - bounds: 235, 63, 1, 1 + bounds: 696, 177, 1, 1 separator-tool - bounds: 238, 70, 1, 1 + bounds: 726, 181, 1, 1 tree-over - bounds: 238, 70, 1, 1 + bounds: 726, 181, 1, 1 separator-vertical - bounds: 522, 113, 1, 1 + bounds: 739, 188, 1, 1 slider bounds: 552, 174, 1, 4 slider-knob @@ -370,13 +376,13 @@ slider-vertical splash_logo bounds: 1, 31, 76, 72 splitpane - bounds: 299, 65, 4, 1 -splitpane-over bounds: 551, 132, 4, 1 +splitpane-over + bounds: 235, 70, 4, 1 splitpane-vertical - bounds: 1020, 207, 1, 4 + bounds: 215, 1, 1, 4 splitpane-vertical-over - bounds: 555, 174, 1, 4 + bounds: 218, 1, 1, 4 static-text bounds: 478, 83, 7, 21 split: 3, 3, 0, 21 @@ -384,7 +390,7 @@ sticky-note bounds: 589, 204, 37, 27 split: 14, 13, 10, 11 sub-menu - bounds: 703, 171, 4, 7 + bounds: 219, 23, 4, 7 sub-menu-bg bounds: 235, 73, 14, 31 split: 2, 2, 0, 31 @@ -395,16 +401,16 @@ tab-inactive bounds: 622, 181, 8, 21 split: 3, 3, 2, 1 textfield - bounds: 889, 193, 14, 14 + bounds: 940, 193, 14, 14 split: 2, 2, 3, 2 textfield-light - bounds: 873, 193, 14, 14 + bounds: 924, 193, 14, 14 split: 3, 3, 4, 3 textfield-light-over - bounds: 857, 193, 14, 14 + bounds: 908, 193, 14, 14 split: 3, 3, 4, 3 textfield-over - bounds: 857, 193, 14, 14 + bounds: 908, 193, 14, 14 split: 2, 2, 3, 2 thumbnail bounds: 35, 1, 4, 4 @@ -413,7 +419,7 @@ thumbnail-over bounds: 29, 1, 4, 4 split: 1, 2, 1, 2 tint-border - bounds: 386, 78, 6, 6 + bounds: 207, 15, 6, 6 split: 2, 2, 2, 2 tool-align bounds: 251, 81, 22, 23 @@ -433,13 +439,13 @@ toolbar-bg bounds: 1, 1, 8, 4 split: 1, 2, 1, 1 toolbar-down - bounds: 707, 180, 8, 9 + bounds: 696, 180, 8, 9 split: 2, 2, 3, 3 toolbar-normal - bounds: 717, 180, 8, 9 + bounds: 706, 180, 8, 9 split: 2, 2, 3, 3 toolbar-over - bounds: 727, 180, 8, 9 + bounds: 716, 180, 8, 9 split: 2, 2, 3, 3 tooltip-bg bounds: 1020, 218, 3, 3 @@ -447,37 +453,37 @@ tooltip-bg touchpad-knob bounds: 980, 209, 22, 22 tree-minus - bounds: 646, 178, 12, 12 + bounds: 674, 176, 12, 12 tree-plus - bounds: 660, 176, 12, 12 + bounds: 556, 166, 12, 12 tree-selection - bounds: 696, 173, 5, 5 + bounds: 222, 9, 5, 5 split: 2, 2, 2, 2 pad: 1, 1, 1, 1 vis-blue - bounds: 558, 177, 1, 1 + bounds: 75, 3, 1, 1 vis-check - bounds: 905, 193, 14, 14 + bounds: 956, 193, 14, 14 vis-check-down - bounds: 921, 193, 14, 14 + bounds: 972, 193, 14, 14 vis-check-over - bounds: 937, 193, 14, 14 + bounds: 988, 193, 14, 14 vis-check-tick - bounds: 953, 193, 14, 14 + bounds: 1004, 191, 14, 14 vis-check-tick-disabled - bounds: 969, 193, 14, 14 -vis-radio - bounds: 985, 193, 14, 14 -vis-radio-down - bounds: 1001, 191, 14, 14 -vis-radio-over bounds: 251, 65, 14, 14 -vis-radio-tick +vis-radio bounds: 267, 65, 14, 14 -vis-radio-tick-disabled +vis-radio-down bounds: 283, 65, 14, 14 +vis-radio-over + bounds: 344, 70, 14, 14 +vis-radio-tick + bounds: 360, 70, 14, 14 +vis-radio-tick-disabled + bounds: 376, 70, 14, 14 vis-red - bounds: 305, 65, 1, 1 + bounds: 229, 20, 1, 1 white bounds: 1020, 213, 3, 3 window @@ -508,7 +514,7 @@ window-action-restore-normal window-action-restore-pressed bounds: 676, 233, 33, 22 window-bg - bounds: 550, 126, 1, 1 + bounds: 1020, 207, 1, 1 window-noborder bounds: 190, 69, 27, 34 split: 5, 4, 26, 3 diff --git a/assets/style/uiskin.json b/assets/style/uiskin.json index d8ad3efe..5892c801 100644 --- a/assets/style/uiskin.json +++ b/assets/style/uiskin.json @@ -484,6 +484,11 @@ imageOver: arrow-over, imageUp: arrow }, + filter-button: { + imageDown: filter-down, + imageOver: filter-over, + imageUp: filter + }, image-button: { imageUp: image-up }, diff --git a/assets/style/uiskin.png b/assets/style/uiskin.png index 2b427a1e..7dd8ab07 100644 Binary files a/assets/style/uiskin.png and b/assets/style/uiskin.png differ diff --git a/hyperlap2d-common-api b/hyperlap2d-common-api index e7522bff..4118575d 160000 --- a/hyperlap2d-common-api +++ b/hyperlap2d-common-api @@ -1 +1 @@ -Subproject commit e7522bff3856b54d02a9f8c2afa35ab186db144e +Subproject commit 4118575dd1450d300ab1dde45fdb0c1b666b5df4 diff --git a/plugin-tiled/src/main/java/games/rednblack/editor/plugin/tiled/TiledPanelMediator.java b/plugin-tiled/src/main/java/games/rednblack/editor/plugin/tiled/TiledPanelMediator.java index 5ea2c688..a1908d85 100644 --- a/plugin-tiled/src/main/java/games/rednblack/editor/plugin/tiled/TiledPanelMediator.java +++ b/plugin-tiled/src/main/java/games/rednblack/editor/plugin/tiled/TiledPanelMediator.java @@ -148,6 +148,8 @@ public class TiledPanelMediator extends Mediator { tiledPlugin.dataToSave.addTile(tileName, type); } + + facade.sendNotification(MsgAPI.UPDATE_RESOURCES_LIST); tiledPlugin.saveDataManager.save(); break; @@ -218,6 +220,7 @@ public class TiledPanelMediator extends Mediator { tiledPlugin.setSelectedTileVO(new TileVO()); viewComponent.removeTile(); + facade.sendNotification(MsgAPI.UPDATE_RESOURCES_LIST); break; case TiledPlugin.ACTION_DELETE_AUTO_TILE: String tn2 = notification.getBody(); @@ -238,6 +241,7 @@ public class TiledPanelMediator extends Mediator { viewComponent.removeAutoTile(); tiledPlugin.facade.sendNotification(TiledPlugin.ACTION_RECALC_PERCENT_ALTERNATIVES_AUTO_TILE); + facade.sendNotification(MsgAPI.UPDATE_RESOURCES_LIST); case TiledPlugin.ACTION_DELETE_TILE_ALL: Dialogs.showOptionDialog(tiledPlugin.getAPI().getUIStage(), "Delete all...", "Do you really want to delete all tiles?", Dialogs.OptionDialogType.YES_NO, new OptionDialogAdapter() { @@ -248,6 +252,7 @@ public class TiledPanelMediator extends Mediator { tiledPlugin.setSelectedTileVO(new TileVO()); viewComponent.removeAllTiles(); + facade.sendNotification(MsgAPI.UPDATE_RESOURCES_LIST); } @Override diff --git a/plugin-tiled/src/main/java/games/rednblack/editor/plugin/tiled/TiledPlugin.java b/plugin-tiled/src/main/java/games/rednblack/editor/plugin/tiled/TiledPlugin.java index 3ccbec1e..3ddbf599 100644 --- a/plugin-tiled/src/main/java/games/rednblack/editor/plugin/tiled/TiledPlugin.java +++ b/plugin-tiled/src/main/java/games/rednblack/editor/plugin/tiled/TiledPlugin.java @@ -48,6 +48,7 @@ import games.rednblack.editor.renderer.components.ZIndexComponent; import games.rednblack.editor.renderer.utils.ComponentRetriever; import games.rednblack.editor.renderer.utils.CustomVariables; import games.rednblack.h2d.common.MenuAPI; +import games.rednblack.h2d.common.MsgAPI; import games.rednblack.h2d.common.plugins.H2DPluginAdapter; import net.mountainblade.modular.annotations.Implementation; @@ -150,6 +151,8 @@ public class TiledPlugin extends H2DPluginAdapter { pluginAPI.setDropDownItemName(ACTION_SET_GRID_SIZE_FROM_ITEM, "Set tile grid size"); pluginAPI.addMenuItem(MenuAPI.RESOURCE_MENU, "Import Tile Set...", IMPORT_TILESET_PANEL_OPEN); + + facade.sendNotification(MsgAPI.ADD_RESOURCES_BOX_FILTER, new TilesResourceFilter(this)); } @Override diff --git a/plugin-tiled/src/main/java/games/rednblack/editor/plugin/tiled/TilesResourceFilter.java b/plugin-tiled/src/main/java/games/rednblack/editor/plugin/tiled/TilesResourceFilter.java new file mode 100644 index 00000000..db747bc5 --- /dev/null +++ b/plugin-tiled/src/main/java/games/rednblack/editor/plugin/tiled/TilesResourceFilter.java @@ -0,0 +1,24 @@ +package games.rednblack.editor.plugin.tiled; + +import games.rednblack.editor.renderer.factory.EntityFactory; +import games.rednblack.h2d.common.filters.IAbstractResourceFilter; + +public class TilesResourceFilter extends IAbstractResourceFilter { + + private final TiledPlugin tiledPlugin; + + public TilesResourceFilter(TiledPlugin tiledPlugin) { + super("Filter Tiles", "filter-tiles"); + this.tiledPlugin = tiledPlugin; + } + + @Override + public boolean filterResource(String resName, int entityType) { + if (entityType == EntityFactory.IMAGE_TYPE + || entityType == EntityFactory.SPRITE_TYPE + || entityType == EntityFactory.SPINE_TYPE) { + return tiledPlugin.dataToSave.containsAutoTile(resName) || tiledPlugin.dataToSave.containsTile(resName); + } + return false; + } +} diff --git a/src/main/java/games/rednblack/editor/HyperLap2DApp.java b/src/main/java/games/rednblack/editor/HyperLap2DApp.java index 3ce6ce08..94eac9c7 100644 --- a/src/main/java/games/rednblack/editor/HyperLap2DApp.java +++ b/src/main/java/games/rednblack/editor/HyperLap2DApp.java @@ -8,6 +8,7 @@ import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window; import games.rednblack.editor.proxy.SettingsManager; import games.rednblack.editor.splash.SplashScreenAdapter; import games.rednblack.editor.utils.AppConfig; +import games.rednblack.h2d.common.view.ui.StandardWidgetsFactory; import org.apache.commons.lang3.SystemUtils; public class HyperLap2DApp extends ApplicationAdapter { @@ -39,6 +40,8 @@ public class HyperLap2DApp extends ApplicationAdapter { public void create() { Lwjgl3Application app = (Lwjgl3Application) Gdx.app; + StandardWidgetsFactory.init(HyperLap2DFacade.getInstance()); + Lwjgl3ApplicationConfiguration config2 = new Lwjgl3ApplicationConfiguration(); config2.setWindowedMode(467, 385); config2.setTitle("HyperLap2D"); diff --git a/src/main/java/games/rednblack/editor/HyperLap2DFacade.java b/src/main/java/games/rednblack/editor/HyperLap2DFacade.java index 9de9b47b..0f67cb7d 100644 --- a/src/main/java/games/rednblack/editor/HyperLap2DFacade.java +++ b/src/main/java/games/rednblack/editor/HyperLap2DFacade.java @@ -21,7 +21,6 @@ package games.rednblack.editor; import games.rednblack.editor.controller.StartupCommand; import games.rednblack.editor.splash.SplashMediator; import games.rednblack.h2d.common.HyperLog; -import games.rednblack.h2d.common.view.ui.StandardWidgetsFactory; import org.puremvc.java.patterns.facade.Facade; import org.puremvc.java.patterns.observer.Notification; @@ -72,7 +71,6 @@ public class HyperLap2DFacade extends Facade { @Override protected void initializeView() { - StandardWidgetsFactory.init(this); super.initializeView(); } } diff --git a/src/main/java/games/rednblack/editor/Main.java b/src/main/java/games/rednblack/editor/Main.java index 067a5d3f..7c0a5fe1 100644 --- a/src/main/java/games/rednblack/editor/Main.java +++ b/src/main/java/games/rednblack/editor/Main.java @@ -40,6 +40,9 @@ public class Main { if (restartStartOnFirstThread()) { return; } + + Thread.currentThread().setUncaughtExceptionHandler(new CustomExceptionHandler()); + HyperLap2DFacade.getInstance(); Graphics.DisplayMode dm = Lwjgl3ApplicationConfiguration.getDisplayMode(); @@ -62,8 +65,6 @@ public class Main { config.useOpenGL3(true, 3, 2); config.setBackBufferConfig(8,8,8,8,16,8, settingsManager.editorConfigVO.msaaSamples); - Thread.currentThread().setUncaughtExceptionHandler(new CustomExceptionHandler()); - new Lwjgl3Application(HyperLap2DApp.initInstance(dm.width, dm.height, settingsManager), config); } diff --git a/src/main/java/games/rednblack/editor/event/CheckBoxChangeListener.java b/src/main/java/games/rednblack/editor/event/CheckBoxChangeListener.java index 561a5a8d..c8d18fff 100644 --- a/src/main/java/games/rednblack/editor/event/CheckBoxChangeListener.java +++ b/src/main/java/games/rednblack/editor/event/CheckBoxChangeListener.java @@ -28,15 +28,20 @@ import games.rednblack.editor.HyperLap2DFacade; */ public class CheckBoxChangeListener extends ChangeListener { - private final String eventName; + private final String eventName, type; public CheckBoxChangeListener(String eventName) { + this(eventName, null); + } + + public CheckBoxChangeListener(String eventName, String type) { this.eventName = eventName; + this.type = type; } @Override public void changed(ChangeEvent changeEvent, Actor actor) { HyperLap2DFacade facade = HyperLap2DFacade.getInstance(); - facade.sendNotification(eventName, ((VisCheckBox) actor).isChecked()); + facade.sendNotification(eventName, ((VisCheckBox) actor).isChecked(), type); } } \ No newline at end of file diff --git a/src/main/java/games/rednblack/editor/view/ui/box/UICompositeHierarchyMediator.java b/src/main/java/games/rednblack/editor/view/ui/box/UICompositeHierarchyMediator.java index 651917f4..9f3ad27a 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/UICompositeHierarchyMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/UICompositeHierarchyMediator.java @@ -26,6 +26,7 @@ public class UICompositeHierarchyMediator extends Mediator super(NAME, new UICompositeHierarchy()); } + @Override public String[] listNotificationInterests() { return new String[]{ MsgAPI.SCENE_LOADED, diff --git a/src/main/java/games/rednblack/editor/view/ui/box/UIResourcesBoxMediator.java b/src/main/java/games/rednblack/editor/view/ui/box/UIResourcesBoxMediator.java index 03f64392..240c26e8 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/UIResourcesBoxMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/UIResourcesBoxMediator.java @@ -20,6 +20,7 @@ package games.rednblack.editor.view.ui.box; import java.util.stream.Stream; +import games.rednblack.editor.view.ui.box.resourcespanel.*; import org.puremvc.java.interfaces.INotification; import com.badlogic.gdx.scenes.scene2d.utils.DragAndDrop; @@ -27,11 +28,6 @@ import com.badlogic.gdx.utils.Array; import games.rednblack.editor.HyperLap2DFacade; import games.rednblack.editor.proxy.ProjectManager; -import games.rednblack.editor.view.ui.box.resourcespanel.UIActionsTabMediator; -import games.rednblack.editor.view.ui.box.resourcespanel.UIAnimationsTabMediator; -import games.rednblack.editor.view.ui.box.resourcespanel.UIImagesTabMediator; -import games.rednblack.editor.view.ui.box.resourcespanel.UILibraryItemsTabMediator; -import games.rednblack.editor.view.ui.box.resourcespanel.UIParticleEffectsTabMediator; import games.rednblack.h2d.common.MsgAPI; import games.rednblack.h2d.common.view.ui.widget.imagetabbedpane.ImageTab; @@ -119,6 +115,7 @@ public class UIResourcesBoxMediator extends PanelMediator { facade.registerMediator(new UILibraryItemsTabMediator()); facade.registerMediator(new UIParticleEffectsTabMediator()); facade.registerMediator(new UIActionsTabMediator()); + facade.registerMediator(new UIFilterMenuMediator()); } private void initTabs() { diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIActionsTab.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIActionsTab.java index 8029ab91..6cab3dbc 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIActionsTab.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIActionsTab.java @@ -2,6 +2,7 @@ package games.rednblack.editor.view.ui.box.resourcespanel; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; +import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; import com.kotcrab.vis.ui.util.dialog.Dialogs; import com.kotcrab.vis.ui.util.dialog.InputDialogListener; @@ -25,7 +26,8 @@ public class UIActionsTab extends UIResourcesTab { VisTable bottomPane = new VisTable(); contentTable.row(); - contentTable.add(bottomPane).expandX().fillX(); + bottomPane.align(Align.left); + contentTable.add(bottomPane).padTop(5).colspan(3).growX(); bottomPane.add(newBtn).center().pad(3); bottomPane.add(deleteBtn).center().pad(3); diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIActionsTabMediator.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIActionsTabMediator.java index b2f14e7a..a2817feb 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIActionsTabMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIActionsTabMediator.java @@ -18,6 +18,8 @@ public class UIActionsTabMediator extends UIResourcesTabMediator { private static final String TAG = UIActionsTabMediator.class.getCanonicalName(); public static final String NAME = TAG; + private final Array itemArray = new Array<>(); + public UIActionsTabMediator() { super(NAME, new UIActionsTab()); } @@ -51,7 +53,7 @@ public class UIActionsTabMediator extends UIResourcesTabMediator { ProjectManager projectManager = HyperLap2DFacade.getInstance().retrieveProxy(ProjectManager.NAME); HashMap items = projectManager.currentProjectInfoVO.libraryActions; - Array itemArray = new Array<>(); + itemArray.clear(); for (String key : items.keySet()) { if(!key.toLowerCase().contains(searchText))continue; DraggableResource draggableResource = new DraggableResource(new LibraryActionResource(key)); diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIAnimationsTabMediator.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIAnimationsTabMediator.java index 8e44e0e7..ad30c1c6 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIAnimationsTabMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIAnimationsTabMediator.java @@ -90,7 +90,10 @@ public class UIAnimationsTabMediator extends UIResourcesTabMediator strings, Class resourceClass, BiFunction factoryFunction, String searchText) { for (String animationName : strings) { - if (!animationName.contains(searchText)) continue; + if (!animationName.toLowerCase().contains(searchText) + || filterResource(animationName, resourceClass == SpineResource.class ? EntityFactory.SPINE_TYPE : EntityFactory.SPRITE_TYPE)) + continue; + try { Constructor constructor = resourceClass.getConstructor(String.class, boolean.class); DraggableResource draggableResource = new DraggableResource(constructor.newInstance(animationName, true)); diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIFilterMenu.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIFilterMenu.java new file mode 100644 index 00000000..af18899b --- /dev/null +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIFilterMenu.java @@ -0,0 +1,96 @@ +package games.rednblack.editor.view.ui.box.resourcespanel; + +import com.badlogic.gdx.math.Interpolation; +import com.badlogic.gdx.scenes.scene2d.*; +import com.badlogic.gdx.scenes.scene2d.actions.Actions; +import com.badlogic.gdx.utils.Align; +import com.kotcrab.vis.ui.util.ActorUtils; +import com.kotcrab.vis.ui.widget.VisCheckBox; +import com.kotcrab.vis.ui.widget.VisTable; +import games.rednblack.editor.event.CheckBoxChangeListener; +import games.rednblack.h2d.common.filters.IAbstractResourceFilter; +import games.rednblack.h2d.common.view.ui.StandardWidgetsFactory; + +public class UIFilterMenu extends VisTable { + private static final float TRANSITION_TIME = 0.15f; + + private static final String CLASS_NAME = "games.rednblack.editor.view.ui.box.resourcespanel.UIItemsTreeBox"; + public static final String SHOW_FILTER_MENU = CLASS_NAME + ".SHOW_FILTER_MENU"; + + private boolean removing = false; + private final InputListener stageListener; + + public UIFilterMenu() { + setTransform(true); + background("popup-menu"); + pad(10); + defaults().left(); + + stageListener = new InputListener() { + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + if (!contains(x, y)) { + remove(); + } + return true; + } + }; + + setTouchable(Touchable.enabled); + } + + public void addFilter(IAbstractResourceFilter filter) { + VisCheckBox checkBox = StandardWidgetsFactory.createCheckBox(filter.name); + checkBox.setChecked(filter.isActive()); + checkBox.addListener(new CheckBoxChangeListener(UIResourcesTabMediator.CHANGE_ACTIVE_FILTER, filter.id)); + add(checkBox).padTop(2).padBottom(2).row(); + pack(); + } + + public boolean contains (float x, float y) { + return getX() < x && getX() + getWidth() > x && getY() < y && getY() + getHeight() > y; + } + + @Override + protected void setStage (Stage stage) { + super.setStage(stage); + if (stage != null) stage.addListener(stageListener); + } + + public void showMenu(Stage stage, float x, float y) { + if (getStage() == stage) return; + + setPosition(x, y - getHeight()); + if (stage.getHeight() - getY() > stage.getHeight()) setY(getY() + getHeight()); + ActorUtils.keepWithinStage(stage, this); + stage.addActor(this); + + setOrigin(Align.topRight); + setScale(0); + getColor().a = 0; + clearActions(); + addAction(Actions.parallel( + Actions.alpha(1, TRANSITION_TIME), + Actions.scaleTo(1, 1, TRANSITION_TIME, Interpolation.pow5Out) + )); + removing = false; + } + + @Override + public boolean remove () { + if (!removing) { + removing = true; + clearActions(); + addAction(Actions.sequence( + Actions.parallel( + Actions.alpha(0, TRANSITION_TIME), + Actions.scaleTo(0, 0, TRANSITION_TIME, Interpolation.pow2Out) + ), + Actions.run(() -> { + if (getStage() != null) getStage().removeListener(stageListener); + UIFilterMenu.super.remove(); + }))); + } + return removing; + } +} diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIFilterMenuMediator.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIFilterMenuMediator.java new file mode 100644 index 00000000..bb6569cb --- /dev/null +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIFilterMenuMediator.java @@ -0,0 +1,40 @@ +package games.rednblack.editor.view.ui.box.resourcespanel; + +import games.rednblack.editor.view.stage.Sandbox; +import games.rednblack.editor.view.stage.UIStage; +import games.rednblack.h2d.common.MsgAPI; +import org.puremvc.java.interfaces.INotification; +import org.puremvc.java.patterns.mediator.Mediator; + +public class UIFilterMenuMediator extends Mediator { + + private static final String TAG = UIFilterMenuMediator.class.getCanonicalName(); + public static final String NAME = TAG; + + public UIFilterMenuMediator() { + super(NAME, new UIFilterMenu()); + } + + @Override + public String[] listNotificationInterests() { + return new String[]{ + UIFilterMenu.SHOW_FILTER_MENU, + MsgAPI.ADD_RESOURCES_BOX_FILTER + }; + } + + @Override + public void handleNotification(INotification notification) { + UIStage uiStage = Sandbox.getInstance().getUIStage(); + + switch (notification.getName()) { + case UIFilterMenu.SHOW_FILTER_MENU: + Object[] payload = notification.getBody(); + viewComponent.showMenu(uiStage, (float) payload[0], (float) payload[1]); + break; + case MsgAPI.ADD_RESOURCES_BOX_FILTER: + viewComponent.addFilter(notification.getBody()); + break; + } + } +} diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIImagesTabMediator.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIImagesTabMediator.java index 3d66f1f5..0c59c39b 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIImagesTabMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIImagesTabMediator.java @@ -18,6 +18,7 @@ package games.rednblack.editor.view.ui.box.resourcespanel; +import games.rednblack.editor.renderer.factory.EntityFactory; import org.apache.commons.lang3.ArrayUtils; import org.puremvc.java.interfaces.INotification; @@ -40,6 +41,7 @@ public class UIImagesTabMediator extends UIResourcesTabMediator { private static final String TAG = UIImagesTabMediator.class.getCanonicalName(); public static final String NAME = TAG; + private final Array thumbnailBoxes = new Array<>(); public UIImagesTabMediator() { super(NAME, new UIImagesTab()); @@ -72,7 +74,7 @@ public class UIImagesTabMediator extends UIResourcesTabMediator { ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME); ProjectInfoVO projectInfoVO = projectManager.getCurrentProjectInfoVO(); - Array thumbnailBoxes = new Array<>(); + thumbnailBoxes.clear(); for (String atlasName : projectInfoVO.imagesPacks.keySet()) { TextureAtlas atlas = resourceManager.getTextureAtlas(atlasName); @@ -80,7 +82,8 @@ public class UIImagesTabMediator extends UIResourcesTabMediator { for (TextureAtlas.AtlasRegion region : new Array.ArrayIterator<>(atlasRegions)) { if(!projectInfoVO.imagesPacks.get(atlasName).regions.contains(region.name) - || !region.name.contains(searchText)) continue; + || !region.name.toLowerCase().contains(searchText) + || filterResource(region.name, EntityFactory.IMAGE_TYPE)) continue; boolean is9patch = region.findValue("split") != null; ImageResource imageResource = new ImageResource(region, true); diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UILibraryItemsTabMediator.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UILibraryItemsTabMediator.java index 54f623dc..e4b190bc 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UILibraryItemsTabMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UILibraryItemsTabMediator.java @@ -20,6 +20,7 @@ package games.rednblack.editor.view.ui.box.resourcespanel; import com.badlogic.gdx.utils.Array; import games.rednblack.editor.controller.commands.resource.ExportLibraryItemCommand; +import games.rednblack.editor.renderer.factory.EntityFactory; import games.rednblack.h2d.common.MsgAPI; import games.rednblack.editor.HyperLap2DFacade; import games.rednblack.editor.controller.commands.resource.DeleteLibraryItem; @@ -41,6 +42,7 @@ public class UILibraryItemsTabMediator extends UIResourcesTabMediator itemArray = new Array<>(); public UILibraryItemsTabMediator() { super(NAME, new UILibraryItemsTab()); @@ -76,9 +78,10 @@ public class UILibraryItemsTabMediator extends UIResourcesTabMediator items = projectManager.currentProjectInfoVO.libraryItems; - Array itemArray = new Array<>(); + itemArray.clear(); for (String key : items.keySet()) { - if(!key.toLowerCase().contains(searchText))continue; + if (!key.toLowerCase().contains(searchText) + || filterResource(key, EntityFactory.COMPOSITE_TYPE)) continue; DraggableResource draggableResource = new DraggableResource(new LibraryItemResource(key)); draggableResource.setFactoryFunction(ItemFactory.get()::createItemFromLibrary); draggableResource.initDragDrop(); diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIParticleEffectsTabMediator.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIParticleEffectsTabMediator.java index 4acb7eb5..a01a9130 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIParticleEffectsTabMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIParticleEffectsTabMediator.java @@ -30,7 +30,6 @@ import games.rednblack.editor.view.ui.box.resourcespanel.draggable.DraggableReso import games.rednblack.editor.view.ui.box.resourcespanel.draggable.list.ParticleEffectResource; import games.rednblack.editor.view.ui.box.resourcespanel.draggable.list.TalosResource; import games.rednblack.h2d.extension.talos.TalosItemType; -import games.rednblack.h2d.extention.spine.SpineItemType; import org.apache.commons.lang3.ArrayUtils; import org.puremvc.java.interfaces.INotification; @@ -81,21 +80,22 @@ public class UIParticleEffectsTabMediator extends UIResourcesTabMediator strings, Class resourceClass, BiFunction factoryFunction, String searchText) { - for (String animationName : strings) { - if (!animationName.contains(searchText)) continue; + private void createParticleResources(Set strings, Class resourceClass, BiFunction factoryFunction, String searchText) { + for (String particleName : strings) { + if (!particleName.toLowerCase().contains(searchText) + || filterResource(particleName, resourceClass == TalosResource.class ? EntityFactory.TALOS_TYPE : EntityFactory.PARTICLE_TYPE)) continue; try { Constructor constructor = resourceClass.getConstructor(String.class); - DraggableResource draggableResource = new DraggableResource((DraggableResourceView) constructor.newInstance(animationName)); + DraggableResource draggableResource = new DraggableResource((DraggableResourceView) constructor.newInstance(particleName)); draggableResource.setFactoryFunction(factoryFunction); particlesList.add(draggableResource); } catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException e) { diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIResourcesTab.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIResourcesTab.java index bc244a23..265695f2 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIResourcesTab.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIResourcesTab.java @@ -19,11 +19,17 @@ package games.rednblack.editor.view.ui.box.resourcespanel; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.ui.Table; +import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +import com.badlogic.gdx.utils.Pools; +import com.kotcrab.vis.ui.widget.VisImageButton; import com.kotcrab.vis.ui.widget.VisScrollPane; import com.kotcrab.vis.ui.widget.VisTable; import com.kotcrab.vis.ui.widget.VisTextField; import games.rednblack.editor.HyperLap2DFacade; +import games.rednblack.h2d.common.MsgAPI; import games.rednblack.h2d.common.view.ui.StandardWidgetsFactory; import games.rednblack.h2d.common.view.ui.widget.imagetabbedpane.ImageTab; @@ -36,18 +42,17 @@ public abstract class UIResourcesTab extends ImageTab { public String searchString = ""; - public static final String SEARCH = "games.rednblack.editor.view.ui.box.resourcespanel.UIResourcesTab" + ".SEARCH"; - public UIResourcesTab() { super(false, false); contentTable = new VisTable(); + contentTable.padTop(8).padLeft(7); contentTable.add(StandardWidgetsFactory.createLabel("Search:")).padLeft(1).padBottom(6); contentTable.add(createTextField()).padLeft(0).padRight(7).fillX().padBottom(4); + contentTable.add(createFilterButton()).padRight(7); contentTable.row(); VisScrollPane scrollPane = crateScrollPane(); - contentTable.add(scrollPane).padLeft(7).colspan(2).maxHeight(Gdx.graphics.getHeight() * 0.22f).expandX().fillX(); - contentTable.padTop(4); + contentTable.add(scrollPane).padTop(4).colspan(3).maxHeight(Gdx.graphics.getHeight() * 0.22f).expandX().fillX(); } protected VisTextField createTextField() { @@ -58,12 +63,29 @@ public abstract class UIResourcesTab extends ImageTab { public void keyTyped(VisTextField textField, char c) { searchString = textField.getText(); HyperLap2DFacade facade = HyperLap2DFacade.getInstance(); - facade.sendNotification(SEARCH); + facade.sendNotification(MsgAPI.UPDATE_RESOURCES_LIST); } }); return visTextField; } + protected VisImageButton createFilterButton () { + VisImageButton button = StandardWidgetsFactory.createImageButton("filter-button"); + button.addListener(new ClickListener() { + @Override + public void clicked(InputEvent event, float x, float y) { + HyperLap2DFacade facade = HyperLap2DFacade.getInstance(); + Vector2 pos = Pools.obtain(Vector2.class); + pos.set(0, 0); + button.localToStageCoordinates(pos); + Object[] payload = new Object[]{pos.x, pos.y, getTabTitle()}; + facade.sendNotification(UIFilterMenu.SHOW_FILTER_MENU, payload); + Pools.free(pos); + } + }); + return button; + } + @Override public Table getContentTable() { return contentTable; diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIResourcesTabMediator.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIResourcesTabMediator.java index a2745922..4864e134 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIResourcesTabMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIResourcesTabMediator.java @@ -18,8 +18,12 @@ package games.rednblack.editor.view.ui.box.resourcespanel; +import com.badlogic.gdx.utils.ObjectMap; import games.rednblack.editor.HyperLap2DFacade; import games.rednblack.editor.proxy.ProjectManager; +import games.rednblack.editor.proxy.SettingsManager; +import games.rednblack.h2d.common.MsgAPI; +import games.rednblack.h2d.common.filters.IAbstractResourceFilter; import org.puremvc.java.interfaces.INotification; import org.puremvc.java.patterns.mediator.Mediator; @@ -27,6 +31,13 @@ import org.puremvc.java.patterns.mediator.Mediator; * Created by sargis on 5/12/15. */ public abstract class UIResourcesTabMediator extends Mediator { + private static final String NAME = "games.rednblack.editor.view.ui.box.resourcespanel.UIResourcesTabMediator"; + public static final String CHANGE_ACTIVE_FILTER = NAME + ".CHANGE_ACTIVE_FILTER"; + + protected ObjectMap filters = new ObjectMap<>(); + + private SettingsManager settingsManager; + /** * Constructor. * @@ -41,6 +52,7 @@ public abstract class UIResourcesTabMediator extends M public void onRegister() { super.onRegister(); facade = HyperLap2DFacade.getInstance(); + settingsManager = facade.retrieveProxy(SettingsManager.NAME); } @Override @@ -48,20 +60,37 @@ public abstract class UIResourcesTabMediator extends M return new String[]{ ProjectManager.PROJECT_OPENED, ProjectManager.PROJECT_DATA_UPDATED, - UIResourcesTab.SEARCH + MsgAPI.ADD_RESOURCES_BOX_FILTER, + MsgAPI.UPDATE_RESOURCES_LIST, + CHANGE_ACTIVE_FILTER }; } - @Override public void handleNotification(INotification notification) { + IAbstractResourceFilter filter; + switch (notification.getName()) { case ProjectManager.PROJECT_OPENED: case ProjectManager.PROJECT_DATA_UPDATED: + case MsgAPI.UPDATE_RESOURCES_LIST: initList(viewComponent.searchString); break; - case UIResourcesTab.SEARCH: + case MsgAPI.ADD_RESOURCES_BOX_FILTER: + filter = notification.getBody(); + filter.setActive(settingsManager.editorConfigVO.enabledFilters.getOrDefault(filter.id, false)); + if (!filters.containsKey(filter.id)) + filters.put(filter.id, filter); + break; + case CHANGE_ACTIVE_FILTER: + if (filters.containsKey(notification.getType())) { + filter = filters.get(notification.getType()); + filter.setActive(notification.getBody()); + settingsManager.editorConfigVO.enabledFilters.put(filter.id, filter.isActive()); + settingsManager.saveEditorConfig(); + } initList(viewComponent.searchString); + break; default: break; } @@ -69,4 +98,11 @@ public abstract class UIResourcesTabMediator extends M protected abstract void initList(String searchText); + protected boolean filterResource(String resName, int resType) { + for (IAbstractResourceFilter filter : filters.values()) { + if (filter.isActive() && filter.filterResource(resName, resType)) + return true; + } + return false; + } } diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/draggable/DraggableResource.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/draggable/DraggableResource.java index d408413d..ba6daf66 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/draggable/DraggableResource.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/draggable/DraggableResource.java @@ -113,7 +113,7 @@ public class DraggableResource extends DragAndDrop implements Comparable