From 16c9fbe1487cbb60e3cd4e361276faac7f396cf7 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 4 Aug 2026 21:48:52 -0400 Subject: [PATCH 01/20] arc --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4b9e26d832..e2344d2a16 100644 --- a/gradle.properties +++ b/gradle.properties @@ -26,4 +26,4 @@ org.gradle.caching=true org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 android.enableR8.fullMode=false -archash=3ff071cb6d +archash=6579348da4 From 97b9afb85a43a40cb64025a1d513afb39c282b07 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 4 Aug 2026 23:33:37 -0400 Subject: [PATCH 02/20] Fixed #12453 --- core/src/mindustry/maps/filters/FilterOption.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/maps/filters/FilterOption.java b/core/src/mindustry/maps/filters/FilterOption.java index 1d7bd9f827..ccded80b0a 100644 --- a/core/src/mindustry/maps/filters/FilterOption.java +++ b/core/src/mindustry/maps/filters/FilterOption.java @@ -42,7 +42,7 @@ public abstract class FilterOption{ boolean display = true; SliderOption(String name, Floatp getter, Floatc setter, float min, float max){ - this(name, getter, setter, min, max, (max - min) / 200); + this(name, getter, setter, min, max, 0.00001f); } SliderOption(String name, Floatp getter, Floatc setter, float min, float max, float step){ From 467f61583bbe39494c7a54e8a71cb90d8bee0669 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 5 Aug 2026 03:21:25 -0400 Subject: [PATCH 03/20] Utility class for DSL UI hot reloading --- core/src/mindustry/ui/builder/UiBuilder.java | 1 + .../src/mindustry/ui/builder/UiHotReload.java | 50 +++++++++++++++++++ .../mindustry/ui/builder/UiTreeBuilder.java | 2 + 3 files changed, 53 insertions(+) create mode 100644 core/src/mindustry/ui/builder/UiHotReload.java diff --git a/core/src/mindustry/ui/builder/UiBuilder.java b/core/src/mindustry/ui/builder/UiBuilder.java index 477c46ab87..abae048019 100644 --- a/core/src/mindustry/ui/builder/UiBuilder.java +++ b/core/src/mindustry/ui/builder/UiBuilder.java @@ -300,5 +300,6 @@ public class UiBuilder{ public ButtonTableBuilder style(String style){ return prop(UiKey.style, style); } public ButtonTableBuilder clicked(String result){ return prop(UiKey.clicked, result); } + public ButtonTableBuilder margin(float m){ return prop(UiKey.margin, m); } } } \ No newline at end of file diff --git a/core/src/mindustry/ui/builder/UiHotReload.java b/core/src/mindustry/ui/builder/UiHotReload.java new file mode 100644 index 0000000000..b2f65869d3 --- /dev/null +++ b/core/src/mindustry/ui/builder/UiHotReload.java @@ -0,0 +1,50 @@ +package mindustry.ui.builder; + +import arc.files.*; +import arc.util.*; +import mindustry.*; +import mindustry.ui.*; +import mindustry.ui.dialogs.*; + +/** Utility class for showing a MSUI dialog box that automatically reloads changes for a certain file. + * Desktop only. Usage: Just run UiHotReload.show() in the JS console. */ +public class UiHotReload{ + + /** Shows a file picker for the dialog box. */ + public static void show(){ + + FileChooser.open("msui").submit(file -> { + long[] lastUpdate = {file.lastModified()}, debounceTime = {0}; + boolean[] modified = {false}; + + BaseDialog dialog = new BaseDialog("Mindustry DSL Preview"); + dialog.update(() -> { + if(lastUpdate[0] != file.lastModified()){ + lastUpdate[0] = file.lastModified(); + modified[0] = true; + debounceTime[0] = Time.millis(); + } + + if(modified[0] && Time.timeSinceMillis(debounceTime[0]) > 100){ + modified[0] = false; + reload(file, dialog); + } + }); + reload(file, dialog); + dialog.addCloseButton(); + dialog.show(); + }); + } + + static void reload(Fi file, BaseDialog dialog){ + try{ + dialog.cont.clear(); + UiTreeBuilder.build(dialog.cont, UiBuilder.parse(file.readString()), result -> { + Vars.ui.showInfo(result.toString()); + }); + }catch(Exception e){ + dialog.cont.clearChildren(); + dialog.cont.add("[scarlet]Error reading file: \n" + Strings.getStackTrace(e)).center().labelAlign(Align.center); + } + } +} diff --git a/core/src/mindustry/ui/builder/UiTreeBuilder.java b/core/src/mindustry/ui/builder/UiTreeBuilder.java index 60bec1be2f..4d30ed3602 100644 --- a/core/src/mindustry/ui/builder/UiTreeBuilder.java +++ b/core/src/mindustry/ui/builder/UiTreeBuilder.java @@ -180,6 +180,8 @@ public class UiTreeBuilder{ Button btn = new Button(); //can use any button style if(!applyStyle(node, TextButtonStyle.class, btn::setStyle)) applyStyle(node, ImageButtonStyle.class, btn::setStyle); + Float margin = node.num(UiKey.margin); + if(margin != null) btn.margin(margin); Cell