Compare commits
4 Commits
56296ab88a
...
c51468157f
Author | SHA1 | Date |
---|---|---|
LSowyer | c51468157f | |
tobspr | e4f8d3b569 | |
tobspr | 8454a782b4 | |
tobspr | a39195c972 |
Binary file not shown.
After Width: | Height: | Size: 5.8 KiB |
|
@ -83,7 +83,7 @@ body {
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background: rgba(50, 60, 70, 0.8);
|
background: rgba(50, 60, 70, 0.8);
|
||||||
z-index: 9999;
|
z-index: 999999;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
|
@ -52,14 +52,13 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&::before,
|
|
||||||
&::after {
|
&::after {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 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;
|
pointer-events: none;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
content: "";
|
content: "";
|
||||||
|
|
|
@ -134,6 +134,9 @@ export class Application {
|
||||||
/** @type {TypedTrackedState<boolean>} */
|
/** @type {TypedTrackedState<boolean>} */
|
||||||
this.trackedIsRenderable = new TrackedState(this.onAppRenderableStateChanged, this);
|
this.trackedIsRenderable = new TrackedState(this.onAppRenderableStateChanged, this);
|
||||||
|
|
||||||
|
/** @type {TypedTrackedState<boolean>} */
|
||||||
|
this.trackedIsPlaying = new TrackedState(this.onAppPlayingStateChanged, this);
|
||||||
|
|
||||||
// Dimensions
|
// Dimensions
|
||||||
this.screenWidth = 0;
|
this.screenWidth = 0;
|
||||||
this.screenHeight = 0;
|
this.screenHeight = 0;
|
||||||
|
@ -330,6 +333,14 @@ export class Application {
|
||||||
this.sound.onPageRenderableStateChanged(renderable);
|
this.sound.onPageRenderableStateChanged(renderable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onAppPlayingStateChanged(playing) {
|
||||||
|
try {
|
||||||
|
this.adProvider.setPlayStatus(playing);
|
||||||
|
} catch (ex) {
|
||||||
|
console.warn("Play status changed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal before-unload handler
|
* Internal before-unload handler
|
||||||
*/
|
*/
|
||||||
|
@ -386,6 +397,7 @@ export class Application {
|
||||||
}
|
}
|
||||||
|
|
||||||
const currentState = this.stateMgr.getCurrentState();
|
const currentState = this.stateMgr.getCurrentState();
|
||||||
|
this.trackedIsPlaying.set(currentState && currentState.getIsIngame());
|
||||||
if (currentState) {
|
if (currentState) {
|
||||||
currentState.onRender(dt);
|
currentState.onRender(dt);
|
||||||
}
|
}
|
||||||
|
|
|
@ -229,6 +229,14 @@ export class GameState {
|
||||||
return MUSIC.menu;
|
return MUSIC.menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should return true if the player is currently ingame
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
getIsIngame() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Should return whether to clear the whole body content before entering the state.
|
* Should return whether to clear the whole body content before entering the state.
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
|
|
|
@ -168,7 +168,11 @@ export class Camera extends BasicSerializableObject {
|
||||||
* Finds a good initial zoom level
|
* Finds a good initial zoom level
|
||||||
*/
|
*/
|
||||||
findInitialZoom() {
|
findInitialZoom() {
|
||||||
const desiredWorldSpaceWidth = 18 * globalConfig.tileSize;
|
let desiredWorldSpaceWidth = 18 * globalConfig.tileSize;
|
||||||
|
if (window.innerWidth < 1000) {
|
||||||
|
desiredWorldSpaceWidth = 12 * globalConfig.tileSize;
|
||||||
|
}
|
||||||
|
|
||||||
const zoomLevelX = this.root.gameWidth / desiredWorldSpaceWidth;
|
const zoomLevelX = this.root.gameWidth / desiredWorldSpaceWidth;
|
||||||
const zoomLevelY = this.root.gameHeight / desiredWorldSpaceWidth;
|
const zoomLevelY = this.root.gameHeight / desiredWorldSpaceWidth;
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,9 @@ export class HUDSettingsMenu extends BaseHUDPart {
|
||||||
}
|
}
|
||||||
|
|
||||||
returnToMenu() {
|
returnToMenu() {
|
||||||
this.root.gameState.goBackToMenu();
|
this.root.app.adProvider.showVideoAd().then(() => {
|
||||||
|
this.root.gameState.goBackToMenu();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
goToSettings() {
|
goToSettings() {
|
||||||
|
|
|
@ -28,6 +28,10 @@ export class HUDUnlockNotification extends BaseHUDPart {
|
||||||
this.root.app.gameAnalytics.noteMinor("game.started");
|
this.root.app.gameAnalytics.noteMinor("game.started");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shouldPauseGame() {
|
||||||
|
return !G_IS_STANDALONE && this.visible;
|
||||||
|
}
|
||||||
|
|
||||||
createElements(parent) {
|
createElements(parent) {
|
||||||
this.inputReciever = new InputReceiver("unlock-notification");
|
this.inputReciever = new InputReceiver("unlock-notification");
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,7 @@ declare interface Window {
|
||||||
grecaptcha: any;
|
grecaptcha: any;
|
||||||
gtag: any;
|
gtag: any;
|
||||||
cpmstarAPI: any;
|
cpmstarAPI: any;
|
||||||
|
CrazyGames: any;
|
||||||
|
|
||||||
// Mods
|
// Mods
|
||||||
$shapez_registerMod: any;
|
$shapez_registerMod: any;
|
||||||
|
|
|
@ -44,4 +44,6 @@ export class AdProviderInterface {
|
||||||
showVideoAd() {
|
showVideoAd() {
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setPlayStatus(playing) {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
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"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
setPlayStatus(playing) {
|
||||||
|
console.log("crazygames::playing:", playing);
|
||||||
|
if (playing) {
|
||||||
|
this.sdkInstance.gameplayStart();
|
||||||
|
} else {
|
||||||
|
this.sdkInstance.gameplayStop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,8 +32,6 @@ export class GamedistributionAdProvider extends AdProviderInterface {
|
||||||
* When we showed the last video ad
|
* When we showed the last video ad
|
||||||
*/
|
*/
|
||||||
this.lastVideoAdShowTime = -1e20;
|
this.lastVideoAdShowTime = -1e20;
|
||||||
|
|
||||||
console.error("X");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getHasAds() {
|
getHasAds() {
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { createLogger } from "../../core/logging";
|
||||||
import { queryParamOptions } from "../../core/query_parameters";
|
import { queryParamOptions } from "../../core/query_parameters";
|
||||||
import { WEB_STEAM_SSO_AUTHENTICATED } from "../../core/steam_sso";
|
import { WEB_STEAM_SSO_AUTHENTICATED } from "../../core/steam_sso";
|
||||||
import { clamp } from "../../core/utils";
|
import { clamp } from "../../core/utils";
|
||||||
|
import { CrazygamesAdProvider } from "../ad_providers/crazygames";
|
||||||
import { GamedistributionAdProvider } from "../ad_providers/gamedistribution";
|
import { GamedistributionAdProvider } from "../ad_providers/gamedistribution";
|
||||||
import { NoAdProvider } from "../ad_providers/no_ad_provider";
|
import { NoAdProvider } from "../ad_providers/no_ad_provider";
|
||||||
import { SteamAchievementProvider } from "../electron/steam_achievement_provider";
|
import { SteamAchievementProvider } from "../electron/steam_achievement_provider";
|
||||||
|
@ -22,13 +23,11 @@ export class PlatformWrapperImplBrowser extends PlatformWrapperInterface {
|
||||||
adProvider: NoAdProvider,
|
adProvider: NoAdProvider,
|
||||||
iframed: false,
|
iframed: false,
|
||||||
externalLinks: true,
|
externalLinks: true,
|
||||||
iogLink: true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!G_IS_STANDALONE && !WEB_STEAM_SSO_AUTHENTICATED && queryParamOptions.embedProvider) {
|
if (!G_IS_STANDALONE && !WEB_STEAM_SSO_AUTHENTICATED && queryParamOptions.embedProvider) {
|
||||||
const providerId = queryParamOptions.embedProvider;
|
const providerId = queryParamOptions.embedProvider;
|
||||||
this.embedProvider.iframed = true;
|
this.embedProvider.iframed = true;
|
||||||
this.embedProvider.iogLink = false;
|
|
||||||
|
|
||||||
switch (providerId) {
|
switch (providerId) {
|
||||||
case "armorgames": {
|
case "armorgames": {
|
||||||
|
@ -38,7 +37,6 @@ export class PlatformWrapperImplBrowser extends PlatformWrapperInterface {
|
||||||
|
|
||||||
case "iogames.space": {
|
case "iogames.space": {
|
||||||
this.embedProvider.id = "iogames.space";
|
this.embedProvider.id = "iogames.space";
|
||||||
this.embedProvider.iogLink = true;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +59,7 @@ export class PlatformWrapperImplBrowser extends PlatformWrapperInterface {
|
||||||
|
|
||||||
case "crazygames": {
|
case "crazygames": {
|
||||||
this.embedProvider.id = "crazygames";
|
this.embedProvider.id = "crazygames";
|
||||||
|
this.embedProvider.adProvider = CrazygamesAdProvider;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -203,6 +203,14 @@ export class InGameState extends GameState {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getIsIngame() {
|
||||||
|
return (
|
||||||
|
this.stage === GAME_LOADING_STATES.s10_gameRunning &&
|
||||||
|
this.core &&
|
||||||
|
!this.core.root.hud.shouldPauseGame()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the game somehow failed to initialize. Resets everything to basic state and
|
* Called when the game somehow failed to initialize. Resets everything to basic state and
|
||||||
* then goes to the main menu, showing the error
|
* then goes to the main menu, showing the error
|
||||||
|
|
|
@ -68,19 +68,27 @@ export class PreloadState extends GameState {
|
||||||
if (G_IS_STANDALONE && !G_IS_STEAM_DEMO) {
|
if (G_IS_STANDALONE && !G_IS_STEAM_DEMO) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!queryParamOptions.campaign) {
|
if (queryParamOptions.campaign) {
|
||||||
return;
|
fetch(
|
||||||
|
"https://analytics.shapez.io/campaign/" +
|
||||||
|
queryParamOptions.campaign +
|
||||||
|
"?lpurl=nocontent&fbclid=" +
|
||||||
|
queryParamOptions.fbclid +
|
||||||
|
"&gclid=" +
|
||||||
|
queryParamOptions.gclid
|
||||||
|
).catch(err => {
|
||||||
|
console.warn("Failed to send beacon:", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (queryParamOptions.embedProvider) {
|
||||||
|
fetch(
|
||||||
|
"https://analytics.shapez.io/campaign/embed_" +
|
||||||
|
queryParamOptions.embedProvider +
|
||||||
|
"?lpurl=nocontent"
|
||||||
|
).catch(err => {
|
||||||
|
console.warn("Failed to send beacon:", err);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
fetch(
|
|
||||||
"https://analytics.shapez.io/campaign/" +
|
|
||||||
queryParamOptions.campaign +
|
|
||||||
"?lpurl=nocontent&fbclid=" +
|
|
||||||
queryParamOptions.fbclid +
|
|
||||||
"&gclid=" +
|
|
||||||
queryParamOptions.gclid
|
|
||||||
).catch(err => {
|
|
||||||
console.warn("Failed to send beacon:", err);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onLeave() {
|
onLeave() {
|
||||||
|
|
|
@ -52,7 +52,7 @@ global:
|
||||||
shift: SHIFT
|
shift: SHIFT
|
||||||
space: SPACE
|
space: SPACE
|
||||||
loggingIn: Giriş yapılıyor
|
loggingIn: Giriş yapılıyor
|
||||||
loadingResources: Downloading additional resources (<percentage> %)
|
loadingResources: Ek kaynaklar indiriliyor... (<percentage> %)
|
||||||
discount: -<percentage>%
|
discount: -<percentage>%
|
||||||
discountSummerSale: SPECIAL PROMOTION! Offer ends 7 July
|
discountSummerSale: SPECIAL PROMOTION! Offer ends 7 July
|
||||||
demoBanners:
|
demoBanners:
|
||||||
|
|
Loading…
Reference in New Issue