mirror of
https://github.com/tobspr/shapez.io.git
synced 2026-03-02 03:39:21 +00:00
Allow to disable hints, add changelog
This commit is contained in:
45
src/js/states/changelog.js
Normal file
45
src/js/states/changelog.js
Normal file
@@ -0,0 +1,45 @@
|
||||
import { TextualGameState } from "../core/textual_game_state";
|
||||
import { T } from "../translations";
|
||||
import { CHANGELOG } from "../changelog";
|
||||
|
||||
export class ChangelogState extends TextualGameState {
|
||||
constructor() {
|
||||
super("ChangelogState");
|
||||
}
|
||||
|
||||
getStateHeaderTitle() {
|
||||
return T.changelog.title;
|
||||
}
|
||||
|
||||
getMainContentHTML() {
|
||||
const entries = CHANGELOG;
|
||||
|
||||
let html = "";
|
||||
|
||||
for (let i = 0; i < entries.length; ++i) {
|
||||
const entry = entries[i];
|
||||
html += `
|
||||
<div class="entry">
|
||||
<span class="version">${entry.version}</span>
|
||||
<span class="date">${entry.date}</span>
|
||||
<ul class="changes">
|
||||
${entry.entries.map(text => `<li>${text}</li>`).join("")}
|
||||
</ul>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
onEnter() {
|
||||
const links = this.htmlElement.querySelectorAll("a[href]");
|
||||
links.forEach(link => {
|
||||
this.trackClicks(
|
||||
link,
|
||||
() => this.app.platformWrapper.openExternalLink(link.getAttribute("href")),
|
||||
{ preventClick: true }
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -77,16 +77,18 @@ export class MainMenuState extends GameState {
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<a class="githubLink" target="_blank">
|
||||
<a class="githubLink boxLink" target="_blank">
|
||||
${T.mainMenu.openSourceHint}
|
||||
<span class="thirdpartyLogo githubLogo"></span>
|
||||
</a>
|
||||
|
||||
<a class="discordLink" target="_blank">
|
||||
<a class="discordLink boxLink" target="_blank">
|
||||
${T.mainMenu.discordLink}
|
||||
<span class="thirdpartyLogo discordLogo"></span>
|
||||
</a>
|
||||
|
||||
<a class="changelog">${T.changelog.title}</a>
|
||||
|
||||
${
|
||||
G_IS_BROWSER &&
|
||||
this.app.platformWrapper instanceof PlatformWrapperImplBrowser &&
|
||||
@@ -207,6 +209,7 @@ export class MainMenuState extends GameState {
|
||||
}
|
||||
|
||||
this.trackClicks(qs(".settingsButton"), this.onSettingsButtonClicked);
|
||||
this.trackClicks(qs(".changelog"), this.onChangelogClicked);
|
||||
|
||||
if (G_IS_STANDALONE) {
|
||||
this.trackClicks(qs(".exitAppButton"), this.onExitAppButtonClicked);
|
||||
@@ -251,6 +254,10 @@ export class MainMenuState extends GameState {
|
||||
this.app.platformWrapper.exitApp();
|
||||
}
|
||||
|
||||
onChangelogClicked() {
|
||||
this.moveToState("ChangelogState");
|
||||
}
|
||||
|
||||
renderSavegames() {
|
||||
const oldContainer = this.htmlElement.querySelector(".mainContainer .savegames");
|
||||
if (oldContainer) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import { cachebust } from "../core/cachebust";
|
||||
import { PlatformWrapperImplBrowser } from "../platform/browser/wrapper";
|
||||
import { T } from "../translations";
|
||||
import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs";
|
||||
import { CHANGELOG } from "../changelog";
|
||||
|
||||
const logger = createLogger("state/preload");
|
||||
|
||||
@@ -176,6 +177,52 @@ export class PreloadState extends GameState {
|
||||
return this.app.backgroundResourceLoader.getPromiseForBareGame();
|
||||
})
|
||||
|
||||
.then(() => this.setStatus("Checking changelog"))
|
||||
.then(() => {
|
||||
return this.app.storage
|
||||
.readFileAsync("lastversion.bin")
|
||||
.catch(err => {
|
||||
logger.warn("Failed to read lastversion:", err);
|
||||
return G_BUILD_VERSION;
|
||||
})
|
||||
.then(version => {
|
||||
this.app.storage.writeFileAsync("lastversion.bin", version);
|
||||
return version;
|
||||
})
|
||||
.then(version => {
|
||||
let changelogEntries = [];
|
||||
logger.log("Last seen version:", version);
|
||||
|
||||
for (let i = 0; i < CHANGELOG.length; ++i) {
|
||||
if (CHANGELOG[i].version === version) {
|
||||
break;
|
||||
}
|
||||
changelogEntries.push(CHANGELOG[i]);
|
||||
}
|
||||
if (changelogEntries.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
let dialogHtml = T.dialogs.updateSummary.desc;
|
||||
for (let i = 0; i < changelogEntries.length; ++i) {
|
||||
const entry = changelogEntries[i];
|
||||
dialogHtml += `
|
||||
<div class="changelogDialogEntry">
|
||||
<span class="version">${entry.version}</span>
|
||||
<span class="date">${entry.date}</span>
|
||||
<ul class="changes">
|
||||
${entry.entries.map(text => `<li>${text}</li>`).join("")}
|
||||
</ul>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
return new Promise(resolve => {
|
||||
this.dialogs.showInfo(T.dialogs.updateSummary.title, dialogHtml).ok.add(resolve);
|
||||
});
|
||||
});
|
||||
})
|
||||
|
||||
.then(() => this.setStatus("Launching"))
|
||||
.then(
|
||||
() => {
|
||||
|
||||
@@ -111,10 +111,6 @@ export class SettingsState extends TextualGameState {
|
||||
this.moveToStateAddGoBack("AboutState");
|
||||
}
|
||||
|
||||
onChangelogClicked() {
|
||||
// this.moveToStateAddGoBack("ChangelogState");
|
||||
}
|
||||
|
||||
onKeybindingsClicked() {
|
||||
this.moveToStateAddGoBack("KeybindingsState");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user