diff --git a/src/css/ingame_hud/standalone_advantages.scss b/src/css/ingame_hud/standalone_advantages.scss index a7207b98..56c00fd9 100644 --- a/src/css/ingame_hud/standalone_advantages.scss +++ b/src/css/ingame_hud/standalone_advantages.scss @@ -39,30 +39,12 @@ @include IncreasedClickArea(0px); @include S(margin-top, 15px); - &[data-btn-variant="0"] { - // nothing - } - - &[data-btn-variant="1"] { - @include InlineAnimation(1s ease-in-out) { - 0% { - opacity: 0.05; - } - 50% { - opacity: 0.05; - } - 100% { - opacity: 1; - } - } - } - - &[data-btn-variant="2"] { - @include InlineAnimation(2.5s ease-in-out) { + &[data-btn-variant="prod"] { + @include InlineAnimation(8s ease-in-out) { 0% { opacity: 0.05; } - 50% { + 80% { opacity: 0.05; } 100% { @@ -71,7 +53,7 @@ } } - &[data-btn-variant="3"] { + &[data-btn-variant="steam-demo"] { @include InlineAnimation(5s ease-in-out) { 0% { opacity: 0.05; @@ -84,20 +66,6 @@ } } } - - &[data-btn-variant="4"] { - @include InlineAnimation(10s ease-in-out) { - 0% { - opacity: 0.05; - } - 80% { - opacity: 0.05; - } - 100% { - opacity: 1; - } - } - } } .playtimeDisclaimer { diff --git a/src/css/states/main_menu.scss b/src/css/states/main_menu.scss index 05cd861e..4e403bd3 100644 --- a/src/css/states/main_menu.scss +++ b/src/css/states/main_menu.scss @@ -109,6 +109,14 @@ font-weight: 700 !important; } + .onlinePlayerCount { + color: #fff; + @include S(margin-top, 15px); + @include SuperSmallText; + @include S(height, 15px); + text-align: center; + } + h3 { @include Heading; font-weight: bold; @@ -422,6 +430,7 @@ box-shadow: 0 D(5px) D(15px) rgba(#000, 0.2); height: 100%; width: 100%; + position: relative; box-sizing: border-box; .buttons { diff --git a/src/js/game/hud/parts/standalone_advantages.js b/src/js/game/hud/parts/standalone_advantages.js index 79ae4b48..c97982e3 100644 --- a/src/js/game/hud/parts/standalone_advantages.js +++ b/src/js/game/hud/parts/standalone_advantages.js @@ -39,7 +39,7 @@ export class HUDStandaloneAdvantages extends BaseHUDPart { : "" } - diff --git a/src/js/platform/browser/game_analytics.js b/src/js/platform/browser/game_analytics.js index d770a495..2f6a381b 100644 --- a/src/js/platform/browser/game_analytics.js +++ b/src/js/platform/browser/game_analytics.js @@ -18,8 +18,8 @@ const analyticsUrl = G_IS_DEV ? "http://localhost:8001" : "https://analytics.sha // Be sure to increment the ID whenever it changes const analyticsLocalFile = G_IS_STEAM_DEMO ? "shapez_token_steamdemo.bin" : "shapez_token_123.bin"; -const CURRENT_ABT = "abt_sacb"; -const CURRENT_ABT_COUNT = 5; +const CURRENT_ABT = "abt_mmat"; +const CURRENT_ABT_COUNT = 3; export class ShapezGameAnalytics extends GameAnalyticsInterface { constructor(app) { diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index b6d6ce1d..313da908 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -35,6 +35,8 @@ let firstPlayForwarded = false; export class MainMenuState extends GameState { constructor() { super("MainMenuState"); + + this.refreshInterval = null; } getInnerHTML() { @@ -72,18 +74,25 @@ export class MainMenuState extends GameState { !G_IS_STEAM_DEMO && /** @type { PlatformWrapperImplElectron}*/ (this.app.platformWrapper).dlcs.puzzle); + let abtVariant = this.app.gameAnalytics.abtVariant; const bannerHtml = `

${T.demoBanners.title}

${T.demoBanners.intro}

- ${T.demoBanners.playtimeDisclaimer} + ${ + abtVariant === "0" + ? `${T.demoBanners.playtimeDisclaimer}` + : "" + } - ${ - globalConfig.currentDiscount > 0 - ? `-${globalConfig.currentDiscount}%!` - : "" - } + ${ + globalConfig.currentDiscount > 0 + ? `-${globalConfig.currentDiscount}%!` + : "" + } + ${abtVariant === "2" ? `
` : ""} + `; return ` @@ -113,11 +122,7 @@ export class MainMenuState extends GameState {
- ${ - showBrowserWarning - ? `
${T.mainMenu.browserWarning}
` - : "" - } + ${showBrowserWarning ? `
${T.mainMenu.browserWarning}
` : ""}
@@ -373,6 +378,9 @@ export class MainMenuState extends GameState { this.renderMainMenu(); this.renderSavegames(); + this.fetchPlayerCount(); + + this.refreshInterval = setInterval(() => this.fetchPlayerCount(), 10000); } renderMainMenu() { @@ -416,9 +424,27 @@ export class MainMenuState extends GameState { buttonContainer.appendChild(outerDiv); } + fetchPlayerCount() { + const element = this.htmlElement.querySelector(".onlinePlayerCount"); + if (!element) { + return; + } + fetch("https://analytics.shapez.io/v1/player-count", { + cache: "no-cache", + }) + .then(res => res.json()) + .then( + count => { + element.innerText = T.demoBanners.playerCount.replace("", String(count)); + }, + ex => { + console.warn("Failed to get player count:", ex); + } + ); + } + onPuzzleModeButtonClicked(force = false) { const hasUnlockedBlueprints = this.app.savegameMgr.getSavegamesMetaData().some(s => s.level >= 12); - console.log(hasUnlockedBlueprints); if (!force && !hasUnlockedBlueprints) { const { ok } = this.dialogs.showWarning( T.dialogs.puzzlePlayRegularRecommendation.title, @@ -794,5 +820,6 @@ export class MainMenuState extends GameState { onLeave() { this.dialogs.cleanup(); + clearInterval(this.refreshInterval); } } diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 419c2475..a8fd3535 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -106,6 +106,8 @@ demoBanners: playtimeDisclaimer: >- The full version contains more than 24 hours of content. + playerCount: >- + players like you are currently playing shapez on Steam mainMenu: play: Play