Added editor playtest button

This commit is contained in:
Anuken
2022-02-08 01:40:12 -05:00
parent b5a63fb6ee
commit 54499e9c2c
6 changed files with 69 additions and 7 deletions

View File

@@ -295,17 +295,31 @@ public class Control implements ApplicationListener, Loadable{
}
public void playMap(Map map, Rules rules){
playMap(map, rules, false);
}
public void playMap(Map map, Rules rules, boolean playtest){
ui.loadAnd(() -> {
logic.reset();
world.loadMap(map, rules);
state.rules = rules;
if(playtest) state.playtestingMap = map;
state.rules.sector = null;
state.rules.editor = false;
logic.play();
if(settings.getBool("savecreate") && !world.isInvalidMap()){
if(settings.getBool("savecreate") && !world.isInvalidMap() && !playtest){
control.saves.addSave(map.name() + " " + new SimpleDateFormat("MMM dd h:mm", Locale.getDefault()).format(new Date()));
}
Events.fire(Trigger.newGame);
//booted out of map, resume editing
if(world.isInvalidMap() && playtest){
Dialog current = scene.getDialog();
ui.editor.resumeAfterPlaytest(map);
if(current != null){
current.update(current::toFront);
}
}
});
}

View File

@@ -34,6 +34,8 @@ public class GameState{
public Teams teams = new Teams();
/** Number of enemies in the game; only used clientside in servers. */
public int enemies;
/** Map being playtested (not edited!) */
public @Nullable Map playtestingMap;
/** Current game state. */
private State state = State.menu;

View File

@@ -39,6 +39,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
private MapResizeDialog resizeDialog;
private MapGenerateDialog generateDialog;
private SectorGenerateDialog sectorGenDialog;
private MapPlayDialog playtestDialog;
private ScrollPane pane;
private BaseDialog menu;
private Table blockSelection;
@@ -56,6 +57,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
infoDialog = new MapInfoDialog();
generateDialog = new MapGenerateDialog(true);
sectorGenDialog = new SectorGenerateDialog();
playtestDialog = new MapPlayDialog();
menu = new BaseDialog("@menu");
menu.addCloseButton();
@@ -122,6 +124,12 @@ public class MapEditorDialog extends Dialog implements Disposable{
file.writePng(out);
out.dispose();
})));
t.row();
t.button("@editor.ingame", Icon.right, this::editInGame);
t.button("@editor.playtest", Icon.play, this::playtest);
});
menu.cont.row();
@@ -172,14 +180,12 @@ public class MapEditorDialog extends Dialog implements Disposable{
menu.cont.row();
}
menu.cont.button("@editor.ingame", Icon.right, this::playtest).padTop(!steam && !experimental ? -3 : 1).size(swidth * 2f + 10, 60f);
menu.cont.row();
menu.cont.button("@quit", Icon.exit, () -> {
tryExit();
menu.hide();
}).size(swidth * 2f + 10, 60f);
}).padTop(!steam && !experimental ? -3 : 1).size(swidth * 2f + 10, 60f);
resizeDialog = new MapResizeDialog((x, y) -> {
if(!(editor.width() == x && editor.height() == y)){
@@ -249,7 +255,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
editor.renderer.updateAll();
}
private void playtest(){
private void editInGame(){
menu.hide();
ui.loadAnd(() -> {
lastSavedRules = state.rules;
@@ -283,6 +289,33 @@ public class MapEditorDialog extends Dialog implements Disposable{
});
}
public void resumeAfterPlaytest(Map map){
beginEditMap(map.file);
}
private void playtest(){
menu.hide();
Map map = save();
if(map != null){
//skip dialog, play with survival or attack when shift clicked
if(Core.input.shift()){
hide();
//auto pick best fit
control.playMap(map, map.applyRules(
Gamemode.survival.valid(map) ? Gamemode.survival :
Gamemode.attack.valid(map) ? Gamemode.attack :
Gamemode.sandbox), true
);
}else{
playtestDialog.playListener = this::hide;
//TODO skip dialog? or reuse
//TODO set playtesting map, do not create save.
playtestDialog.show(map, true);
}
}
}
public @Nullable Map save(){
boolean isEditor = state.rules.editor;
state.rules.editor = false;

View File

@@ -12,6 +12,8 @@ import mindustry.ui.*;
import static mindustry.Vars.*;
public class MapPlayDialog extends BaseDialog{
public @Nullable Runnable playListener;
CustomRulesDialog dialog = new CustomRulesDialog();
Rules rules;
Gamemode selectedGamemode = Gamemode.survival;
@@ -31,6 +33,10 @@ public class MapPlayDialog extends BaseDialog{
}
public void show(Map map){
show(map, false);
}
public void show(Map map, boolean playtesting){
this.lastMap = map;
title.setText(map.name());
cont.clearChildren();
@@ -79,7 +85,8 @@ public class MapPlayDialog extends BaseDialog{
addCloseButton();
buttons.button("@play", Icon.play, () -> {
control.playMap(map, rules);
if(playListener != null) playListener.run();
control.playMap(map, rules, playtesting);
hide();
ui.custom.hide();
}).size(210f, 64f);

View File

@@ -105,13 +105,18 @@ public class PausedDialog extends BaseDialog{
}else{
quit.run();
}
}
public void runExitSave(){
if(state.isEditor() && !wasClient){
ui.editor.resumeEditing();
return;
}else if(state.playtestingMap != null){
//no exit save here
var testing = state.playtestingMap;
logic.reset();
ui.editor.resumeAfterPlaytest(testing);
return;
}
if(control.saves.getCurrent() == null || !control.saves.getCurrent().isAutosave() || wasClient){