diff --git a/res/ui/vignette-strong.lossless.png b/res/ui/vignette-strong.lossless.png new file mode 100644 index 00000000..e432a31e Binary files /dev/null and b/res/ui/vignette-strong.lossless.png differ diff --git a/src/css/common.scss b/src/css/common.scss index b3b3b103..448ebe4f 100644 --- a/src/css/common.scss +++ b/src/css/common.scss @@ -83,7 +83,7 @@ body { right: 0; bottom: 0; background: rgba(50, 60, 70, 0.8); - z-index: 9999; + z-index: 999999; display: flex; justify-content: center; align-items: center; diff --git a/src/css/states/main_menu.scss b/src/css/states/main_menu.scss index 96eb7882..025d4719 100644 --- a/src/css/states/main_menu.scss +++ b/src/css/states/main_menu.scss @@ -52,14 +52,13 @@ } } - &::before, &::after { position: absolute; top: 0; left: 0; right: 0; bottom: 0; - background: uiResource("vignette.lossless.png") center center / cover no-repeat; + background: uiResource("vignette-strong.lossless.png") center center / cover no-repeat; pointer-events: none; z-index: 2; content: ""; diff --git a/src/js/game/hud/parts/settings_menu.js b/src/js/game/hud/parts/settings_menu.js index 16da0440..f5314cd6 100644 --- a/src/js/game/hud/parts/settings_menu.js +++ b/src/js/game/hud/parts/settings_menu.js @@ -61,7 +61,9 @@ export class HUDSettingsMenu extends BaseHUDPart { } returnToMenu() { - this.root.gameState.goBackToMenu(); + this.root.app.adProvider.showVideoAd().then(() => { + this.root.gameState.goBackToMenu(); + }); } goToSettings() { diff --git a/src/js/globals.d.ts b/src/js/globals.d.ts index f500035f..aa8b4675 100644 --- a/src/js/globals.d.ts +++ b/src/js/globals.d.ts @@ -93,6 +93,7 @@ declare interface Window { grecaptcha: any; gtag: any; cpmstarAPI: any; + CrazyGames: any; // Mods $shapez_registerMod: any; diff --git a/src/js/platform/ad_providers/crazygames.js b/src/js/platform/ad_providers/crazygames.js new file mode 100644 index 00000000..295a2102 --- /dev/null +++ b/src/js/platform/ad_providers/crazygames.js @@ -0,0 +1,91 @@ +import { AdProviderInterface } from "../ad_provider"; +import { createLogger } from "../../core/logging"; +import { timeoutPromise } from "../../core/utils"; + +const logger = createLogger("crazygames"); + +export class CrazygamesAdProvider extends AdProviderInterface { + getHasAds() { + return true; + } + + getCanShowVideoAd() { + return this.getHasAds() && this.sdkInstance; + } + + get sdkInstance() { + try { + return window.CrazyGames.CrazySDK.getInstance(); + } catch (ex) { + return null; + } + } + + initialize() { + if (!this.getHasAds()) { + return Promise.resolve(); + } + + logger.log("🎬 Initializing crazygames SDK"); + + const scriptTag = document.createElement("script"); + scriptTag.type = "text/javascript"; + + return timeoutPromise( + new Promise((resolve, reject) => { + scriptTag.onload = resolve; + scriptTag.onerror = reject; + scriptTag.src = "https://sdk.crazygames.com/crazygames-sdk-v1.js"; + document.head.appendChild(scriptTag); + }) + .then(() => { + logger.log("🎬 Crazygames SDK loaded, now initializing"); + this.sdkInstance.init(); + }) + .catch(ex => { + console.warn("Failed to init crazygames SDK:", ex); + }) + ); + } + + showVideoAd() { + const instance = this.sdkInstance; + if (!instance) { + return Promise.resolve(); + } + + logger.log("Set sound volume to 0"); + this.app.sound.setMusicVolume(0); + this.app.sound.setSoundVolume(0); + + return timeoutPromise( + new Promise(resolve => { + console.log("🎬 crazygames: Start ad"); + document.body.classList.add("externalAdOpen"); + + const finish = () => { + instance.removeEventListener("adError", finish); + instance.removeEventListener("adFinished", finish); + resolve(); + }; + + instance.addEventListener("adError", finish); + instance.addEventListener("adFinished", finish); + + instance.requestAd(); + }), + 60000 + ) + .catch(ex => { + console.warn("Error while resolving video ad:", ex); + }) + .then(() => { + document.body.classList.remove("externalAdOpen"); + + logger.log("Restored sound volume"); + + this.app.sound.setMusicVolume(this.app.settings.getSetting("musicVolume")); + this.app.sound.setSoundVolume(this.app.settings.getSetting("soundVolume")); + }); + } +} diff --git a/src/js/platform/ad_providers/gamedistribution.js b/src/js/platform/ad_providers/gamedistribution.js index 5a91646f..be8e41a3 100644 --- a/src/js/platform/ad_providers/gamedistribution.js +++ b/src/js/platform/ad_providers/gamedistribution.js @@ -32,8 +32,6 @@ export class GamedistributionAdProvider extends AdProviderInterface { * When we showed the last video ad */ this.lastVideoAdShowTime = -1e20; - - console.error("X"); } getHasAds() { diff --git a/src/js/platform/browser/wrapper.js b/src/js/platform/browser/wrapper.js index 267fce08..94d174f3 100644 --- a/src/js/platform/browser/wrapper.js +++ b/src/js/platform/browser/wrapper.js @@ -3,6 +3,7 @@ import { createLogger } from "../../core/logging"; import { queryParamOptions } from "../../core/query_parameters"; import { WEB_STEAM_SSO_AUTHENTICATED } from "../../core/steam_sso"; import { clamp } from "../../core/utils"; +import { CrazygamesAdProvider } from "../ad_providers/crazygames"; import { GamedistributionAdProvider } from "../ad_providers/gamedistribution"; import { NoAdProvider } from "../ad_providers/no_ad_provider"; import { SteamAchievementProvider } from "../electron/steam_achievement_provider"; @@ -22,13 +23,11 @@ export class PlatformWrapperImplBrowser extends PlatformWrapperInterface { adProvider: NoAdProvider, iframed: false, externalLinks: true, - iogLink: true, }; if (!G_IS_STANDALONE && !WEB_STEAM_SSO_AUTHENTICATED && queryParamOptions.embedProvider) { const providerId = queryParamOptions.embedProvider; this.embedProvider.iframed = true; - this.embedProvider.iogLink = false; switch (providerId) { case "armorgames": { @@ -38,7 +37,6 @@ export class PlatformWrapperImplBrowser extends PlatformWrapperInterface { case "iogames.space": { this.embedProvider.id = "iogames.space"; - this.embedProvider.iogLink = true; break; } @@ -61,6 +59,7 @@ export class PlatformWrapperImplBrowser extends PlatformWrapperInterface { case "crazygames": { this.embedProvider.id = "crazygames"; + this.embedProvider.adProvider = CrazygamesAdProvider; break; }