* Fix text setting in marker control
* Fix marker and bridge calculation game crashes, minor marker instruction code fixes
* Add privileged desynced client constant global variables
* Remove broken attempt to not initialize client vars on server
* Make @clientLocale variable non-constant, make @server and @client privileged
* WIP Implementation of map-specific locale bundles
* Progress on map locale bundles: add locale data to saves, make objectives use map locales if possible
* Add print formatting and map locale printing to world processors
* 🗿
* Minor map locales dialog ui changes
* Make map locale bundles load when joining multiplayer server
* Remove static declaration of current locale in MapLocales to fix tests failing
* Unify name of localeprint instruction, minor instruction description change, fix map locales incorrectly loading from clipboard
* Fix locale bundles not saving in game state, add global var, make objective markers use map locale bundles and .mobile properties on mobile devices
* Even more map locales dialog improvements
* Fix english locale picking (when property isn't presented in current locale but english version has it) not working
* Add icon pasting to map locales dialog, minor ui changes
* Fix inconsistent game crash with null text in objectives, define player.locale on game loading (for clientLocale var)
* Change format instruction placeholders to backslash, fix map locales system incorrectly handling default locale
* understood
122 lines
4.0 KiB
Java
122 lines
4.0 KiB
Java
package mindustry.editor;
|
|
|
|
import arc.scene.ui.*;
|
|
import arc.struct.*;
|
|
import mindustry.*;
|
|
import mindustry.game.*;
|
|
import mindustry.gen.*;
|
|
import mindustry.io.*;
|
|
import mindustry.maps.filters.*;
|
|
import mindustry.type.*;
|
|
import mindustry.ui.*;
|
|
import mindustry.ui.dialogs.*;
|
|
|
|
import static mindustry.Vars.*;
|
|
|
|
public class MapInfoDialog extends BaseDialog{
|
|
private final WaveInfoDialog waveInfo;
|
|
private final MapGenerateDialog generate;
|
|
private final CustomRulesDialog ruleInfo = new CustomRulesDialog();
|
|
private final MapObjectivesDialog objectives = new MapObjectivesDialog();
|
|
private final MapLocalesDialog locales = new MapLocalesDialog();
|
|
|
|
public MapInfoDialog(){
|
|
super("@editor.mapinfo");
|
|
this.waveInfo = new WaveInfoDialog();
|
|
this.generate = new MapGenerateDialog(false);
|
|
|
|
addCloseButton();
|
|
|
|
shown(this::setup);
|
|
}
|
|
|
|
private void setup(){
|
|
cont.clear();
|
|
|
|
ObjectMap<String, String> tags = editor.tags;
|
|
|
|
cont.pane(t -> {
|
|
t.add("@editor.mapname").padRight(8).left();
|
|
t.defaults().padTop(15);
|
|
|
|
TextField name = t.field(tags.get("name", ""), text -> {
|
|
tags.put("name", text);
|
|
}).size(400, 55f).maxTextLength(50).get();
|
|
name.setMessageText("@unknown");
|
|
|
|
t.row();
|
|
t.add("@editor.description").padRight(8).left();
|
|
|
|
TextArea description = t.area(tags.get("description", ""), Styles.areaField, text -> {
|
|
tags.put("description", text);
|
|
}).size(400f, 140f).maxTextLength(1000).get();
|
|
|
|
t.row();
|
|
t.add("@editor.author").padRight(8).left();
|
|
|
|
TextField author = t.field(tags.get("author", ""), text -> {
|
|
tags.put("author", text);
|
|
}).size(400, 55f).maxTextLength(50).get();
|
|
author.setMessageText("@unknown");
|
|
|
|
t.row();
|
|
|
|
t.table(Tex.button, r -> {
|
|
r.defaults().width(230f).height(60f);
|
|
|
|
var style = Styles.flatt;
|
|
|
|
r.button("@editor.rules", Icon.list, style, () -> {
|
|
ruleInfo.show(Vars.state.rules, () -> Vars.state.rules = new Rules());
|
|
hide();
|
|
}).marginLeft(10f);
|
|
|
|
r.button("@editor.waves", Icon.units, style, () -> {
|
|
waveInfo.show();
|
|
hide();
|
|
}).marginLeft(10f);
|
|
|
|
r.row();
|
|
|
|
r.button("@editor.objectives", Icon.info, style, () -> {
|
|
objectives.show(state.rules.objectives.all, state.rules.objectives.all::set);
|
|
hide();
|
|
}).marginLeft(10f);
|
|
|
|
r.button("@editor.generation", Icon.terrain, style, () -> {
|
|
//randomize so they're not all the same seed
|
|
var res = maps.readFilters(editor.tags.get("genfilters", ""));
|
|
res.each(GenerateFilter::randomize);
|
|
|
|
generate.show(res,
|
|
filters -> {
|
|
//reset seed to 0 so it is not written
|
|
filters.each(f -> f.seed = 0);
|
|
editor.tags.put("genfilters", JsonIO.write(filters));
|
|
});
|
|
hide();
|
|
}).marginLeft(10f);
|
|
|
|
r.row();
|
|
|
|
r.button("@editor.locales", Icon.fileText, style, () -> {
|
|
try{
|
|
MapLocales res = JsonIO.read(MapLocales.class, editor.tags.get("locales", "{}"));
|
|
locales.show(res);
|
|
}catch(Throwable e){
|
|
locales.show(new MapLocales());
|
|
ui.showException(e);
|
|
}
|
|
hide();
|
|
}).marginLeft(10f).width(0f).colspan(2).center().growX();
|
|
}).colspan(2).center();
|
|
|
|
name.change();
|
|
description.change();
|
|
author.change();
|
|
|
|
t.margin(16f);
|
|
});
|
|
}
|
|
}
|