From 5171062e0fb4bbdfe0cb3e687e5eabc909c8b25c Mon Sep 17 00:00:00 2001 From: Daan Breur Date: Sun, 14 Nov 2021 21:03:02 +0100 Subject: [PATCH] Start of UI for newSavegame. Currently Includes: Name and Seed --- src/js/states/main_menu.js | 52 +++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index 60495a9c..610661c4 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -12,6 +12,7 @@ import { makeButton, makeButtonElement, makeDiv, + randomInt, removeAllChildren, startFileChoose, waitNextFrame, @@ -672,14 +673,53 @@ export class MainMenuState extends GameState { return; } - this.app.analytics.trackUiClick("startgame"); - this.app.adProvider.showVideoAd().then(() => { - const savegame = this.app.savegameMgr.createNewSavegame(); + const regex = /^[a-zA-Z0-9_\- ]{1,20}$/; - this.moveToState("InGameState", { - savegame, + const nameInput = new FormElementInput({ + id: "nameInput", + // label: T.dialogs.newSavegame.nameInputLabel, + label: "Name:", + placeholder: "", + defaultValue: "", + validator: val => val.match(regex) && trim(val).length > 0, + }); + + const seedInput = new FormElementInput({ + id: "seedInput", + // label: T.dialogs.newSavegame.seedInputLabel, + label: "Seed:", + placeholder: "", + defaultValue: randomInt(0, 100000).toString(), + validator: val => Number.isInteger(Number(val)) && Number(val) >= 0 && Number(val) <= 100000, + }); + + const dialog = new DialogWithForm({ + app: this.app, + // title: T.dialogs.newSavegame.title, + // desc: T.dialogs.newSavegame.desc, + title: "New Game Options", + desc: "Configure your new savegame", + formElements: [nameInput, seedInput], + buttons: ["ok:good:enter"], + }); + this.dialogs.internalShowDialog(dialog); + + dialog.buttonSignals.ok.add(() => { + this.app.analytics.trackUiClick("startgame"); + this.app.adProvider.showVideoAd().then(async () => { + const savegame = this.app.savegameMgr.createNewSavegame(); + const savegameMetadata = this.app.savegameMgr.getGameMetaDataByInternalId( + savegame.internalId + ); + savegameMetadata.name = trim(nameInput.getValue()); + await this.app.savegameMgr.writeAsync(); + + this.moveToState("InGameState", { + savegame, + seed: Number(seedInput.getValue()), + }); + this.app.analytics.trackUiClick("startgame_adcomplete"); }); - this.app.analytics.trackUiClick("startgame_adcomplete"); }); }