diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java index 53f7e79df8..441c00c392 100644 --- a/android/src/io/anuke/mindustry/AndroidLauncher.java +++ b/android/src/io/anuke/mindustry/AndroidLauncher.java @@ -169,10 +169,10 @@ public class AndroidLauncher extends AndroidApplication{ SaveSlot slot = control.saves.importSave(file); ui.load.runLoadSave(slot); }catch(IOException e){ - ui.showError(Core.bundle.format("save.import.fail", Strings.parseException(e, true))); + ui.showException("save.import.fail", e); } }else{ - ui.showError("$save.import.invalid"); + ui.showErrorMessage("$save.import.invalid"); } }else if(map){ //open map FileHandle file = Core.files.local("temp-map." + mapExtension); diff --git a/annotations/src/main/java/io/anuke/annotations/Annotations.java b/annotations/src/main/java/io/anuke/annotations/Annotations.java index d964f85401..e7afef4f9a 100644 --- a/annotations/src/main/java/io/anuke/annotations/Annotations.java +++ b/annotations/src/main/java/io/anuke/annotations/Annotations.java @@ -4,6 +4,11 @@ import java.lang.annotation.*; public class Annotations{ + @Target(ElementType.TYPE) + @Retention(RetentionPolicy.SOURCE) + public @interface StyleDefaults { + } + /** Indicates that a method should always call its super version. */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) diff --git a/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java b/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java index 51727dbe4b..c0ec172b9c 100644 --- a/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java +++ b/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java @@ -1,26 +1,22 @@ package io.anuke.annotations; import com.squareup.javapoet.*; +import io.anuke.annotations.Annotations.*; -import javax.annotation.processing.AbstractProcessor; -import javax.annotation.processing.ProcessingEnvironment; -import javax.annotation.processing.RoundEnvironment; -import javax.annotation.processing.SupportedSourceVersion; -import javax.lang.model.SourceVersion; -import javax.lang.model.element.Modifier; -import javax.lang.model.element.TypeElement; -import javax.tools.Diagnostic.Kind; -import javax.tools.StandardLocation; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; +import javax.annotation.processing.*; +import javax.lang.model.*; +import javax.lang.model.element.*; +import javax.tools.Diagnostic.*; +import javax.tools.*; +import java.nio.file.*; +import java.util.*; @SupportedSourceVersion(SourceVersion.RELEASE_8) +@SupportedAnnotationTypes("io.anuke.annotations.Annotations.StyleDefaults") public class AssetsAnnotationProcessor extends AbstractProcessor{ /** Name of the base package to put all the generated classes. */ private static final String packageName = "io.anuke.mindustry.gen"; + private String path; private int round; @Override @@ -38,13 +34,13 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{ if(round++ != 0) return false; //only process 1 round try{ - - String path = Paths.get(Utils.filer.createResource(StandardLocation.CLASS_OUTPUT, "no", "no") + path = Paths.get(Utils.filer.createResource(StandardLocation.CLASS_OUTPUT, "no", "no") .toUri().toURL().toString().substring(System.getProperty("os.name").contains("Windows") ? 6 : "file:".length())) .getParent().getParent().getParent().getParent().getParent().getParent().toString(); - process("Sounds", path + "/assets/sounds", "io.anuke.arc.audio.Sound", "newSound"); - process("Musics", path + "/assets/music", "io.anuke.arc.audio.Music", "newMusic"); + processSounds("Sounds", path + "/assets/sounds", "io.anuke.arc.audio.Sound"); + processSounds("Musics", path + "/assets/music", "io.anuke.arc.audio.Music"); + processUI(roundEnv.getElementsAnnotatedWith(StyleDefaults.class)); return true; }catch(Exception e){ @@ -53,19 +49,72 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{ } } - @Override - public Set getSupportedAnnotationTypes() { - return Collections.singleton("*"); + void processUI(Set elements) throws Exception{ + String[] iconSizes = {"small", "smaller", "tiny"}; + + TypeSpec.Builder type = TypeSpec.classBuilder("Tex").addModifiers(Modifier.PUBLIC); + TypeSpec.Builder ictype = TypeSpec.classBuilder("Icon").addModifiers(Modifier.PUBLIC); + MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); + MethodSpec.Builder icload = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); + String resources = path + "/assets-raw/sprites/ui"; + Files.walk(Paths.get(resources)).forEach(p -> { + if(Files.isDirectory(p)) return; + + String filename = p.getFileName().toString(); + filename = filename.substring(0, filename.indexOf(".")); + + ArrayList names = new ArrayList<>(); + names.add(""); + if(filename.contains("icon")){ + names.addAll(Arrays.asList(iconSizes)); + } + + for(String suffix : names){ + suffix = suffix.isEmpty() ? "" : "-" + suffix; + + String sfilen = filename + suffix; + String dtype = p.getFileName().toString().endsWith(".9.png") ? "io.anuke.arc.scene.style.NinePatchDrawable" : "io.anuke.arc.scene.style.TextureRegionDrawable"; + + String varname = capitalize(sfilen); + TypeSpec.Builder ttype = type; + MethodSpec.Builder tload = load; + if(varname.startsWith("icon")){ + varname = varname.substring("icon".length()); + varname = Character.toLowerCase(varname.charAt(0)) + varname.substring(1); + ttype = ictype; + tload = icload; + if(SourceVersion.isKeyword(varname)) varname += "i"; + } + + if(SourceVersion.isKeyword(varname)) varname += "s"; + + ttype.addField(ClassName.bestGuess(dtype), varname, Modifier.STATIC, Modifier.PUBLIC); + tload.addStatement(varname + " = ("+dtype+")io.anuke.arc.Core.atlas.getDrawable($S)", sfilen); + } + }); + + for(Element elem : elements){ + TypeElement t = (TypeElement)elem; + t.getEnclosedElements().stream().filter(e -> e.getKind() == ElementKind.FIELD).forEach(field -> { + String fname = field.getSimpleName().toString(); + if(fname.startsWith("default")){ + load.addStatement("io.anuke.arc.Core.scene.addStyle(" + field.asType().toString() + ".class, io.anuke.mindustry.ui.Style." + fname + ")"); + } + }); + } + + ictype.addMethod(icload.build()); + JavaFile.builder(packageName, ictype.build()).build().writeTo(Utils.filer); + + type.addMethod(load.build()); + JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer); } - void process(String classname, String path, String rtype, String loadMethod) throws Exception{ + void processSounds(String classname, String path, String rtype) throws Exception{ TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC); - //MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); MethodSpec.Builder dispose = MethodSpec.methodBuilder("dispose").addModifiers(Modifier.PUBLIC, Modifier.STATIC); - MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); - HashSet names = new HashSet<>(); Files.list(Paths.get(path)).forEach(p -> { String fname = p.getFileName().toString(); @@ -84,26 +133,38 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{ String filepath = path.substring(path.lastIndexOf("/") + 1) + "/" + fname; - //load.addStatement(name + " = io.anuke.arc.Core.audio."+loadMethod+"(io.anuke.arc.Core.files.internal(io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? $S : $S))", - //filepath, filepath.replace(".ogg", ".mp3")); String filename = "io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? \"" + filepath + "\" : \"" + filepath.replace(".ogg", ".mp3")+"\""; loadBegin.addStatement("io.anuke.arc.Core.assets.load("+filename +", "+rtype+".class).loaded = a -> " + name + " = ("+rtype+")a", filepath, filepath.replace(".ogg", ".mp3")); - dispose.addStatement(name + ".dispose()"); dispose.addStatement(name + " = null"); type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); - //cons.consume(type, fname, name); }); if(classname.equals("Sounds")){ type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); } - //type.addMethod(load.build()); type.addMethod(loadBegin.build()); type.addMethod(dispose.build()); JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer); } + + static String capitalize(String s){ + StringBuilder result = new StringBuilder(s.length()); + + for(int i = 0; i < s.length(); i++){ + char c = s.charAt(i); + if(c != '_' && c != '-'){ + if(i > 0 && (s.charAt(i - 1) == '_' || s.charAt(i - 1) == '-')){ + result.append(Character.toUpperCase(c)); + }else{ + result.append(c); + } + } + } + + return result.toString(); + } } diff --git a/core/assets-raw/sprites/ui/icons/icon-admin-small.png b/core/assets-raw/sprites/ui/icons/icon-admin-badge.png similarity index 100% rename from core/assets-raw/sprites/ui/icons/icon-admin-small.png rename to core/assets-raw/sprites/ui/icons/icon-admin-badge.png diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index e1e8ef5e28..209174445b 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -9038,7 +9038,7 @@ check-over index: -1 clear rotate: false - xy: 1, 8 + xy: 353, 17 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -9381,7 +9381,7 @@ cultivator-icon-small index: -1 cursor rotate: false - xy: 1977, 717 + xy: 971, 403 size: 4, 4 orig: 4, 4 offset: 0, 0 @@ -10143,13 +10143,6 @@ icon-about orig: 48, 48 offset: 0, 0 index: -1 -icon-about-med - rotate: false - xy: 607, 421 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 icon-about-small rotate: false xy: 1439, 691 @@ -10157,6 +10150,20 @@ icon-about-small orig: 32, 32 offset: 0, 0 index: -1 +icon-about-smaller + rotate: false + xy: 641, 455 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-about-tiny + rotate: false + xy: 737, 393 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 icon-add rotate: false xy: 151, 667 @@ -10164,13 +10171,6 @@ icon-add orig: 48, 48 offset: 0, 0 index: -1 -icon-add-med - rotate: false - xy: 641, 455 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 icon-add-small rotate: false xy: 1473, 691 @@ -10178,6 +10178,20 @@ icon-add-small orig: 32, 32 offset: 0, 0 index: -1 +icon-add-smaller + rotate: false + xy: 675, 489 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-add-tiny + rotate: false + xy: 1, 2 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 icon-admin rotate: false xy: 51, 517 @@ -10185,34 +10199,55 @@ icon-admin orig: 48, 48 offset: 0, 0 index: -1 -icon-admin-med - rotate: false - xy: 675, 489 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-admin-small +icon-admin-badge rotate: false xy: 101, 567 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-admin-small-med +icon-admin-badge-small + rotate: false + xy: 1507, 691 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-admin-badge-smaller rotate: false xy: 709, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-admin-small-small +icon-admin-badge-tiny rotate: false - xy: 1507, 691 + xy: 1991, 555 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-admin-small + rotate: false + xy: 1541, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +icon-admin-smaller + rotate: false + xy: 743, 557 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-admin-tiny + rotate: false + xy: 1135, 507 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 icon-arrow rotate: false xy: 151, 617 @@ -10227,34 +10262,48 @@ icon-arrow-16 orig: 48, 48 offset: 0, 0 index: -1 -icon-arrow-16-med - rotate: false - xy: 743, 557 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-arrow-med - rotate: false - xy: 743, 557 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 icon-arrow-16-small rotate: false - xy: 1541, 691 + xy: 1575, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-small rotate: false - xy: 1541, 691 + xy: 1575, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +icon-arrow-16-smaller + rotate: false + xy: 437, 217 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-arrow-smaller + rotate: false + xy: 437, 217 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-arrow-16-tiny + rotate: false + xy: 971, 481 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-arrow-tiny + rotate: false + xy: 971, 481 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 icon-arrow-down rotate: false xy: 201, 667 @@ -10262,18 +10311,25 @@ icon-arrow-down orig: 48, 48 offset: 0, 0 index: -1 -icon-arrow-down-med +icon-arrow-down-small rotate: false - xy: 437, 217 + xy: 1609, 691 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-arrow-down-smaller + rotate: false + xy: 471, 251 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-arrow-down-small +icon-arrow-down-tiny rotate: false - xy: 1575, 691 - size: 32, 32 - orig: 32, 32 + xy: 19, 2 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-left @@ -10283,18 +10339,25 @@ icon-arrow-left orig: 48, 48 offset: 0, 0 index: -1 -icon-arrow-left-med +icon-arrow-left-small rotate: false - xy: 471, 251 + xy: 1643, 691 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-arrow-left-smaller + rotate: false + xy: 505, 285 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-arrow-left-small +icon-arrow-left-tiny rotate: false - xy: 1609, 691 - size: 32, 32 - orig: 32, 32 + xy: 971, 463 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-right @@ -10304,18 +10367,25 @@ icon-arrow-right orig: 48, 48 offset: 0, 0 index: -1 -icon-arrow-right-med +icon-arrow-right-small rotate: false - xy: 505, 285 + xy: 1677, 691 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-arrow-right-smaller + rotate: false + xy: 539, 319 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-arrow-right-small +icon-arrow-right-tiny rotate: false - xy: 1643, 691 - size: 32, 32 - orig: 32, 32 + xy: 989, 481 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-up @@ -10325,18 +10395,25 @@ icon-arrow-up orig: 48, 48 offset: 0, 0 index: -1 -icon-arrow-up-med +icon-arrow-up-small rotate: false - xy: 539, 319 + xy: 1711, 691 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-arrow-up-smaller + rotate: false + xy: 573, 353 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-arrow-up-small +icon-arrow-up-tiny rotate: false - xy: 1677, 691 - size: 32, 32 - orig: 32, 32 + xy: 971, 445 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-back @@ -10346,18 +10423,25 @@ icon-back orig: 48, 48 offset: 0, 0 index: -1 -icon-back-med +icon-back-small rotate: false - xy: 573, 353 + xy: 1745, 691 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-back-smaller + rotate: false + xy: 607, 387 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-back-small +icon-back-tiny rotate: false - xy: 1711, 691 - size: 32, 32 - orig: 32, 32 + xy: 989, 463 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-ban @@ -10367,18 +10451,25 @@ icon-ban orig: 48, 48 offset: 0, 0 index: -1 -icon-ban-med +icon-ban-small rotate: false - xy: 607, 389 + xy: 445, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-ban-smaller + rotate: false + xy: 641, 423 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-ban-small +icon-ban-tiny rotate: false - xy: 1745, 691 - size: 32, 32 - orig: 32, 32 + xy: 1007, 481 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-break @@ -10388,18 +10479,25 @@ icon-break orig: 48, 48 offset: 0, 0 index: -1 -icon-break-med +icon-break-small + rotate: false + xy: 479, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-break-smaller rotate: false xy: 775, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-break-small +icon-break-tiny rotate: false - xy: 445, 657 - size: 32, 32 - orig: 32, 32 + xy: 971, 427 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-cancel @@ -10409,18 +10507,32 @@ icon-cancel orig: 48, 48 offset: 0, 0 index: -1 -icon-cancel-med +icon-cancel-small + rotate: false + xy: 513, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-cancel-smaller rotate: false xy: 437, 185 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-cancel-small +icon-cancel-tiny rotate: false - xy: 479, 657 - size: 32, 32 - orig: 32, 32 + xy: 989, 445 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-quit-tiny + rotate: false + xy: 989, 445 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-changelog @@ -10430,18 +10542,25 @@ icon-changelog orig: 48, 48 offset: 0, 0 index: -1 -icon-changelog-med +icon-changelog-small + rotate: false + xy: 547, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-changelog-smaller rotate: false xy: 807, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-changelog-small +icon-changelog-tiny rotate: false - xy: 513, 657 - size: 32, 32 - orig: 32, 32 + xy: 1007, 463 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-chat @@ -10451,18 +10570,25 @@ icon-chat orig: 48, 48 offset: 0, 0 index: -1 -icon-chat-med +icon-chat-small + rotate: false + xy: 581, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-chat-smaller rotate: false xy: 437, 153 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-chat-small +icon-chat-tiny rotate: false - xy: 547, 657 - size: 32, 32 - orig: 32, 32 + xy: 1025, 481 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-check @@ -10472,18 +10598,25 @@ icon-check orig: 48, 48 offset: 0, 0 index: -1 -icon-check-med +icon-check-small + rotate: false + xy: 615, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-check-smaller rotate: false xy: 839, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-check-small +icon-check-tiny rotate: false - xy: 581, 657 - size: 32, 32 - orig: 32, 32 + xy: 989, 427 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-command-attack @@ -10493,18 +10626,25 @@ icon-command-attack orig: 48, 48 offset: 0, 0 index: -1 -icon-command-attack-med +icon-command-attack-small + rotate: false + xy: 649, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-command-attack-smaller rotate: false xy: 437, 121 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-command-attack-small +icon-command-attack-tiny rotate: false - xy: 615, 657 - size: 32, 32 - orig: 32, 32 + xy: 1007, 445 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-command-idle @@ -10514,18 +10654,25 @@ icon-command-idle orig: 48, 48 offset: 0, 0 index: -1 -icon-command-idle-med +icon-command-idle-small + rotate: false + xy: 683, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-command-idle-smaller rotate: false xy: 871, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-command-idle-small +icon-command-idle-tiny rotate: false - xy: 649, 657 - size: 32, 32 - orig: 32, 32 + xy: 1025, 463 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-command-patrol @@ -10535,18 +10682,25 @@ icon-command-patrol orig: 48, 48 offset: 0, 0 index: -1 -icon-command-patrol-med +icon-command-patrol-small + rotate: false + xy: 717, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-command-patrol-smaller rotate: false xy: 437, 89 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-command-patrol-small +icon-command-patrol-tiny rotate: false - xy: 683, 657 - size: 32, 32 - orig: 32, 32 + xy: 1043, 481 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-command-retreat @@ -10556,18 +10710,25 @@ icon-command-retreat orig: 48, 48 offset: 0, 0 index: -1 -icon-command-retreat-med +icon-command-retreat-small + rotate: false + xy: 751, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-command-retreat-smaller rotate: false xy: 903, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-command-retreat-small +icon-command-retreat-tiny rotate: false - xy: 717, 657 - size: 32, 32 - orig: 32, 32 + xy: 1007, 427 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-copy @@ -10577,18 +10738,25 @@ icon-copy orig: 48, 48 offset: 0, 0 index: -1 -icon-copy-med +icon-copy-small + rotate: false + xy: 785, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-copy-smaller rotate: false xy: 437, 57 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-copy-small +icon-copy-tiny rotate: false - xy: 751, 657 - size: 32, 32 - orig: 32, 32 + xy: 1025, 445 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-crafting @@ -10598,18 +10766,25 @@ icon-crafting orig: 48, 48 offset: 0, 0 index: -1 -icon-crafting-med +icon-crafting-small + rotate: false + xy: 819, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-crafting-smaller rotate: false xy: 935, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-crafting-small +icon-crafting-tiny rotate: false - xy: 785, 657 - size: 32, 32 - orig: 32, 32 + xy: 1043, 463 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-cursor @@ -10619,18 +10794,25 @@ icon-cursor orig: 48, 48 offset: 0, 0 index: -1 -icon-cursor-med +icon-cursor-small + rotate: false + xy: 853, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-cursor-smaller rotate: false xy: 967, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-cursor-small +icon-cursor-tiny rotate: false - xy: 819, 657 - size: 32, 32 - orig: 32, 32 + xy: 1061, 481 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-database @@ -10640,18 +10822,25 @@ icon-database orig: 48, 48 offset: 0, 0 index: -1 -icon-database-med +icon-database-small + rotate: false + xy: 887, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-database-smaller rotate: false xy: 999, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-database-small +icon-database-tiny rotate: false - xy: 853, 657 - size: 32, 32 - orig: 32, 32 + xy: 1025, 427 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-defense @@ -10661,18 +10850,25 @@ icon-defense orig: 48, 48 offset: 0, 0 index: -1 -icon-defense-med +icon-defense-small + rotate: false + xy: 921, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-defense-smaller rotate: false xy: 1031, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-defense-small +icon-defense-tiny rotate: false - xy: 887, 657 - size: 32, 32 - orig: 32, 32 + xy: 1043, 445 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-dev-builds @@ -10682,18 +10878,25 @@ icon-dev-builds orig: 48, 48 offset: 0, 0 index: -1 -icon-dev-builds-med +icon-dev-builds-small + rotate: false + xy: 955, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-dev-builds-smaller rotate: false xy: 1063, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-dev-builds-small +icon-dev-builds-tiny rotate: false - xy: 921, 657 - size: 32, 32 - orig: 32, 32 + xy: 1061, 463 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-diagonal @@ -10703,18 +10906,25 @@ icon-diagonal orig: 48, 48 offset: 0, 0 index: -1 -icon-diagonal-med +icon-diagonal-small + rotate: false + xy: 989, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-diagonal-smaller rotate: false xy: 1095, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-diagonal-small +icon-diagonal-tiny rotate: false - xy: 955, 657 - size: 32, 32 - orig: 32, 32 + xy: 1079, 481 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-discord @@ -10724,18 +10934,25 @@ icon-discord orig: 48, 48 offset: 0, 0 index: -1 -icon-discord-med +icon-discord-small + rotate: false + xy: 1023, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-discord-smaller rotate: false xy: 1127, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-discord-small +icon-discord-tiny rotate: false - xy: 989, 657 - size: 32, 32 - orig: 32, 32 + xy: 1043, 427 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-distribution @@ -10745,18 +10962,25 @@ icon-distribution orig: 48, 48 offset: 0, 0 index: -1 -icon-distribution-med +icon-distribution-small + rotate: false + xy: 1057, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-distribution-smaller rotate: false xy: 1159, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-distribution-small +icon-distribution-tiny rotate: false - xy: 1023, 657 - size: 32, 32 - orig: 32, 32 + xy: 1061, 445 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-donate @@ -10766,18 +10990,25 @@ icon-donate orig: 48, 48 offset: 0, 0 index: -1 -icon-donate-med +icon-donate-small + rotate: false + xy: 1091, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-donate-smaller rotate: false xy: 1191, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-donate-small +icon-donate-tiny rotate: false - xy: 1057, 657 - size: 32, 32 - orig: 32, 32 + xy: 1079, 463 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-dots @@ -10787,18 +11018,25 @@ icon-dots orig: 48, 48 offset: 0, 0 index: -1 -icon-dots-med +icon-dots-small + rotate: false + xy: 1125, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-dots-smaller rotate: false xy: 1223, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-dots-small +icon-dots-tiny rotate: false - xy: 1091, 657 - size: 32, 32 - orig: 32, 32 + xy: 1097, 481 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-editor @@ -10808,18 +11046,25 @@ icon-editor orig: 48, 48 offset: 0, 0 index: -1 -icon-editor-med +icon-editor-small + rotate: false + xy: 1159, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-editor-smaller rotate: false xy: 1255, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-editor-small +icon-editor-tiny rotate: false - xy: 1125, 657 - size: 32, 32 - orig: 32, 32 + xy: 1061, 427 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-effect @@ -10829,18 +11074,25 @@ icon-effect orig: 48, 48 offset: 0, 0 index: -1 -icon-effect-med +icon-effect-small + rotate: false + xy: 1193, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-effect-smaller rotate: false xy: 1287, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-effect-small +icon-effect-tiny rotate: false - xy: 1159, 657 - size: 32, 32 - orig: 32, 32 + xy: 1079, 445 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-elevation @@ -10850,18 +11102,25 @@ icon-elevation orig: 48, 48 offset: 0, 0 index: -1 -icon-elevation-med +icon-elevation-small + rotate: false + xy: 1227, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-elevation-smaller rotate: false xy: 1319, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-elevation-small +icon-elevation-tiny rotate: false - xy: 1193, 657 - size: 32, 32 - orig: 32, 32 + xy: 1097, 463 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-eraser @@ -10871,18 +11130,25 @@ icon-eraser orig: 48, 48 offset: 0, 0 index: -1 -icon-eraser-med +icon-eraser-small + rotate: false + xy: 1261, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-eraser-smaller rotate: false xy: 1351, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-eraser-small +icon-eraser-tiny rotate: false - xy: 1227, 657 - size: 32, 32 - orig: 32, 32 + xy: 1115, 481 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-exit @@ -10892,18 +11158,25 @@ icon-exit orig: 48, 48 offset: 0, 0 index: -1 -icon-exit-med +icon-exit-small + rotate: false + xy: 1295, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-exit-smaller rotate: false xy: 1383, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-exit-small +icon-exit-tiny rotate: false - xy: 1261, 657 - size: 32, 32 - orig: 32, 32 + xy: 1079, 427 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-fdroid @@ -10913,18 +11186,25 @@ icon-fdroid orig: 48, 48 offset: 0, 0 index: -1 -icon-fdroid-med +icon-fdroid-small + rotate: false + xy: 1329, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-fdroid-smaller rotate: false xy: 1415, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-fdroid-small +icon-fdroid-tiny rotate: false - xy: 1295, 657 - size: 32, 32 - orig: 32, 32 + xy: 1097, 445 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-file @@ -10941,34 +11221,41 @@ icon-file-image orig: 48, 48 offset: 0, 0 index: -1 -icon-file-image-med +icon-file-image-small + rotate: false + xy: 1363, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-file-image-smaller rotate: false xy: 1447, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-file-image-small +icon-file-image-tiny rotate: false - xy: 1329, 657 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-file-med - rotate: false - xy: 1479, 557 - size: 30, 30 - orig: 30, 30 + xy: 1115, 463 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-file-small rotate: false - xy: 1363, 657 + xy: 1397, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +icon-file-smaller + rotate: false + xy: 1479, 557 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 icon-file-text rotate: false xy: 101, 117 @@ -10976,18 +11263,32 @@ icon-file-text orig: 48, 48 offset: 0, 0 index: -1 -icon-file-text-med +icon-file-text-small + rotate: false + xy: 1431, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-file-text-smaller rotate: false xy: 1511, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-file-text-small +icon-file-text-tiny rotate: false - xy: 1397, 657 - size: 32, 32 - orig: 32, 32 + xy: 1097, 427 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-file-tiny + rotate: false + xy: 1115, 445 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-fill @@ -10997,18 +11298,25 @@ icon-fill orig: 48, 48 offset: 0, 0 index: -1 -icon-fill-med +icon-fill-small + rotate: false + xy: 1465, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-fill-smaller rotate: false xy: 1543, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-fill-small +icon-fill-tiny rotate: false - xy: 1431, 657 - size: 32, 32 - orig: 32, 32 + xy: 1115, 427 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-floppy @@ -11025,32 +11333,46 @@ icon-floppy-16 orig: 48, 48 offset: 0, 0 index: -1 -icon-floppy-16-med +icon-floppy-16-small + rotate: false + xy: 1499, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-floppy-16-smaller rotate: false xy: 1575, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-floppy-16-small +icon-floppy-16-tiny rotate: false - xy: 1465, 657 + xy: 743, 375 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-floppy-small + rotate: false + xy: 1533, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-floppy-med +icon-floppy-smaller rotate: false xy: 1607, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-floppy-small +icon-floppy-tiny rotate: false - xy: 1499, 657 - size: 32, 32 - orig: 32, 32 + xy: 755, 393 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-folder @@ -11060,13 +11382,6 @@ icon-folder orig: 48, 48 offset: 0, 0 index: -1 -icon-folder-med - rotate: false - xy: 1639, 557 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 icon-folder-parent rotate: false xy: 201, 167 @@ -11074,25 +11389,46 @@ icon-folder-parent orig: 48, 48 offset: 0, 0 index: -1 -icon-folder-parent-med +icon-folder-parent-small + rotate: false + xy: 1567, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-folder-parent-smaller + rotate: false + xy: 1639, 557 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-folder-parent-tiny + rotate: false + xy: 773, 395 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-folder-small + rotate: false + xy: 1601, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-folder-smaller rotate: false xy: 1671, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-folder-parent-small +icon-folder-tiny rotate: false - xy: 1533, 657 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-folder-small - rotate: false - xy: 1567, 657 - size: 32, 32 - orig: 32, 32 + xy: 791, 395 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-github @@ -11102,18 +11438,25 @@ icon-github orig: 48, 48 offset: 0, 0 index: -1 -icon-github-med +icon-github-small + rotate: false + xy: 1635, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-github-smaller rotate: false xy: 1703, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-github-small +icon-github-tiny rotate: false - xy: 1601, 657 - size: 32, 32 - orig: 32, 32 + xy: 761, 375 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-google-play @@ -11123,18 +11466,25 @@ icon-google-play orig: 48, 48 offset: 0, 0 index: -1 -icon-google-play-med +icon-google-play-small + rotate: false + xy: 1669, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-google-play-smaller rotate: false xy: 1735, 557 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-google-play-small +icon-google-play-tiny rotate: false - xy: 1635, 657 - size: 32, 32 - orig: 32, 32 + xy: 779, 377 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-grid @@ -11144,18 +11494,25 @@ icon-grid orig: 48, 48 offset: 0, 0 index: -1 -icon-grid-med +icon-grid-small + rotate: false + xy: 1703, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-grid-smaller rotate: false xy: 1767, 586 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-grid-small +icon-grid-tiny rotate: false - xy: 1669, 657 - size: 32, 32 - orig: 32, 32 + xy: 797, 377 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-home @@ -11165,18 +11522,25 @@ icon-home orig: 48, 48 offset: 0, 0 index: -1 -icon-home-med +icon-home-small + rotate: false + xy: 1737, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-home-smaller rotate: false xy: 1767, 554 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-home-small +icon-home-tiny rotate: false - xy: 1703, 657 - size: 32, 32 - orig: 32, 32 + xy: 809, 395 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-host @@ -11186,18 +11550,25 @@ icon-host orig: 48, 48 offset: 0, 0 index: -1 -icon-host-med +icon-host-small + rotate: false + xy: 1779, 686 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-host-smaller rotate: false xy: 1799, 583 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-host-small +icon-host-tiny rotate: false - xy: 1737, 657 - size: 32, 32 - orig: 32, 32 + xy: 815, 377 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-info @@ -11207,18 +11578,25 @@ icon-info orig: 48, 48 offset: 0, 0 index: -1 -icon-info-med +icon-info-small + rotate: false + xy: 1771, 652 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-info-smaller rotate: false xy: 1831, 583 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-info-small +icon-info-tiny rotate: false - xy: 1779, 686 - size: 32, 32 - orig: 32, 32 + xy: 827, 403 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-itch.io @@ -11228,18 +11606,25 @@ icon-itch.io orig: 48, 48 offset: 0, 0 index: -1 -icon-itch.io-med +icon-itch.io-small + rotate: false + xy: 376, 628 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-itch.io-smaller rotate: false xy: 1863, 583 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-itch.io-small +icon-itch.io-tiny rotate: false - xy: 1771, 652 - size: 32, 32 - orig: 32, 32 + xy: 845, 403 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-item @@ -11249,18 +11634,25 @@ icon-item orig: 48, 48 offset: 0, 0 index: -1 -icon-item-med +icon-item-small + rotate: false + xy: 410, 628 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-item-smaller rotate: false xy: 1895, 583 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-item-small +icon-item-tiny rotate: false - xy: 376, 628 - size: 32, 32 - orig: 32, 32 + xy: 863, 403 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-line @@ -11270,18 +11662,25 @@ icon-line orig: 48, 48 offset: 0, 0 index: -1 -icon-line-med +icon-line-small + rotate: false + xy: 444, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-line-smaller rotate: false xy: 1927, 583 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-line-small +icon-line-tiny rotate: false - xy: 410, 628 - size: 32, 32 - orig: 32, 32 + xy: 881, 403 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-link @@ -11291,18 +11690,25 @@ icon-link orig: 48, 48 offset: 0, 0 index: -1 -icon-link-med +icon-link-small + rotate: false + xy: 478, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-link-smaller rotate: false xy: 1799, 551 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-link-small +icon-link-tiny rotate: false - xy: 444, 623 - size: 32, 32 - orig: 32, 32 + xy: 899, 403 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-liquid @@ -11319,32 +11725,46 @@ icon-liquid-consume orig: 48, 48 offset: 0, 0 index: -1 -icon-liquid-consume-med +icon-liquid-consume-small + rotate: false + xy: 512, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-liquid-consume-smaller rotate: false xy: 1831, 551 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-liquid-consume-small +icon-liquid-consume-tiny rotate: false - xy: 478, 623 + xy: 917, 403 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-liquid-small + rotate: false + xy: 546, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-liquid-med +icon-liquid-smaller rotate: false xy: 1863, 551 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-liquid-small +icon-liquid-tiny rotate: false - xy: 512, 623 - size: 32, 32 - orig: 32, 32 + xy: 935, 403 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-load @@ -11361,18 +11781,25 @@ icon-load-image orig: 48, 48 offset: 0, 0 index: -1 -icon-load-image-med +icon-load-image-small + rotate: false + xy: 580, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-load-image-smaller rotate: false xy: 1895, 551 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-load-image-small +icon-load-image-tiny rotate: false - xy: 546, 623 - size: 32, 32 - orig: 32, 32 + xy: 953, 403 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-load-map @@ -11382,32 +11809,46 @@ icon-load-map orig: 48, 48 offset: 0, 0 index: -1 -icon-load-map-med +icon-load-map-small + rotate: false + xy: 614, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-load-map-smaller rotate: false xy: 1927, 551 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-load-map-small +icon-load-map-tiny rotate: false - xy: 580, 623 + xy: 971, 409 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-load-small + rotate: false + xy: 648, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-load-med +icon-load-smaller rotate: false xy: 369, 18 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-load-small +icon-load-tiny rotate: false - xy: 614, 623 - size: 32, 32 - orig: 32, 32 + xy: 989, 409 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-loading @@ -11417,18 +11858,25 @@ icon-loading orig: 48, 48 offset: 0, 0 index: -1 -icon-loading-med +icon-loading-small + rotate: false + xy: 682, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-loading-smaller rotate: false xy: 401, 18 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-loading-small +icon-loading-tiny rotate: false - xy: 648, 623 - size: 32, 32 - orig: 32, 32 + xy: 1007, 409 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-locked @@ -11438,18 +11886,25 @@ icon-locked orig: 48, 48 offset: 0, 0 index: -1 -icon-locked-med +icon-locked-small + rotate: false + xy: 716, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-locked-smaller rotate: false xy: 1959, 583 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-locked-small +icon-locked-tiny rotate: false - xy: 682, 623 - size: 32, 32 - orig: 32, 32 + xy: 1025, 409 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-map @@ -11459,18 +11914,25 @@ icon-map orig: 48, 48 offset: 0, 0 index: -1 -icon-map-med +icon-map-small + rotate: false + xy: 750, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-map-smaller rotate: false xy: 1959, 551 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-map-small +icon-map-tiny rotate: false - xy: 716, 623 - size: 32, 32 - orig: 32, 32 + xy: 1043, 409 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-menu @@ -11487,32 +11949,46 @@ icon-menu-large orig: 48, 48 offset: 0, 0 index: -1 -icon-menu-large-med +icon-menu-large-small + rotate: false + xy: 784, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-menu-large-smaller rotate: false xy: 1975, 651 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-menu-large-small +icon-menu-large-tiny rotate: false - xy: 750, 623 + xy: 1061, 409 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-menu-small + rotate: false + xy: 818, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-menu-med +icon-menu-smaller rotate: false xy: 437, 25 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-menu-small +icon-menu-tiny rotate: false - xy: 784, 623 - size: 32, 32 - orig: 32, 32 + xy: 1079, 409 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-missing @@ -11522,18 +11998,25 @@ icon-missing orig: 48, 48 offset: 0, 0 index: -1 -icon-missing-med +icon-missing-small rotate: false - xy: 607, 357 + xy: 852, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-missing-smaller + rotate: false + xy: 641, 391 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-missing-small +icon-missing-tiny rotate: false - xy: 818, 623 - size: 32, 32 - orig: 32, 32 + xy: 1097, 409 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-mode-attack @@ -11543,18 +12026,25 @@ icon-mode-attack orig: 48, 48 offset: 0, 0 index: -1 -icon-mode-attack-med +icon-mode-attack-small rotate: false - xy: 639, 421 + xy: 886, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-mode-attack-smaller + rotate: false + xy: 673, 455 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-mode-attack-small +icon-mode-attack-tiny rotate: false - xy: 852, 623 - size: 32, 32 - orig: 32, 32 + xy: 1115, 409 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-mode-pvp @@ -11564,18 +12054,25 @@ icon-mode-pvp orig: 48, 48 offset: 0, 0 index: -1 -icon-mode-pvp-med +icon-mode-pvp-small rotate: false - xy: 639, 389 + xy: 920, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-mode-pvp-smaller + rotate: false + xy: 673, 423 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-mode-pvp-small +icon-mode-pvp-tiny rotate: false - xy: 886, 623 - size: 32, 32 - orig: 32, 32 + xy: 833, 385 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-mode-survival @@ -11585,18 +12082,25 @@ icon-mode-survival orig: 48, 48 offset: 0, 0 index: -1 -icon-mode-survival-med +icon-mode-survival-small rotate: false - xy: 639, 357 + xy: 954, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-mode-survival-smaller + rotate: false + xy: 673, 391 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-mode-survival-small +icon-mode-survival-tiny rotate: false - xy: 920, 623 - size: 32, 32 - orig: 32, 32 + xy: 851, 385 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-none @@ -11606,18 +12110,25 @@ icon-none orig: 48, 48 offset: 0, 0 index: -1 -icon-none-med +icon-none-small rotate: false - xy: 673, 455 + xy: 988, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-none-smaller + rotate: false + xy: 707, 489 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-none-small +icon-none-tiny rotate: false - xy: 954, 623 - size: 32, 32 - orig: 32, 32 + xy: 869, 385 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-paste @@ -11627,18 +12138,25 @@ icon-paste orig: 48, 48 offset: 0, 0 index: -1 -icon-paste-med +icon-paste-small rotate: false - xy: 671, 423 + xy: 1022, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-paste-smaller + rotate: false + xy: 705, 457 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-paste-small +icon-paste-tiny rotate: false - xy: 988, 623 - size: 32, 32 - orig: 32, 32 + xy: 887, 385 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-pause @@ -11648,18 +12166,25 @@ icon-pause orig: 48, 48 offset: 0, 0 index: -1 -icon-pause-med +icon-pause-small rotate: false - xy: 671, 391 + xy: 1056, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-pause-smaller + rotate: false + xy: 705, 425 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-pause-small +icon-pause-tiny rotate: false - xy: 1022, 623 - size: 32, 32 - orig: 32, 32 + xy: 905, 385 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-pencil @@ -11669,18 +12194,25 @@ icon-pencil orig: 48, 48 offset: 0, 0 index: -1 -icon-pencil-med +icon-pencil-small rotate: false - xy: 671, 359 + xy: 1090, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-pencil-smaller + rotate: false + xy: 705, 393 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-pencil-small +icon-pencil-tiny rotate: false - xy: 1056, 623 - size: 32, 32 - orig: 32, 32 + xy: 923, 385 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-pick @@ -11690,18 +12222,25 @@ icon-pick orig: 48, 48 offset: 0, 0 index: -1 -icon-pick-med +icon-pick-small rotate: false - xy: 707, 489 + xy: 1124, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-pick-smaller + rotate: false + xy: 469, 217 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-pick-small +icon-pick-tiny rotate: false - xy: 1090, 623 - size: 32, 32 - orig: 32, 32 + xy: 941, 385 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-play @@ -11718,18 +12257,32 @@ icon-play-2 orig: 48, 48 offset: 0, 0 index: -1 -icon-play-2-med +icon-play-2-small rotate: false - xy: 705, 457 + xy: 1158, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-play-2-smaller + rotate: false + xy: 469, 185 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-play-2-small +icon-play-2-tiny rotate: false - xy: 1124, 623 - size: 32, 32 - orig: 32, 32 + xy: 959, 385 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-play-tiny + rotate: false + xy: 959, 385 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-play-custom @@ -11739,34 +12292,41 @@ icon-play-custom orig: 48, 48 offset: 0, 0 index: -1 -icon-play-custom-med - rotate: false - xy: 469, 217 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 icon-play-custom-small - rotate: false - xy: 1158, 623 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-play-med - rotate: false - xy: 469, 185 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-play-small rotate: false xy: 1192, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +icon-play-custom-smaller + rotate: false + xy: 469, 153 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-play-custom-tiny + rotate: false + xy: 977, 391 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-play-small + rotate: false + xy: 1226, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-play-smaller + rotate: false + xy: 469, 121 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 icon-players rotate: false xy: 509, 925 @@ -11774,18 +12334,25 @@ icon-players orig: 48, 48 offset: 0, 0 index: -1 -icon-players-med +icon-players-small rotate: false - xy: 469, 153 + xy: 1260, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-players-smaller + rotate: false + xy: 469, 89 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-players-small +icon-players-tiny rotate: false - xy: 1226, 623 - size: 32, 32 - orig: 32, 32 + xy: 995, 391 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-power @@ -11795,18 +12362,25 @@ icon-power orig: 48, 48 offset: 0, 0 index: -1 -icon-power-med +icon-power-small rotate: false - xy: 469, 121 + xy: 1294, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-power-smaller + rotate: false + xy: 469, 57 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-power-small +icon-power-tiny rotate: false - xy: 1260, 623 - size: 32, 32 - orig: 32, 32 + xy: 1013, 391 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-production @@ -11816,18 +12390,25 @@ icon-production orig: 48, 48 offset: 0, 0 index: -1 -icon-production-med +icon-production-small rotate: false - xy: 469, 89 + xy: 1328, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-production-smaller + rotate: false + xy: 469, 25 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-production-small +icon-production-tiny rotate: false - xy: 1294, 623 - size: 32, 32 - orig: 32, 32 + xy: 1031, 391 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-quit @@ -11837,20 +12418,20 @@ icon-quit orig: 48, 48 offset: 0, 0 index: -1 -icon-quit-med - rotate: false - xy: 469, 57 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 icon-quit-small rotate: false - xy: 1328, 623 + xy: 1362, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +icon-quit-smaller + rotate: false + xy: 503, 251 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 icon-redo rotate: false xy: 509, 825 @@ -11858,18 +12439,25 @@ icon-redo orig: 48, 48 offset: 0, 0 index: -1 -icon-redo-med +icon-redo-small rotate: false - xy: 469, 25 + xy: 1396, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-redo-smaller + rotate: false + xy: 501, 219 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-redo-small +icon-redo-tiny rotate: false - xy: 1362, 623 - size: 32, 32 - orig: 32, 32 + xy: 1049, 391 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-refresh @@ -11879,18 +12467,25 @@ icon-refresh orig: 48, 48 offset: 0, 0 index: -1 -icon-refresh-med +icon-refresh-small rotate: false - xy: 503, 251 + xy: 1430, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-refresh-smaller + rotate: false + xy: 501, 187 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-refresh-small +icon-refresh-tiny rotate: false - xy: 1396, 623 - size: 32, 32 - orig: 32, 32 + xy: 1067, 391 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-rename @@ -11900,18 +12495,25 @@ icon-rename orig: 48, 48 offset: 0, 0 index: -1 -icon-rename-med +icon-rename-small rotate: false - xy: 501, 219 + xy: 1464, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-rename-smaller + rotate: false + xy: 501, 155 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-rename-small +icon-rename-tiny rotate: false - xy: 1430, 623 - size: 32, 32 - orig: 32, 32 + xy: 1085, 391 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-resize @@ -11921,18 +12523,25 @@ icon-resize orig: 48, 48 offset: 0, 0 index: -1 -icon-resize-med +icon-resize-small rotate: false - xy: 501, 187 + xy: 1498, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-resize-smaller + rotate: false + xy: 501, 123 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-resize-small +icon-resize-tiny rotate: false - xy: 1464, 623 - size: 32, 32 - orig: 32, 32 + xy: 1103, 391 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-rotate @@ -11949,18 +12558,25 @@ icon-rotate-arrow orig: 48, 48 offset: 0, 0 index: -1 -icon-rotate-arrow-med +icon-rotate-arrow-small rotate: false - xy: 501, 155 + xy: 1532, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-rotate-arrow-smaller + rotate: false + xy: 501, 91 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-rotate-arrow-small +icon-rotate-arrow-tiny rotate: false - xy: 1498, 623 - size: 32, 32 - orig: 32, 32 + xy: 1121, 391 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-rotate-left @@ -11970,27 +12586,27 @@ icon-rotate-left orig: 48, 48 offset: 0, 0 index: -1 -icon-rotate-left-med - rotate: false - xy: 501, 123 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 icon-rotate-left-small rotate: false - xy: 1532, 623 + xy: 1566, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-rotate-med +icon-rotate-left-smaller rotate: false - xy: 501, 91 + xy: 501, 59 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 +icon-rotate-left-tiny + rotate: false + xy: 743, 357 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 icon-rotate-right rotate: false xy: 659, 875 @@ -11998,27 +12614,48 @@ icon-rotate-right orig: 48, 48 offset: 0, 0 index: -1 -icon-rotate-right-med - rotate: false - xy: 501, 59 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 icon-rotate-right-small - rotate: false - xy: 1566, 623 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-rotate-small rotate: false xy: 1600, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +icon-rotate-right-smaller + rotate: false + xy: 501, 27 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-rotate-right-tiny + rotate: false + xy: 741, 339 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-rotate-small + rotate: false + xy: 1634, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-rotate-smaller + rotate: false + xy: 537, 285 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-rotate-tiny + rotate: false + xy: 761, 357 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 icon-save rotate: false xy: 709, 925 @@ -12033,18 +12670,25 @@ icon-save-image orig: 48, 48 offset: 0, 0 index: -1 -icon-save-image-med +icon-save-image-small rotate: false - xy: 501, 27 + xy: 1668, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-save-image-smaller + rotate: false + xy: 535, 253 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-save-image-small +icon-save-image-tiny rotate: false - xy: 1634, 623 - size: 32, 32 - orig: 32, 32 + xy: 759, 339 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-save-map @@ -12054,34 +12698,48 @@ icon-save-map orig: 48, 48 offset: 0, 0 index: -1 -icon-save-map-med - rotate: false - xy: 537, 285 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 icon-save-map-small - rotate: false - xy: 1668, 623 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-save-med - rotate: false - xy: 535, 253 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-save-small rotate: false xy: 1702, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +icon-save-map-smaller + rotate: false + xy: 571, 319 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-save-map-tiny + rotate: false + xy: 779, 359 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-save-small + rotate: false + xy: 1736, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-save-smaller + rotate: false + xy: 569, 287 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-save-tiny + rotate: false + xy: 797, 359 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 icon-settings rotate: false xy: 759, 925 @@ -12089,18 +12747,25 @@ icon-settings orig: 48, 48 offset: 0, 0 index: -1 -icon-settings-med +icon-settings-small rotate: false - xy: 571, 319 + xy: 1770, 618 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-settings-smaller + rotate: false + xy: 605, 353 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-settings-small +icon-settings-tiny rotate: false - xy: 1736, 623 - size: 32, 32 - orig: 32, 32 + xy: 815, 359 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-spray @@ -12110,18 +12775,25 @@ icon-spray orig: 48, 48 offset: 0, 0 index: -1 -icon-spray-med +icon-spray-small rotate: false - xy: 569, 287 + xy: 1813, 683 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-spray-smaller + rotate: false + xy: 603, 321 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-spray-small +icon-spray-tiny rotate: false - xy: 1770, 618 - size: 32, 32 - orig: 32, 32 + xy: 833, 367 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-terrain @@ -12131,18 +12803,25 @@ icon-terrain orig: 48, 48 offset: 0, 0 index: -1 -icon-terrain-med +icon-terrain-small + rotate: false + xy: 1847, 683 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-terrain-smaller rotate: false xy: 741, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-terrain-small +icon-terrain-tiny rotate: false - xy: 1813, 683 - size: 32, 32 - orig: 32, 32 + xy: 851, 367 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-tools @@ -12152,18 +12831,25 @@ icon-tools orig: 48, 48 offset: 0, 0 index: -1 -icon-tools-med +icon-tools-small + rotate: false + xy: 1881, 683 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-tools-smaller rotate: false xy: 739, 491 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-tools-small +icon-tools-tiny rotate: false - xy: 1847, 683 - size: 32, 32 - orig: 32, 32 + xy: 869, 367 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-trash @@ -12180,32 +12866,46 @@ icon-trash-16 orig: 48, 48 offset: 0, 0 index: -1 -icon-trash-16-med +icon-trash-16-small + rotate: false + xy: 1915, 683 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-trash-16-smaller rotate: false xy: 773, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-trash-16-small +icon-trash-16-tiny rotate: false - xy: 1881, 683 + xy: 887, 367 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-trash-small + rotate: false + xy: 1949, 683 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-trash-med +icon-trash-smaller rotate: false xy: 805, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-trash-small +icon-trash-tiny rotate: false - xy: 1915, 683 - size: 32, 32 - orig: 32, 32 + xy: 905, 367 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-tree @@ -12215,18 +12915,25 @@ icon-tree orig: 48, 48 offset: 0, 0 index: -1 -icon-tree-med +icon-tree-small + rotate: false + xy: 1805, 649 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-tree-smaller rotate: false xy: 837, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-tree-small +icon-tree-tiny rotate: false - xy: 1949, 683 - size: 32, 32 - orig: 32, 32 + xy: 923, 367 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-trello @@ -12236,18 +12943,25 @@ icon-trello orig: 48, 48 offset: 0, 0 index: -1 -icon-trello-med +icon-trello-small + rotate: false + xy: 1839, 649 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-trello-smaller rotate: false xy: 869, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-trello-small +icon-trello-tiny rotate: false - xy: 1805, 649 - size: 32, 32 - orig: 32, 32 + xy: 941, 367 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-turret @@ -12257,18 +12971,25 @@ icon-turret orig: 48, 48 offset: 0, 0 index: -1 -icon-turret-med +icon-turret-small + rotate: false + xy: 1873, 649 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-turret-smaller rotate: false xy: 901, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-turret-small +icon-turret-tiny rotate: false - xy: 1839, 649 - size: 32, 32 - orig: 32, 32 + xy: 959, 367 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-tutorial @@ -12278,18 +12999,25 @@ icon-tutorial orig: 48, 48 offset: 0, 0 index: -1 -icon-tutorial-med +icon-tutorial-small + rotate: false + xy: 1907, 649 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-tutorial-smaller rotate: false xy: 933, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-tutorial-small +icon-tutorial-tiny rotate: false - xy: 1873, 649 - size: 32, 32 - orig: 32, 32 + xy: 977, 373 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-undo @@ -12299,18 +13027,25 @@ icon-undo orig: 48, 48 offset: 0, 0 index: -1 -icon-undo-med +icon-undo-small + rotate: false + xy: 1941, 649 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-undo-smaller rotate: false xy: 965, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-undo-small +icon-undo-tiny rotate: false - xy: 1907, 649 - size: 32, 32 - orig: 32, 32 + xy: 995, 373 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-units @@ -12320,18 +13055,25 @@ icon-units orig: 48, 48 offset: 0, 0 index: -1 -icon-units-med +icon-units-small + rotate: false + xy: 1804, 615 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-units-smaller rotate: false xy: 997, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-units-small +icon-units-tiny rotate: false - xy: 1941, 649 - size: 32, 32 - orig: 32, 32 + xy: 1013, 373 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-unlocks @@ -12341,18 +13083,25 @@ icon-unlocks orig: 48, 48 offset: 0, 0 index: -1 -icon-unlocks-med +icon-unlocks-small + rotate: false + xy: 1838, 615 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-unlocks-smaller rotate: false xy: 1029, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-unlocks-small +icon-unlocks-tiny rotate: false - xy: 1804, 615 - size: 32, 32 - orig: 32, 32 + xy: 1031, 373 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-upgrade @@ -12362,18 +13111,25 @@ icon-upgrade orig: 48, 48 offset: 0, 0 index: -1 -icon-upgrade-med +icon-upgrade-small + rotate: false + xy: 1872, 615 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-upgrade-smaller rotate: false xy: 1061, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-upgrade-small +icon-upgrade-tiny rotate: false - xy: 1838, 615 - size: 32, 32 - orig: 32, 32 + xy: 1049, 373 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-wiki @@ -12383,18 +13139,25 @@ icon-wiki orig: 48, 48 offset: 0, 0 index: -1 -icon-wiki-med +icon-wiki-small + rotate: false + xy: 1906, 615 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-wiki-smaller rotate: false xy: 1093, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-wiki-small +icon-wiki-tiny rotate: false - xy: 1872, 615 - size: 32, 32 - orig: 32, 32 + xy: 1067, 373 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 icon-zoom @@ -12404,18 +13167,25 @@ icon-zoom orig: 48, 48 offset: 0, 0 index: -1 -icon-zoom-med +icon-zoom-small + rotate: false + xy: 1940, 615 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-zoom-smaller rotate: false xy: 1125, 525 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-zoom-small +icon-zoom-tiny rotate: false - xy: 1906, 615 - size: 32, 32 - orig: 32, 32 + xy: 1085, 373 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 ignarock-icon-large @@ -12427,7 +13197,7 @@ ignarock-icon-large index: -1 ignarock-icon-medium rotate: false - xy: 1940, 615 + xy: 373, 594 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12448,7 +13218,7 @@ impact-reactor-icon-large index: -1 impact-reactor-icon-medium rotate: false - xy: 373, 594 + xy: 407, 594 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12469,7 +13239,7 @@ incinerator-icon-large index: -1 incinerator-icon-medium rotate: false - xy: 407, 594 + xy: 369, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12505,7 +13275,7 @@ item-source-icon-large index: -1 item-source-icon-medium rotate: false - xy: 369, 560 + xy: 369, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12526,7 +13296,7 @@ item-void-icon-large index: -1 item-void-icon-medium rotate: false - xy: 369, 526 + xy: 403, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12547,7 +13317,7 @@ javelin-ship-pad-icon-large index: -1 javelin-ship-pad-icon-medium rotate: false - xy: 403, 560 + xy: 369, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12568,7 +13338,7 @@ junction-icon-large index: -1 junction-icon-medium rotate: false - xy: 369, 492 + xy: 403, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12589,7 +13359,7 @@ kiln-icon-large index: -1 kiln-icon-medium rotate: false - xy: 403, 526 + xy: 369, 458 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12610,7 +13380,7 @@ lancer-icon-large index: -1 lancer-icon-medium rotate: false - xy: 369, 458 + xy: 403, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12631,7 +13401,7 @@ laser-drill-icon-large index: -1 laser-drill-icon-medium rotate: false - xy: 403, 492 + xy: 369, 424 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12652,7 +13422,7 @@ launch-pad-icon-large index: -1 launch-pad-icon-medium rotate: false - xy: 369, 424 + xy: 403, 458 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12673,7 +13443,7 @@ launch-pad-large-icon-large index: -1 launch-pad-large-icon-medium rotate: false - xy: 403, 458 + xy: 369, 390 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12694,7 +13464,7 @@ liquid-junction-icon-large index: -1 liquid-junction-icon-medium rotate: false - xy: 369, 390 + xy: 403, 424 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12715,7 +13485,7 @@ liquid-router-icon-large index: -1 liquid-router-icon-medium rotate: false - xy: 403, 424 + xy: 369, 356 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12736,7 +13506,7 @@ liquid-source-icon-large index: -1 liquid-source-icon-medium rotate: false - xy: 369, 356 + xy: 403, 390 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12757,7 +13527,7 @@ liquid-tank-icon-large index: -1 liquid-tank-icon-medium rotate: false - xy: 403, 390 + xy: 369, 322 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12778,7 +13548,7 @@ magmarock-icon-large index: -1 magmarock-icon-medium rotate: false - xy: 369, 322 + xy: 403, 356 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12799,7 +13569,7 @@ mass-driver-icon-large index: -1 mass-driver-icon-medium rotate: false - xy: 403, 356 + xy: 369, 288 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12820,7 +13590,7 @@ mechanical-drill-icon-large index: -1 mechanical-drill-icon-medium rotate: false - xy: 369, 288 + xy: 403, 322 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12841,7 +13611,7 @@ mechanical-pump-icon-large index: -1 mechanical-pump-icon-medium rotate: false - xy: 403, 322 + xy: 369, 254 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12862,7 +13632,7 @@ meltdown-icon-large index: -1 meltdown-icon-medium rotate: false - xy: 369, 254 + xy: 403, 288 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12883,7 +13653,7 @@ melter-icon-large index: -1 melter-icon-medium rotate: false - xy: 403, 288 + xy: 369, 220 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12904,7 +13674,7 @@ mend-projector-icon-large index: -1 mend-projector-icon-medium rotate: false - xy: 369, 220 + xy: 403, 254 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12925,7 +13695,7 @@ mender-icon-large index: -1 mender-icon-medium rotate: false - xy: 403, 254 + xy: 369, 186 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12946,7 +13716,7 @@ metal-floor-2-icon-large index: -1 metal-floor-2-icon-medium rotate: false - xy: 369, 186 + xy: 403, 220 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12967,7 +13737,7 @@ metal-floor-3-icon-large index: -1 metal-floor-3-icon-medium rotate: false - xy: 403, 220 + xy: 369, 152 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -12988,7 +13758,7 @@ metal-floor-5-icon-large index: -1 metal-floor-5-icon-medium rotate: false - xy: 369, 152 + xy: 403, 186 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13009,7 +13779,7 @@ metal-floor-damaged-icon-large index: -1 metal-floor-damaged-icon-medium rotate: false - xy: 403, 186 + xy: 369, 118 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13030,7 +13800,7 @@ metal-floor-icon-large index: -1 metal-floor-icon-medium rotate: false - xy: 369, 118 + xy: 403, 152 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13051,7 +13821,7 @@ moss-icon-large index: -1 moss-icon-medium rotate: false - xy: 403, 152 + xy: 369, 84 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13072,7 +13842,7 @@ multi-press-icon-large index: -1 multi-press-icon-medium rotate: false - xy: 369, 84 + xy: 403, 118 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13100,7 +13870,7 @@ oil-extractor-icon-large index: -1 oil-extractor-icon-medium rotate: false - xy: 403, 118 + xy: 369, 50 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13121,7 +13891,7 @@ omega-mech-pad-icon-large index: -1 omega-mech-pad-icon-medium rotate: false - xy: 369, 50 + xy: 403, 84 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13142,7 +13912,7 @@ overdrive-projector-icon-large index: -1 overdrive-projector-icon-medium rotate: false - xy: 403, 84 + xy: 403, 50 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13163,7 +13933,7 @@ overflow-gate-icon-large index: -1 overflow-gate-icon-medium rotate: false - xy: 403, 50 + xy: 441, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13200,7 +13970,7 @@ pebbles-icon-large index: -1 pebbles-icon-medium rotate: false - xy: 441, 589 + xy: 475, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13221,7 +13991,7 @@ phantom-factory-icon-large index: -1 phantom-factory-icon-medium rotate: false - xy: 475, 589 + xy: 509, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13242,7 +14012,7 @@ phase-conduit-icon-large index: -1 phase-conduit-icon-medium rotate: false - xy: 509, 589 + xy: 543, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13263,7 +14033,7 @@ phase-conveyor-icon-large index: -1 phase-conveyor-icon-medium rotate: false - xy: 543, 589 + xy: 577, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13284,7 +14054,7 @@ phase-wall-icon-large index: -1 phase-wall-icon-medium rotate: false - xy: 577, 589 + xy: 611, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13305,7 +14075,7 @@ phase-wall-large-icon-large index: -1 phase-wall-large-icon-medium rotate: false - xy: 611, 589 + xy: 645, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -13326,14 +14096,14 @@ phase-weaver-icon-large index: -1 phase-weaver-icon-medium rotate: false - xy: 645, 589 + xy: 679, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-weaver-icon-small rotate: false - xy: 605, 331 + xy: 639, 365 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13347,14 +14117,14 @@ pine-icon-large index: -1 pine-icon-medium rotate: false - xy: 679, 589 + xy: 713, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pine-icon-small rotate: false - xy: 631, 331 + xy: 665, 365 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13368,14 +14138,14 @@ plastanium-compressor-icon-large index: -1 plastanium-compressor-icon-medium rotate: false - xy: 713, 589 + xy: 747, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-compressor-icon-small rotate: false - xy: 657, 331 + xy: 691, 365 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13389,14 +14159,14 @@ pneumatic-drill-icon-large index: -1 pneumatic-drill-icon-medium rotate: false - xy: 747, 589 + xy: 781, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pneumatic-drill-icon-small rotate: false - xy: 683, 333 + xy: 717, 367 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13410,14 +14180,14 @@ power-node-icon-large index: -1 power-node-icon-medium rotate: false - xy: 781, 589 + xy: 815, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-icon-small rotate: false - xy: 603, 305 + xy: 637, 339 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13431,14 +14201,14 @@ power-node-large-icon-large index: -1 power-node-large-icon-medium rotate: false - xy: 815, 589 + xy: 849, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large-icon-small rotate: false - xy: 629, 305 + xy: 663, 339 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13452,14 +14222,14 @@ power-source-icon-large index: -1 power-source-icon-medium rotate: false - xy: 849, 589 + xy: 883, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-source-icon-small rotate: false - xy: 655, 305 + xy: 689, 339 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13473,14 +14243,14 @@ power-void-icon-large index: -1 power-void-icon-medium rotate: false - xy: 883, 589 + xy: 917, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void-icon-small rotate: false - xy: 601, 279 + xy: 635, 313 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13494,14 +14264,14 @@ pulse-conduit-icon-large index: -1 pulse-conduit-icon-medium rotate: false - xy: 917, 589 + xy: 951, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-icon-small rotate: false - xy: 627, 279 + xy: 661, 313 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13515,14 +14285,14 @@ pulverizer-icon-large index: -1 pulverizer-icon-medium rotate: false - xy: 951, 589 + xy: 985, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-icon-small rotate: false - xy: 653, 279 + xy: 687, 313 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13536,14 +14306,14 @@ pyratite-mixer-icon-large index: -1 pyratite-mixer-icon-medium rotate: false - xy: 985, 589 + xy: 1019, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer-icon-small rotate: false - xy: 771, 497 + xy: 567, 259 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13557,14 +14327,14 @@ repair-point-icon-large index: -1 repair-point-icon-medium rotate: false - xy: 1019, 589 + xy: 1053, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 repair-point-icon-small rotate: false - xy: 797, 499 + xy: 567, 233 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13578,14 +14348,14 @@ revenant-factory-icon-large index: -1 revenant-factory-icon-medium rotate: false - xy: 1053, 589 + xy: 1087, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 revenant-factory-icon-small rotate: false - xy: 823, 499 + xy: 593, 261 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13599,14 +14369,14 @@ ripple-icon-large index: -1 ripple-icon-medium rotate: false - xy: 1087, 589 + xy: 1121, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ripple-icon-small rotate: false - xy: 849, 499 + xy: 593, 235 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13620,14 +14390,14 @@ rock-icon-large index: -1 rock-icon-medium rotate: false - xy: 1121, 589 + xy: 1155, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rock-icon-small rotate: false - xy: 875, 499 + xy: 601, 287 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13641,14 +14411,14 @@ rocks-icon-large index: -1 rocks-icon-medium rotate: false - xy: 1155, 589 + xy: 1189, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rocks-icon-small rotate: false - xy: 901, 499 + xy: 627, 287 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13662,14 +14432,14 @@ rotary-pump-icon-large index: -1 rotary-pump-icon-medium rotate: false - xy: 1189, 589 + xy: 1223, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump-icon-small rotate: false - xy: 927, 499 + xy: 619, 261 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13683,14 +14453,14 @@ router-icon-large index: -1 router-icon-medium rotate: false - xy: 1223, 589 + xy: 1257, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 router-icon-small rotate: false - xy: 953, 499 + xy: 653, 287 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13704,14 +14474,14 @@ rtg-generator-icon-large index: -1 rtg-generator-icon-medium rotate: false - xy: 1257, 589 + xy: 1291, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator-icon-small rotate: false - xy: 979, 499 + xy: 619, 235 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13725,14 +14495,14 @@ salt-icon-large index: -1 salt-icon-medium rotate: false - xy: 1291, 589 + xy: 1325, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt-icon-small rotate: false - xy: 1005, 499 + xy: 645, 261 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13746,14 +14516,14 @@ saltrocks-icon-large index: -1 saltrocks-icon-medium rotate: false - xy: 1325, 589 + xy: 1359, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 saltrocks-icon-small rotate: false - xy: 1031, 499 + xy: 679, 287 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13767,14 +14537,14 @@ salvo-icon-large index: -1 salvo-icon-medium rotate: false - xy: 1359, 589 + xy: 1393, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salvo-icon-small rotate: false - xy: 1057, 499 + xy: 645, 235 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13788,14 +14558,14 @@ sand-boulder-icon-large index: -1 sand-boulder-icon-medium rotate: false - xy: 1393, 589 + xy: 1427, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-boulder-icon-small rotate: false - xy: 1083, 499 + xy: 671, 261 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13809,14 +14579,14 @@ sand-icon-large index: -1 sand-icon-medium rotate: false - xy: 1427, 589 + xy: 1461, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-icon-small rotate: false - xy: 1109, 499 + xy: 671, 235 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13830,14 +14600,14 @@ sand-water-icon-large index: -1 sand-water-icon-medium rotate: false - xy: 1461, 589 + xy: 1495, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-water-icon-small rotate: false - xy: 771, 471 + xy: 705, 287 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13851,14 +14621,14 @@ sandrocks-icon-large index: -1 sandrocks-icon-medium rotate: false - xy: 1495, 589 + xy: 1529, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sandrocks-icon-small rotate: false - xy: 797, 473 + xy: 697, 261 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13872,14 +14642,14 @@ scatter-icon-large index: -1 scatter-icon-medium rotate: false - xy: 1529, 589 + xy: 1563, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scatter-icon-small rotate: false - xy: 823, 473 + xy: 697, 235 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13893,14 +14663,14 @@ scorch-icon-large index: -1 scorch-icon-medium rotate: false - xy: 1563, 589 + xy: 1597, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scorch-icon-small rotate: false - xy: 849, 473 + xy: 713, 313 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13914,14 +14684,14 @@ scrap-wall-gigantic-icon-large index: -1 scrap-wall-gigantic-icon-medium rotate: false - xy: 1597, 589 + xy: 1631, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-small rotate: false - xy: 875, 473 + xy: 715, 339 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13935,14 +14705,14 @@ scrap-wall-huge-icon-large index: -1 scrap-wall-huge-icon-medium rotate: false - xy: 1631, 589 + xy: 1665, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-huge-icon-small rotate: false - xy: 901, 473 + xy: 723, 261 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13956,14 +14726,14 @@ scrap-wall-icon-large index: -1 scrap-wall-icon-medium rotate: false - xy: 1665, 589 + xy: 1699, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-icon-small rotate: false - xy: 927, 473 + xy: 723, 235 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13977,21 +14747,21 @@ scrap-wall-large-icon-large index: -1 scrap-wall-large-icon-medium rotate: false - xy: 1699, 589 + xy: 1733, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-large-icon-small rotate: false - xy: 953, 473 + xy: 731, 287 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scroll rotate: false - xy: 1005, 462 + xy: 1983, 683 size: 24, 35 split: 10, 10, 6, 5 orig: 24, 35 @@ -14015,7 +14785,7 @@ scroll-knob-horizontal-black index: -1 scroll-knob-vertical-black rotate: false - xy: 979, 457 + xy: 749, 245 size: 24, 40 split: 10, 10, 6, 10 orig: 24, 40 @@ -14037,14 +14807,14 @@ separator-icon-large index: -1 separator-icon-medium rotate: false - xy: 1733, 589 + xy: 437, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 separator-icon-small rotate: false - xy: 1031, 473 + xy: 2009, 694 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14058,14 +14828,14 @@ shale-boulder-icon-large index: -1 shale-boulder-icon-medium rotate: false - xy: 437, 555 + xy: 437, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder-icon-small rotate: false - xy: 1057, 473 + xy: 739, 313 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14079,14 +14849,14 @@ shale-icon-large index: -1 shale-icon-medium rotate: false - xy: 437, 521 + xy: 471, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-icon-small rotate: false - xy: 1083, 473 + xy: 757, 287 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14100,14 +14870,14 @@ shalerocks-icon-large index: -1 shalerocks-icon-medium rotate: false - xy: 471, 555 + xy: 437, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shalerocks-icon-small rotate: false - xy: 1109, 473 + xy: 2009, 668 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14121,14 +14891,14 @@ shock-mine-icon-large index: -1 shock-mine-icon-medium rotate: false - xy: 437, 487 + xy: 471, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shock-mine-icon-small rotate: false - xy: 1031, 447 + xy: 749, 219 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14142,14 +14912,14 @@ shrubs-icon-large index: -1 shrubs-icon-medium rotate: false - xy: 471, 521 + xy: 505, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs-icon-small rotate: false - xy: 1057, 447 + xy: 775, 261 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14163,14 +14933,14 @@ silicon-smelter-icon-large index: -1 silicon-smelter-icon-medium rotate: false - xy: 505, 555 + xy: 437, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 silicon-smelter-icon-small rotate: false - xy: 1083, 447 + xy: 775, 235 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14219,14 +14989,14 @@ snow-icon-large index: -1 snow-icon-medium rotate: false - xy: 437, 453 + xy: 471, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-icon-small rotate: false - xy: 1109, 447 + xy: 775, 209 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14240,14 +15010,14 @@ snow-pine-icon-large index: -1 snow-pine-icon-medium rotate: false - xy: 471, 487 + xy: 505, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-pine-icon-small rotate: false - xy: 1005, 436 + xy: 1250, 493 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14261,14 +15031,14 @@ snowrock-icon-large index: -1 snowrock-icon-medium rotate: false - xy: 505, 521 + xy: 539, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrock-icon-small rotate: false - xy: 1031, 421 + xy: 1276, 493 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14282,14 +15052,14 @@ snowrocks-icon-large index: -1 snowrocks-icon-medium rotate: false - xy: 539, 555 + xy: 437, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrocks-icon-small rotate: false - xy: 1057, 421 + xy: 737, 463 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14303,14 +15073,14 @@ solar-panel-icon-large index: -1 solar-panel-icon-medium rotate: false - xy: 437, 419 + xy: 471, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-icon-small rotate: false - xy: 1083, 421 + xy: 737, 437 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14324,14 +15094,14 @@ solar-panel-large-icon-large index: -1 solar-panel-large-icon-medium rotate: false - xy: 471, 453 + xy: 505, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-large-icon-small rotate: false - xy: 1109, 421 + xy: 737, 411 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14345,14 +15115,14 @@ sorter-icon-large index: -1 sorter-icon-medium rotate: false - xy: 505, 487 + xy: 539, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sorter-icon-small rotate: false - xy: 1135, 491 + xy: 763, 465 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14366,14 +15136,14 @@ spawn-icon-large index: -1 spawn-icon-medium rotate: false - xy: 539, 521 + xy: 573, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spawn-icon-small rotate: false - xy: 1161, 491 + xy: 763, 439 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14387,14 +15157,14 @@ spectre-icon-large index: -1 spectre-icon-medium rotate: false - xy: 573, 555 + xy: 437, 385 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spectre-icon-small rotate: false - xy: 1135, 465 + xy: 763, 413 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14408,14 +15178,14 @@ spirit-factory-icon-large index: -1 spirit-factory-icon-medium rotate: false - xy: 437, 385 + xy: 471, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spirit-factory-icon-small rotate: false - xy: 1187, 491 + xy: 771, 491 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14429,14 +15199,14 @@ spore-cluster-icon-large index: -1 spore-cluster-icon-medium rotate: false - xy: 471, 419 + xy: 505, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-cluster-icon-small rotate: false - xy: 1135, 439 + xy: 797, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14450,14 +15220,14 @@ spore-moss-icon-large index: -1 spore-moss-icon-medium rotate: false - xy: 505, 453 + xy: 539, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss-icon-small rotate: false - xy: 1161, 465 + xy: 823, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14471,14 +15241,14 @@ spore-pine-icon-large index: -1 spore-pine-icon-medium rotate: false - xy: 539, 487 + xy: 573, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-pine-icon-small rotate: false - xy: 1213, 491 + xy: 849, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14492,14 +15262,14 @@ spore-press-icon-large index: -1 spore-press-icon-medium rotate: false - xy: 573, 521 + xy: 607, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-press-icon-small rotate: false - xy: 1161, 439 + xy: 875, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14513,14 +15283,14 @@ sporerocks-icon-large index: -1 sporerocks-icon-medium rotate: false - xy: 607, 555 + xy: 437, 351 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sporerocks-icon-small rotate: false - xy: 1187, 465 + xy: 901, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14534,14 +15304,14 @@ stone-icon-large index: -1 stone-icon-medium rotate: false - xy: 437, 351 + xy: 471, 385 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone-icon-small rotate: false - xy: 1187, 439 + xy: 927, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14555,14 +15325,14 @@ surge-tower-icon-large index: -1 surge-tower-icon-medium rotate: false - xy: 471, 385 + xy: 505, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-tower-icon-small rotate: false - xy: 1213, 465 + xy: 953, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14576,14 +15346,14 @@ surge-wall-icon-large index: -1 surge-wall-icon-medium rotate: false - xy: 505, 419 + xy: 539, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-icon-small rotate: false - xy: 1213, 439 + xy: 979, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14597,14 +15367,14 @@ surge-wall-large-icon-large index: -1 surge-wall-large-icon-medium rotate: false - xy: 539, 453 + xy: 573, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large-icon-small rotate: false - xy: 1135, 413 + xy: 1005, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14618,14 +15388,14 @@ swarmer-icon-large index: -1 swarmer-icon-medium rotate: false - xy: 573, 487 + xy: 607, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 swarmer-icon-small rotate: false - xy: 1161, 413 + xy: 1031, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14639,14 +15409,14 @@ tainted-water-icon-large index: -1 tainted-water-icon-medium rotate: false - xy: 607, 521 + xy: 641, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water-icon-small rotate: false - xy: 1187, 413 + xy: 1057, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14660,14 +15430,14 @@ tar-icon-large index: -1 tar-icon-medium rotate: false - xy: 641, 555 + xy: 437, 317 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tar-icon-small rotate: false - xy: 1213, 413 + xy: 1083, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14681,14 +15451,14 @@ tau-mech-pad-icon-large index: -1 tau-mech-pad-icon-medium rotate: false - xy: 437, 317 + xy: 471, 351 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tau-mech-pad-icon-small rotate: false - xy: 1239, 491 + xy: 1109, 499 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14702,14 +15472,14 @@ tendrils-icon-large index: -1 tendrils-icon-medium rotate: false - xy: 471, 351 + xy: 505, 385 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tendrils-icon-small rotate: false - xy: 1239, 465 + xy: 789, 465 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14723,14 +15493,14 @@ thermal-generator-icon-large index: -1 thermal-generator-icon-medium rotate: false - xy: 505, 385 + xy: 539, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thermal-generator-icon-small rotate: false - xy: 1239, 439 + xy: 789, 439 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14744,14 +15514,14 @@ thermal-pump-icon-large index: -1 thermal-pump-icon-medium rotate: false - xy: 539, 419 + xy: 573, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thermal-pump-icon-small rotate: false - xy: 1239, 413 + xy: 789, 413 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14765,14 +15535,14 @@ thorium-reactor-icon-large index: -1 thorium-reactor-icon-medium rotate: false - xy: 573, 453 + xy: 607, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-reactor-icon-small rotate: false - xy: 1265, 493 + xy: 815, 473 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14786,14 +15556,14 @@ thorium-wall-icon-large index: -1 thorium-wall-icon-medium rotate: false - xy: 607, 487 + xy: 641, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-icon-small rotate: false - xy: 1265, 467 + xy: 815, 447 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14807,14 +15577,14 @@ thorium-wall-large-icon-large index: -1 thorium-wall-large-icon-medium rotate: false - xy: 641, 521 + xy: 675, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large-icon-small rotate: false - xy: 1265, 441 + xy: 815, 421 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14828,14 +15598,14 @@ thruster-icon-large index: -1 thruster-icon-medium rotate: false - xy: 675, 555 + xy: 437, 283 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thruster-icon-small rotate: false - xy: 1265, 415 + xy: 841, 473 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14849,14 +15619,14 @@ titan-factory-icon-large index: -1 titan-factory-icon-medium rotate: false - xy: 437, 283 + xy: 471, 317 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titan-factory-icon-small rotate: false - xy: 1291, 468 + xy: 841, 447 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14870,14 +15640,14 @@ titanium-conveyor-icon-large index: -1 titanium-conveyor-icon-medium rotate: false - xy: 471, 317 + xy: 505, 351 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-icon-small rotate: false - xy: 1291, 442 + xy: 841, 421 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14891,14 +15661,14 @@ titanium-wall-icon-large index: -1 titanium-wall-icon-medium rotate: false - xy: 505, 351 + xy: 539, 385 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-icon-small rotate: false - xy: 1291, 416 + xy: 867, 473 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14912,14 +15682,14 @@ titanium-wall-large-icon-large index: -1 titanium-wall-large-icon-medium rotate: false - xy: 539, 385 + xy: 573, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large-icon-small rotate: false - xy: 1317, 453 + xy: 867, 447 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14933,14 +15703,14 @@ trident-ship-pad-icon-large index: -1 trident-ship-pad-icon-medium rotate: false - xy: 573, 419 + xy: 607, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 trident-ship-pad-icon-small rotate: false - xy: 1343, 453 + xy: 867, 421 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -14954,14 +15724,14 @@ turbine-generator-icon-large index: -1 turbine-generator-icon-medium rotate: false - xy: 607, 453 + xy: 641, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 turbine-generator-icon-small rotate: false - xy: 1317, 427 + xy: 893, 473 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -15007,14 +15777,14 @@ unloader-icon-large index: -1 unloader-icon-medium rotate: false - xy: 641, 487 + xy: 675, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader-icon-small rotate: false - xy: 1369, 453 + xy: 893, 447 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -15028,14 +15798,14 @@ vault-icon-large index: -1 vault-icon-medium rotate: false - xy: 675, 521 + xy: 709, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 vault-icon-small rotate: false - xy: 1343, 427 + xy: 893, 421 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -15049,14 +15819,14 @@ water-extractor-icon-large index: -1 water-extractor-icon-medium rotate: false - xy: 709, 555 + xy: 437, 249 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-extractor-icon-small rotate: false - xy: 1395, 453 + xy: 919, 473 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -15070,14 +15840,14 @@ water-icon-large index: -1 water-icon-medium rotate: false - xy: 437, 249 + xy: 471, 283 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-icon-small rotate: false - xy: 1369, 427 + xy: 919, 447 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -15091,14 +15861,14 @@ wave-icon-large index: -1 wave-icon-medium rotate: false - xy: 471, 283 + xy: 505, 317 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wave-icon-small rotate: false - xy: 1421, 453 + xy: 919, 421 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -15112,14 +15882,14 @@ white-tree-dead-icon-large index: -1 white-tree-dead-icon-medium rotate: false - xy: 505, 317 + xy: 539, 351 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 white-tree-dead-icon-small rotate: false - xy: 1395, 427 + xy: 945, 473 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -15133,14 +15903,14 @@ white-tree-icon-large index: -1 white-tree-icon-medium rotate: false - xy: 539, 351 + xy: 573, 385 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 white-tree-icon-small rotate: false - xy: 1447, 453 + xy: 945, 447 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -15169,14 +15939,14 @@ wraith-factory-icon-large index: -1 wraith-factory-icon-medium rotate: false - xy: 573, 385 + xy: 607, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wraith-factory-icon-small rotate: false - xy: 1421, 427 + xy: 945, 421 size: 24, 24 orig: 24, 24 offset: 0, 0 diff --git a/core/assets/sprites/sprites5.png b/core/assets/sprites/sprites5.png index 11151bcffb..a537758268 100644 Binary files a/core/assets/sprites/sprites5.png and b/core/assets/sprites/sprites5.png differ diff --git a/core/assets/sprites/uiskin.json b/core/assets/sprites/uiskin.json index b929cf8457..11fd2038b6 100644 --- a/core/assets/sprites/uiskin.json +++ b/core/assets/sprites/uiskin.json @@ -279,7 +279,9 @@ }, WindowStyle: { default: { + stageBackground: dialogDim, titleFont: default, + background: window-empty, titleFontColor: accent }, dialog: { diff --git a/core/src/io/anuke/mindustry/ClientLauncher.java b/core/src/io/anuke/mindustry/ClientLauncher.java index e192a5e81d..4ffe4eb413 100644 --- a/core/src/io/anuke/mindustry/ClientLauncher.java +++ b/core/src/io/anuke/mindustry/ClientLauncher.java @@ -49,7 +49,9 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform UI.loadDefaultFont(); - assets.load(new AssetDescriptor<>("sprites/sprites.atlas", TextureAtlas.class)).loaded = t -> atlas = (TextureAtlas)t; + assets.load(new AssetDescriptor<>("sprites/sprites.atlas", TextureAtlas.class)).loaded = t -> { + atlas = (TextureAtlas)t; + }; assets.loadRun("maps", Map.class, () -> maps.loadPreviews()); diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index ddb31ed56a..765e411086 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -62,14 +62,6 @@ public class Vars implements Loadable{ public static final float itemSize = 5f; /** extra padding around the world; units outside this bound will begin to self-destruct. */ public static final float worldBounds = 100f; - /** default size of UI icons.*/ - public static final int iconsize = 48; - /** size of UI icons (small)*/ - public static final int iconsizesmall = 32; - /** size of UI icons (medium)*/ - public static final int iconsizemed = 30; - /** size of UI icons (medium)*/ - public static final int iconsizetiny = 16; /** units outside of this bound will simply die instantly */ public static final float finalWorldBounds = worldBounds + 500; /** ticks spent out of bound until self destruct. */ diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index ca99eb151a..41e39a415f 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -14,13 +14,11 @@ import io.anuke.arc.freetype.FreetypeFontLoader.*; import io.anuke.arc.function.*; import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; -import io.anuke.arc.graphics.g2d.TextureAtlas.*; import io.anuke.arc.input.*; import io.anuke.arc.math.*; import io.anuke.arc.scene.*; import io.anuke.arc.scene.actions.*; import io.anuke.arc.scene.event.*; -import io.anuke.arc.scene.style.*; import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.TextField.*; import io.anuke.arc.scene.ui.Tooltip.*; @@ -31,6 +29,7 @@ import io.anuke.mindustry.editor.*; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.ui.*; import io.anuke.mindustry.ui.dialogs.*; import io.anuke.mindustry.ui.fragments.*; @@ -38,8 +37,6 @@ import static io.anuke.arc.scene.actions.Actions.*; import static io.anuke.mindustry.Vars.*; public class UI implements ApplicationListener, Loadable{ - private Skin skin; - public MenuFragment menufrag; public HudFragment hudfrag; public ChatFragment chatfrag; @@ -73,7 +70,6 @@ public class UI implements ApplicationListener, Loadable{ public Cursor drillCursor, unloadCursor; public UI(){ - skin = new Skin(); setupFonts(); } @@ -84,22 +80,17 @@ public class UI implements ApplicationListener, Loadable{ @Override public void loadSync(){ - //TODO type-safe skin files - skin.addRegions(Core.atlas); - loadExtraStyle(skin); - skin.add("outline", Core.assets.get("outline")); - skin.getFont("outline").getData().markupEnabled = true; - skin.getFont("default").getData().markupEnabled = true; - skin.getFont("default").setOwnsTexture(false); - skin.load(Core.files.internal("sprites/uiskin.json")); + Fonts.outline.getData().markupEnabled = true; + Fonts.def.getData().markupEnabled = true; + Fonts.def.setOwnsTexture(false); - for(BitmapFont font : skin.getAll(BitmapFont.class).values()){ - font.setUseIntegerPositions(true); - } - - Core.scene = new Scene(skin); + Core.assets.getAll(BitmapFont.class, new Array<>()).each(font -> font.setUseIntegerPositions(true)); + Core.scene = new Scene(); Core.input.addProcessor(Core.scene); + Tex.load(); + Icon.load(); + Dialog.setShowAction(() -> sequence(alpha(0f), fadeIn(0.1f))); Dialog.setHideAction(() -> sequence(fadeOut(0.1f))); @@ -153,26 +144,7 @@ public class UI implements ApplicationListener, Loadable{ incremental = true; }}; - Core.assets.load("outline", BitmapFont.class, new FreeTypeFontLoaderParameter("fonts/font.ttf", param)); - } - - void loadExtraStyle(Skin skin){ - AtlasRegion region = Core.atlas.find("flat-down-base"); - int[] splits = region.splits; - - ScaledNinePatchDrawable copy = new ScaledNinePatchDrawable(new NinePatch(region, splits[0], splits[1], splits[2], splits[3])){ - public float getLeftWidth(){ return 0; } - public float getRightWidth(){ return 0; } - public float getTopHeight(){ return 0; } - public float getBottomHeight(){ return 0; } - }; - copy.setMinWidth(0); - copy.setMinHeight(0); - copy.setTopHeight(0); - copy.setRightWidth(0); - copy.setBottomHeight(0); - copy.setLeftWidth(0); - skin.add("flat-down", copy, Drawable.class); + Core.assets.load("outline", BitmapFont.class, new FreeTypeFontLoaderParameter("fonts/font.ttf", param)).loaded = t -> Fonts.outline = (BitmapFont)t; } void loadExtraCursors(){ @@ -185,8 +157,8 @@ public class UI implements ApplicationListener, Loadable{ FreeTypeFontParameter param = fontParameter(); - Core.assets.load("default", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> skin.add("default", f); - Core.assets.load("chat", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> skin.add("chat", f); + Core.assets.load("default", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> Fonts.def = (BitmapFont)f; + Core.assets.load("chat", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> Fonts.chat = (BitmapFont)f; } static FreeTypeFontParameter fontParameter(){ @@ -291,7 +263,7 @@ public class UI implements ApplicationListener, Loadable{ } public void showTextInput(String titleText, String text, int textLength, String def, TextFieldFilter filter, Consumer confirmed){ - new Dialog(titleText, "dialog"){{ + new Dialog(titleText){{ cont.margin(30).add(text).padRight(6f); TextField field = cont.addField(def, t -> { }).size(170f, 50f).get(); @@ -323,7 +295,7 @@ public class UI implements ApplicationListener, Loadable{ } public void showInfo(String info){ - new Dialog("", "dialog"){{ + new Dialog(""){{ getCell(cont).growX(); cont.margin(15).add(info).width(400f).wrap().get().setAlignment(Align.center, Align.center); buttons.addButton("$ok", this::hide).size(90, 50).pad(4); @@ -331,12 +303,12 @@ public class UI implements ApplicationListener, Loadable{ } public void showErrorMessage(String text){ - new Dialog("", "dialog"){{ + new Dialog(""){{ setFillParent(false); cont.margin(15f); cont.add("$error.title"); cont.row(); - cont.addImage("whiteui").fillX().pad(2).height(4f).color(Color.SCARLET); + cont.addImage().fillX().pad(2).height(4f).color(Color.SCARLET); cont.row(); cont.add(text).pad(2f); buttons.addButton("$ok", this::hide).size(120, 50).pad(4); @@ -348,21 +320,21 @@ public class UI implements ApplicationListener, Loadable{ } public void showException(String text, Throwable exc){ - new Dialog("", "dialog"){{ + new Dialog(""){{ String message = Strings.getFinalMesage(exc); setFillParent(true); cont.margin(15); cont.add("$error.title").colspan(2); cont.row(); - cont.addImage("whiteui").fillX().pad(2).colspan(2).height(4f).color(Color.SCARLET); + cont.addImage().fillX().pad(2).colspan(2).height(4f).color(Color.SCARLET); cont.row(); cont.add((text.startsWith("$") ? Core.bundle.get(text.substring(1)) : text) + (message == null ? "" : "\n[lightgray](" + message + ")")).colspan(2).center().get().setAlignment(Align.center); cont.row(); Collapser col = new Collapser(base -> base.pane(t -> t.margin(14f).add(Strings.parseException(exc, true)).color(Color.LIGHT_GRAY).left()), true); - cont.addButton("$details", "toggle", col::toggle).size(180f, 50f).checked(b -> !col.isCollapsed()).fillX().right(); + cont.addButton("$details", Style.toggleTbutton, col::toggle).size(180f, 50f).checked(b -> !col.isCollapsed()).fillX().right(); cont.addButton("$ok", this::hide).size(100, 50).fillX().left(); cont.row(); cont.add(col).colspan(2).pad(2); @@ -370,24 +342,24 @@ public class UI implements ApplicationListener, Loadable{ } public void showText(String titleText, String text){ - new Dialog(titleText, "dialog"){{ + new Dialog(titleText){{ cont.margin(15).add(text).width(400f).wrap().get().setAlignment(Align.center, Align.center); buttons.addButton("$ok", this::hide).size(90, 50).pad(4); }}.show(); } public void showInfoText(String titleText, String text){ - new Dialog(titleText, "dialog"){{ + new Dialog(titleText){{ cont.margin(15).add(text).width(400f).wrap().left().get().setAlignment(Align.left, Align.left); buttons.addButton("$ok", this::hide).size(90, 50).pad(4); }}.show(); } public void showSmall(String titleText, String text){ - new Dialog(titleText, "dialog"){{ + new Dialog(titleText){{ cont.margin(10).add(text); titleTable.row(); - titleTable.addImage("whiteui").color(Pal.accent).height(3f).growX().pad(2f); + titleTable.addImage().color(Pal.accent).height(3f).growX().pad(2f); buttons.addButton("$ok", this::hide).size(90, 50).pad(4); }}.show(); } diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java index 86ae323fdd..a86b41b191 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java @@ -13,19 +13,19 @@ import io.anuke.arc.scene.actions.*; import io.anuke.arc.scene.event.*; import io.anuke.arc.scene.style.*; import io.anuke.arc.scene.ui.*; -import io.anuke.arc.scene.ui.TextButton.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.mindustry.*; import io.anuke.mindustry.content.*; import io.anuke.mindustry.core.GameState.*; import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.io.*; import io.anuke.mindustry.maps.*; +import io.anuke.mindustry.ui.Style; import io.anuke.mindustry.ui.dialogs.*; import io.anuke.mindustry.world.*; -import io.anuke.mindustry.world.Block.*; import io.anuke.mindustry.world.blocks.*; import io.anuke.mindustry.world.blocks.storage.*; @@ -47,9 +47,9 @@ public class MapEditorDialog extends Dialog implements Disposable{ private Array blocksOut = new Array<>(); public MapEditorDialog(){ - super("", "dialog"); + super(""); - background("dark"); + background(Style.dark); editor = new MapEditor(); view = new MapView(editor); @@ -59,27 +59,26 @@ public class MapEditorDialog extends Dialog implements Disposable{ menu = new FloatingDialog("$menu"); menu.addCloseButton(); - float isize = iconsize; float swidth = 180f; menu.cont.table(t -> { t.defaults().size(swidth, 60f).padBottom(5).padRight(5).padLeft(5); - t.addImageTextButton("$editor.savemap", "icon-floppy-16", isize, this::save); + t.addImageTextButton("$editor.savemap", Icon.floppy16Small, this::save); - t.addImageTextButton("$editor.mapinfo", "icon-pencil", isize, () -> { + t.addImageTextButton("$editor.mapinfo", Icon.pencilSmall, () -> { infoDialog.show(); menu.hide(); }); t.row(); - t.addImageTextButton("$editor.generate", "icon-editor", isize, () -> { + t.addImageTextButton("$editor.generate", Icon.editorSmall, () -> { generateDialog.show(generateDialog::applyToEditor); menu.hide(); }); - t.addImageTextButton("$editor.resize", "icon-resize", isize, () -> { + t.addImageTextButton("$editor.resize", Icon.resizeSmall, () -> { resizeDialog.show(); menu.hide(); }); @@ -87,10 +86,10 @@ public class MapEditorDialog extends Dialog implements Disposable{ t.row(); if(!ios){ - t.addImageTextButton("$editor.import", "icon-load-map", isize, () -> + t.addImageTextButton("$editor.import", Icon.loadMapSmall, () -> createDialog("$editor.import", - "$editor.importmap", "$editor.importmap.description", "icon-load-map", (Runnable)loadDialog::show, - "$editor.importfile", "$editor.importfile.description", "icon-file", (Runnable)() -> + "$editor.importmap", "$editor.importmap.description", Icon.loadMap, (Runnable)loadDialog::show, + "$editor.importfile", "$editor.importfile.description", Icon.file, (Runnable)() -> platform.showFileChooser(true, mapExtension, file -> ui.loadAnd(() -> { maps.tryCatchMapError(() -> { if(MapIO.isImage(file)){ @@ -101,7 +100,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ }); })), - "$editor.importimage", "$editor.importimage.description", "icon-file-image", (Runnable)() -> + "$editor.importimage", "$editor.importimage.description", Icon.fileImage, (Runnable)() -> platform.showFileChooser(true, "png", file -> ui.loadAnd(() -> { try{ @@ -116,7 +115,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ ); } - Cell cell = t.addImageTextButton("$editor.export", "icon-save-map", isize, () -> { + Cell cell = t.addImageTextButton("$editor.export", Icon.saveMapSmall, () -> { if(!ios){ platform.showFileChooser(false, mapExtension, file -> { ui.loadAnd(() -> { @@ -152,11 +151,11 @@ public class MapEditorDialog extends Dialog implements Disposable{ menu.cont.row(); - menu.cont.addImageTextButton("$editor.ingame", "icon-arrow", isize, this::playtest).padTop(-5).size(swidth * 2f + 10, 60f); + menu.cont.addImageTextButton("$editor.ingame", Icon.arrowSmall, this::playtest).padTop(-5).size(swidth * 2f + 10, 60f); menu.cont.row(); - menu.cont.addImageTextButton("$quit", "icon-back", isize, () -> { + menu.cont.addImageTextButton("$quit", Icon.backSmall, () -> { tryExit(); menu.hide(); }).size(swidth * 2f + 10, 60f); @@ -312,7 +311,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ for(int i = 0; i < arguments.length; i += 4){ String name = (String)arguments[i]; String description = (String)arguments[i + 1]; - String iconname = (String)arguments[i + 2]; + Drawable iconname = (Drawable)arguments[i + 2]; Runnable listenable = (Runnable)arguments[i + 3]; TextButton button = dialog.cont.addButton(name, () -> { @@ -322,7 +321,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ }).left().margin(0).get(); button.clearChildren(); - button.addImage(iconname).size(iconsize).padLeft(10); + button.addImage(iconname).padLeft(10); button.table(t -> { t.add(name).growX().wrap(); t.row(); @@ -399,14 +398,13 @@ public class MapEditorDialog extends Dialog implements Disposable{ Consumer addTool = tool -> { - ImageButton button = new ImageButton("icon-" + tool.name() + "-small", "clear-toggle"); + ImageButton button = new ImageButton(Core.atlas.drawable("icon-" + tool.name() + "-small"), Style.clearToggleIbutton); button.clicked(() -> { view.setTool(tool); if(lastTable[0] != null){ lastTable[0].remove(); } }); - button.resizeImage(iconsizesmall); button.update(() -> button.setChecked(view.getTool() == tool)); group.add(button); @@ -426,7 +424,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ lastTable[0].remove(); } - Table table = new Table("dialogDim"); + Table table = new Table(Style.dialogDim); table.defaults().size(300f, 70f); for(int i = 0; i < tool.altModes.length; i++){ @@ -436,7 +434,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ table.addButton(b -> { b.left(); b.marginLeft(6); - b.setStyle(Core.scene.skin.get("clear-toggle", TextButtonStyle.class)); + b.setStyle(Style.clearToggleTbutton); b.add(Core.bundle.get("toolmode." + name)).left(); b.row(); b.add(Core.bundle.get("toolmode." + name + ".description")).color(Color.LIGHT_GRAY).left(); @@ -476,16 +474,16 @@ public class MapEditorDialog extends Dialog implements Disposable{ tools.defaults().size(size, size); - tools.addImageButton("icon-menu-large-small", "clear", iconsizesmall, menu::show); + tools.addImageButton(Icon.menuLargeSmall, Style.clearIbutton, menu::show); - ImageButton grid = tools.addImageButton("icon-grid-small", "clear-toggle", iconsizesmall, () -> view.setGrid(!view.isGrid())).get(); + ImageButton grid = tools.addImageButton(Icon.gridSmall, Style.clearToggleIbutton, () -> view.setGrid(!view.isGrid())).get(); addTool.accept(EditorTool.zoom); tools.row(); - ImageButton undo = tools.addImageButton("icon-undo-small", "clear", iconsizesmall, editor::undo).get(); - ImageButton redo = tools.addImageButton("icon-redo-small", "clear", iconsizesmall, editor::redo).get(); + ImageButton undo = tools.addImageButton(Icon.undoSmall, Style.clearIbutton, editor::undo).get(); + ImageButton redo = tools.addImageButton(Icon.redoSmall, Style.clearIbutton, editor::redo).get(); addTool.accept(EditorTool.pick); @@ -507,7 +505,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ addTool.accept(EditorTool.fill); addTool.accept(EditorTool.spray); - ImageButton rotate = tools.addImageButton("icon-arrow-16-small", "clear", iconsizesmall, () -> editor.rotation = (editor.rotation + 1) % 4).get(); + ImageButton rotate = tools.addImageButton(Icon.arrow16Small, Style.clearIbutton, () -> editor.rotation = (editor.rotation + 1) % 4).get(); rotate.getImage().update(() -> { rotate.getImage().setRotation(editor.rotation * 90); rotate.getImage().setOrigin(Align.center); @@ -515,7 +513,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ tools.row(); - tools.table("underline", t -> t.add("$editor.teams")) + tools.table(Tex.underline, t -> t.add("$editor.teams")) .colspan(3).height(40).width(size * 3f + 3f).padBottom(3); tools.row(); @@ -525,7 +523,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ int i = 0; for(Team team : Team.all){ - ImageButton button = new ImageButton("whiteui", "clear-toggle-partial"); + ImageButton button = new ImageButton(Tex.whiteui, Style.clearTogglePartialIbutton); button.margin(4f); button.getImageCell().grow(); button.getStyle().imageUpColor = team.color; @@ -541,7 +539,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ mid.row(); - mid.table("underline", t -> { + mid.table(Tex.underline, t -> { Slider slider = new Slider(0, MapEditor.brushSizes.length - 1, 1, false); slider.moved(f -> editor.brushSize = MapEditor.brushSizes[(int)(float)f]); for(int j = 0; j < MapEditor.brushSizes.length; j++){ @@ -673,11 +671,11 @@ public class MapEditorDialog extends Dialog implements Disposable{ }); for(Block block : blocksOut){ - TextureRegion region = block.icon(Icon.medium); + TextureRegion region = block.icon(Block.Icon.medium); if(!Core.atlas.isFound(region)) continue; - ImageButton button = new ImageButton("whiteui", "clear-toggle"); + ImageButton button = new ImageButton(Tex.whiteui, Style.clearToggleIbutton); button.getStyle().imageUp = new TextureRegionDrawable(region); button.clicked(() -> editor.drawBlock = block); button.resizeImage(8 * 4f); @@ -692,7 +690,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ group.getButtons().get(2).setChecked(true); - table.table("underline", extra -> extra.labelWrap(() -> editor.drawBlock.localizedName).width(200f).center()).growX(); + table.table(Tex.underline, extra -> extra.labelWrap(() -> editor.drawBlock.localizedName).width(200f).center()).growX(); table.row(); table.add(pane).growY().fillX(); } diff --git a/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java b/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java index 1538318170..d006225d41 100644 --- a/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java @@ -8,10 +8,12 @@ import io.anuke.arc.graphics.Pixmap.*; import io.anuke.arc.math.*; import io.anuke.arc.math.geom.*; import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.ImageButton.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.arc.util.async.*; import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.io.*; import io.anuke.mindustry.maps.filters.*; @@ -84,7 +86,7 @@ public class MapGenerateDialog extends FloatingDialog{ update(); }).size(160f, 64f); - buttons.addImageTextButton("$add", "icon-add", iconsize, this::showAdd).height(64f).width(140f); + buttons.addImageTextButton("$add", Icon.add, this::showAdd).height(64f).width(140f); if(!applied){ hidden(this::apply); @@ -176,10 +178,8 @@ public class MapGenerateDialog extends FloatingDialog{ } } }, new Stack(){{ - add(new Image("loadDim")); - add(new Image("icon-refresh"){{ - setScaling(Scaling.none); - }}); + add(new Image(Style.loadDim)); + add(new Image(Icon.refresh, Scaling.none)); visible(() -> generating && !updateEditorOnChange); }}).grow().padRight(10); t.pane(p -> filterTable = p.marginRight(6)).update(pane -> { @@ -224,7 +224,7 @@ public class MapGenerateDialog extends FloatingDialog{ for(GenerateFilter filter : filters){ //main container - filterTable.table("button", c -> { + filterTable.table(Tex.button, c -> { //icons to perform actions c.table(t -> { t.top(); @@ -233,26 +233,26 @@ public class MapGenerateDialog extends FloatingDialog{ t.row(); t.table(b -> { - String style = "clear"; + ImageButtonStyle style = Style.clearIbutton; b.defaults().size(50f); - b.addImageButton("icon-refresh-small", style, iconsizesmall, () -> { + b.addImageButton(Icon.refreshSmall, style, () -> { filter.randomize(); update(); }); - b.addImageButton("icon-arrow-up-small", style, iconsizesmall, () -> { + b.addImageButton(Icon.arrowUpSmall, style, () -> { int idx = filters.indexOf(filter); filters.swap(idx, Math.max(0, idx - 1)); rebuildFilters(); update(); }); - b.addImageButton("icon-arrow-down-small",style, iconsizesmall, () -> { + b.addImageButton(Icon.arrowDownSmall, style, () -> { int idx = filters.indexOf(filter); filters.swap(idx, Math.min(filters.size - 1, idx + 1)); rebuildFilters(); update(); }); - b.addImageButton("icon-trash-small", style, iconsizesmall, () -> { + b.addImageButton(Icon.trashSmall, style, () -> { filters.remove(filter); rebuildFilters(); update(); diff --git a/core/src/io/anuke/mindustry/editor/MapInfoDialog.java b/core/src/io/anuke/mindustry/editor/MapInfoDialog.java index bc5ca110bc..886b92d875 100644 --- a/core/src/io/anuke/mindustry/editor/MapInfoDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapInfoDialog.java @@ -6,6 +6,7 @@ import io.anuke.arc.scene.ui.*; import io.anuke.mindustry.*; import io.anuke.mindustry.game.*; import io.anuke.mindustry.io.*; +import io.anuke.mindustry.ui.*; import io.anuke.mindustry.ui.dialogs.*; public class MapInfoDialog extends FloatingDialog{ @@ -42,7 +43,7 @@ public class MapInfoDialog extends FloatingDialog{ t.row(); t.add("$editor.description").padRight(8).left(); - TextArea description = t.addArea(tags.get("description", ""), "textarea", text -> { + TextArea description = t.addArea(tags.get("description", ""), Style.textareaField, text -> { tags.put("description", text); }).size(400f, 140f).get(); diff --git a/core/src/io/anuke/mindustry/editor/MapLoadDialog.java b/core/src/io/anuke/mindustry/editor/MapLoadDialog.java index 27453cb187..1cbc6d7616 100644 --- a/core/src/io/anuke/mindustry/editor/MapLoadDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapLoadDialog.java @@ -48,12 +48,12 @@ public class MapLoadDialog extends FloatingDialog{ table.defaults().size(200f, 90f).pad(4f); table.margin(10f); - ScrollPane pane = new ScrollPane(table, "horizontal"); + ScrollPane pane = new ScrollPane(table, Style.horizontalPane); pane.setFadeScrollBars(false); for(Map map : maps.all()){ - TextButton button = new TextButton(map.name(), "toggle"); + TextButton button = new TextButton(map.name(), Style.toggleTbutton); button.add(new BorderImage(map.texture, 2f).setScaling(Scaling.fit)).size(16 * 4f); button.getCells().reverse(); button.clicked(() -> selected = map); diff --git a/core/src/io/anuke/mindustry/editor/MapResizeDialog.java b/core/src/io/anuke/mindustry/editor/MapResizeDialog.java index fb6c4f6adb..4639faf878 100644 --- a/core/src/io/anuke/mindustry/editor/MapResizeDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapResizeDialog.java @@ -1,9 +1,10 @@ package io.anuke.mindustry.editor; -import io.anuke.arc.function.IntPositionConsumer; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.mindustry.ui.dialogs.FloatingDialog; +import io.anuke.arc.function.*; +import io.anuke.arc.math.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.ui.dialogs.*; public class MapResizeDialog extends FloatingDialog{ private static final int minSize = 50, maxSize = 500, increment = 50; @@ -28,7 +29,7 @@ public class MapResizeDialog extends FloatingDialog{ height = move(height, -1); }).size(60f); - table.table("button", t -> t.label(() -> (w ? width : height) + "")).width(200); + table.table(Tex.button, t -> t.label(() -> (w ? width : height) + "")).width(200); table.addButton(">", () -> { if(w) diff --git a/core/src/io/anuke/mindustry/editor/WaveInfoDialog.java b/core/src/io/anuke/mindustry/editor/WaveInfoDialog.java index 3785a2a968..91191de9fa 100644 --- a/core/src/io/anuke/mindustry/editor/WaveInfoDialog.java +++ b/core/src/io/anuke/mindustry/editor/WaveInfoDialog.java @@ -1,22 +1,23 @@ package io.anuke.mindustry.editor; -import io.anuke.arc.Core; -import io.anuke.arc.collection.Array; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.input.KeyCode; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.scene.event.Touchable; -import io.anuke.arc.scene.ui.Label; -import io.anuke.arc.scene.ui.TextField.TextFieldFilter; -import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.input.*; +import io.anuke.arc.math.*; +import io.anuke.arc.scene.event.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.TextField.*; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; -import io.anuke.mindustry.Vars; +import io.anuke.mindustry.*; import io.anuke.mindustry.content.*; import io.anuke.mindustry.game.*; -import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.io.JsonIO; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.io.*; import io.anuke.mindustry.type.*; -import io.anuke.mindustry.ui.dialogs.FloatingDialog; +import io.anuke.mindustry.ui.dialogs.*; import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.game.SpawnGroup.never; @@ -79,7 +80,7 @@ public class WaveInfoDialog extends FloatingDialog{ groups = JsonIO.copy(state.rules.spawns.isEmpty() ? defaultWaves.get() : state.rules.spawns); cont.clear(); - cont.stack(new Table("clear", main -> { + cont.stack(new Table(Tex.clear, main -> { main.pane(t -> table = t).growX().growY().padRight(8f).get().setScrollingDisabled(true, false); main.row(); main.addButton("$add", () -> { @@ -94,7 +95,7 @@ public class WaveInfoDialog extends FloatingDialog{ setAlignment(Align.center, Align.center); }}).width(390f).growY(); - cont.table("clear", m -> { + cont.table(Tex.clear, m -> { m.add("$waves.preview").color(Color.LIGHT_GRAY).growX().center().get().setAlignment(Align.center, Align.center); m.row(); m.addButton("-", () -> { @@ -134,7 +135,7 @@ public class WaveInfoDialog extends FloatingDialog{ if(groups != null){ for(SpawnGroup group : groups){ - table.table("button", t -> { + table.table(Tex.button, t -> { t.margin(0).defaults().pad(3).padLeft(5f).growX().left(); t.addButton(b -> { b.left(); @@ -238,7 +239,7 @@ public class WaveInfoDialog extends FloatingDialog{ for(int i = start; i < displayed + start; i++){ int wave = i; - preview.table("underline", table -> { + preview.table(Tex.underline, table -> { table.add((wave + 1) + "").color(Pal.accent).center().colspan(2).get().setAlignment(Align.center, Align.center); table.row(); diff --git a/core/src/io/anuke/mindustry/entities/type/Player.java b/core/src/io/anuke/mindustry/entities/type/Player.java index 5cc5b7551f..cbf755a326 100644 --- a/core/src/io/anuke/mindustry/entities/type/Player.java +++ b/core/src/io/anuke/mindustry/entities/type/Player.java @@ -24,6 +24,7 @@ import io.anuke.mindustry.io.*; import io.anuke.mindustry.net.Administration.*; import io.anuke.mindustry.net.*; import io.anuke.mindustry.type.*; +import io.anuke.mindustry.ui.*; import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.blocks.*; @@ -372,7 +373,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ } public void drawName(){ - BitmapFont font = Core.scene.skin.getFont("default"); + BitmapFont font = Fonts.def; GlyphLayout layout = Pools.obtain(GlyphLayout.class, GlyphLayout::new); final float nameHeight = 11; final float textHeight = 15; @@ -391,9 +392,9 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ if(isAdmin){ float s = 3f; Draw.color(color.r * 0.5f, color.g * 0.5f, color.b * 0.5f, 1f); - Draw.rect(Core.atlas.find("icon-admin-small"), x + layout.width / 2f + 2 + 1, y + nameHeight - 1.5f, s, s); + Draw.rect(Core.atlas.find("icon-admin-badge"), x + layout.width / 2f + 2 + 1, y + nameHeight - 1.5f, s, s); Draw.color(color); - Draw.rect(Core.atlas.find("icon-admin-small"), x + layout.width / 2f + 2 + 1, y + nameHeight - 1f, s, s); + Draw.rect(Core.atlas.find("icon-admin-badge"), x + layout.width / 2f + 2 + 1, y + nameHeight - 1f, s, s); } if(Core.settings.getBool("playerchat") && ((textFadeTime > 0 && lastText != null) || isTyping)){ diff --git a/core/src/io/anuke/mindustry/entities/type/Unit.java b/core/src/io/anuke/mindustry/entities/type/Unit.java index 2a8b5257ad..6c4fa3e425 100644 --- a/core/src/io/anuke/mindustry/entities/type/Unit.java +++ b/core/src/io/anuke/mindustry/entities/type/Unit.java @@ -19,9 +19,9 @@ import io.anuke.mindustry.game.*; import io.anuke.mindustry.game.Teams.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; -import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.*; import io.anuke.mindustry.type.*; +import io.anuke.mindustry.ui.*; import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.blocks.*; @@ -400,7 +400,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ (3f + Mathf.absin(Time.time(), 5f, 1f)) * itemtime); if(number){ - Core.scene.skin.getFont("outline").draw(item.amount + "", + Fonts.outline.draw(item.amount + "", x + Angles.trnsx(rotation + 180f, backTrns), y + Angles.trnsy(rotation + 180f, backTrns) - 3, Pal.accent, 0.25f * itemtime / UnitScl.dp.scl(1f), false, Align.center diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index 442a05a226..01b8b54aaa 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -17,8 +17,10 @@ import io.anuke.mindustry.entities.traits.BuilderTrait.*; import io.anuke.mindustry.entities.traits.*; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.input.PlaceUtils.*; +import io.anuke.mindustry.ui.*; import io.anuke.mindustry.world.*; import static io.anuke.mindustry.Vars.*; @@ -249,27 +251,27 @@ public class MobileInput extends InputHandler implements GestureListener{ @Override public void buildUI(Table table){ - table.addImage("whiteui").color(Pal.gray).height(4f).colspan(4).growX(); + table.addImage().color(Pal.gray).height(4f).colspan(4).growX(); table.row(); table.left().margin(0f).defaults().size(48f); - table.addImageButton("icon-break-small", "clear-toggle-partial", iconsizesmall, () -> { + table.addImageButton(Icon.breakSmall, Style.clearTogglePartialIbutton, () -> { mode = mode == breaking ? block == null ? none : placing : breaking; lastBlock = block; }).update(l -> l.setChecked(mode == breaking)).name("breakmode"); //diagonal swap button - table.addImageButton("icon-diagonal-small", "clear-toggle-partial", iconsizesmall, () -> { + table.addImageButton(Icon.diagonalSmall, Style.clearTogglePartialIbutton, () -> { Core.settings.put("swapdiagonal", !Core.settings.getBool("swapdiagonal")); Core.settings.save(); }).update(l -> l.setChecked(Core.settings.getBool("swapdiagonal"))); //rotate button - table.addImageButton("icon-arrow-small", "clear-partial", iconsizesmall, () -> rotation = Mathf.mod(rotation + 1, 4)) + table.addImageButton(Icon.arrowSmall, Style.clearPartialIbutton,() -> rotation = Mathf.mod(rotation + 1, 4)) .update(i -> i.getImage().setRotationOrigin(rotation * 90, Align.center)).visible(() -> block != null && block.rotate); //confirm button - table.addImageButton("icon-check-small", "clear-partial", iconsizesmall, () -> { + table.addImageButton(Icon.checkSmall, Style.clearPartialIbutton, () -> { for(PlaceRequest request : selection){ Tile tile = request.tile(); @@ -295,7 +297,7 @@ public class MobileInput extends InputHandler implements GestureListener{ Core.scene.table(t -> { t.bottom().left().visible(() -> (player.isBuilding() || block != null || mode == breaking) && !state.is(State.menu)); - t.addImageTextButton("$cancel", "icon-cancel", 16*2, () -> { + t.addImageTextButton("$cancel", Icon.cancelSmall, () -> { player.clearBuilding(); mode = none; block = null; diff --git a/core/src/io/anuke/mindustry/ui/Bar.java b/core/src/io/anuke/mindustry/ui/Bar.java index 1fbe5b02f4..fda64f53d7 100644 --- a/core/src/io/anuke/mindustry/ui/Bar.java +++ b/core/src/io/anuke/mindustry/ui/Bar.java @@ -1,15 +1,15 @@ package io.anuke.mindustry.ui; -import io.anuke.arc.Core; -import io.anuke.arc.function.FloatProvider; -import io.anuke.arc.function.Supplier; -import io.anuke.arc.graphics.Color; +import io.anuke.arc.*; +import io.anuke.arc.function.*; +import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.math.geom.Rectangle; -import io.anuke.arc.scene.Element; -import io.anuke.arc.scene.style.Drawable; -import io.anuke.arc.util.pooling.Pools; +import io.anuke.arc.math.*; +import io.anuke.arc.math.geom.*; +import io.anuke.arc.scene.*; +import io.anuke.arc.scene.style.*; +import io.anuke.arc.util.pooling.*; +import io.anuke.mindustry.gen.*; public class Bar extends Element{ private static Rectangle scissor = new Rectangle(); @@ -53,11 +53,13 @@ public class Bar extends Element{ blink = Mathf.lerpDelta(blink, 0f, 0.2f); value = Mathf.lerpDelta(value, computed, 0.15f); + Drawable bar = Tex.bar; + Draw.colorl(0.1f); - Draw.drawable("bar", x, y, width, height); + bar.draw(x, y, width, height); Draw.color(color, blinkColor, blink); - Drawable top = Core.scene.skin.getDrawable("bar-top"); + Drawable top = Tex.barTop; float topWidth = width * value; if(topWidth > Core.atlas.find("bar-top").getWidth()){ @@ -71,7 +73,7 @@ public class Bar extends Element{ Draw.color(); - BitmapFont font = Core.scene.skin.getFont("default"); + BitmapFont font = Fonts.def; GlyphLayout lay = Pools.obtain(GlyphLayout.class, GlyphLayout::new); lay.setText(font, name); diff --git a/core/src/io/anuke/mindustry/ui/ContentDisplay.java b/core/src/io/anuke/mindustry/ui/ContentDisplay.java index 6c293d1686..06fd5b4f65 100644 --- a/core/src/io/anuke/mindustry/ui/ContentDisplay.java +++ b/core/src/io/anuke/mindustry/ui/ContentDisplay.java @@ -25,7 +25,7 @@ public class ContentDisplay{ table.row(); - table.addImage("whiteui").height(3).color(Color.LIGHT_GRAY).pad(8).padLeft(0).padRight(0).fillX(); + table.addImage().height(3).color(Color.LIGHT_GRAY).pad(8).padLeft(0).padRight(0).fillX(); table.row(); @@ -33,7 +33,7 @@ public class ContentDisplay{ table.add(block.description).padLeft(5).padRight(5).width(400f).wrap().fillX(); table.row(); - table.addImage("whiteui").height(3).color(Color.LIGHT_GRAY).pad(8).padLeft(0).padRight(0).fillX(); + table.addImage().height(3).color(Color.LIGHT_GRAY).pad(8).padLeft(0).padRight(0).fillX(); table.row(); } @@ -73,7 +73,7 @@ public class ContentDisplay{ table.row(); - table.addImage("whiteui").height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); + table.addImage().height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); table.row(); @@ -81,7 +81,7 @@ public class ContentDisplay{ table.add(item.description).padLeft(5).padRight(5).width(400f).wrap().fillX(); table.row(); - table.addImage("whiteui").height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); + table.addImage().height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); table.row(); } @@ -104,7 +104,7 @@ public class ContentDisplay{ table.row(); - table.addImage("whiteui").height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); + table.addImage().height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); table.row(); @@ -112,7 +112,7 @@ public class ContentDisplay{ table.add(liquid.description).padLeft(5).padRight(5).width(400f).wrap().fillX(); table.row(); - table.addImage("whiteui").height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); + table.addImage().height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); table.row(); } @@ -139,7 +139,7 @@ public class ContentDisplay{ table.row(); - table.addImage("whiteui").height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); + table.addImage().height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); table.row(); @@ -147,7 +147,7 @@ public class ContentDisplay{ table.add(mech.description).padLeft(5).padRight(5).width(400f).wrap().fillX(); table.row(); - table.addImage("whiteui").height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); + table.addImage().height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); table.row(); } @@ -186,7 +186,7 @@ public class ContentDisplay{ table.row(); - table.addImage("whiteui").height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); + table.addImage().height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); table.row(); @@ -194,7 +194,7 @@ public class ContentDisplay{ table.add(unit.description).padLeft(5).padRight(5).width(400f).wrap().fillX(); table.row(); - table.addImage("whiteui").height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); + table.addImage().height(3).color(Color.LIGHT_GRAY).pad(15).padLeft(0).padRight(0).fillX(); table.row(); } diff --git a/core/src/io/anuke/mindustry/ui/Fonts.java b/core/src/io/anuke/mindustry/ui/Fonts.java new file mode 100644 index 0000000000..cf30e810aa --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/Fonts.java @@ -0,0 +1,9 @@ +package io.anuke.mindustry.ui; + +import io.anuke.arc.graphics.g2d.*; + +public class Fonts{ + public static BitmapFont def; + public static BitmapFont outline; + public static BitmapFont chat; +} diff --git a/core/src/io/anuke/mindustry/ui/IconSize.java b/core/src/io/anuke/mindustry/ui/IconSize.java new file mode 100644 index 0000000000..ba3ac5114c --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/IconSize.java @@ -0,0 +1,14 @@ +package io.anuke.mindustry.ui; + +public enum IconSize{ + def(48), + small(32), + smaller(30), + tiny(16); + + public final int size; + + IconSize(int size){ + this.size = size; + } +} diff --git a/core/src/io/anuke/mindustry/ui/ItemsDisplay.java b/core/src/io/anuke/mindustry/ui/ItemsDisplay.java index 97208b54ab..08aaabb2b6 100644 --- a/core/src/io/anuke/mindustry/ui/ItemsDisplay.java +++ b/core/src/io/anuke/mindustry/ui/ItemsDisplay.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.ui; import io.anuke.arc.collection.ObjectIntMap; import io.anuke.arc.graphics.Color; import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item.Icon; import io.anuke.mindustry.type.ItemType; @@ -26,7 +27,7 @@ public class ItemsDisplay extends Table{ top().left(); margin(0); - table("button", t -> { + table(Tex.button,t -> { t.margin(10).marginLeft(15).marginTop(15f); t.add("$launcheditems").colspan(3).left().padBottom(5); t.row(); diff --git a/core/src/io/anuke/mindustry/ui/Minimap.java b/core/src/io/anuke/mindustry/ui/Minimap.java index 4dfc419a70..fb1e5148bd 100644 --- a/core/src/io/anuke/mindustry/ui/Minimap.java +++ b/core/src/io/anuke/mindustry/ui/Minimap.java @@ -6,13 +6,14 @@ import io.anuke.arc.input.KeyCode; import io.anuke.arc.scene.Element; import io.anuke.arc.scene.event.*; import io.anuke.arc.scene.ui.layout.*; +import io.anuke.mindustry.gen.*; import static io.anuke.mindustry.Vars.*; public class Minimap extends Table{ public Minimap(){ - background("pane"); + background(Tex.pane); float margin = 5f; touchable(Touchable.enabled); diff --git a/core/src/io/anuke/mindustry/ui/MobileButton.java b/core/src/io/anuke/mindustry/ui/MobileButton.java index 102357e80c..b674830ebd 100644 --- a/core/src/io/anuke/mindustry/ui/MobileButton.java +++ b/core/src/io/anuke/mindustry/ui/MobileButton.java @@ -1,13 +1,13 @@ package io.anuke.mindustry.ui; +import io.anuke.arc.scene.style.*; import io.anuke.arc.scene.ui.ImageButton; import io.anuke.arc.util.Align; public class MobileButton extends ImageButton{ - public MobileButton(String icon, float isize, String text, Runnable listener){ + public MobileButton(Drawable icon, String text, Runnable listener){ super(icon); - resizeImage(isize); clicked(listener); row(); add(text).growX().wrap().center().get().setAlignment(Align.center, Align.center); diff --git a/core/src/io/anuke/mindustry/ui/Style.java b/core/src/io/anuke/mindustry/ui/Style.java new file mode 100644 index 0000000000..7c61cb9da1 --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/Style.java @@ -0,0 +1,365 @@ +package io.anuke.mindustry.ui; + +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.graphics.g2d.TextureAtlas.*; +import io.anuke.arc.scene.style.*; +import io.anuke.arc.scene.ui.Button.*; +import io.anuke.arc.scene.ui.CheckBox.*; +import io.anuke.arc.scene.ui.Dialog.*; +import io.anuke.arc.scene.ui.ImageButton.*; +import io.anuke.arc.scene.ui.KeybindDialog.*; +import io.anuke.arc.scene.ui.Label.*; +import io.anuke.arc.scene.ui.ScrollPane.*; +import io.anuke.arc.scene.ui.Slider.*; +import io.anuke.arc.scene.ui.TextButton.*; +import io.anuke.arc.scene.ui.TextField.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; + +import static io.anuke.mindustry.gen.Tex.*; + +@StyleDefaults +public class Style{ + public static Drawable + dialogDim = whiteui.tint(0f, 0f, 0f, 0.9f), + loadDim = whiteui.tint(0f, 0f, 0f, 0.8f), + guideDim = whiteui.tint(0f, 0f, 0f, 0.3f), + chatfield = whiteui.tint(0f, 0f, 0f, 0.2f), + dark = whiteui.tint(0f, 0f, 0f, 1f), + none = whiteui.tint(0f, 0f, 0f, 0.1f), + flatTrans = whiteui.tint(0f, 0f, 0f, 0.6f), + flat = whiteui.tint(0f, 0f, 0f, 1f), + flatDown = createFlatDown(), + flatOver = whiteui.tint(Color.valueOf("454545")); + + public static ButtonStyle + defaultButton = new ButtonStyle(){{ + down = buttonDown; + up = button; + over = buttonOver; + disabled = buttonDisabled; + }}, + squareButton = new ButtonStyle(){{ + over = buttonSquareOver; + disabled = buttonDisabled; + down = buttonSquareDown; + up = buttonSquare; + }}, + toggleButton = new ButtonStyle(){{ + checked = buttonDown; + down = buttonDown; + up = button; + }}, + waveButton = new ButtonStyle(){{ + up = buttonEdge4; + over = buttonEdgeOver4; + disabled = buttonEdge4; + }}; + + public static TextButtonStyle + defaultTbutton = new TextButtonStyle(){{ + over = buttonOver; + disabled = buttonDisabled; + font = Fonts.def; + fontColor = Color.WHITE; + disabledFontColor = Color.GRAY; + down = buttonDown; + up = button; + }}, + squareTbutton = new TextButtonStyle(){{ + font = Fonts.def; + fontColor = Color.WHITE; + disabledFontColor = Color.GRAY; + over = buttonSquareOver; + disabled = buttonDisabled; + down = buttonSquareDown; + up = buttonSquare; + }}, + nodeTbutton = new TextButtonStyle(){{ + disabled = button; + font = Fonts.def; + fontColor = Color.WHITE; + disabledFontColor = Color.GRAY; + up = buttonOver; + over = buttonDown; + }}, + rightTbutton = new TextButtonStyle(){{ + over = buttonRightOver; + font = Fonts.def; + fontColor = Color.WHITE; + disabledFontColor = Color.GRAY; + down = buttonRightDown; + up = buttonRight; + }}, + waveTbutton = new TextButtonStyle(){{ + font = Fonts.def; + fontColor = Color.WHITE; + disabledFontColor = Color.GRAY; + up = buttonEdge4; + }}, + clearTbutton = new TextButtonStyle(){{ + over = flatOver; + font = Fonts.def; + fontColor = Color.WHITE; + disabledFontColor = Color.GRAY; + down = flatOver; + up = flat; + }}, + discordTbutton = new TextButtonStyle(){{ + font = Fonts.def; + fontColor = Color.WHITE; + up = discordBanner; + }}, + infoTbutton = new TextButtonStyle(){{ + font = Fonts.def; + fontColor = Color.WHITE; + up = infoBanner; + }}, + clearPartialTbutton = new TextButtonStyle(){{ + down = whiteui; + up = pane; + over = flatDown; + font = Fonts.def; + fontColor = Color.WHITE; + disabledFontColor = Color.GRAY; + }}, + clearPartial2Tbutton = new TextButtonStyle(){{ + down = flatOver; + up = none; + over = flatOver; + font = Fonts.def; + fontColor = Color.WHITE; + disabledFontColor = Color.GRAY; + }}, + emptyTbutton = new TextButtonStyle(){{ + font = Fonts.def; + }}, + clearToggleTbutton = new TextButtonStyle(){{ + font = Fonts.def; + fontColor = Color.WHITE; + checked = flatDown; + down = flatDown; + up = flat; + over = flatOver; + disabled = flat; + disabledFontColor = Color.GRAY; + }}, + clearToggleMenuTbutton = new TextButtonStyle(){{ + font = Fonts.def; + fontColor = Color.WHITE; + checked = flatDown; + down = flatDown; + up = clear; + over = flatOver; + disabled = flat; + disabledFontColor = Color.GRAY; + }}, + toggleTbutton = new TextButtonStyle(){{ + font = Fonts.def; + fontColor = Color.WHITE; + checked = buttonDown; + down = buttonDown; + up = button; + over = buttonOver; + disabled = buttonDisabled; + disabledFontColor = Color.GRAY; + }}; + + public static ImageButtonStyle + defaultIbutton = new ImageButtonStyle(){{ + down = buttonDown; + up = button; + over = buttonOver; + imageDisabledColor = Color.GRAY; + imageUpColor = Color.WHITE; + disabled = buttonDisabled; + }}, + nodeIbutton = new ImageButtonStyle(){{ + up = buttonOver; + over = buttonDown; + }}, + rightIbutton = new ImageButtonStyle(){{ + over = buttonRightOver; + down = buttonRightDown; + up = buttonRight; + }}, + emptyIbutton = new ImageButtonStyle(){{ + imageDownColor = Pal.accent; + imageUpColor = Color.WHITE; + }}, + emptytoggleIbutton = new ImageButtonStyle(){{ + imageCheckedColor = Color.WHITE; + imageDownColor = Color.WHITE; + imageUpColor = Color.GRAY; + }}, + staticIbutton = new ImageButtonStyle(){{ + up = button; + }}, + staticDownIbutton = new ImageButtonStyle(){{ + up = buttonDown; + }}, + toggleIbutton = new ImageButtonStyle(){{ + checked = buttonDown; + down = buttonDown; + up = button; + imageDisabledColor = Color.GRAY; + imageUpColor = Color.WHITE; + }}, + selectIbutton = new ImageButtonStyle(){{ + checked = buttonSelect; + up = none; + }}, + clearIbutton = new ImageButtonStyle(){{ + down = flatOver; + up = flat; + over = flatOver; + }}, + clearFullIbutton = new ImageButtonStyle(){{ + down = whiteui; + up = pane; + over = flatDown; + }}, + clearPartialIbutton = new ImageButtonStyle(){{ + down = flatDown; + up = none; + over = flatOver; + }}, + clearToggleIbutton = new ImageButtonStyle(){{ + down = flatDown; + checked = flatDown; + up = flat; + over = flatOver; + }}, + clearTransIbutton = new ImageButtonStyle(){{ + down = flatDown; + up = flatTrans; + over = flatOver; + }}, + clearToggleTransIbutton = new ImageButtonStyle(){{ + down = flatDown; + checked = flatDown; + up = flatTrans; + over = flatOver; + }}, + clearTogglePartialIbutton = new ImageButtonStyle(){{ + down = flatDown; + checked = flatDown; + up = none; + over = flatOver; + }}; + + public static ScrollPaneStyle + defaultPane = new ScrollPaneStyle(){{ + vScroll = scroll; + vScrollKnob = scrollKnobVerticalBlack; + }}, + horizontalPane = new ScrollPaneStyle(){{ + vScroll = scroll; + vScrollKnob = scrollKnobVerticalBlack; + hScroll = scrollHorizontal; + hScrollKnob = scrollKnobHorizontalBlack; + }}; + + public static KeybindDialogStyle + defaultKeybindDialog = new KeybindDialogStyle(){{ + keyColor = Pal.accent; + keyNameColor = Color.WHITE; + controllerColor = Color.LIGHT_GRAY; + }}; + + public static SliderStyle + defaultHorizontalSlider = new SliderStyle(){{ + background = slider; + knob = sliderKnob; + knobOver = sliderKnobOver; + knobDown = sliderKnobDown; + }}, + defaultVerticalSlider = new SliderStyle(){{ + background = sliderVertical; + knob = sliderKnob; + knobOver = sliderKnobOver; + knobDown = sliderKnobDown; + }}; + + public static LabelStyle + defaultLabel = new LabelStyle(){{ + font = Fonts.def; + fontColor = Color.WHITE; + }}, + outlineLabel = new LabelStyle(){{ + font = Fonts.outline; + fontColor = Color.WHITE; + }}; + + public static TextFieldStyle + defaultField = new TextFieldStyle(){{ + font = Fonts.chat; + fontColor = Color.WHITE; + disabledFontColor = Color.GRAY; + disabledBackground = underlineDisabled; + selection = Tex.selection; + background = underline; + invalidBackground = underlineRed; + cursor = Tex.cursor; + messageFont = Fonts.def; + messageFontColor = Color.GRAY; + }}, + textareaField = new TextFieldStyle(){{ + font = Fonts.chat; + fontColor = Color.WHITE; + disabledFontColor = Color.GRAY; + selection = Tex.selection; + background = underline; + cursor = Tex.cursor; + messageFont = Fonts.def; + messageFontColor = Color.GRAY; + }}; + public static CheckBoxStyle + defaultCheck = new CheckBoxStyle(){{ + checkboxOn = checkOn; + checkboxOff = checkOff; + checkboxOnOver = checkOnOver; + checkboxOver = checkOver; + checkboxOnDisabled = checkOnDisabled; + checkboxOffDisabled = checkDisabled; + font = Fonts.def; + fontColor = Color.WHITE; + disabledFontColor = Color.GRAY; + }}; + public static DialogStyle + defaultWindow = new DialogStyle(){{ + stageBackground = dialogDim; + titleFont = Fonts.def; + background = windowEmpty; + titleFontColor = Pal.accent; + }}, + fulldialogWindow = new DialogStyle(){{ + stageBackground = dark; + titleFont = Fonts.def; + background = windowEmpty; + titleFontColor = Pal.accent; + }}; + + + private static Drawable createFlatDown(){ + AtlasRegion region = Core.atlas.find("flat-down-base"); + int[] splits = region.splits; + + ScaledNinePatchDrawable copy = new ScaledNinePatchDrawable(new NinePatch(region, splits[0], splits[1], splits[2], splits[3])){ + public float getLeftWidth(){ return 0; } + public float getRightWidth(){ return 0; } + public float getTopHeight(){ return 0; } + public float getBottomHeight(){ return 0; } + }; + copy.setMinWidth(0); + copy.setMinHeight(0); + copy.setTopHeight(0); + copy.setRightWidth(0); + copy.setBottomHeight(0); + copy.setLeftWidth(0); + return copy; + } +} diff --git a/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java index 123e2a9d28..a2207e8c77 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java @@ -1,14 +1,15 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.Core; +import io.anuke.arc.*; import io.anuke.arc.collection.*; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.scene.ui.ScrollPane; +import io.anuke.arc.graphics.*; +import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; -import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.ui.Links; -import io.anuke.mindustry.ui.Links.LinkEntry; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.ui.*; +import io.anuke.mindustry.ui.Links.*; import static io.anuke.mindustry.Vars.*; @@ -47,17 +48,17 @@ public class AboutDialog extends FloatingDialog{ continue; } - Table table = new Table("underline"); + Table table = new Table(Tex.underline); table.margin(0); table.table(img -> { - img.addImage("whiteui").height(h - 5).width(40f).color(link.color); + img.addImage().height(h - 5).width(40f).color(link.color); img.row(); - img.addImage("whiteui").height(5).width(40f).color(link.color.cpy().mul(0.8f, 0.8f, 0.8f, 1f)); + img.addImage().height(5).width(40f).color(link.color.cpy().mul(0.8f, 0.8f, 0.8f, 1f)); }).expandY(); table.table(i -> { - i.background("button-edge-3"); - i.addImage("icon-" + link.name).size(iconsize); + i.background(Tex.buttonEdge3); + i.addImage(Core.atlas.drawable("icon-" + link.name)); }).size(h - 5, h); table.table(inset -> { @@ -66,7 +67,7 @@ public class AboutDialog extends FloatingDialog{ inset.labelWrap(link.description).width(w - 100f).color(Color.LIGHT_GRAY).growX(); }).padLeft(8); - table.addImageButton("icon-link", iconsize, () -> { + table.addImageButton(Icon.link, () -> { if(!Core.net.openURI(link.link)){ ui.showErrorMessage("$linkfail"); Core.app.setClipboardText(link.link); @@ -98,7 +99,7 @@ public class AboutDialog extends FloatingDialog{ dialog.cont.add("$credits.text"); dialog.cont.row(); if(!contributors.isEmpty()){ - dialog.cont.addImage("whiteui").color(Pal.accent).fillX().height(3f).pad(3f); + dialog.cont.addImage().color(Pal.accent).fillX().height(3f).pad(3f); dialog.cont.row(); dialog.cont.add("$contributors"); dialog.cont.row(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java index 2462ec9fe4..c53cbc3ec7 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java @@ -1,8 +1,9 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.scene.ui.ScrollPane; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.mindustry.net.Administration.PlayerInfo; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.net.Administration.*; import static io.anuke.mindustry.Vars.*; @@ -32,12 +33,12 @@ public class AdminsDialog extends FloatingDialog{ } for(PlayerInfo info : netServer.admins.getAdmins()){ - Table res = new Table("button"); + Table res = new Table(Tex.button); res.margin(14f); res.labelWrap("[LIGHT_GRAY]" + info.lastName).width(w - h - 24f); res.add().growX(); - res.addImageButton("icon-cancel", iconsize, () -> { + res.addImageButton(Icon.cancel, () -> { ui.showConfirm("$confirm", "$confirmunadmin", () -> { netServer.admins.unAdminPlayer(info.id); playerGroup.all().each(player -> { diff --git a/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java index 9caad501c1..4a09b24b65 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java @@ -1,8 +1,9 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.scene.ui.ScrollPane; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.mindustry.net.Administration.PlayerInfo; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.net.Administration.*; import static io.anuke.mindustry.Vars.*; @@ -33,12 +34,12 @@ public class BansDialog extends FloatingDialog{ } for(PlayerInfo info : netServer.admins.getBanned()){ - Table res = new Table("button"); + Table res = new Table(Tex.button); res.margin(14f); res.labelWrap("IP: [LIGHT_GRAY]" + info.lastIP + "\n[]Name: [LIGHT_GRAY]" + info.lastName).width(w - h - 24f); res.add().growX(); - res.addImageButton("icon-cancel", iconsize, () -> { + res.addImageButton(Icon.cancel, () -> { ui.showConfirm("$confirm", "$confirmunban", () -> { netServer.admins.unbanPlayerID(info.id); setup(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/ColorPickDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/ColorPickDialog.java index 3ea7f3d3d4..54eb10ea33 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/ColorPickDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/ColorPickDialog.java @@ -1,20 +1,20 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.function.Consumer; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.input.KeyCode; -import io.anuke.arc.scene.ui.Dialog; -import io.anuke.arc.scene.ui.ImageButton; -import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.arc.function.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.input.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.ui.*; -import static io.anuke.mindustry.Vars.player; -import static io.anuke.mindustry.Vars.playerColors; +import static io.anuke.mindustry.Vars.*; public class ColorPickDialog extends Dialog{ private Consumer cons; public ColorPickDialog(){ - super("", "dialog"); + super(""); build(); } @@ -25,7 +25,7 @@ public class ColorPickDialog extends Dialog{ for(int i = 0; i < playerColors.length; i++){ Color color = playerColors[i]; - ImageButton button = table.addImageButton("whiteui", "clear-toggle", 34, () -> { + ImageButton button = table.addImageButton(Tex.whiteui, Style.clearToggleIbutton, 34, () -> { cons.accept(color); hide(); }).size(48).get(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/ControlsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/ControlsDialog.java index c63c845248..1031474167 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/ControlsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/ControlsDialog.java @@ -1,21 +1,19 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.Core; -import io.anuke.arc.input.KeyCode; +import io.anuke.arc.input.*; import io.anuke.arc.scene.ui.*; -import io.anuke.arc.util.Align; -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.graphics.Pal; +import io.anuke.arc.util.*; +import io.anuke.mindustry.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; public class ControlsDialog extends KeybindDialog{ public ControlsDialog(){ - setStyle(Core.scene.skin.get("dialog", WindowStyle.class)); - setFillParent(true); title.setAlignment(Align.center); titleTable.row(); - titleTable.add(new Image("whiteui")) + titleTable.add(new Image()) .growX().height(3f).pad(4f).get().setColor(Pal.accent); if(Vars.mobile){ cont.row(); @@ -26,7 +24,7 @@ public class ControlsDialog extends KeybindDialog{ @Override public void addCloseButton(){ - buttons.addImageTextButton("$back", "icon-arrow-left", 30f, this::hide).size(230f, 64f); + buttons.addImageTextButton("$back", Icon.arrowLeftSmall, this::hide).size(230f, 64f); keyDown(key -> { if(key == KeyCode.ESCAPE || key == KeyCode.BACK) diff --git a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java index 9fd1f6f847..df4735616f 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java @@ -8,6 +8,7 @@ import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.mindustry.*; import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.maps.*; import io.anuke.mindustry.ui.*; @@ -47,7 +48,7 @@ public class CustomGameDialog extends FloatingDialog{ maps.row(); } - ImageButton image = new ImageButton(new TextureRegion(map.texture), "clear"); + ImageButton image = new ImageButton(new TextureRegion(map.texture), Style.clearIbutton); image.margin(5); image.top(); @@ -59,14 +60,14 @@ public class CustomGameDialog extends FloatingDialog{ t.left(); for(Gamemode mode : Gamemode.all){ if(mode.valid(map) && Core.atlas.has("icon-mode-" + mode.name())){ - t.addImage("icon-mode-" + mode.name()).size(16f).pad(4f); + t.addImage(Core.atlas.drawable("icon-mode-" + mode.name())).size(16f).pad(4f); } } }).left(); image.row(); image.add(map.name()).pad(1f).growX().wrap().left().get().setEllipsis(true); image.row(); - image.addImage("whiteui", Pal.gray).growX().pad(3).height(4f); + image.addImage(Tex.whiteui, Pal.gray).growX().pad(3).height(4f); image.row(); image.add(img).size(images); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/DatabaseDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/DatabaseDialog.java index 1f5dfc8679..1eb87518e8 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/DatabaseDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/DatabaseDialog.java @@ -12,6 +12,7 @@ import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.game.Content; import io.anuke.mindustry.game.UnlockableContent; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.Pal; import io.anuke.mindustry.type.ContentType; @@ -43,7 +44,7 @@ public class DatabaseDialog extends FloatingDialog{ table.add("$content." + type.name() + ".name").growX().left().color(Pal.accent); table.row(); - table.addImage("whiteui").growX().pad(5).padLeft(0).padRight(0).height(3).color(Pal.accent); + table.addImage().growX().pad(5).padLeft(0).padRight(0).height(3).color(Pal.accent); table.row(); table.table(list -> { list.left(); @@ -55,8 +56,8 @@ public class DatabaseDialog extends FloatingDialog{ for(int i = 0; i < array.size; i++){ UnlockableContent unlock = (UnlockableContent)array.get(i); - Image image = unlocked(unlock) ? new Image(unlock.getContentIcon()) : new Image("icon-locked", Pal.gray); - list.add(image).size(unlocked(unlock) ? 8*4 : Vars.iconsize).pad(3); + Image image = unlocked(unlock) ? new Image(unlock.getContentIcon()) : new Image(Icon.lockedSmall, Pal.gray); + list.add(image).size(8*4).pad(3); ClickListener listener = new ClickListener(); image.addListener(listener); if(!Vars.mobile && unlocked(unlock)){ @@ -66,7 +67,7 @@ public class DatabaseDialog extends FloatingDialog{ if(unlocked(unlock)){ image.clicked(() -> Vars.ui.content.show(unlock)); - image.addListener(new Tooltip(t -> t.background("button").add(unlock.localizedName()))); + image.addListener(new Tooltip(t -> t.background(Tex.button).add(unlock.localizedName()))); } if((++count) % maxWidth == 0){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java index ae2976bb03..f6cb79d066 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java @@ -17,11 +17,13 @@ import io.anuke.arc.util.*; import io.anuke.mindustry.content.*; import io.anuke.mindustry.core.GameState.*; import io.anuke.mindustry.game.Saves.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.io.SaveIO.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.type.Zone.*; import io.anuke.mindustry.ui.*; +import io.anuke.mindustry.ui.Style; import io.anuke.mindustry.ui.TreeLayout.*; import static io.anuke.mindustry.Vars.*; @@ -33,7 +35,7 @@ public class DeployDialog extends FloatingDialog{ private Rectangle bounds = new Rectangle(); public DeployDialog(){ - super("", "fulldialog"); + super("", Style.fulldialogWindow); ZoneNode root = new ZoneNode(Zones.groundZero, null); @@ -45,7 +47,7 @@ public class DeployDialog extends FloatingDialog{ bounds.y += nodeSize*0.4f; addCloseButton(); - buttons.addImageTextButton("$techtree", "icon-tree", iconsize, () -> ui.tech.show()).size(230f, 64f); + buttons.addImageTextButton("$techtree", Icon.tree, () -> ui.tech.show()).size(230f, 64f); shown(this::setup); } @@ -85,7 +87,7 @@ public class DeployDialog extends FloatingDialog{ Stack sub = new Stack(); if(slot.getZone() != null){ - sub.add(new Table(f -> f.margin(4f).add(new Image("whiteui")).color(Color.fromGray(0.1f)).grow())); + sub.add(new Table(f -> f.margin(4f).add(new Image()).color(Color.fromGray(0.1f)).grow())); sub.add(new Table(f -> f.margin(4f).add(new Image(slot.getZone().preview).setScaling(Scaling.fit)).update(img -> { TextureRegionDrawable draw = (TextureRegionDrawable)img.getDrawable(); @@ -100,7 +102,7 @@ public class DeployDialog extends FloatingDialog{ }).color(Color.DARK_GRAY).grow())); } - TextButton button = Elements.newButton(Core.bundle.format("resume", slot.getZone().localizedName()), "square", () -> { + TextButton button = Elements.newButton(Core.bundle.format("resume", slot.getZone().localizedName()), Style.squareTbutton, () -> { hide(); ui.loadAnd(() -> { logic.reset(); @@ -173,10 +175,10 @@ public class DeployDialog extends FloatingDialog{ button.clicked(() -> info.show(zone)); if(zone.unlocked() && !hidden(zone)){ - button.labelWrap(zone.localizedName()).style("outline").width(140).growX().get().setAlignment(Align.center); + button.labelWrap(zone.localizedName()).style(Style.outlineLabel).width(140).growX().get().setAlignment(Align.center); }else{ Consumer flasher = zone.canUnlock() && !hidden(zone) ? e -> e.update(() -> e.getColor().set(Color.WHITE).lerp(Pal.accent, Mathf.absin(3f, 1f))) : e -> {}; - flasher.accept(button.addImage("icon-locked").get()); + flasher.accept(button.addImage(Icon.locked).get()); button.row(); flasher.accept(button.add("$locked").get()); } @@ -199,7 +201,7 @@ public class DeployDialog extends FloatingDialog{ stack.add(new Table(t -> t.margin(4f).add(new Image(node.zone.preview).setScaling(Scaling.stretch)).color(node.zone.unlocked() ? Color.DARK_GRAY : Color.fromGray(0.2f)).grow())); stack.update(() -> stack.setPosition(node.x + panX + width / 2f, node.y + panY + height / 2f, Align.center)); - Button button = new Button("square"); + Button button = new Button(Tex.buttonSquare); buildButton(node.zone, button); stack.add(button); addChild(stack); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/DiscordDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/DiscordDialog.java index cc7dfbfb2b..2b87ed6a7d 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/DiscordDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/DiscordDialog.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.ui.dialogs; import io.anuke.arc.Core; import io.anuke.arc.graphics.Color; import io.anuke.arc.scene.ui.Dialog; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.Pal; import static io.anuke.mindustry.Vars.*; @@ -10,7 +11,7 @@ import static io.anuke.mindustry.Vars.*; public class DiscordDialog extends Dialog{ public DiscordDialog(){ - super("", "dialog"); + super(""); float h = 70f; @@ -19,17 +20,17 @@ public class DiscordDialog extends Dialog{ Color color = Color.valueOf("7289da"); cont.table(t -> { - t.background("button").margin(0); + t.background(Tex.button).margin(0); t.table(img -> { - img.addImage("whiteui").height(h - 5).width(40f).color(color); + img.addImage().height(h - 5).width(40f).color(color); img.row(); - img.addImage("whiteui").height(5).width(40f).color(color.cpy().mul(0.8f, 0.8f, 0.8f, 1f)); + img.addImage().height(5).width(40f).color(color.cpy().mul(0.8f, 0.8f, 0.8f, 1f)); }).expandY(); t.table(i -> { - i.background("button"); - i.addImage("icon-discord").size(iconsize); + i.background(Tex.button); + i.addImage(Icon.discord); }).size(h).left(); t.add("$discord").color(Pal.accent).growX().padLeft(10f); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java b/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java index f33e924bab..41efd29bca 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java @@ -10,10 +10,12 @@ import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.arc.util.pooling.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.ui.*; import java.util.*; -import static io.anuke.mindustry.Vars.*; +import static io.anuke.mindustry.Vars.platform; public class FileChooser extends FloatingDialog{ private static final FileHandle homeDirectory = Core.files.absolute(OS.isMac ? OS.getProperty("user.home") + "/Downloads/" : Core.files.getExternalStoragePath()); @@ -90,10 +92,7 @@ public class FileChooser extends FloatingDialog{ Table icontable = new Table(); - float isize = iconsize; - - ImageButton up = new ImageButton("icon-folder-parent"); - up.resizeImage(isize); + ImageButton up = new ImageButton(Icon.folderParent); up.clicked(() -> { directory = directory.parent(); updateFiles(true); @@ -104,19 +103,15 @@ public class FileChooser extends FloatingDialog{ up.setDisabled(true); } - ImageButton back = new ImageButton("icon-arrow-left"); - back.resizeImage(isize); - - ImageButton forward = new ImageButton("icon-arrow-right"); - forward.resizeImage(isize); + ImageButton back = new ImageButton(Icon.arrowLeft); + ImageButton forward = new ImageButton(Icon.arrowRight); forward.clicked(() -> stack.forward()); back.clicked(() -> stack.back()); forward.setDisabled(() -> !stack.canForward()); back.setDisabled(() -> !stack.canBack()); - ImageButton home = new ImageButton("icon-home"); - home.resizeImage(isize); + ImageButton home = new ImageButton(Icon.home); home.clicked(() -> { directory = homeDirectory; lastDirectory = directory; @@ -181,7 +176,7 @@ public class FileChooser extends FloatingDialog{ GlyphLayout layout = Pools.obtain(GlyphLayout.class, GlyphLayout::new); - layout.setText(Core.scene.skin.getFont("default"), navigation.getText()); + layout.setText(Fonts.def, navigation.getText()); if(layout.width < navigation.getWidth()){ navigation.setCursorPosition(0); @@ -197,15 +192,15 @@ public class FileChooser extends FloatingDialog{ //macs are confined to the Downloads/ directory if(!OS.isMac){ - Image upimage = new Image("icon-folder-parent-small"); - TextButton upbutton = new TextButton(".." + directory.toString(), "clear-toggle"); + Image upimage = new Image(Icon.folderParentSmall); + TextButton upbutton = new TextButton(".." + directory.toString(), Style.clearToggleTbutton); upbutton.clicked(() -> { directory = directory.parent(); lastDirectory = directory; updateFiles(true); }); - upbutton.left().add(upimage).padRight(4f).size(iconsizesmall).padLeft(4); + upbutton.left().add(upimage).padRight(4f).padLeft(4); upbutton.getLabel().setAlignment(Align.left); upbutton.getCells().reverse(); @@ -221,7 +216,7 @@ public class FileChooser extends FloatingDialog{ String filename = file.name(); - TextButton button = new TextButton(shorten(filename), "clear-toggle"); + TextButton button = new TextButton(shorten(filename), Style.clearToggleTbutton); group.add(button); button.clicked(() -> { @@ -239,9 +234,9 @@ public class FileChooser extends FloatingDialog{ button.setChecked(filename.equals(filefield.getText())); }); - Image image = new Image(file.isDirectory() ? "icon-folder-small" : "icon-file-text-small"); + Image image = new Image(file.isDirectory() ? Icon.folderSmall : Icon.fileTextSmall); - button.add(image).padRight(4f).padLeft(4).size(iconsizesmall); + button.add(image).padRight(4f).padLeft(4); button.getCells().reverse(); files.top().left().add(button).align(Align.topLeft).fillX().expandX() .height(50).pad(2).padTop(0).padBottom(0).colspan(2); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java index 8a26ae5269..de9f1ad85e 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java @@ -8,7 +8,6 @@ import io.anuke.mindustry.core.GameState.*; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; -import io.anuke.mindustry.net.Net; import static io.anuke.mindustry.Vars.*; @@ -16,12 +15,12 @@ public class FloatingDialog extends Dialog{ private boolean wasPaused; protected boolean shouldPause; - public FloatingDialog(String title, String style){ + public FloatingDialog(String title, DialogStyle style){ super(title, style); setFillParent(true); this.title.setAlignment(Align.center); titleTable.row(); - titleTable.addImage("whiteui", Pal.accent) + titleTable.addImage(Tex.whiteui, Pal.accent) .growX().height(3f).pad(4f); hidden(() -> { @@ -42,7 +41,7 @@ public class FloatingDialog extends Dialog{ } public FloatingDialog(String title){ - this(title, "dialog"); + this(title, Core.scene.getStyle(DialogStyle.class)); } protected void onResize(Runnable run){ @@ -56,7 +55,7 @@ public class FloatingDialog extends Dialog{ @Override public void addCloseButton(){ - buttons.addImageTextButton("$back", "icon-arrow-left", iconsize, this::hide).size(210f, 64f); + buttons.addImageTextButton("$back", Icon.arrowLeft, this::hide).size(210f, 64f); keyDown(key -> { if(key == KeyCode.ESCAPE || key == KeyCode.BACK){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java index afaa94e617..b19b6bb1dd 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java @@ -5,6 +5,8 @@ import io.anuke.arc.graphics.*; import io.anuke.arc.scene.ui.*; import io.anuke.arc.util.*; import io.anuke.mindustry.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.ui.*; import java.io.*; @@ -27,7 +29,7 @@ public class HostDialog extends FloatingDialog{ ui.listfrag.rebuild(); }).grow().pad(8).get().setMaxLength(40); - ImageButton button = t.addImageButton("whiteui", "clear-full", 40, () -> { + ImageButton button = t.addImageButton(Tex.whiteui, Style.clearFullIbutton, 40, () -> { new ColorPickDialog().show(color -> { player.color.set(color); Core.settings.put("color-0", Color.rgba8888(color)); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java index ef903b0ebc..b902bd3184 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java @@ -6,14 +6,15 @@ import io.anuke.arc.collection.*; import io.anuke.arc.graphics.*; import io.anuke.arc.input.*; import io.anuke.arc.math.*; -import io.anuke.arc.scene.style.*; import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.mindustry.*; import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.net.*; import io.anuke.mindustry.net.Packets.*; +import io.anuke.mindustry.ui.*; import static io.anuke.mindustry.Vars.*; @@ -98,7 +99,7 @@ public class JoinDialog extends FloatingDialog{ //why are java lambdas this bad TextButton[] buttons = {null}; - TextButton button = buttons[0] = remote.addButton("[accent]" + server.displayIP(), "clear", () -> { + TextButton button = buttons[0] = remote.addButton("[accent]" + server.displayIP(), Style.clearTbutton, () -> { if(!buttons[0].childrenPressed()){ if(server.lastHost != null && server.lastHost.version != Version.build && Version.build != -1 && server.lastHost.version != -1){ ui.showInfo("[scarlet]" + (server.lastHost.version > Version.build ? KickReason.clientOutdated : KickReason.serverOutdated).toString() + "\n[]" + @@ -117,7 +118,7 @@ public class JoinDialog extends FloatingDialog{ inner.add(button.getLabel()).growX(); - inner.addImageButton("icon-arrow-up-small", "empty", iconsizesmall, () -> { + inner.addImageButton(Icon.arrowUpSmall, Style.emptyIbutton, () -> { int index = servers.indexOf(server); if(index > 0){ servers.remove(index); @@ -136,16 +137,16 @@ public class JoinDialog extends FloatingDialog{ }).margin(3f).padTop(6f).top().right(); - inner.addImageButton("icon-loading-small", "empty", iconsizesmall, () -> { + inner.addImageButton(Icon.loadingSmall, Style.emptyIbutton, () -> { refreshServer(server); }).margin(3f).padTop(6f).top().right(); - inner.addImageButton("icon-pencil-small", "empty", iconsizesmall, () -> { + inner.addImageButton(Icon.pencilSmall, Style.emptyIbutton, () -> { renaming = server; add.show(); }).margin(3f).padTop(6f).top().right(); - inner.addImageButton("icon-trash-16-small", "empty", iconsizesmall, () -> { + inner.addImageButton(Icon.trash16Small, Style.emptyIbutton, () -> { ui.showConfirm("$confirm", "$server.delete", () -> { servers.removeValue(server, true); saveServers(); @@ -236,7 +237,7 @@ public class JoinDialog extends FloatingDialog{ Core.settings.save(); }).grow().pad(8).get().setMaxLength(maxNameLength); - ImageButton button = t.addImageButton("whiteui", "clear-full", 40, () -> { + ImageButton button = t.addImageButton(Tex.whiteui, Style.clearFullIbutton, 40, () -> { new ColorPickDialog().show(color -> { player.color.set(color); Core.settings.put("color-0", Color.rgba8888(color)); @@ -248,7 +249,7 @@ public class JoinDialog extends FloatingDialog{ cont.row(); cont.add(pane).width(w + 38).pad(0); cont.row(); - cont.addCenteredImageTextButton("$server.add", "icon-add", iconsize, () -> { + cont.addCenteredImageTextButton("$server.add", Icon.add, () -> { renaming = null; add.show(); }).marginLeft(6).width(w).height(80f).update(button -> { @@ -273,8 +274,8 @@ public class JoinDialog extends FloatingDialog{ totalHosts = 0; local.clear(); - local.background((Drawable)null); - local.table("button", t -> t.label(() -> "[accent]" + Core.bundle.get("hosts.discovering.any") + Strings.animated(Time.time(), 4, 10f, ".")).pad(10f)).growX(); + local.background(null); + local.table(Tex.button, t -> t.label(() -> "[accent]" + Core.bundle.get("hosts.discovering.any") + Strings.animated(Time.time(), 4, 10f, ".")).pad(10f)).growX(); net.discoverServers(this::addLocalHost, this::finishLocalHosts); for(String host : defaultServers){ net.pingHost(host, port, this::addLocalHost, e -> {}); @@ -284,12 +285,12 @@ public class JoinDialog extends FloatingDialog{ void finishLocalHosts(){ if(totalHosts == 0){ local.clear(); - local.background("button"); + local.background(Tex.button); local.add("$hosts.none").pad(10f); local.add().growX(); - local.addImageButton("icon-loading", iconsize, this::refreshLocal).pad(-12f).padLeft(0).size(70f); + local.addImageButton(Icon.loading, this::refreshLocal).pad(-12f).padLeft(0).size(70f); }else{ - local.background((Drawable)null); + local.background(null); } } @@ -297,13 +298,13 @@ public class JoinDialog extends FloatingDialog{ if(totalHosts == 0){ local.clear(); } - local.background((Drawable)null); + local.background(null); totalHosts++; float w = targetWidth(); local.row(); - TextButton button = local.addButton("", "clear", () -> connect(host.address, port)) + TextButton button = local.addButton("", Style.clearTbutton, () -> connect(host.address, port)) .width(w).pad(5f).get(); button.clearChildren(); buildServer(host, button); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java index f1a1a15ac2..94185fca0e 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java @@ -5,6 +5,7 @@ import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.util.Log; import io.anuke.arc.util.Strings; +import io.anuke.mindustry.ui.*; import java.util.Locale; @@ -29,7 +30,7 @@ public class LanguageDialog extends FloatingDialog{ ButtonGroup group = new ButtonGroup<>(); for(Locale loc : locales){ - TextButton button = new TextButton(Strings.capitalize(loc.getDisplayName(loc)), "clear-toggle"); + TextButton button = new TextButton(Strings.capitalize(loc.getDisplayName(loc)), Style.clearToggleTbutton); button.clicked(() -> { if(getLocale().equals(loc)) return; Core.settings.put("locale", loc.toString()); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java index 0b41389fce..fde145fdf2 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java @@ -11,9 +11,11 @@ import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.mindustry.core.GameState.*; import io.anuke.mindustry.game.Saves.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.io.*; import io.anuke.mindustry.io.SaveIO.*; import io.anuke.mindustry.ui.*; +import io.anuke.mindustry.ui.Style; import java.io.*; @@ -57,7 +59,7 @@ public class LoadDialog extends FloatingDialog{ for(SaveSlot slot : array){ if(slot.isHidden()) continue; - TextButton button = new TextButton("", "clear"); + TextButton button = new TextButton("", Style.clearTbutton); button.getLabel().remove(); button.clearChildren(); @@ -69,45 +71,44 @@ public class LoadDialog extends FloatingDialog{ title.table(t -> { t.right(); - t.addImageButton("icon-floppy", "emptytoggle", iconsize, () -> { + t.addImageButton(Icon.floppy, Style.emptytoggleIbutton, () -> { slot.setAutosave(!slot.isAutosave()); }).checked(slot.isAutosave()).right(); - t.addImageButton("icon-trash", "empty", iconsize, () -> { + t.addImageButton(Icon.trash, Style.emptyIbutton, () -> { ui.showConfirm("$confirm", "$save.delete.confirm", () -> { slot.delete(); setup(); }); - }).size(iconsize).right(); + }).right(); - t.addImageButton("icon-pencil", "empty", iconsize, () -> { + t.addImageButton(Icon.pencil, Style.emptyIbutton, () -> { ui.showTextInput("$save.rename", "$save.rename.text", slot.getName(), text -> { slot.setName(text); setup(); }); - }).size(iconsize).right(); + }).right(); - t.addImageButton("icon-save", "empty", iconsize, () -> { - if(!ios){ - platform.showFileChooser(false, saveExtension, file -> { + t.addImageButton(Icon.save, Style.emptyIbutton, () -> { + if(!ios){ + platform.showFileChooser(false, saveExtension, file -> { + try{ + slot.exportFile(file); + setup(); + }catch(IOException e){ + ui.showException("save.export.fail", e); + } + }); + }else{ try{ + FileHandle file = Core.files.local("save-" + slot.getName() + "." + saveExtension); slot.exportFile(file); - setup(); - }catch(IOException e){ + platform.shareFile(file); + }catch(Exception e){ ui.showException("save.export.fail", e); } - }); - }else{ - try{ - FileHandle file = Core.files.local("save-" + slot.getName() + "." + saveExtension); - slot.exportFile(file); - platform.shareFile(file); - }catch(Exception e){ - ui.showException("save.export.fail", e); } - } - }).size(iconsize).right(); - + }).right(); }).padRight(-10).growX(); }).growX().colspan(2); @@ -169,7 +170,7 @@ public class LoadDialog extends FloatingDialog{ if(ios) return; - slots.addImageTextButton("$save.import", "icon-add", iconsize, () -> { + slots.addImageTextButton("$save.import", Icon.add, () -> { platform.showFileChooser(true, saveExtension, file -> { if(SaveIO.isSaveValid(file)){ try{ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java index eb05a7502f..e93220ff0b 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java @@ -6,7 +6,9 @@ import io.anuke.arc.function.*; import io.anuke.arc.input.*; import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.type.*; +import io.anuke.mindustry.ui.*; import static io.anuke.mindustry.Vars.*; @@ -44,7 +46,7 @@ public class LoadoutDialog extends FloatingDialog{ FloatingDialog dialog = new FloatingDialog(""); dialog.setFillParent(false); for(Item item : content.items().select(item -> filter.test(item) && item.type == ItemType.material && supplier.get().find(stack -> stack.item == item) == null)){ - TextButton button = dialog.cont.addButton("", "clear", () -> { + TextButton button = dialog.cont.addButton("", Style.clearTbutton, () -> { dialog.hide(); supplier.get().add(new ItemStack(item, 0)); updater.run(); @@ -67,7 +69,7 @@ public class LoadoutDialog extends FloatingDialog{ }).size(210f, 64f); cont.row(); - cont.addImageTextButton("$back", "icon-arrow-left", iconsize, this::hide).size(210f, 64f); + cont.addImageTextButton("$back", Icon.arrowLeft, this::hide).size(210f, 64f); } public void show(int capacity, Supplier> supplier, Runnable reseter, Runnable updater, Runnable hider, Predicate filter){ @@ -87,17 +89,17 @@ public class LoadoutDialog extends FloatingDialog{ int step = 50; for(ItemStack stack : supplier.get()){ - items.addButton("x", "clear-partial", () -> { + items.addButton("x", Style.clearPartialTbutton, () -> { supplier.get().remove(stack); updater.run(); setup(); }).size(bsize); - items.addButton("-", "clear-partial", () -> { + items.addButton("-", Style.clearPartialTbutton, () -> { stack.amount = Math.max(stack.amount - step, 0); updater.run(); }).size(bsize); - items.addButton("+", "clear-partial", () -> { + items.addButton("+", Style.clearPartialTbutton, () -> { stack.amount = Math.min(stack.amount + step, capacity); updater.run(); }).size(bsize); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java index 26ed6bf1c9..db064916b5 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java @@ -6,6 +6,7 @@ import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.maps.*; import io.anuke.mindustry.ui.*; @@ -55,7 +56,7 @@ public class MapPlayDialog extends FloatingDialog{ for(Gamemode mode : Gamemode.values()){ if(mode.hidden) continue; - modes.addButton(mode.toString(), "toggle", () -> { + modes.addButton(mode.toString(), Style.toggleTbutton, () -> { selectedGamemode = mode; rules = map.applyRules(mode); }).update(b -> b.setChecked(selectedGamemode == mode)).size(140f, 54f).disabled(!mode.valid(map)); @@ -66,7 +67,7 @@ public class MapPlayDialog extends FloatingDialog{ cont.add(selmode); cont.row(); - cont.addImageTextButton("$customize", "icon-tools-small", iconsizesmall, () -> dialog.show(rules, () -> rules = map.applyRules(selectedGamemode))).width(230); + cont.addImageTextButton("$customize", Icon.toolsSmall, () -> dialog.show(rules, () -> rules = map.applyRules(selectedGamemode))).width(230); cont.row(); cont.add(new BorderImage(map.texture, 3f)).size(mobile && !Core.graphics.isPortrait() ? 150f : 250f).get().setScaling(Scaling.fit); //only maps with survival are valid for high scores @@ -78,7 +79,7 @@ public class MapPlayDialog extends FloatingDialog{ buttons.clearChildren(); addCloseButton(); - buttons.addImageTextButton("$play", "icon-play", iconsize, () -> { + buttons.addImageTextButton("$play", Icon.play, () -> { control.playMap(map, rules); hide(); ui.custom.hide(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java index 6073130c89..d457241158 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java @@ -9,6 +9,7 @@ import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.mindustry.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.io.*; import io.anuke.mindustry.maps.*; @@ -43,13 +44,13 @@ public class MapsDialog extends FloatingDialog{ buttons.clearChildren(); if(Core.graphics.isPortrait() && !ios){ - buttons.addImageTextButton("$back", "icon-arrow-left", iconsize, this::hide).size(210f*2f, 64f).colspan(2); + buttons.addImageTextButton("$back", Icon.arrowLeft, this::hide).size(210f*2f, 64f).colspan(2); buttons.row(); }else{ - buttons.addImageTextButton("$back", "icon-arrow-left", iconsize, this::hide).size(210f, 64f); + buttons.addImageTextButton("$back", Icon.arrowLeft, this::hide).size(210f, 64f); } - buttons.addImageTextButton("$editor.newmap", "icon-add", iconsize, () -> { + buttons.addImageTextButton("$editor.newmap", Icon.add, () -> { ui.showTextInput("$editor.newmap", "$name", "", text -> { ui.loadAnd(() -> { hide(); @@ -60,7 +61,7 @@ public class MapsDialog extends FloatingDialog{ }).size(210f, 64f); if(!ios){ - buttons.addImageTextButton("$editor.importmap", "icon-load", iconsize, () -> { + buttons.addImageTextButton("$editor.importmap", Icon.load, () -> { platform.showFileChooser(true, mapExtension, file -> { ui.loadAnd(() -> { maps.tryCatchMapError(() -> { @@ -127,12 +128,12 @@ public class MapsDialog extends FloatingDialog{ maps.row(); } - TextButton button = maps.addButton("", "clear", () -> showMapInfo(map)).width(mapsize).pad(8).get(); + TextButton button = maps.addButton("", Style.clearTbutton, () -> showMapInfo(map)).width(mapsize).pad(8).get(); button.clearChildren(); button.margin(9); button.add(map.name()).width(mapsize - 18f).center().get().setEllipsis(true); button.row(); - button.addImage("whiteui").growX().pad(4).color(Pal.gray); + button.addImage().growX().pad(4).color(Pal.gray); button.row(); button.stack(new Image(map.texture).setScaling(Scaling.fit), new BorderImage(map.texture).setScaling(Scaling.fit)).size(mapsize - 20f); button.row(); @@ -159,7 +160,7 @@ public class MapsDialog extends FloatingDialog{ table.stack(new Image(map.texture).setScaling(Scaling.fit), new BorderImage(map.texture).setScaling(Scaling.fit)).size(mapsize); - table.table("flat", desc -> { + table.table(Style.flat, desc -> { desc.top(); Table t = new Table(); t.margin(6); @@ -185,7 +186,7 @@ public class MapsDialog extends FloatingDialog{ table.row(); - table.addImageTextButton("$editor.openin", "icon-load-map-small", iconsizesmall, () -> { + table.addImageTextButton("$editor.openin", Icon.loadMapSmall, () -> { try{ Vars.ui.editor.beginEditMap(map.file); dialog.hide(); @@ -196,7 +197,7 @@ public class MapsDialog extends FloatingDialog{ } }).fillX().height(54f).marginLeft(10); - table.addImageTextButton("$delete", "icon-trash-16-small", iconsizesmall, () -> { + table.addImageTextButton("$delete", Icon.trash16Small, () -> { ui.showConfirm("$confirm", Core.bundle.format("map.delete", map.name()), () -> { maps.removeMap(map); dialog.hide(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java index 0d90c9e517..1607f9c38a 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java @@ -6,6 +6,7 @@ import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.input.*; import io.anuke.arc.scene.event.*; import io.anuke.arc.scene.ui.layout.*; +import io.anuke.mindustry.gen.*; import static io.anuke.mindustry.Vars.renderer; @@ -26,7 +27,7 @@ public class MinimapDialog extends FloatingDialog{ void setup(){ cont.clearChildren(); - cont.table("pane", t -> { + cont.table(Tex.pane,t -> { t.addRect((x, y, width, height) -> { if(renderer.minimap.getRegion() == null) return; Draw.color(Color.WHITE); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java index d3e138d436..cebcb9bbee 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.ui.dialogs; import io.anuke.arc.*; import io.anuke.arc.input.*; import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.gen.*; import static io.anuke.mindustry.Vars.*; @@ -71,24 +72,22 @@ public class PausedDialog extends FloatingDialog{ }else{ cont.defaults().size(120f).pad(5); - float isize = iconsize; - - cont.addRowImageTextButton("$back", "icon-play-2", isize, this::hide); - cont.addRowImageTextButton("$settings", "icon-tools", isize, ui.settings::show); + cont.addRowImageTextButton("$back", Icon.play2, this::hide); + cont.addRowImageTextButton("$settings", Icon.tools, ui.settings::show); if(!world.isZone() && !state.isEditor()){ - cont.addRowImageTextButton("$save", "icon-save", isize, save::show); + cont.addRowImageTextButton("$save", Icon.save, save::show); cont.row(); - cont.addRowImageTextButton("$load", "icon-load", isize, load::show).disabled(b -> net.active()); + cont.addRowImageTextButton("$load", Icon.load, load::show).disabled(b -> net.active()); }else{ cont.row(); } - cont.addRowImageTextButton("$hostserver.mobile", "icon-host", isize, ui.host::show).disabled(b -> net.active()); + cont.addRowImageTextButton("$hostserver.mobile", Icon.host, ui.host::show).disabled(b -> net.active()); - cont.addRowImageTextButton("$quit", "icon-quit", isize, this::showQuitConfirm); + cont.addRowImageTextButton("$quit", Icon.quit, this::showQuitConfirm); } } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SaveDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SaveDialog.java index 8f91999b6e..68b22313b9 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SaveDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SaveDialog.java @@ -5,6 +5,7 @@ import io.anuke.arc.scene.ui.TextButton; import io.anuke.arc.util.Time; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.game.Saves.SaveSlot; +import io.anuke.mindustry.gen.*; import static io.anuke.mindustry.Vars.*; @@ -22,7 +23,7 @@ public class SaveDialog extends LoadDialog{ public void addSetup(){ slots.row(); - slots.addImageTextButton("$save.new", "icon-add", 14 * 3, () -> + slots.addImageTextButton("$save.new", Icon.add, () -> ui.showTextInput("$save", "$save.newslot", 30, "", text -> { ui.loadAnd("$saving", () -> { control.saves.addSave(text); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java index abff329f77..f770921eb4 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -10,11 +10,13 @@ import io.anuke.arc.scene.*; import io.anuke.arc.scene.event.*; import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.SettingsDialog.SettingsTable.*; +import io.anuke.arc.scene.ui.TextButton.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.mindustry.core.GameState.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.ui.*; import static io.anuke.arc.Core.bundle; import static io.anuke.mindustry.Vars.*; @@ -30,8 +32,6 @@ public class SettingsMenuDialog extends SettingsDialog{ private boolean wasPaused; public SettingsMenuDialog(){ - setStyle(Core.scene.skin.get("dialog", WindowStyle.class)); - hidden(() -> { Sounds.back.play(); if(!state.is(State.menu)){ @@ -53,13 +53,13 @@ public class SettingsMenuDialog extends SettingsDialog{ setFillParent(true); title.setAlignment(Align.center); titleTable.row(); - titleTable.add(new Image("whiteui")).growX().height(3f).pad(4f).get().setColor(Pal.accent); + titleTable.add(new Image()).growX().height(3f).pad(4f).get().setColor(Pal.accent); cont.clearChildren(); cont.remove(); buttons.remove(); - menu = new Table("button"); + menu = new Table(Tex.button); game = new SettingsTable(); graphics = new SettingsTable(); @@ -77,9 +77,9 @@ public class SettingsMenuDialog extends SettingsDialog{ dataDialog = new FloatingDialog("$settings.data"); dataDialog.addCloseButton(); - dataDialog.cont.table("button", t -> { + dataDialog.cont.table(Tex.button, t -> { t.defaults().size(240f, 60f).left(); - String style = "clear"; + TextButtonStyle style = Style.clearTbutton; t.addButton("$settings.cleardata", style, () -> ui.showConfirm("$confirm", "$settings.clearall.confirm", () -> { ObjectMap map = new ObjectMap<>(); @@ -177,7 +177,7 @@ public class SettingsMenuDialog extends SettingsDialog{ void rebuildMenu(){ menu.clearChildren(); - String style = "clear"; + TextButtonStyle style = Style.clearTbutton; menu.defaults().size(300f, 60f); menu.addButton("$settings.game", style, () -> visible(0)); @@ -317,7 +317,7 @@ public class SettingsMenuDialog extends SettingsDialog{ @Override public void addCloseButton(){ - buttons.addImageTextButton("$back", "icon-arrow-left", 30f, () -> { + buttons.addImageTextButton("$back", Icon.arrowLeftSmaller, () -> { if(prefs.getChildren().first() != menu){ back(); }else{ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java index 268c3aa8db..70e8a52a53 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java @@ -19,8 +19,9 @@ import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.ui.*; +import io.anuke.mindustry.ui.Style; import io.anuke.mindustry.ui.TreeLayout.*; -import io.anuke.mindustry.world.Block.*; +import io.anuke.mindustry.world.*; import static io.anuke.mindustry.Vars.*; @@ -47,7 +48,7 @@ public class TechTreeDialog extends FloatingDialog{ addCloseButton(); - buttons.addImageTextButton("$database", "icon-database", iconsize, () -> { + buttons.addImageTextButton("$database", Icon.database, () -> { hide(); ui.database.show(); }).size(210f, 64f); @@ -142,7 +143,7 @@ public class TechTreeDialog extends FloatingDialog{ infoTable.touchable(Touchable.enabled); for(TechTreeNode node : nodes){ - ImageButton button = new ImageButton(node.node.block.icon(Icon.medium), "node"); + ImageButton button = new ImageButton(node.node.block.icon(Block.Icon.medium), Style.nodeIbutton); button.visible(() -> node.visible); button.clicked(() -> { if(mobile){ @@ -186,9 +187,9 @@ public class TechTreeDialog extends FloatingDialog{ button.update(() -> { float offset = (Core.graphics.getHeight() % 2) / 2f; button.setPosition(node.x + panX + width / 2f, node.y + panY + height / 2f + offset, Align.center); - button.getStyle().up = Core.scene.skin.getDrawable(!locked(node.node) ? "button-over" : !data.hasItems(node.node.requirements) ? "button-red" : "button"); + button.getStyle().up = !locked(node.node) ? Tex.buttonOver : !data.hasItems(node.node.requirements) ? Tex.buttonRed : Tex.button; ((TextureRegionDrawable)button.getStyle().imageUp) - .setRegion(node.visible ? node.node.block.icon(Icon.medium) : Core.atlas.find("icon-locked")); + .setRegion(node.visible ? node.node.block.icon(Block.Icon.medium) : Core.atlas.find("icon-locked")); button.getImage().setColor(!locked(node.node) ? Color.WHITE : Color.GRAY); }); addChild(button); @@ -257,12 +258,12 @@ public class TechTreeDialog extends FloatingDialog{ infoTable.update(() -> infoTable.setPosition(button.getX() + button.getWidth(), button.getY() + button.getHeight(), Align.topLeft)); infoTable.left(); - infoTable.background("button").margin(8f); + infoTable.background(Tex.button).margin(8f); infoTable.table(b -> { b.margin(0).left().defaults().left(); - b.addImageButton("icon-info-small", "clear", iconsizesmall, () -> ui.content.show(node.block)).growY().width(50f); + b.addImageButton(Icon.infoSmall, Style.clearIbutton, () -> ui.content.show(node.block)).growY().width(50f); b.add().grow(); b.table(desc -> { desc.left().defaults().left(); @@ -289,7 +290,7 @@ public class TechTreeDialog extends FloatingDialog{ if(mobile && locked(node)){ b.row(); - b.addImageTextButton("$research", "icon-check-small", "node", iconsizesmall, () -> unlock(node)) + b.addImageTextButton("$research", Icon.checkSmall, Style.nodeTbutton, () -> unlock(node)) .disabled(i -> !data.hasItems(node.requirements)).growX().height(44f).colspan(3); } }); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/TraceDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/TraceDialog.java index 354156e954..6635da8a45 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/TraceDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/TraceDialog.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.ui.dialogs; import io.anuke.arc.Core; import io.anuke.arc.scene.ui.layout.Table; import io.anuke.mindustry.entities.type.Player; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.net.Administration.TraceInfo; public class TraceDialog extends FloatingDialog{ @@ -17,7 +18,7 @@ public class TraceDialog extends FloatingDialog{ public void show(Player player, TraceInfo info){ cont.clear(); - Table table = new Table("clear"); + Table table = new Table(Tex.clear); table.margin(14); table.defaults().pad(1); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/ZoneInfoDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/ZoneInfoDialog.java index 3c5f9a6d18..5ef7aee77b 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/ZoneInfoDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/ZoneInfoDialog.java @@ -10,7 +10,6 @@ import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.type.Zone.*; import io.anuke.mindustry.world.*; -import io.anuke.mindustry.world.Block.*; import static io.anuke.mindustry.Vars.*; @@ -55,7 +54,7 @@ public class ZoneInfoDialog extends FloatingDialog{ cont.pane(cont -> { if(zone.locked()){ - cont.addImage("icon-locked"); + cont.addImage(Icon.locked); cont.row(); cont.add("$locked").padBottom(6); cont.row(); @@ -68,9 +67,9 @@ public class ZoneInfoDialog extends FloatingDialog{ r.add("$complete").colspan(2).left(); r.row(); for(ZoneRequirement other : zone.zoneRequirements){ - r.addImage("icon-terrain").padRight(4); + r.addImage(Icon.terrain).padRight(4); r.add(Core.bundle.format("zone.requirement", other.wave, other.zone.localizedName())).color(Color.LIGHT_GRAY); - r.addImage(other.zone.bestWave() >= other.wave ? "icon-check-small" : "icon-cancel-small", other.zone.bestWave() >= other.wave ? Color.LIGHT_GRAY : Color.SCARLET).padLeft(3); + r.addImage(other.zone.bestWave() >= other.wave ? Icon.checkSmall : Icon.cancelSmall, other.zone.bestWave() >= other.wave ? Color.LIGHT_GRAY : Color.SCARLET).padLeft(3); r.row(); } }); @@ -83,9 +82,9 @@ public class ZoneInfoDialog extends FloatingDialog{ r.add("$research.list").colspan(2).left(); r.row(); for(Block block : zone.blockRequirements){ - r.addImage(block.icon(Icon.small)).size(8 * 3).padRight(4); + r.addImage(block.icon(Block.Icon.small)).size(8 * 3).padRight(4); r.add(block.localizedName).color(Color.LIGHT_GRAY); - r.addImage(data.isUnlocked(block) ? "icon-check-small" : "icon-cancel-small", data.isUnlocked(block) ? Color.LIGHT_GRAY : Color.SCARLET).padLeft(3); + r.addImage(data.isUnlocked(block) ? Icon.checkSmall : Icon.cancelSmall, data.isUnlocked(block) ? Color.LIGHT_GRAY : Color.SCARLET).padLeft(3); r.row(); } @@ -96,7 +95,7 @@ public class ZoneInfoDialog extends FloatingDialog{ }else{ cont.add(zone.localizedName()).color(Pal.accent).growX().center(); cont.row(); - cont.addImage("whiteui").color(Pal.accent).height(3).pad(6).growX(); + cont.addImage().color(Pal.accent).height(3).pad(6).growX(); cont.row(); cont.table(desc -> { desc.left().defaults().left().width(Core.graphics.isPortrait() ? 350f : 500f); diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java index d4bdd0c0cd..fc80e13ac8 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java @@ -22,7 +22,7 @@ import io.anuke.arc.util.*; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.game.EventType.*; -import io.anuke.mindustry.gen.Call; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item.Icon; import io.anuke.mindustry.world.Tile; @@ -88,7 +88,7 @@ public class BlockInventoryFragment extends Fragment{ table.clearChildren(); table.clearActions(); - table.background("inventory"); + table.background(Tex.inventory); table.touchable(Touchable.enabled); table.update(() -> { diff --git a/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java b/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java index b7a72b93bb..a833f14dc3 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java @@ -14,6 +14,7 @@ import io.anuke.arc.util.*; import io.anuke.mindustry.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.input.*; +import io.anuke.mindustry.ui.*; import static io.anuke.arc.Core.*; import static io.anuke.mindustry.Vars.net; @@ -45,7 +46,7 @@ public class ChatFragment extends Table{ super(); setFillParent(true); - font = scene.skin.getFont("default"); + font = Fonts.def; visible(() -> { if(!net.active() && messages.size > 0){ @@ -98,10 +99,10 @@ public class ChatFragment extends Table{ fieldlabel.getStyle().font = font; fieldlabel.setStyle(fieldlabel.getStyle()); - chatfield = new TextField("", new TextField.TextFieldStyle(scene.skin.get(TextField.TextFieldStyle.class))); + chatfield = new TextField("", new TextField.TextFieldStyle(scene.getStyle(TextField.TextFieldStyle.class))); chatfield.setFilter((field, c) -> field.getText().length() < Vars.maxTextLength); chatfield.getStyle().background = null; - chatfield.getStyle().font = scene.skin.getFont("chat"); + chatfield.getStyle().font = Fonts.chat; chatfield.getStyle().fontColor = Color.WHITE; chatfield.setStyle(chatfield.getStyle()); diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index 9496f8118c..5de78b98f9 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -13,6 +13,7 @@ import io.anuke.arc.scene.actions.*; import io.anuke.arc.scene.event.*; import io.anuke.arc.scene.style.*; import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.ImageButton.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.mindustry.core.GameState.*; @@ -26,6 +27,7 @@ import io.anuke.mindustry.input.*; import io.anuke.mindustry.net.Packets.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.ui.*; +import io.anuke.mindustry.ui.Style; import io.anuke.mindustry.ui.dialogs.*; import static io.anuke.mindustry.Vars.*; @@ -59,12 +61,12 @@ public class HudFragment extends Fragment{ select.left(); select.defaults().size(dsize).left(); - String style = "clear-trans"; + ImageButtonStyle style = Style.clearTransIbutton; - select.addImageButton("icon-menu-large", style, iconsize, ui.paused::show); - flip = select.addImageButton("icon-arrow-up", style, iconsize, this::toggleMenus).get(); + select.addImageButton(Icon.menuLarge, style, ui.paused::show); + flip = select.addImageButton(Icon.arrowUp, style, this::toggleMenus).get(); - select.addImageButton("icon-pause", style, iconsize, () -> { + select.addImageButton(Icon.pause, style, () -> { if(net.active()){ ui.listfrag.toggle(); }else{ @@ -72,14 +74,14 @@ public class HudFragment extends Fragment{ } }).name("pause").update(i -> { if(net.active()){ - i.getStyle().imageUp = Core.scene.skin.getDrawable("icon-players"); + i.getStyle().imageUp = Icon.players; }else{ i.setDisabled(false); - i.getStyle().imageUp = Core.scene.skin.getDrawable(state.is(State.paused) ? "icon-play" : "icon-pause"); + i.getStyle().imageUp = state.is(State.paused) ? Icon.play : Icon.pause; } }).get(); - select.addImageButton("icon-settings", style, iconsize, () -> { + select.addImageButton(Icon.settings, style,() -> { if(net.active() && mobile){ if(ui.chatfrag.chatOpen()){ ui.chatfrag.hide(); @@ -93,13 +95,13 @@ public class HudFragment extends Fragment{ } }).update(i -> { if(net.active() && mobile){ - i.getStyle().imageUp = Core.scene.skin.getDrawable("icon-chat"); + i.getStyle().imageUp = Icon.chat; }else{ - i.getStyle().imageUp = Core.scene.skin.getDrawable("icon-database"); + i.getStyle().imageUp = Icon.database; } }).get(); - select.addImage("whiteui").color(Pal.gray).width(4f).fillY(); + select.addImage().color(Pal.gray).width(4f).fillY(); float size = UnitScl.dp.scl(dsize); Array children = new Array<>(select.getChildren()); @@ -124,7 +126,7 @@ public class HudFragment extends Fragment{ } cont.row(); - cont.addImage("whiteui").height(4f).color(Pal.gray).fillX(); + cont.addImage().height(4f).color(Pal.gray).fillX(); cont.row(); } @@ -142,7 +144,7 @@ public class HudFragment extends Fragment{ wavesMain.visible(() -> shown && !state.isEditor()); wavesMain.top().left(); Stack stack = new Stack(); - Button waves = new Button("wave"); + Button waves = new Button(Style.waveButton); Table btable = new Table().margin(0); stack.add(waves); @@ -152,13 +154,13 @@ public class HudFragment extends Fragment{ addPlayButton(btable); wavesMain.add(stack).width(dsize * 4 + 4f); wavesMain.row(); - wavesMain.table("button", t -> t.margin(10f).add(new Bar("boss.health", Pal.health, () -> state.boss() == null ? 0f : state.boss().healthf()).blink(Color.WHITE)) + wavesMain.table(Tex.button, t -> t.margin(10f).add(new Bar("boss.health", Pal.health, () -> state.boss() == null ? 0f : state.boss().healthf()).blink(Color.WHITE)) .grow()).fillX().visible(() -> state.rules.waves && state.boss() != null).height(60f).get(); wavesMain.row(); } { - editorMain.table("button-edge-4", t -> { + editorMain.table(Tex.buttonEdge4, t -> { //t.margin(0f); t.add("$editor.teams").growX().left(); t.row(); @@ -166,7 +168,7 @@ public class HudFragment extends Fragment{ teams.left(); int i = 0; for(Team team : Team.all){ - ImageButton button = teams.addImageButton("white", "clear-toggle-partial", 40f, () -> Call.setPlayerTeamEditor(player, team)) + ImageButton button = teams.addImageButton(Tex.whiteui, Style.clearTogglePartialIbutton, 40f, () -> Call.setPlayerTeamEditor(player, team)) .size(50f).margin(6f).get(); button.getImageCell().grow(); button.getStyle().imageUpColor = team.color; @@ -181,11 +183,11 @@ public class HudFragment extends Fragment{ if(enableUnitEditing){ t.row(); - t.addImageTextButton("$editor.spawn", "icon-add", iconsize, () -> { + t.addImageTextButton("$editor.spawn", Icon.add, () -> { FloatingDialog dialog = new FloatingDialog("$editor.spawn"); int i = 0; for(UnitType type : content.getBy(ContentType.unit)){ - dialog.cont.addImageButton("white", 48, () -> { + dialog.cont.addImageButton(Tex.whiteui, 48, () -> { Call.spawnUnitEditor(player, type); dialog.hide(); }).get().getStyle().imageUp = new TextureRegionDrawable(type.iconRegion); @@ -200,7 +202,7 @@ public class HudFragment extends Fragment{ float[] position = {0, 0}; t.row(); - t.addImageTextButton("$editor.removeunit", "icon-quit", "toggle", iconsize, () -> {}).fillX().update(b -> { + t.addImageTextButton("$editor.removeunit", Icon.quit, Style.toggleTbutton, () -> {}).fillX().update(b -> { boolean[] found = {false}; if(b.isChecked()){ Element e = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true); @@ -241,9 +243,9 @@ public class HudFragment extends Fragment{ IntFormat fps = new IntFormat("fps"); IntFormat ping = new IntFormat("ping"); - info.label(() -> fps.get(Core.graphics.getFramesPerSecond())).left().style("outline"); + info.label(() -> fps.get(Core.graphics.getFramesPerSecond())).left().style(Style.outlineLabel); info.row(); - info.label(() -> ping.get(netClient.getPing())).visible(net::client).left().style("outline"); + info.label(() -> ping.get(netClient.getPing())).visible(net::client).left().style(Style.outlineLabel); }).top().left(); }); @@ -253,7 +255,7 @@ public class HudFragment extends Fragment{ //spawner warning parent.fill(t -> { t.touchable(Touchable.disabled); - t.table("flat", c -> c.add("$nearpoint") + t.table(Style.flat, c -> c.add("$nearpoint") .update(l -> l.setColor(Tmp.c1.set(Color.WHITE).lerp(Color.SCARLET, Mathf.absin(Time.time(), 10f, 1f)))) .get().setAlignment(Align.center, Align.center)) .margin(6).update(u -> u.color.a = Mathf.lerpDelta(u.color.a, Mathf.num(spawner.playerNear()), 0.1f)).get().color.a = 0f; @@ -261,7 +263,7 @@ public class HudFragment extends Fragment{ parent.fill(t -> { t.visible(() -> netServer.isWaitingForPlayers()); - t.table("button", c -> c.add("$waiting.players")); + t.table(Tex.button, c -> c.add("$waiting.players")); }); //'core is under attack' table @@ -307,7 +309,7 @@ public class HudFragment extends Fragment{ return coreAttackOpacity > 0; }); - t.table("button", top -> top.add("$coreattack").pad(2) + t.table(Tex.button, top -> top.add("$coreattack").pad(2) .update(label -> label.getColor().set(Color.ORANGE).lerp(Color.SCARLET, Mathf.absin(Time.time(), 2f, 1f)))).touchable(Touchable.disabled); }); @@ -316,14 +318,14 @@ public class HudFragment extends Fragment{ Runnable resize = () -> { t.clearChildren(); t.top().right().visible(() -> state.rules.tutorial); - t.stack(new Button("default"){{ + t.stack(new Button(){{ marginLeft(48f); labelWrap(() -> control.tutorial.stage.text() + (control.tutorial.canNext() ? "\n\n" + Core.bundle.get("tutorial.next") : "")).width(!Core.graphics.isPortrait() ? 400f : 160f).pad(2f); clicked(() -> control.tutorial.nextSentence()); setDisabled(() -> !control.tutorial.canNext()); }}, new Table(f -> { - f.left().addImageButton("icon-arrow-left-small", "empty", iconsizesmall, () -> { + f.left().addImageButton(Icon.arrowLeftSmall, Style.emptyIbutton, () -> { control.tutorial.prevSentence(); }).width(44f).growY().visible(() -> control.tutorial.canPrev()); })); @@ -336,13 +338,13 @@ public class HudFragment extends Fragment{ //paused table parent.fill(t -> { t.top().visible(() -> state.isPaused()).touchable(Touchable.disabled); - t.table("button-trans", top -> top.add("$paused").pad(5f)); + t.table(Tex.buttonTrans, top -> top.add("$paused").pad(5f)); }); //'saving' indicator parent.fill(t -> { t.bottom().visible(() -> control.saves.isSaving()); - t.add("$saveload").style("outline"); + t.add("$saveload").style(Style.outlineLabel); }); blockfrag.build(parent); @@ -390,14 +392,14 @@ public class HudFragment extends Fragment{ scheduleToast(() -> { Sounds.message.play(); - Table table = new Table("button"); + Table table = new Table(Tex.button); table.update(() -> { if(state.is(State.menu)){ table.remove(); } }); table.margin(12); - table.addImage("icon-check").size(iconsize).pad(3); + table.addImage(Icon.check).pad(3); table.add(text).wrap().width(280f).get().setAlignment(Align.center, Align.center); table.pack(); @@ -426,7 +428,7 @@ public class HudFragment extends Fragment{ //if there's currently no unlock notification... if(lastUnlockTable == null){ scheduleToast(() -> { - Table table = new Table("button"); + Table table = new Table(Tex.button); table.update(() -> { if(state.is(State.menu)){ table.remove(); @@ -498,7 +500,7 @@ public class HudFragment extends Fragment{ lastUnlockLayout.add(image); }else{ //else, add a specific icon to denote no more space - lastUnlockLayout.addImage("icon-add"); + lastUnlockLayout.addImage(Icon.add); } lastUnlockLayout.pack(); @@ -506,7 +508,7 @@ public class HudFragment extends Fragment{ } public void showLaunch(){ - Image image = new Image("whiteui"); + Image image = new Image(); image.getColor().a = 0f; image.setFillParent(true); image.actions(Actions.fadeIn(40f / 60f)); @@ -551,7 +553,7 @@ public class HudFragment extends Fragment{ private void toggleMenus(){ if(flip != null){ - flip.getStyle().imageUp = Core.scene.skin.getDrawable(shown ? "icon-arrow-down" : "icon-arrow-up"); + flip.getStyle().imageUp = shown ? Icon.arrowDown : Icon.arrowUp; } shown = !shown; @@ -642,7 +644,7 @@ public class HudFragment extends Fragment{ } private void addPlayButton(Table table){ - table.right().addImageButton("icon-play", "right", 30f, () -> { + table.right().addImageButton(Icon.playSmaller, Style.rightIbutton, 30f, () -> { if(net.client() && player.isAdmin){ Call.onAdminRequest(player, AdminAction.wave); }else if(inLaunchWave()){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/LoadingFragment.java b/core/src/io/anuke/mindustry/ui/fragments/LoadingFragment.java index 9eb53bb913..658aca2574 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/LoadingFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/LoadingFragment.java @@ -7,6 +7,7 @@ import io.anuke.arc.scene.ui.Label; import io.anuke.arc.scene.ui.TextButton; import io.anuke.arc.scene.ui.layout.Table; import io.anuke.mindustry.graphics.Pal; +import io.anuke.mindustry.ui.*; public class LoadingFragment extends Fragment{ private Table table; @@ -14,16 +15,16 @@ public class LoadingFragment extends Fragment{ @Override public void build(Group parent){ - parent.fill("loadDim", t -> { + parent.fill(Style.loadDim,t -> { t.visible(false); t.touchable(Touchable.enabled); t.add().height(70f).row(); - t.addImage("whiteui").growX().height(3f).pad(4f).growX().get().setColor(Pal.accent); + t.addImage().growX().height(3f).pad(4f).growX().get().setColor(Pal.accent); t.row(); t.add("$loading").name("namelabel").pad(10f); t.row(); - t.addImage("whiteui").growX().height(3f).pad(4f).growX().get().setColor(Pal.accent); + t.addImage().growX().height(3f).pad(4f).growX().get().setColor(Pal.accent); t.row(); button = t.addButton("$cancel", () -> { diff --git a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java index 9784b12894..23ae6b0c4d 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java @@ -1,22 +1,22 @@ package io.anuke.mindustry.ui.fragments; -import io.anuke.arc.Core; -import io.anuke.arc.Events; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.graphics.Texture; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.arc.math.Interpolation; -import io.anuke.arc.scene.Group; -import io.anuke.arc.scene.actions.Actions; -import io.anuke.arc.scene.event.Touchable; -import io.anuke.arc.scene.ui.Button; +import io.anuke.arc.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.*; +import io.anuke.arc.scene.*; +import io.anuke.arc.scene.actions.*; +import io.anuke.arc.scene.event.*; +import io.anuke.arc.scene.style.*; +import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; -import io.anuke.arc.util.Align; -import io.anuke.mindustry.game.EventType.DisposeEvent; -import io.anuke.mindustry.game.EventType.ResizeEvent; -import io.anuke.mindustry.game.Version; -import io.anuke.mindustry.graphics.MenuRenderer; -import io.anuke.mindustry.ui.MobileButton; +import io.anuke.arc.util.*; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.ui.*; +import io.anuke.mindustry.ui.Style; import static io.anuke.arc.Core.assets; import static io.anuke.mindustry.Vars.*; @@ -61,8 +61,8 @@ public class MenuFragment extends Fragment{ //info icon if(mobile){ - parent.fill(c -> c.bottom().left().addButton("", "info", ui.about::show).size(84, 45)); - parent.fill(c -> c.bottom().right().addButton("", "discord", ui.discord::show).size(84, 45)); + parent.fill(c -> c.bottom().left().addButton("", Style.infoTbutton, ui.about::show).size(84, 45)); + parent.fill(c -> c.bottom().right().addButton("", Style.discordTbutton, ui.discord::show).size(84, 45)); } String versionText = "[#ffffffba]" + ((Version.build == -1) ? "[#fc8140aa]custom build" : (Version.type.equals("official") ? Version.modifier : Version.type) + " build " + Version.build); @@ -79,8 +79,8 @@ public class MenuFragment extends Fragment{ Draw.color(); Draw.rect(Draw.wrap(logo), fx, fy, logow, logoh); - Core.scene.skin.font().setColor(Color.WHITE); - Core.scene.skin.font().draw(versionText, fx, fy - logoh/2f, Align.center); + Fonts.def.setColor(Color.WHITE); + Fonts.def.draw(versionText, fx, fy - logoh/2f, Align.center); }).touchable(Touchable.disabled); } @@ -89,18 +89,17 @@ public class MenuFragment extends Fragment{ container.setSize(Core.graphics.getWidth(), Core.graphics.getHeight()); float size = 120f; - float isize = iconsize; container.defaults().size(size).pad(5).padTop(4f); MobileButton - play = new MobileButton("icon-play-2", isize, "$campaign", ui.deploy::show), - custom = new MobileButton("icon-play-custom", isize, "$customgame", ui.custom::show), - maps = new MobileButton("icon-load", isize, "$loadgame", ui.load::show), - join = new MobileButton("icon-add", isize, "$joingame", ui.join::show), - editor = new MobileButton("icon-editor", isize, "$editor", ui.maps::show), - tools = new MobileButton("icon-tools", isize, "$settings", ui.settings::show), - donate = new MobileButton("icon-link", isize, "$website", () -> Core.net.openURI("https://anuke.itch.io/mindustry")), - exit = new MobileButton("icon-exit", isize, "$quit", () -> Core.app.exit()); + play = new MobileButton(Icon.play2, "$campaign", ui.deploy::show), + custom = new MobileButton(Icon.playCustom, "$customgame", ui.custom::show), + maps = new MobileButton(Icon.load, "$loadgame", ui.load::show), + join = new MobileButton(Icon.add, "$joingame", ui.join::show), + editor = new MobileButton(Icon.editor, "$editor", ui.maps::show), + tools = new MobileButton(Icon.tools, "$settings", ui.settings::show), + donate = new MobileButton(Icon.link, "$website", () -> Core.net.openURI("https://anuke.itch.io/mindustry")), + exit = new MobileButton(Icon.exit, "$quit", () -> Core.app.exit()); if(!Core.graphics.isPortrait()){ container.marginTop(60f); @@ -147,25 +146,26 @@ public class MenuFragment extends Fragment{ float width = 230f; - String background = "flat-trans"; + Drawable background = Style.flatTrans; container.left(); container.add().width(Core.graphics.getWidth()/10f); container.table(background, t -> { t.defaults().width(width).height(70f); + //todo buttons should be small buttons(t, - new Buttoni("$play", "icon-play-2", - new Buttoni("$campaign", "icon-play-2", ui.deploy::show), - new Buttoni("$joingame", "icon-add", ui.join::show), - new Buttoni("$customgame", "icon-editor", ui.custom::show), - new Buttoni("$loadgame", "icon-load", ui.load::show), - new Buttoni("$tutorial", "icon-info", control::playTutorial) + new Buttoni("$play", Icon.play2Small, + new Buttoni("$campaign", Icon.play2Small, ui.deploy::show), + new Buttoni("$joingame", Icon.addSmall, ui.join::show), + new Buttoni("$customgame", Icon.editorSmall, ui.custom::show), + new Buttoni("$loadgame", Icon.loadSmall, ui.load::show), + new Buttoni("$tutorial", Icon.infoSmall, control::playTutorial) ), - new Buttoni("$editor", "icon-editor", ui.maps::show), - new Buttoni("$settings", "icon-tools", ui.settings::show), - new Buttoni("$about.button", "icon-info", ui.about::show), - new Buttoni("$quit", "icon-exit", Core.app::exit) + new Buttoni("$editor", Icon.editorSmall, ui.maps::show), + new Buttoni("$settings", Icon.toolsSmall, ui.settings::show), + new Buttoni("$about.button", Icon.infoSmall, ui.about::show), + new Buttoni("$quit", Icon.exitSmall, Core.app::exit) ); }).width(width).growY(); @@ -198,8 +198,7 @@ public class MenuFragment extends Fragment{ private void buttons(Table t, Buttoni... buttons){ for(Buttoni b : buttons){ Button[] out = {null}; - out[0] = t.addImageTextButton(b.text, b.icon + "-small", "clear-toggle-menu", - iconsizesmall, () -> { + out[0] = t.addImageTextButton(b.text, b.icon, Style.clearToggleMenuTbutton, () -> { if(currentMenu == out[0]){ currentMenu = null; fadeOutMenu(); @@ -225,19 +224,19 @@ public class MenuFragment extends Fragment{ } private class Buttoni{ - final String icon; + final Drawable icon; final String text; final Runnable runnable; final Buttoni[] submenu; - public Buttoni(String text, String icon, Runnable runnable){ + public Buttoni(String text, Drawable icon, Runnable runnable){ this.icon = icon; this.text = text; this.runnable = runnable; this.submenu = null; } - public Buttoni(String text, String icon, Buttoni... buttons){ + public Buttoni(String text, Drawable icon, Buttoni... buttons){ this.icon = icon; this.text = text; this.runnable = () -> {}; diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 0652803f82..d8a6468b1a 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -12,11 +12,12 @@ import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.input.*; import io.anuke.mindustry.type.*; +import io.anuke.mindustry.ui.Style; import io.anuke.mindustry.world.*; -import io.anuke.mindustry.world.Block.*; import static io.anuke.mindustry.Vars.*; @@ -137,13 +138,13 @@ public class PlacementFragment extends Fragment{ continue; } - ImageButton button = blockTable.addImageButton("icon-locked", "select", 8 * 4, () -> { + ImageButton button = blockTable.addImageButton(Icon.lockedSmall, Style.selectIbutton, () -> { if(unlocked(block)){ input.block = input.block == block ? null : block; } }).size(46f).group(group).name("block-" + block.name).get(); - button.getStyle().imageUp = new TextureRegionDrawable(block.icon(Icon.medium)); + button.getStyle().imageUp = new TextureRegionDrawable(block.icon(Block.Icon.medium)); button.update(() -> { //color unplacable things gray TileEntity core = player.getClosestCore(); @@ -169,7 +170,7 @@ public class PlacementFragment extends Fragment{ }; //top table with hover info - frame.table("button-edge-2", top -> { + frame.table(Tex.buttonEdge2,top -> { topTable = top; top.add(new Table()).growX().update(topTable -> { //don't refresh unnecessarily @@ -189,12 +190,12 @@ public class PlacementFragment extends Fragment{ topTable.table(header -> { header.left(); - header.add(new Image(lastDisplay.icon(Icon.medium))).size(8 * 4); + header.add(new Image(lastDisplay.icon(Block.Icon.medium))).size(8 * 4); header.labelWrap(() -> !unlocked(lastDisplay) ? Core.bundle.get("block.unknown") : lastDisplay.localizedName) .left().width(190f).padLeft(5); header.add().growX(); if(unlocked(lastDisplay)){ - header.addButton("?", "clear-partial", () -> { + header.addButton("?", Style.clearPartialTbutton, () -> { ui.content.show(lastDisplay); Events.fire(new BlockInfoEvent()); }).size(8 * 5).padTop(-5).padRight(-5).right().grow().name("blockinfo"); @@ -243,9 +244,9 @@ public class PlacementFragment extends Fragment{ }); }).colspan(3).fillX().visible(() -> getSelected() != null || tileDisplayBlock() != null).touchable(Touchable.enabled); frame.row(); - frame.addImage("whiteui").color(Pal.gray).colspan(3).height(4).growX(); + frame.addImage().color(Pal.gray).colspan(3).height(4).growX(); frame.row(); - frame.table("pane-2", blocksSelect -> { + frame.table(Tex.pane2, blocksSelect -> { blocksSelect.margin(4).marginTop(0); blocksSelect.table(blocks -> blockTable = blocks).grow(); blocksSelect.row(); @@ -267,11 +268,11 @@ public class PlacementFragment extends Fragment{ if(f++ % 2 == 0) categories.row(); if(categoryEmpty[cat.ordinal()]){ - categories.addImage("flat-trans"); + categories.addImage(Style.flatTrans); continue; } - categories.addImageButton("icon-" + cat.name() + "-med", "clear-toggle-trans", iconsizemed, () -> { + categories.addImageButton(Core.atlas.drawable("icon-" + cat.name() + "-smaller"), Style.clearToggleTransIbutton, () -> { currentCategory = cat; rebuildCategory.run(); }).group(group).update(i -> i.setChecked(currentCategory == cat)).name("category-" + cat.name()); diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java index 09796e91b8..3eef3f8f47 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java @@ -1,21 +1,18 @@ package io.anuke.mindustry.ui.fragments; -import io.anuke.arc.Core; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.arc.graphics.g2d.Lines; -import io.anuke.arc.scene.Group; -import io.anuke.arc.scene.event.Touchable; -import io.anuke.arc.scene.ui.Image; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.arc.scene.ui.layout.UnitScl; -import io.anuke.arc.util.Interval; -import io.anuke.arc.util.Scaling; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.gen.Call; -import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.net.Net; -import io.anuke.mindustry.net.NetConnection; -import io.anuke.mindustry.net.Packets.AdminAction; +import io.anuke.arc.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.scene.*; +import io.anuke.arc.scene.event.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.net.*; +import io.anuke.mindustry.net.Packets.*; +import io.anuke.mindustry.ui.*; import static io.anuke.mindustry.Vars.*; @@ -43,7 +40,7 @@ public class PlayerListFragment extends Fragment{ } }); - cont.table("button-trans", pane -> { + cont.table(Tex.buttonTrans, pane -> { pane.label(() -> Core.bundle.format(playerGroup.size() == 1 ? "players.single" : "players", playerGroup.size())); pane.row(); pane.pane(content).grow().get().setScrollingDisabled(true, false); @@ -96,7 +93,7 @@ public class PlayerListFragment extends Fragment{ button.labelWrap("[#" + user.color.toString().toUpperCase() + "]" + user.name).width(170f).pad(10); button.add().grow(); - button.addImage("icon-admin").size(iconsize).visible(() -> user.isAdmin && !(!user.isLocal && net.server())).padRight(5).get().updateVisibility(); + button.addImage(Icon.admin).visible(() -> user.isAdmin && !(!user.isLocal && net.server())).padRight(5).get().updateVisibility(); if((net.server() || player.isAdmin) && !user.isLocal && (!user.isAdmin || net.server())){ button.add().growY(); @@ -106,14 +103,14 @@ public class PlayerListFragment extends Fragment{ button.table(t -> { t.defaults().size(bs); - t.addImageButton("icon-ban-small", "clear-partial", iconsizesmall, + t.addImageButton(Icon.banSmall, Style.clearPartialIbutton, () -> ui.showConfirm("$confirm", "$confirmban", () -> Call.onAdminRequest(user, AdminAction.ban))); - t.addImageButton("icon-cancel-small", "clear-partial", iconsizesmall, + t.addImageButton(Icon.cancelSmall, Style.clearPartialIbutton, () -> ui.showConfirm("$confirm", "$confirmkick", () -> Call.onAdminRequest(user, AdminAction.kick))); t.row(); - t.addImageButton("icon-admin-small", "clear-toggle-partial", iconsizesmall, () -> { + t.addImageButton(Icon.adminSmall, Style.clearTogglePartialIbutton, () -> { if(net.client()) return; String id = user.uuid; @@ -129,14 +126,14 @@ public class PlayerListFragment extends Fragment{ .touchable(() -> net.client() ? Touchable.disabled : Touchable.enabled) .checked(user.isAdmin); - t.addImageButton("icon-zoom-small", "clear-partial", iconsizesmall, () -> Call.onAdminRequest(user, AdminAction.trace)); + t.addImageButton(Icon.zoomSmall, Style.clearPartialIbutton, () -> Call.onAdminRequest(user, AdminAction.trace)); }).padRight(12).size(bs + 10f, bs); } content.add(button).padBottom(-6).width(350f).maxHeight(h + 14); content.row(); - content.addImage("whiteui").height(4f).color(state.rules.pvp ? user.getTeam().color : Pal.gray).growX(); + content.addImage().height(4f).color(state.rules.pvp ? user.getTeam().color : Pal.gray).growX(); content.row(); }); diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 706fa2e7bf..74cfefdeb5 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -254,7 +254,7 @@ public class Block extends BlockStorage{ if(renderer.pixelator.enabled()) return 0; Color color = valid ? Pal.accent : Pal.remove; - BitmapFont font = Core.scene.skin.getFont("outline"); + BitmapFont font = Fonts.outline; GlyphLayout layout = Pools.obtain(GlyphLayout.class, GlyphLayout::new); boolean ints = font.usesIntegerPositions(); font.setUseIntegerPositions(false); diff --git a/core/src/io/anuke/mindustry/world/blocks/ItemSelection.java b/core/src/io/anuke/mindustry/world/blocks/ItemSelection.java index 2f42b7ab68..99a3526000 100644 --- a/core/src/io/anuke/mindustry/world/blocks/ItemSelection.java +++ b/core/src/io/anuke/mindustry/world/blocks/ItemSelection.java @@ -1,14 +1,13 @@ package io.anuke.mindustry.world.blocks; -import io.anuke.arc.collection.Array; -import io.anuke.arc.function.Consumer; -import io.anuke.arc.function.Supplier; -import io.anuke.arc.scene.style.TextureRegionDrawable; -import io.anuke.arc.scene.ui.ButtonGroup; -import io.anuke.arc.scene.ui.ImageButton; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.mindustry.type.Item; -import io.anuke.mindustry.type.Item.Icon; +import io.anuke.arc.collection.*; +import io.anuke.arc.function.*; +import io.anuke.arc.scene.style.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.type.*; +import io.anuke.mindustry.ui.Style; import static io.anuke.mindustry.Vars.*; @@ -28,9 +27,9 @@ public class ItemSelection{ for(Item item : items){ if(!data.isUnlocked(item) && world.isZone()) continue; - ImageButton button = cont.addImageButton("whiteui", "clear-toggle-trans", 24, () -> control.input.frag.config.hideConfig()).group(group).get(); + ImageButton button = cont.addImageButton(Tex.whiteui, Style.clearToggleTransIbutton, 24, () -> control.input.frag.config.hideConfig()).group(group).get(); button.changed(() -> consumer.accept(button.isChecked() ? item : null)); - button.getStyle().imageUp = new TextureRegionDrawable(item.icon(Icon.medium)); + button.getStyle().imageUp = new TextureRegionDrawable(item.icon(Item.Icon.medium)); button.update(() -> button.setChecked(holder.get() == item)); if(i++ % 4 == 3){ diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java index a4f5216322..6fa39c3434 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java @@ -184,7 +184,7 @@ public class Drill extends Block{ for(int i = 0; i < list.size; i++){ Item item = list.get(i); - table.addImage(item.name + "1").size(8 * 3).padRight(2).padLeft(2).padTop(3).padBottom(3); + table.addImage(Core.atlas.find(item.name + "1")).size(8 * 3).padRight(2).padLeft(2).padTop(3).padBottom(3); table.add(item.localizedName()); if(i != list.size - 1){ table.add("/").padLeft(5).padRight(5); diff --git a/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java b/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java index cc6c7b1a98..fe3d91a6ea 100644 --- a/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java +++ b/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java @@ -11,8 +11,9 @@ import io.anuke.arc.scene.ui.ImageButton; import io.anuke.arc.scene.ui.layout.Table; import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.entities.type.TileEntity; -import io.anuke.mindustry.gen.Call; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.type.Liquid; +import io.anuke.mindustry.ui.*; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; @@ -83,7 +84,7 @@ public class LiquidSource extends Block{ for(int i = 0; i < items.size; i++){ final int f = i; - ImageButton button = cont.addImageButton("clear", "clear-toggle-trans", 24, () -> control.input.frag.config.hideConfig()).size(38).group(group).get(); + ImageButton button = cont.addImageButton(Tex.clear, Style.clearToggleTransIbutton, 24, () -> control.input.frag.config.hideConfig()).size(38).group(group).get(); button.changed(() -> { Call.setLiquidSourceLiquid(null, tile, button.isChecked() ? items.get(f) : null); control.input.frag.config.hideConfig(); diff --git a/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java b/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java index 9b93edaec3..b68e8099bd 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java @@ -16,6 +16,7 @@ import io.anuke.mindustry.entities.units.*; import io.anuke.mindustry.game.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.ui.*; import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.meta.*; @@ -64,7 +65,7 @@ public class CommandCenter extends Block{ CommandCenterEntity entity = tile.entity(); super.draw(tile); - float size = iconsizesmall/4f; + float size = IconSize.small.size/4f; Draw.color(bottomColor); Draw.rect(commandRegions[entity.command.ordinal()], tile.drawx(), tile.drawy() - 1, size, size); @@ -80,12 +81,12 @@ public class CommandCenter extends Block{ Table buttons = new Table(); for(UnitCommand cmd : UnitCommand.all){ - buttons.addImageButton("icon-command-" + cmd.name() + "-small", "clear-toggle-trans", iconsizesmall, () -> Call.onCommandCenterSet(player, tile, cmd)) + buttons.addImageButton(Core.atlas.drawable("icon-command-" + cmd.name() + "-small"), Style.clearToggleTransIbutton, () -> Call.onCommandCenterSet(player, tile, cmd)) .size(44).group(group).update(b -> b.setChecked(entity.command == cmd)); } table.add(buttons); table.row(); - table.label(() -> entity.command.localized()).style("outline").center().growX().get().setAlignment(Align.center); + table.label(() -> entity.command.localized()).style(Style.outlineLabel).center().growX().get().setAlignment(Align.center); } @Remote(called = Loc.server, forward = true, targets = Loc.both) diff --git a/core/src/io/anuke/mindustry/world/meta/values/AmmoListValue.java b/core/src/io/anuke/mindustry/world/meta/values/AmmoListValue.java index 5b05b47881..772eb96e9a 100644 --- a/core/src/io/anuke/mindustry/world/meta/values/AmmoListValue.java +++ b/core/src/io/anuke/mindustry/world/meta/values/AmmoListValue.java @@ -1,17 +1,18 @@ package io.anuke.mindustry.world.meta.values; -import io.anuke.arc.Core; -import io.anuke.arc.collection.ObjectMap; -import io.anuke.arc.graphics.g2d.TextureRegion; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.arc.util.Strings; -import io.anuke.mindustry.content.StatusEffects; -import io.anuke.mindustry.entities.bullet.BulletType; -import io.anuke.mindustry.game.UnlockableContent; -import io.anuke.mindustry.type.Item; +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.entities.bullet.*; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.type.*; import io.anuke.mindustry.type.Item.Icon; -import io.anuke.mindustry.world.meta.StatValue; +import io.anuke.mindustry.world.meta.*; import static io.anuke.mindustry.Vars.tilesize; @@ -30,7 +31,7 @@ public class AmmoListValue implements StatValue{ BulletType type = map.get(t); table.addImage(icon(t)).size(3 * 8).padRight(4).right().top(); table.add(t.localizedName()).padRight(10).left().top(); - table.table("underline", bt -> { + table.table(Tex.underline, bt -> { bt.left().defaults().padRight(3).left(); if(type.damage > 0){ diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java index 98b4f0b59f..18833d04b6 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java @@ -22,6 +22,7 @@ import io.anuke.mindustry.game.Version; import io.anuke.mindustry.maps.Map; import io.anuke.mindustry.net.*; import io.anuke.mindustry.net.Net.*; +import io.anuke.mindustry.ui.*; import java.net.*; import java.util.*; @@ -83,7 +84,7 @@ public class DesktopLauncher extends ClientLauncher{ t.toFront(); }); - t.table("guideDim", f -> label[0] = f.add("").get()).visible(() -> visible[0]); + t.table(Style.guideDim,f -> label[0] = f.add("").get()).visible(() -> visible[0]); }); Log.setLogger(new LogHandler(){ diff --git a/ios/src/io/anuke/mindustry/IOSLauncher.java b/ios/src/io/anuke/mindustry/IOSLauncher.java index 11f3a57375..aa8dab4590 100644 --- a/ios/src/io/anuke/mindustry/IOSLauncher.java +++ b/ios/src/io/anuke/mindustry/IOSLauncher.java @@ -10,6 +10,7 @@ import io.anuke.arc.util.io.*; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.game.Saves.*; import io.anuke.mindustry.io.*; +import io.anuke.mindustry.ui.*; import org.robovm.apple.foundation.*; import org.robovm.apple.uikit.*; import org.robovm.objc.block.*; @@ -134,7 +135,7 @@ public class IOSLauncher extends IOSApplication.Delegate{ Events.on(ClientLoadEvent.class, e -> { Core.app.post(() -> Core.app.post(() -> { - Core.scene.table("dialogDim", t -> { + Core.scene.table(Style.dialogDim,t -> { t.visible(() -> { if(!forced) return false; t.toFront(); @@ -172,10 +173,10 @@ public class IOSLauncher extends IOSApplication.Delegate{ ui.load.runLoadSave(slot); } }catch(IOException e){ - ui.showError(Core.bundle.format("save.import.fail", Strings.parseException(e, true))); + ui.showException("save.import.fail", e); } }else{ - ui.showError("save.import.invalid"); + ui.showErrorMessage("save.import.invalid"); } } diff --git a/tools/src/io/anuke/mindustry/Upscaler.java b/tools/src/io/anuke/mindustry/Upscaler.java index c2fcdb608a..efa5c5d506 100644 --- a/tools/src/io/anuke/mindustry/Upscaler.java +++ b/tools/src/io/anuke/mindustry/Upscaler.java @@ -6,14 +6,9 @@ import io.anuke.arc.files.*; import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.util.*; +import io.anuke.mindustry.ui.*; public class Upscaler{ - static Res[] resolutions = { - new Res(Vars.iconsizesmall, "-small"), - new Res(Vars.iconsizemed, "-med"), - new Res(Vars.iconsize, ""), - }; - public static void main(String[] args){ new SdlApplication(new ApplicationListener(){ @Override @@ -35,12 +30,13 @@ public class Upscaler{ Time.mark(); FileHandle[] list = file.list(); - for(Res res : resolutions){ - SquareMarcher marcher = new SquareMarcher(res.size); + for(IconSize size : IconSize.values()){ + String suffix = size == IconSize.def ? "" : "-" + size.name(); + SquareMarcher marcher = new SquareMarcher(size.size); for(FileHandle img : list){ if(img.extension().equals("png")){ - marcher.render(new Pixmap(img), img.sibling(img.nameWithoutExtension() + res.suffix + ".png")); + marcher.render(new Pixmap(img), img.sibling(img.nameWithoutExtension() + suffix + ".png")); } } }