Support for crazgames sdk

This commit is contained in:
tobspr 2022-06-27 17:20:01 +02:00
parent 56296ab88a
commit a39195c972
8 changed files with 99 additions and 9 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -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;

View File

@ -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: "";

View File

@ -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() {

1
src/js/globals.d.ts vendored
View File

@ -93,6 +93,7 @@ declare interface Window {
grecaptcha: any;
gtag: any;
cpmstarAPI: any;
CrazyGames: any;
// Mods
$shapez_registerMod: any;

View File

@ -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"));
});
}
}

View File

@ -32,8 +32,6 @@ export class GamedistributionAdProvider extends AdProviderInterface {
* When we showed the last video ad
*/
this.lastVideoAdShowTime = -1e20;
console.error("X");
}
getHasAds() {

View File

@ -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;
}