From a39195c972fdb2b8028260eced6e1725036ccf68 Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 27 Jun 2022 17:20:01 +0200 Subject: [PATCH] Support for crazgames sdk --- res/ui/vignette-strong.lossless.png | Bin 0 -> 5911 bytes src/css/common.scss | 2 +- src/css/states/main_menu.scss | 3 +- src/js/game/hud/parts/settings_menu.js | 4 +- src/js/globals.d.ts | 1 + src/js/platform/ad_providers/crazygames.js | 91 ++++++++++++++++++ .../platform/ad_providers/gamedistribution.js | 2 - src/js/platform/browser/wrapper.js | 5 +- 8 files changed, 99 insertions(+), 9 deletions(-) create mode 100644 res/ui/vignette-strong.lossless.png create mode 100644 src/js/platform/ad_providers/crazygames.js diff --git a/res/ui/vignette-strong.lossless.png b/res/ui/vignette-strong.lossless.png new file mode 100644 index 0000000000000000000000000000000000000000..e432a31e0071fac13d6c22e902b7ff24bd489089 GIT binary patch literal 5911 zcmaJ_c{Ei2`=4PfW6PdV7-Nz!%wk_>n6YOIV@ZseF=UOgZ)0C8qZA>cQXy;lWQ$Vv zH7ZerLX?su>rbEU_xY7Rvk_U3_11%X6rVKlW=RG@!fumf{J z6i+Q%ywTsr4pzD_FFHL?OIbNAEKDg3qZANCQ$}fOYAPeq%4js=KmrjQ;ZG-pBm9G9 z{z1S~gULbOfpqTxf9P*Sl1D%YT^Dvh^)Da%0#Ba&7uY}e??@fQOgWqssEkrVD*O5U zcI;2-V7e{!|7rYJ>0rBvK&rAWH8>z7hw+VFxEl6mN=_3erQBL`7>L)G(fCgeOWx6G8GsBM~GLRYOyaLh;nlME!&F z-}E(9(I|CwqzZwcibSCZhMG84G|o^1WuRi9p{}X+udb;eLO|0x4&uK;>Luvb7J)X?xC>nKgA9MRjK5)c-A;&+<<@)}PK@(!g^ zjDiCEpnt|$%lp4@ppZRCYM!1*geFv;4-FIvfg-Dt5E@7o3_?RiO$9+EYpQ!<$eJD`iYiR`fTHs6 z()o{4`e*B)K7UXD?TmxPzr98EKWM0+gU$iRGV=idAvse#&My4TimOZLGLlaQvOmP< zSylhdEcoL{)ak2mteJmQ!F;*j?4~pj&N*_wSAXx9@~>&1z5Rv2z3W$ha{SWVQrw!F zG-{tt47Vy=&8W9prLDiC>pgBO{W;Rt{Zlo3T4{A+sa$I{qPXbijjN9bB9yncx0*q# z#c>(mum5zF*1NjAVT`m9`P#?E^J>+EC3ZDa#@Mun zee;jqD%hqU&a}LX50+##zo475YaZBwvHlQLxNNnG328e%xbOm!s2?Xam^3(>6d|B5 z(+RklN4Xi-9Q~0h0G#<*s>iy+vrd-znkqDo!A6y2ZsY?MC#~=a`~6)quZQw24yE$< zTd@_l4qY_Pf@FQrX~z#h&CCRs*i1?mzcT^yy;_h>Cj;n=%v$2;Q<+MI1qXZ$MOjOZaMaNwtfyjEOQTHGnEyYJ>qtB*c`V?YjP83L$d6H zATXAgE1w-o_mp<0nHE>PzTy~COS^nvxU^U=pX5xd+$uG`!cLq6vMV59jbLQFuLkK0 z{owd@ie(~Opmi(K9478ER{9x+_JVeNfp_rS4`aD|nb{#T5FHj@>T&4gEcB)o$R89A zKFi?SlrgYV9L`vekXer&XDKQ;HqOcD>#eqw#o8Xfw$0)t6x$z9Be? zqG;KG6b8C*Lg1M*v@*SV&Xm%%KfpUO(w$zEc%0}P_R@!NEP4Lof>_bx{XhD56Hgy8 znbu}FT=abmZj?&;(9>N4IT{5b{NUPbofi1ob)He}d=(;4H!EtI-TU*yELy^JhQdio zzp5`$5S;U6SZA`NC_$Yi)J}+k%}?jafsR%i#masn`i}JT*6~vAZ2ekYxHr>c?I1S4 za0r?TD>ce7wiKA2e9jtTd?r~<&Usz@X8pNbt4f(m@iD4vWp}1s4|SW=lzCMN!g@JH zThyxPz9ve#IbEQXSmBoLD8=X zO5riO@6HC<^F@?I!?!bHeDSyT44+htx@AhCVuJ_mI8kcY1r z5riX9^UL@7hm1<#%TvO}g`5lEjJf1fz^H4O3D*nb4T)O+zpM)POxvl>g; z*C*&=obj7#};^f8Ko zdl?Hul`Uq1t~Q;7{0>&PkO64DlR_Q)12VB5OAT=xS_Y5}GmM1ZorqS5GZ)xd0HdnX%UP?+jp?oc! zu_Hx~wz&zPdAwkoqNb*F{icv}?DvP|L^~D>Wxy}1it>08(63A=vd*jmXlN;b`NP(} zDHRi(Vt?FU-7D<9dD3HA-pDHK-1am6xLaZqMM8k@3O9%D=%ECQ?1OJs zt>*(y7w*%<3@Pml4+WzDpl$iR>5=m)EbFZdFQtTlEYc@{okcZ%O9{e`l7y+=J>1jj zb+j(o@HRo)=OQixM7robYO$(y@Af4#it!sa2CWt z`}^VXAXvn7aLVu9nf`DtKE59p2lHOG%91R-A9t|f1eW227?{|2tZFD#E3exe?Ex|8^W6c2z#|w;c(=Xy=+C_m9GBcxpWZlr7CKwI>mpJ^ z>~5dBwtYj~&D+4^I!`>{@~<7+O(mh$Y`6^jhy;3+Bm_GtP?TIt7% z?kkn2llY%03)v)zt*pFerKC=SVy_IB@mJ<4B745|Gp1q$)6=F0F@l1zYw^bcvBW(j z9;@dlQEn=51{B&L%dv%qvun$<*iBJb!}S zuY%vvFvwMe60-R`+N=>1SH8Y2;D4Q5Y10xYTV(lu^00&M+VuLTGsh$Ofl;d=&$?Ed z(#s41Cxn$@Q7^$sV+%##>&dvS&n4B_2}OyIG%ORdaT3QEp8#P}qQZZC&73Dxbr;)+ zsR%#F6Cq7tpG?~w$}&LkkNfvKmWq>=viVhecx4=4lI9c(^Y|?VxC5WtL~bnVi+Avj zv+&do_kO;7U1HKk+MIy=E|!~d{y9G1GD9L680`S=WKS=eU`i}Ig;%?B60eWX+RyY6 zOm5sy%b2z~%Am1DsB+iXo=S>(DR}MF6?k{D{Er6{vL$pC)nMrgr+Cc`g-^jhTxCx& zAsuS^4)s8p4h}P}k%yaK>XoVHJnx#MgHmQ*9qto7ae2l;i z;>8gC>N^0n<;u{bY0N~DdP0SPflJ!Da{KfpaA{ZhO83j=S~dBZf`X104~&R|b8K5t zAHFHw)eL~9gk@O)$8vZd081jiZ^#wJQgJ^gKOB+?do3b(@t#IcbZcV1w1@auUC}l_l6XrJ*lEm{c4D* zAYx!I+%c78{NpQa5Ev3{H#|Gja%QN&-l58>LJ+=1%+Xf%kHyruIel0i)H9o{^qAbg zOIQJ8fAq@xkT-Hw83>b-!ADKpq)N~zTTlr>xEZ{nj1HW`w56SX%TrP?*s+q5iJGN+ zPPJIiniIAGsMhk*RD?%V-3io|10q4E_pJa~W~1F`(BT=V$`{B6l8*P%TOjuh!a26K*mCAcXUBak!F}Q$AmI zzSI-;%{EppR0!rDm2m4JM{`Y`Nvd+#aG(^kK}a0PGOtU7KZxtq0v;hP4M<}J`IL#r zUqa0t{8QK2yG_cU2#z{%eJ9Q@%#$0i-W^i~>xZ8zGT$^Z^eZfy1W$0qEA+`{joGFO zH%i;KV257WWl^0`lJqk8xFw=ymc^SqZSkqukR5{Z9>NRy42}=3IOUFA!T+k#s)^*d zDtp}C7531Gf;3>aA8pYEZ#u0VfjnaF;I`b-gI|*}n_982+Ll*5ZgQT@ZK^H?P9+5t zyN|A6s)WQ$W4WIXshtldSkktp)0W3dB&~(nV6?RKFYGFAm)F`#aT#}|uiJB>UbU4@ z+Qhg+k08H)s1g*({+J!6+FFtb$1B#Y>}u_*Ac5}zPE>-)VIquczhnD z_ze0z zIGq%bjrkUpG&V7GB?Ry>*fmWHvg~9~!#d~*Y}DA9G^v@>B6#e-y9P|}xF!l7__P~1 z-Cva=keCYxlMC){#>P>f$h21D=@mKcvB=F^z&*uJ3N|j@s5EiX1v{Se3Q7pT-f>tB z8|z%Zos7OhNU37GQF!D1#W#uis86eaIF&XduejB8$^I$)#9P4{n=~?8fkD>`H|u!a4(N28-A0{m&!U8vGqs` zXSlY|@mOkM>JnYAV|hBD1AC$G8~k+_=LPkIpKy)h_dLE0yTtf5`Q0QyoNQe7dTsLJ z#ljAM_C5G_h%tfD)i(0Z3z9?1rdyb@dwe z@aweoR<^TvFl2wBJ~8XvcRJ%-`n!eCxoLM66RbtWOhIwxu$r(hMihSLPBGmWg3I|C zHZfl0qR(6*nFfH;Fef_iOZwRE)cFaLN^}e9hxS{enN-QUpq;^Y^U-XRxtH^W4d7z& zS$+2tfxC_X9T{K~AHR!C#H5j#0Z^_it8RHIkiR*#tP8Ugk4>QeaO$eZ_tdpJR&qEB za&}{L#ob@Awm8!6jV5)Afw(e!pDTI3I#ilF-5oyC*>LV>49L3>;nB>4cfw}C(@$bbxZ6FDa=B)KV>x=2Dzb z2)*UmUO`F6faPE1Y7!ueVWvl4e!r-<%+Pn?UTn~ZF3?oB%9laLEG^A-SkNEcw+o?U z3fnz@I51Y1Lm@2rO-uwFzKkohxFf z2O3~XJZI{#HTJyF*135wNYR0J*QKhr=V(Y{``5b{uq$<9^_2Em@x}_o(J_H zUT|YU(J_s0eR@}6HaFDh2%2?Z^uExNppf6o2kAXeGq>CBc!l+UBB;WdOxWiFh?y* z5Hr20Sj0Q4lkbNqg~4j7Z9pNa+;U7v-5uqEcIBkj6P?c3a#}ySC-_-5EzzNlaV!*8 z*2OLz2lKno5@z&$IpJi4WbujZWkBOT$AcZT`cq=NGH6qQ`^@#HFHX?&X{R7{xaJG| zuw?l3sfD8sChbZo_EiH}UXjvP zTaAACi}D+YqH?-KO#<}}Hx@M5w!rnQyz$2F)R=hCv@i6&oZk)r@ zOrZRpK5O)Iu)#75Wb>F@p>D+$Zx?K_i~3fSlJz_%m918mL36&-8j0l;gl?Z=@f)h- zC{bl}Es5LUTHcuY5DaR3fZZ&g6Qrmt%$+um4Y16L{vdbReq8MSLjWtlT*CF@{k>h4 Q-@mF&36}W#2JQ*}2NHo$r2qf` literal 0 HcmV?d00001 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; }