update win modal to link to patreon, create game mode rotation

This commit is contained in:
Evan
2025-04-07 18:31:42 -07:00
parent ec895af600
commit d1da506201
4 changed files with 48 additions and 30 deletions
+23 -26
View File
@@ -149,7 +149,7 @@ export class WinModal extends LitElement implements Layer {
return html`
<div class="win-modal ${this.isVisible ? "visible" : ""}">
<h2>${this._title || ""}</h2>
${this.supportHTML()}
${this.innerHtml()}
<div class="button-container">
<button @click=${this._handleExit}>Exit Game</button>
<button @click=${this.hide}>Keep Playing</button>
@@ -158,34 +158,31 @@ export class WinModal extends LitElement implements Layer {
`;
}
updated(changedProperties) {
super.updated(changedProperties);
// Initialize ads if modal is visible and showing ads
if (changedProperties.has("isVisible") && this.isVisible && !this.won) {
try {
setTimeout(() => {
(adsbygoogle = window.adsbygoogle || []).push({});
}, 0);
} catch (error) {
console.error("Error initializing ad:", error);
}
}
}
supportHTML() {
innerHtml() {
return html`
<div style="text-align: center; margin: 15px 0;">
<div style="text-align: center; margin: 15px 0; line-height: 1.5;">
<p>
Like the game? Help make this my full-time project!
<a
href="https://discord.gg/k22YrnAzGp"
target="_blank"
rel="noopener noreferrer"
style="color: #0096ff; text-decoration: underline; display: block; margin-top: 5px;"
>
Support the game!
</a>
<span style="color: red;">Time's running out!</span> <br />
I need your support to continue working on OpenFront full-time. Please
donate now to keep the updates, new features, and improvements coming.
</p>
<a
href="https://patreon.com/OpenFront"
target="_blank"
rel="noopener noreferrer"
style="
display: inline-block;
padding: 10px 20px;
background-color: #FF424D;
color: white;
text-decoration: none;
border-radius: 5px;
font-weight: bold;
transition: background-color 0.2s;
"
>
Support on Patreon
</a>
</div>
`;
}
+1 -1
View File
@@ -184,7 +184,7 @@
/>
</g>
</svg>
<div class="l-header__highlightText">v21.0</div>
<div class="l-header__highlightText">v21.1</div>
</div>
</header>
<div class="bg-image"></div>
+11 -1
View File
@@ -1,4 +1,4 @@
import { GameMapType } from "../core/game/Game";
import { GameMapType, GameMode } from "../core/game/Game";
import { PseudoRandom } from "../core/PseudoRandom";
enum PlaylistType {
@@ -9,6 +9,9 @@ enum PlaylistType {
const random = new PseudoRandom(123);
export class MapPlaylist {
private gameModeRotation = [GameMode.FFA, GameMode.FFA, GameMode.Team];
private currentGameModeIndex = 0;
private mapsPlaylistBig: GameMapType[] = [];
private mapsPlaylistSmall: GameMapType[] = [];
private currentPlaylistCounter = 0;
@@ -20,6 +23,13 @@ export class MapPlaylist {
return mapsPlaylist.shift()!;
}
public getNextGameMode(): GameMode {
const nextGameMode = this.gameModeRotation[this.currentGameModeIndex];
this.currentGameModeIndex =
(this.currentGameModeIndex + 1) % this.gameModeRotation.length;
return nextGameMode;
}
private getNextMapsPlayList(playlistType: PlaylistType): GameMapType[] {
switch (playlistType) {
case PlaylistType.BigMaps:
+13 -2
View File
@@ -222,11 +222,22 @@ async function fetchLobbies(): Promise<number> {
return publicLobbyIDs.size;
}
let lastGameMode: GameMode = GameMode.FFA;
// Function to schedule a new public game
async function schedulePublicGame(playlist: MapPlaylist) {
const gameID = generateID();
const map = playlist.getNextMap();
publicLobbyIDs.add(gameID);
if (lastGameMode == GameMode.FFA) {
lastGameMode = GameMode.Team;
} else {
lastGameMode = GameMode.FFA;
}
const gameMode = playlist.getNextGameMode();
// Create the default public game config (from your GameManager)
const defaultGameConfig = {
gameMap: map,
@@ -236,9 +247,9 @@ async function schedulePublicGame(playlist: MapPlaylist) {
infiniteGold: false,
infiniteTroops: false,
instantBuild: false,
disableNPCs: false,
disableNPCs: gameMode == GameMode.Team,
disableNukes: false,
gameMode: Math.random() < 0.5 ? GameMode.FFA : GameMode.Team,
gameMode: gameMode,
bots: 400,
} as GameConfig;