diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 172725e973..39ce8eb655 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -33,6 +33,7 @@ stat.delivered = Resources Launched: stat.rank = Final Rank: [accent]{0} launcheditems = [accent]Launched Items +launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue. map.delete = Are you sure you want to delete the map "[accent]{0}[]"? level.highscore = High Score: [accent]{0} level.select = Level Select diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index 1059b3afa3..39bf7d4271 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -109,6 +109,7 @@ public class UI implements ApplicationListener, Loadable{ ClickListener.clicked = () -> Sounds.press.play(); Colors.put("accent", Pal.accent); + Colors.put("unlaunched", Color.valueOf("8982ed")); Colors.put("highlight", Pal.accent.cpy().lerp(Color.white, 0.3f)); Colors.put("stat", Pal.stat); loadExtraCursors(); diff --git a/core/src/io/anuke/mindustry/game/Saves.java b/core/src/io/anuke/mindustry/game/Saves.java index 74046d2fa4..cef478b064 100644 --- a/core/src/io/anuke/mindustry/game/Saves.java +++ b/core/src/io/anuke/mindustry/game/Saves.java @@ -262,6 +262,10 @@ public class Saves{ Core.settings.save(); } + public String[] getMods(){ + return meta.mods; + } + public Zone getZone(){ return meta == null || meta.rules == null ? null : meta.rules.zone; } diff --git a/core/src/io/anuke/mindustry/io/SaveMeta.java b/core/src/io/anuke/mindustry/io/SaveMeta.java index 429c82561d..4759b955ab 100644 --- a/core/src/io/anuke/mindustry/io/SaveMeta.java +++ b/core/src/io/anuke/mindustry/io/SaveMeta.java @@ -15,6 +15,7 @@ public class SaveMeta{ public int wave; public Rules rules; public StringMap tags; + public String[] mods; public SaveMeta(int version, long timestamp, long timePlayed, int build, String map, int wave, Rules rules, StringMap tags){ this.version = version; @@ -25,5 +26,6 @@ public class SaveMeta{ this.wave = wave; this.rules = rules; this.tags = tags; + this.mods = JsonIO.read(String[].class, tags.get("mods", "[]")); } } diff --git a/core/src/io/anuke/mindustry/io/SaveVersion.java b/core/src/io/anuke/mindustry/io/SaveVersion.java index 53524d4625..6e77128c05 100644 --- a/core/src/io/anuke/mindustry/io/SaveVersion.java +++ b/core/src/io/anuke/mindustry/io/SaveVersion.java @@ -66,6 +66,7 @@ public abstract class SaveVersion extends SaveFileReader{ "wavetime", state.wavetime, "stats", JsonIO.write(state.stats), "rules", JsonIO.write(state.rules), + "mods", JsonIO.write(mods.getModNames().toArray(String.class)), "width", world.width(), "height", world.height() ).merge(tags)); @@ -80,6 +81,7 @@ public abstract class SaveVersion extends SaveFileReader{ state.rules = JsonIO.read(Rules.class, map.get("rules", "{}")); if(state.rules.spawns.isEmpty()) state.rules.spawns = defaultWaves.get(); lastReadBuild = map.getInt("build", -1); + String[] mods = JsonIO.read(String[].class, map.get("mods", "[]")); Map worldmap = maps.byName(map.get("mapname", "\\\\\\")); world.setMap(worldmap == null ? new Map(StringMap.of( diff --git a/core/src/io/anuke/mindustry/io/versions/LegacyTypeTable.java b/core/src/io/anuke/mindustry/io/versions/LegacyTypeTable.java index 9af7e9f785..19168c9802 100644 --- a/core/src/io/anuke/mindustry/io/versions/LegacyTypeTable.java +++ b/core/src/io/anuke/mindustry/io/versions/LegacyTypeTable.java @@ -118,7 +118,7 @@ public class LegacyTypeTable{ public static Supplier[] getTable(int build){ if(build == -1 || build == 81){ - //return most recent one since that's probably is; not guaranteed + //return most recent one since that's probably it; not guaranteed return build81Table; }else if(build == 80){ return build80Table; diff --git a/core/src/io/anuke/mindustry/mod/Mods.java b/core/src/io/anuke/mindustry/mod/Mods.java index adef9fbf9b..40846855e6 100644 --- a/core/src/io/anuke/mindustry/mod/Mods.java +++ b/core/src/io/anuke/mindustry/mod/Mods.java @@ -217,6 +217,11 @@ public class Mods implements Loadable{ return loaded; } + /** @return a list of mod names only, without versions. */ + public Array getModNames(){ + return loaded.select(l -> !l.meta.hidden).map(l -> l.name + ":" + l.meta.version); + } + /** @return a list of mods and versions, in the format name:version. */ public Array getModStrings(){ return loaded.select(l -> !l.meta.hidden).map(l -> l.name + ":" + l.meta.version); diff --git a/core/src/io/anuke/mindustry/ui/ItemsDisplay.java b/core/src/io/anuke/mindustry/ui/ItemsDisplay.java index 81f0732c81..b0da71ec09 100644 --- a/core/src/io/anuke/mindustry/ui/ItemsDisplay.java +++ b/core/src/io/anuke/mindustry/ui/ItemsDisplay.java @@ -1,22 +1,21 @@ 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.arc.graphics.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.mindustry.core.GameState.*; import io.anuke.mindustry.gen.*; -import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.*; import io.anuke.mindustry.type.Item.Icon; -import io.anuke.mindustry.type.ItemType; -import java.text.NumberFormat; -import java.util.Locale; +import java.text.*; +import java.util.*; -import static io.anuke.mindustry.Vars.content; -import static io.anuke.mindustry.Vars.data; +import static io.anuke.mindustry.Vars.*; /** Displays a list of items, e.g. launched items.*/ public class ItemsDisplay extends Table{ private static final NumberFormat format = NumberFormat.getNumberInstance(Locale.getDefault()); + private StringBuilder builder = new StringBuilder(); public ItemsDisplay(){ rebuild(); @@ -29,12 +28,13 @@ public class ItemsDisplay extends Table{ table(Tex.button,t -> { t.margin(10).marginLeft(15).marginTop(15f); - t.add("$launcheditems").colspan(3).left().padBottom(5); + t.add("$launcheditems").colspan(3).left(); + t.row(); + t.label(() -> state.is(State.menu) ? "" : "$launchinfo").colspan(3).width(210f).wrap().padBottom(4).left(); t.row(); - ObjectIntMap items = data.items(); for(Item item : content.items()){ if(item.type == ItemType.material && data.isUnlocked(item)){ - t.label(() -> format.format(items.get(item, 0))).left(); + t.label(() -> format(item)).left(); t.addImage(item.icon(Icon.medium)).size(8 * 3).padLeft(4).padRight(4); t.add(item.localizedName()).color(Color.lightGray).left(); t.row(); @@ -42,4 +42,14 @@ public class ItemsDisplay extends Table{ } }); } + + private String format(Item item){ + builder.setLength(0); + builder.append(ui.formatAmount(data.items().get(item, 0))); + if(!state.teams.get(player.getTeam()).cores.isEmpty() && state.teams.get(player.getTeam()).cores.first().entity != null){ + builder.append(" [unlaunched]+ "); + builder.append(ui.formatAmount(state.teams.get(player.getTeam()).cores.first().entity.items.get(item))); + } + return builder.toString(); + } }