From fd50516f640deade52cd169760dfad9dd264f2fc Mon Sep 17 00:00:00 2001 From: EmulatorOS <102191619+EmulatorOS@users.noreply.github.com> Date: Sat, 9 Jul 2022 16:54:09 -0500 Subject: [PATCH] css, img, and js --- css/style.css | 229 +++++++++++++++++++++++++++++++++ img/favicon.png | Bin 0 -> 7850 bytes img/logo.png | Bin 0 -> 15923 bytes js/IronSourceRV.js | 33 +++++ js/cpmstar.js | 60 +++++++++ js/dependencyLoader.js | 67 ++++++++++ js/firebase-config.js | 48 +++++++ js/firebase.js | 59 +++++++++ js/firestore.js | 25 ++++ js/fullscreen.js | 37 ++++++ js/googleAnalytics.js | 8 ++ js/login.js | 175 +++++++++++++++++++++++++ js/macUserAgent.js | 37 ++++++ js/mobileRedirect.js | 21 +++ js/unityGame.js | 39 ++++++ js/unityUrls.js | 9 ++ js/visibilityChangeListener.js | 8 ++ js/windowResize.js | 40 ++++++ 18 files changed, 895 insertions(+) create mode 100644 css/style.css create mode 100644 img/favicon.png create mode 100644 img/logo.png create mode 100644 js/IronSourceRV.js create mode 100644 js/cpmstar.js create mode 100644 js/dependencyLoader.js create mode 100644 js/firebase-config.js create mode 100644 js/firebase.js create mode 100644 js/firestore.js create mode 100644 js/fullscreen.js create mode 100644 js/googleAnalytics.js create mode 100644 js/login.js create mode 100644 js/macUserAgent.js create mode 100644 js/mobileRedirect.js create mode 100644 js/unityGame.js create mode 100644 js/unityUrls.js create mode 100644 js/visibilityChangeListener.js create mode 100644 js/windowResize.js diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..041da53 --- /dev/null +++ b/css/style.css @@ -0,0 +1,229 @@ +html { + box-sizing: border-box; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + margin: 0; + background: #000!important; + overflow: hidden; +} + +#gameContainer { + width: 100vw; + height: 100vh; + background: #000!important; +} + +#canvas { + width: 100%; + height: 100%; + display: block; +} +/* try to handle mobile dialog */ + +#canvas + * { + z-index: 2; +} + +.logo { + display: block; + max-width: 15vw; + max-height: 15vh; +} + +.progress { + margin: 1.5em; + border: 1px solid white; + width: 30vw; + display: none; +} + +.progress .full { + margin: 2px; + background: white; + height: 1em; + transform-origin: top left; +} + +#loader { + position: absolute; + left: 0; + top: 0; + width: 100vw; + height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.spinner, +.spinner:after { + border-radius: 50%; + width: 5em; + height: 5em; +} + +#unity-progress-bar-empty { + width: 30%; + height: 24px; + margin: 10px 20px 20px 10px; + text-align: left; + border: 1px solid white; + padding: 2px; +} +#unity-progress-bar-full { + width: 0%; + height: 100%; + background: white; +} +.light #unity-progress-bar-empty { + border-color: black; +} +.light #unity-progress-bar-full { + background: black; +} + +.spinner { + margin: 10px; + font-size: 10px; + position: relative; + text-indent: -9999em; + border-top: 1.1em solid rgba(255, 255, 255, 0.2); + border-right: 1.1em solid rgba(255, 255, 255, 0.2); + border-bottom: 1.1em solid rgba(255, 255, 255, 0.2); + border-left: 1.1em solid #ffffff; + transform: translateZ(0); + animation: spinner-spin 1.1s infinite linear; +} + +@keyframes spinner-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +.ad { + background: rgba(0, 0, 0, 0.4); + overflow: hidden; + display: none; +} + +.modal{ + background:rgba(0,0,0,.4); + display:none; + height:100%; + width: 100%; + position:fixed; + z-index:10000; + top: 0; + left: 0; + bottom: 0; + right: 0; +} + +.modalContent{ + margin: auto; + width: 100%; +} + +.centered { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +/* The Close Button */ +.close { + color: #aaa; + float: right; + font-size: 28px; + font-weight: bold; +} + +.close:hover, +.close:focus { + color: black; + text-decoration: none; + cursor: pointer; +} + +#continueWindow{ + background-color: #fefefe; + margin: 15% auto; + padding: 20px; + border: 1px solid #888; + width: 30%; +} + +#adWindow{ + background: #4382f5; + border: 10px solid #4382f5; + width: 660px; + border-top: 0; + height: 540px; +} + +.ads{ + height:100%; + display: flex; + flex-direction: column; + justify-content: space-evenly; + position: absolute; + z-index:40; +} + +.ad-rectangle-bottom { + width: 304px; + height: 258px; + border-style: solid; + border-width: 4px 4px 4px 0px; + border-color: rgba(0, 0, 0, 0.01); +} + +.ad-rectangle-upper { + width: 304px; + height: 258px; + border-style: solid; + border-width: 4px 4px 4px 0px; + border-color: rgba(0, 0, 0, 0.01); +} +.ad-leaderboard-bottom { + width: 304px; + height: 608px; + border-style: solid; + border-width: 4px 4px 4px 0px; + border-color: rgba(0, 0, 0, 0.01); +} + +@media (min-height: 900px) { + .ad-smallscreen{ + display: none; + } +} + +@media (max-height: 900px) { + .ad-largescreen{ + display: none; + } +} + +#adWindow { + border: 10px solid #4382f5 !important; + height: 500px !important; +} + +a[onclick*="showConsentToolSettings"] { + right: 0px; + left: auto !important; +} \ No newline at end of file diff --git a/img/favicon.png b/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..f35b2144a70588d669e6c7d36b0ebb5d0a4c23e4 GIT binary patch literal 7850 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 QTR9*N6 { + ironRV.show(); + }; + }); +} diff --git a/js/cpmstar.js b/js/cpmstar.js new file mode 100644 index 0000000..c905e81 --- /dev/null +++ b/js/cpmstar.js @@ -0,0 +1,60 @@ +//init the interstitial +window.adsLoaded = true; +let iAd; + +async function initAds() { + while (window.cpmstarAPI === undefined) { + await sleep(500) + } + window.cpmstarAPI(function (api) { + //console.log("Setting iAD") + iAd = new api.game.InterstitialView("interstitial"); + iAd.load(); + iAd.addEventListener("ad_opened", function (e) { + iAdPause(); //Pause the game when ad is open + }); + + iAd.addEventListener("ad_closed", function (e) { + setTimeout(function () { + iAdUnpause(); //Unpause when ad closed. + }, 700); + iAd.load(); //Preload another ad. + }); + }); +} + +function iAdPause() { + +} +function iAdUnpause() { + unityAdFinishedCallback("true") +} + + +window.requestNewAd = () => { + //console.log("requested AD") + //console.log(iAd) + if (iAd && iAd.isLoaded()) { + iAd.show(); //Show loaded ad + } + else { + if (iAd) iAd.load(); //If no ad available, load another + unityAdFinishedCallback("false") + } +} + +// This function calls Unity to tell the ad finished +function unityAdFinishedCallback(state) { + try { + if (window.unityInstance) { + window.unityInstance.SendMessage('PersistantObjects', 'OnWebCallback', state); + } + } + catch (error) { + console.log(error); + } +} + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} \ No newline at end of file diff --git a/js/dependencyLoader.js b/js/dependencyLoader.js new file mode 100644 index 0000000..0f046f0 --- /dev/null +++ b/js/dependencyLoader.js @@ -0,0 +1,67 @@ +let dependencyUrls = [] +const maxLoadTimesTrys = 4; + +//Main Libraries +dependencyUrls.push("https://www.googletagmanager.com/gtag/js?id=UA-118283086-6", "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"); +//Ads Libraries +dependencyUrls.push("js/ads-prebid.js", "js/IronSourceRV.js", "js/cpmstar.js", "js/adsController.js"); +//Firebase/Google Libraries +dependencyUrls.push("js/googleAnalytics.js", "js/firebase.js", "js/login.js", "js/firebase-config.js", "js/firestore.js") +//Game Libraries +dependencyUrls.push("js/unityUrls.js", "js/unityGame.js", "js/mobileRedirect.js", "js/fullscreen.js") +//etc. Libraries +dependencyUrls.push("js/windowResize.js", "js/adblockManager.js", "js/macUserAgent.js", "js/visibilityChangeListener.js", "PC/payment/js/xsolla.js") + +dynamicallyLoadScripts(); + +async function dynamicallyLoadScripts() { + for (let i = 0; i < dependencyUrls.length; i++) { + let url = dependencyUrls[i]; + let script = document.createElement("script"); + script.src = url; + + document.head.appendChild(script); + } + + let trys = 0; + while (window.loadedUrls === undefined || window.firebaseLoaded === undefined || window.adsLoaded === undefined + || window.gameScriptLoaded === undefined || window.configInit === undefined || window.adsControllerLoaded === undefined) { + await sleep(500) + trys++; + if(trys >= maxLoadTimesTrys) { + break; + } + } + + initAds(); + loadGame(); + initFirebaseLibraries(); + fixMacUserAgent(); +} + +function loadGame() { + let gameLoader = document.createElement("script") + gameLoader.src = getGameLoaderUrl(); + gameLoader.id = "unity-loader" + gameLoader.onload = function () { + showGame(); + }; + + let gameLoadDiv = document.getElementById("unity-loader-div"); + gameLoadDiv.innerHTML = ""; + gameLoadDiv.appendChild(gameLoader); +} + +function initFirebaseLibraries() { + initializeFireBase(); + initRemoteConfig(); +} + +function onUnityReady() { + checkAdBlock(); + sendConfig(); +} + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} \ No newline at end of file diff --git a/js/firebase-config.js b/js/firebase-config.js new file mode 100644 index 0000000..66b0a2e --- /dev/null +++ b/js/firebase-config.js @@ -0,0 +1,48 @@ +window.configInit = true; + +let conf; +let initWasCalled = false; + +function initRemoteConfig() { + initWasCalled = true; + const remoteConfig = firebase.remoteConfig(); + remoteConfig.settings.minimumFetchIntervalMillis = 2000; + + remoteConfig.fetchAndActivate().then(() => { + conf = {}; + // Convert all of the remote config parameters to a dict: + for (const [key, value] of Object.entries(remoteConfig.getAll())) { + conf[key] = value.asString(); + } + }) + .catch((err) => { + console.warn("config error: " + err); + }); +} + +// Being called from unity embedded browser on pc version +async function getRemoteConfigAsync(onFinish) { + if (!initWasCalled) + initRemoteConfig(); + + while(conf === undefined) + { + await sleep(500) + } + + onFinish(conf); +} + +async function sendConfig() { + while(conf === undefined || window.unityInstance === undefined) + { + await sleep(500) + } + + await sleep(3000) + window.unityInstance.SendMessage('PersistantObjects', 'ActivateRemoteConfig', JSON.stringify(conf)); +} + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} diff --git a/js/firebase.js b/js/firebase.js new file mode 100644 index 0000000..eaa81d3 --- /dev/null +++ b/js/firebase.js @@ -0,0 +1,59 @@ +window.firebaseLoaded = true; + +function initializeFireBase() { + var hostname = window.location.hostname; + + if(hostname.indexOf("dev1v1") >= 0 || hostname.indexOf("dev.1v1") >= 0 || hostname.indexOf("test1v1") >= 0 || hostname.indexOf("test.1v1") >= 0 || hostname.indexOf("localhost") >= 0) { + initializeFireBaseDev(); + } + else if(hostname.indexOf("rc.1v1") >= 0){ + initializeFireBaseRC(); + } + else{ + initializeFireBaseProd(); + } +} + +function initializeFireBaseProd(){ + // Your web app's Firebase configuration + var firebaseConfig = { + apiKey: "AIzaSyBPrAfspM9RFxuNuDtSyaOZ5YRjDBNiq5I", + authDomain: "1v1.lol", + databaseURL: "https://justbuild-cdb86.firebaseio.com", + projectId: "justbuild-cdb86", + storageBucket: "justbuild-cdb86.appspot.com", + messagingSenderId: "93158914000", + appId: "1:93158914000:web:e73a8b453338ab7c" + }; + // Initialize Firebase + firebase.initializeApp(firebaseConfig); +} + +function initializeFireBaseDev(){ + // Your web app's Firebase configuration + var firebaseConfig = { + apiKey: "AIzaSyANZ0SDhqoc62msSooQFs3SEb4XbC7gvk4", + authDomain: "dev.1v1.lol", + databaseURL: "https://dev1v1.firebaseio.com", + projectId: "dev1v1", + storageBucket: "dev1v1.appspot.com", + messagingSenderId: "90097883404", + appId: "1:90097883404:android:0931a7bbf3e74f2b9a5129" + }; + // Initialize Firebase + firebase.initializeApp(firebaseConfig); +} + +function initializeFireBaseRC(){ + // Your web app's Firebase configuration + var firebaseConfig = { + apiKey: "AIzaSyA1H3OsFttu-57p0f7mXxUdgJ2Y0iHZRJg", + authDomain: "rcfunctions1v1.firebaseapp.com", + projectId: "rcfunctions1v1", + storageBucket: "rcfunctions1v1.appspot.com", + messagingSenderId: "896755136685", + appId: "1:896755136685:web:1ccd8f30abdce578dbee24" + }; + // Initialize Firebase + firebase.initializeApp(firebaseConfig); +} \ No newline at end of file diff --git a/js/firestore.js b/js/firestore.js new file mode 100644 index 0000000..c196168 --- /dev/null +++ b/js/firestore.js @@ -0,0 +1,25 @@ +const cache = {}; +let callbackId = 0; + +// This is being called directly from unity. +function getFirestoreListener(collection, documentId, successCallback, errorCallback) { + callbackId++; + const id = callbackId; // capture value + const unsubscribe = firebase.firestore().collection(collection).doc(documentId).onSnapshot(doc => { + if (doc.exists) + successCallback([id, JSON.stringify(doc.data())]); + }, error => { + errorCallback(error.message); + }); + + cache[id] = unsubscribe; + return id; +} + +// This is being called directly from unity. +function detachFirestoreListener(id) { + if (cache[id] !== undefined) { + cache[id](); + delete cache[id]; + } +} \ No newline at end of file diff --git a/js/fullscreen.js b/js/fullscreen.js new file mode 100644 index 0000000..bf11d07 --- /dev/null +++ b/js/fullscreen.js @@ -0,0 +1,37 @@ +/* View in fullscreen */ +var elem = document.documentElement; +function openFullscreen() { + if (elem.requestFullscreen) { + elem.requestFullscreen(); + } else if (elem.mozRequestFullScreen) { /* Firefox */ + elem.mozRequestFullScreen(); + } else if (elem.webkitRequestFullscreen) { /* Chrome, Safari and Opera */ + elem.webkitRequestFullscreen(); + } else if (elem.msRequestFullscreen) { /* IE/Edge */ + elem.msRequestFullscreen(); + } +} + +/* Close fullscreen */ +function closeFullscreen() { + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.mozCancelFullScreen) { /* Firefox */ + document.mozCancelFullScreen(); + } else if (document.webkitExitFullscreen) { /* Chrome, Safari and Opera */ + document.webkitExitFullscreen(); + } else if (document.msExitFullscreen) { /* IE/Edge */ + document.msExitFullscreen(); + } +} + +function updateFullscreen() { + var isInFullScreen = (document.fullscreenElement && document.fullscreenElement !== null) || + (document.webkitFullscreenElement && document.webkitFullscreenElement !== null) || + (document.mozFullScreenElement && document.mozFullScreenElement !== null) || + (document.msFullscreenElement && document.msFullscreenElement !== null); + if (!isInFullScreen) + openFullscreen(); + else + closeFullscreen(); +} \ No newline at end of file diff --git a/js/googleAnalytics.js b/js/googleAnalytics.js new file mode 100644 index 0000000..102e71b --- /dev/null +++ b/js/googleAnalytics.js @@ -0,0 +1,8 @@ +window.dataLayer = window.dataLayer || []; + +function gtag() { + dataLayer.push(arguments); +} +gtag('js', new Date()); + +gtag('config', 'UA-118283086-6'); \ No newline at end of file diff --git a/js/login.js b/js/login.js new file mode 100644 index 0000000..4b36989 --- /dev/null +++ b/js/login.js @@ -0,0 +1,175 @@ +var tempErrorCreds; +var tempProviderName; + +// This is being called directly from unity. +function getSignInResults(successCallback, errorCallback) { + firebase.auth().getRedirectResult().then( + (result) => onFirebaseSignInSuccess(successCallback, errorCallback), + (err) => onFirebaseSignInError(err, errorCallback)); +} + +// This is being called directly from unity. +function retrieveIdToken(successCallback, errorCallback) { + if(firebase.auth().currentUser === null){ + if(errorCallback !== null) + errorCallback("User is null"); + return; + } + + firebase.auth().currentUser.getIdToken().then(function (idToken) { + var resultObj = { + token: idToken, + displayName: firebase.auth().currentUser.displayName + }; + + if (successCallback !== undefined) { + + successCallback(resultObj); + } + }) + .catch(function (error) { + console.log(error); + if (errorCallback !== undefined) + errorCallback(error.message); + }); +} + +function anonymousLogin(successCallback, errorCallback) { + var resultObj = { + token: "", + displayName: "guest" + }; + + if (successCallback !== undefined) { + + successCallback(resultObj); + } +} + +/** + * This is being called directly from unity. + * Use firebase auth. + * @param providerName for example - Google + * @param successCallback + * @param errorCallback + * @param useRedirect Use redirect auth or popup. Redirect the page to google auth, or open a popup for the auth. + * For the pc version (embedded browser) we use redirect, but for the webgl version we use a popup. + */ +function firebaseLogin(providerName, successCallback, errorCallback, useRedirect=false) { + if (providerName === "anonymous") { + anonymousLogin(successCallback, errorCallback); + return; + } + + var user = firebase.auth().currentUser; + + if(user != null && !user.isAnonymous){ + retrieveIdToken(successCallback, errorCallback); + return; + } + + var provider = getProvider(providerName); + firebase.auth().useDeviceLanguage(); + + if (useRedirect) { + firebase.auth().signInWithRedirect(provider); + } + else { + firebase.auth().signInWithPopup(provider) + .then((result) => onFirebaseSignInSuccess(successCallback, errorCallback)) + .catch((err) => onFirebaseSignInError(err, errorCallback)); + } +} + +function onFirebaseSignInSuccess (successCallback, errorCallback) { + console.log("Successful sign in"); + retrieveIdToken(successCallback, errorCallback); +} + +function onFirebaseSignInError(error, errorCallback) { + // Handle Errors here. + var errorCode = error.code; + var errorMessage = error.message; + // The email of the user's account used. + var email = error.email; + // The firebase.auth.AuthCredential type that was used. + tempErrorCreds = error.credential; + console.log(error); + + if (errorCallback !== undefined) + errorCallback(error.message); + + if (errorCode === 'auth/account-exists-with-different-credential') { + // User's email already exists. + // Get sign-in methods for this email. + firebase.auth().fetchSignInMethodsForEmail(email).then(function (methods) { + // the first method in the list will be the "recommended" method to use. + if (methods.length == 0) + return; + // Sign in to provider. + tempProviderName = methods[0].trim(); + setModalContent("generalModalContent", + "
×

Please press the button to login:

"); + showModal("generalModal"); + }); + } +} + +// This is being called directly from unity. +function firebaseLogout() { + firebase.auth().signOut().catch(function (error) { + console.log(error); + }); +} + +function getCurrentUserDisplayName() { + var user = firebase.auth().currentUser; + var displayName = ""; + if (user) { + displayName = user.displayName; + } + return displayName; +} + +function getProvider(providerName) { + if (providerName && providerName.indexOf("facebook") != -1) + return new firebase.auth.FacebookAuthProvider() + else + return new firebase.auth.GoogleAuthProvider() +} + +function setModalContent(modalContentId, contentString) { + content = document.getElementById(modalContentId); + if (content) { + content.innerHTML = contentString; + } + +} + +function continueLogin() { + hideModal("generalModal"); + var provider = getProvider(tempProviderName); + firebase.auth().signInWithPopup(provider).then( + function (result) { + if (!tempErrorCreds) { + return; + } + // As we have access to the pending credential, we can directly call the link method. + result.user.linkAndRetrieveDataWithCredential(tempErrorCreds).then(function (usercred) { + //goToApp(); + }); + }); + +} + +function showModal(modalId) { + modal = document.getElementById(modalId); + if (modal) + modal.style.display = "block"; +} + +function hideModal(modalId) { + modal = document.getElementById(modalId); + if (modal) + modal.style.display = "none"; +} \ No newline at end of file diff --git a/js/macUserAgent.js b/js/macUserAgent.js new file mode 100644 index 0000000..ba0e6c6 --- /dev/null +++ b/js/macUserAgent.js @@ -0,0 +1,37 @@ +function fixMacUserAgent(){ + var userAgentStr = window.navigator.appVersion; + if(userAgentStr && userAgentStr.includes("Intel Mac OS X 11")){ + userAgentStr = userAgentStr.replace('Intel Mac OS X 11', 'Intel Mac OS X 10'); + setUserAgent(window, userAgentStr); + } +} + +function setUserAgent(curWindow, userAgent) { + // Works on Firefox, Chrome, Opera and IE9+ + if (navigator.__defineGetter__) { + navigator.__defineGetter__('userAgent', function () { + return userAgent; + }); + } else if (Object.defineProperty) { + Object.defineProperty(navigator, 'userAgent', { + get: function () { + return userAgent; + } + }); + } + // Works on Safari + if (curWindow.navigator.userAgent !== userAgent) { + var userAgentProp = { + get: function () { + return userAgent; + } + }; + try { + Object.defineProperty(curWindow.navigator, 'userAgent', userAgentProp); + } catch (e) { + curWindow.navigator = Object.create(navigator, { + userAgent: userAgentProp + }); + } + } +} diff --git a/js/mobileRedirect.js b/js/mobileRedirect.js new file mode 100644 index 0000000..da7c08c --- /dev/null +++ b/js/mobileRedirect.js @@ -0,0 +1,21 @@ +var userAgent = navigator.userAgent || navigator.vendor || window.opera; + +if (/bot|crawler|spider|crawling/i.test(userAgent)) { + // do nothing +} + +// Windows Phone +else if (/windows phone/i.test(userAgent)) { + window.location.replace("/mobile"); +} + +// Android +else if (/android/i.test(userAgent)) { + window.location.replace("https://play.google.com/store/apps/details?id=lol.onevone"); +} + +// iOS +else if ((/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) +|| (navigator.maxTouchPoints && navigator.maxTouchPoints > 2 && /MacIntel/.test(navigator.platform))) { + window.location.replace("https://apps.apple.com/app/id1508620125"); +} \ No newline at end of file diff --git a/js/unityGame.js b/js/unityGame.js new file mode 100644 index 0000000..852154f --- /dev/null +++ b/js/unityGame.js @@ -0,0 +1,39 @@ +window.gameScriptLoaded = true; + +function showGame() { + let gameJsonUrl = getGameJsonUrl(); + let hostname = window.location.hostname; + if(hostname.indexOf("dev1v1") >= 0 || hostname.indexOf("dev.1v1") >= 0 || hostname.indexOf("test1v1") >= 0 || hostname.indexOf("test.1v1") >= 0) { + let urlParams = new URLSearchParams(window.location.search); + let queryParam = urlParams.get('version'); + + if(queryParam !== undefined && queryParam !== null) + { + gameJsonUrl = gameJsonUrl.replace(/[0-9][0-9]+/i, queryParam); + } + } + + let gameInstance = UnityLoader.instantiate("gameContainer", gameJsonUrl, {onProgress: UnityProgress}); + //var gameInstance = UnityLoader.instantiate("gameContainer", "Build/WebGL.json", {onProgress: UnityProgress}); + + window.unityInstance = gameInstance; + showAds(); +} + +function UnityProgress(gameInstance, progress) { + if (!gameInstance.Module) { + return; + } + const loader = document.querySelector("#loader"); + if (!gameInstance.progress) { + const progress = document.querySelector("#loader .progress"); + progress.style.display = "block"; + gameInstance.progress = progress.querySelector(".full"); + loader.querySelector(".spinner").style.display = "none"; + } + gameInstance.progress.style.transform = `scaleX(${progress})`; + if (progress === 1 && !gameInstance.removeTimeout) { + loader.style.display = "none"; + gameLoaded = true; + } +} \ No newline at end of file diff --git a/js/unityUrls.js b/js/unityUrls.js new file mode 100644 index 0000000..4a740e6 --- /dev/null +++ b/js/unityUrls.js @@ -0,0 +1,9 @@ +window.loadedUrls = true; + +function getGameJsonUrl() { + return "https://g.hamburgerham.tk/1v1lol/gameLinks/NewCI/1v1/Prod/20/7bdd1837f26d452f9d45d1e94b844039/WebGL.json"; +} + +function getGameLoaderUrl() { + return "https://g.hamburgerham.tk/1v1lol/gameLinks/NewCI/1v1/Prod/20/7bdd1837f26d452f9d45d1e94b844039/UnityLoader.js"; +} \ No newline at end of file diff --git a/js/visibilityChangeListener.js b/js/visibilityChangeListener.js new file mode 100644 index 0000000..12b7641 --- /dev/null +++ b/js/visibilityChangeListener.js @@ -0,0 +1,8 @@ +document.addEventListener("visibilitychange", () => { + if (!window.unityInstance) { + return; + } + + var isFocused = document.visibilityState === "visible"; + window.unityInstance.SendMessage("PersistantObjects", "OnApplicationFocusChange", isFocused ? 1 : 0); +}, false); diff --git a/js/windowResize.js b/js/windowResize.js new file mode 100644 index 0000000..bd9d551 --- /dev/null +++ b/js/windowResize.js @@ -0,0 +1,40 @@ +isIframe = false; + if (window.self != window.top) { + isIframe = true; + function WindowResize() { + var v = window.innerWidth; + var maxRes = 1320; + + if (v < maxRes) { + var ads = document.getElementsByClassName('ad'); + + for (const ad of ads) { + ad.style.transform = "scale(" + v / maxRes + ")"; + } + } + else { + var ads = document.getElementsByClassName('ad'); + + for (const ad of ads) { + ad.style.transform = "scale(1)"; + } + } + } + window.addEventListener("resize", WindowResize); + WindowResize(); + } + else { + var styles = ` + @media screen and (max-width: 1200px) { + .ad-leaderboard-bottom { + display: none !important; + } + } +` + + var styleSheet = document.createElement("style") + styleSheet.type = "text/css" + styleSheet.innerText = styles + document.head.appendChild(styleSheet) + } + \ No newline at end of file