|
@@ -250,6 +250,8 @@ const initKittyFall = () => {
|
|
|
if (playGameRoot) {
|
|
if (playGameRoot) {
|
|
|
const levelButtons = playGameRoot.querySelectorAll("[data-level]");
|
|
const levelButtons = playGameRoot.querySelectorAll("[data-level]");
|
|
|
const startGameButton = playGameRoot.querySelector("[data-start-game]");
|
|
const startGameButton = playGameRoot.querySelector("[data-start-game]");
|
|
|
|
|
+ const turnOverModal = playGameRoot.querySelector("[data-turn-over-modal]");
|
|
|
|
|
+ const turnOverCloseButtons = playGameRoot.querySelectorAll("[data-turn-over-close]");
|
|
|
const gameShell = playGameRoot.querySelector("[data-game-shell]");
|
|
const gameShell = playGameRoot.querySelector("[data-game-shell]");
|
|
|
const gameFrame = playGameRoot.querySelector("[data-game-frame]");
|
|
const gameFrame = playGameRoot.querySelector("[data-game-frame]");
|
|
|
const gameOverModal = playGameRoot.querySelector("[data-game-over-modal]");
|
|
const gameOverModal = playGameRoot.querySelector("[data-game-over-modal]");
|
|
@@ -262,6 +264,20 @@ const initKittyFall = () => {
|
|
|
|| "Easy";
|
|
|| "Easy";
|
|
|
let gameStarted = false;
|
|
let gameStarted = false;
|
|
|
let startingGame = false;
|
|
let startingGame = false;
|
|
|
|
|
+
|
|
|
|
|
+ const showTurnOverModal = () => {
|
|
|
|
|
+ if (!turnOverModal) return;
|
|
|
|
|
+ turnOverModal.classList.add("is-open");
|
|
|
|
|
+ turnOverModal.setAttribute("aria-hidden", "false");
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const hideTurnOverModal = () => {
|
|
|
|
|
+ if (!turnOverModal) return;
|
|
|
|
|
+ turnOverModal.classList.remove("is-open");
|
|
|
|
|
+ turnOverModal.setAttribute("aria-hidden", "true");
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ turnOverCloseButtons.forEach((button) => button.addEventListener("click", hideTurnOverModal));
|
|
|
let finishingGame = false;
|
|
let finishingGame = false;
|
|
|
let runRewards = {
|
|
let runRewards = {
|
|
|
score: 0,
|
|
score: 0,
|
|
@@ -413,7 +429,12 @@ const initKittyFall = () => {
|
|
|
try {
|
|
try {
|
|
|
const result = await startSession();
|
|
const result = await startSession();
|
|
|
if (!result?.success) {
|
|
if (!result?.success) {
|
|
|
- window.alert(result?.message || "Unable to start game.");
|
|
|
|
|
|
|
+ const message = String(result?.message || "");
|
|
|
|
|
+ if (message.toLowerCase().includes("turn over")) {
|
|
|
|
|
+ showTurnOverModal();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ window.alert(message || "Unable to start game.");
|
|
|
|
|
+ }
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -440,6 +461,7 @@ const initKittyFall = () => {
|
|
|
|
|
|
|
|
if (subscriptionModal) {
|
|
if (subscriptionModal) {
|
|
|
let reloadAfterSubscriptionSuccess = false;
|
|
let reloadAfterSubscriptionSuccess = false;
|
|
|
|
|
+ let playAfterSubscriptionSuccess = false;
|
|
|
const modalPanels = subscriptionModal.querySelectorAll("[data-modal-panel]");
|
|
const modalPanels = subscriptionModal.querySelectorAll("[data-modal-panel]");
|
|
|
let ignoreBackdropUntil = 0;
|
|
let ignoreBackdropUntil = 0;
|
|
|
|
|
|
|
@@ -491,6 +513,12 @@ const initKittyFall = () => {
|
|
|
event?.preventDefault();
|
|
event?.preventDefault();
|
|
|
event?.stopPropagation();
|
|
event?.stopPropagation();
|
|
|
|
|
|
|
|
|
|
+ const successActionButton = event?.target?.closest("[data-success-action-button]");
|
|
|
|
|
+ if (playAfterSubscriptionSuccess && successActionButton) {
|
|
|
|
|
+ window.location.replace(successActionButton.dataset.playUrl || "/Play");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if (event?.target?.matches(".subscription-backdrop") && Date.now() < ignoreBackdropUntil) {
|
|
if (event?.target?.matches(".subscription-backdrop") && Date.now() < ignoreBackdropUntil) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -501,7 +529,10 @@ const initKittyFall = () => {
|
|
|
setActivePanel("confirm");
|
|
setActivePanel("confirm");
|
|
|
|
|
|
|
|
if (reloadAfterSubscriptionSuccess) {
|
|
if (reloadAfterSubscriptionSuccess) {
|
|
|
- window.location.reload();
|
|
|
|
|
|
|
+ const cleanUrl = new URL(window.location.href);
|
|
|
|
|
+ cleanUrl.searchParams.delete("buyturn");
|
|
|
|
|
+ cleanUrl.searchParams.delete("quickregister");
|
|
|
|
|
+ window.location.replace(cleanUrl.toString());
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -575,7 +606,22 @@ const initKittyFall = () => {
|
|
|
turnCountElement.textContent = confirmButton.dataset.turnCount;
|
|
turnCountElement.textContent = confirmButton.dataset.turnCount;
|
|
|
}
|
|
}
|
|
|
const successPanel = subscriptionModal.querySelector('[data-modal-panel="success"]');
|
|
const successPanel = subscriptionModal.querySelector('[data-modal-panel="success"]');
|
|
|
- successPanel?.classList.toggle("is-buy-turn-result", confirmButton.dataset.packageAction === "buy-turn");
|
|
|
|
|
|
|
+ const isBuyTurn = confirmButton.dataset.packageAction === "buy-turn";
|
|
|
|
|
+ successPanel?.classList.toggle("is-buy-turn-result", isBuyTurn);
|
|
|
|
|
+ const successActionButton = subscriptionModal.querySelector("[data-success-action-button]");
|
|
|
|
|
+ const successActionLabel = successActionButton?.querySelector("[data-success-action-label]");
|
|
|
|
|
+ const successTitle = subscriptionModal.querySelector("[data-success-title]");
|
|
|
|
|
+ const successBenefits = subscriptionModal.querySelector("[data-success-benefits]");
|
|
|
|
|
+
|
|
|
|
|
+ if (successTitle) {
|
|
|
|
|
+ const turnCount = confirmButton.dataset.turnCount || "0";
|
|
|
|
|
+ successTitle.textContent = isBuyTurn
|
|
|
|
|
+ ? (successTitle.dataset.buyTurnTemplate || "You have successfully purchased {0} turn(s)!").replace("{0}", turnCount)
|
|
|
|
|
+ : successTitle.dataset.subscriptionTitle || "";
|
|
|
|
|
+ }
|
|
|
|
|
+ if (successBenefits) {
|
|
|
|
|
+ successBenefits.hidden = isBuyTurn;
|
|
|
|
|
+ }
|
|
|
const actionUrl = confirmButton.dataset.packageAction === "buy-turn"
|
|
const actionUrl = confirmButton.dataset.packageAction === "buy-turn"
|
|
|
? "/Home/BuyTurnQAction"
|
|
? "/Home/BuyTurnQAction"
|
|
|
: "/Home/RegisterQAction";
|
|
: "/Home/RegisterQAction";
|
|
@@ -588,7 +634,13 @@ const initKittyFall = () => {
|
|
|
},
|
|
},
|
|
|
success: function (response) {
|
|
success: function (response) {
|
|
|
const isSuccess = response && String(response.errorCode) === "0";
|
|
const isSuccess = response && String(response.errorCode) === "0";
|
|
|
- reloadAfterSubscriptionSuccess = isSuccess && confirmButton.dataset.packageAction === "subscribe";
|
|
|
|
|
|
|
+ reloadAfterSubscriptionSuccess = isSuccess;
|
|
|
|
|
+ playAfterSubscriptionSuccess = isSuccess;
|
|
|
|
|
+ if (successActionLabel && successActionButton) {
|
|
|
|
|
+ successActionLabel.textContent = playAfterSubscriptionSuccess
|
|
|
|
|
+ ? successActionButton.dataset.playLabel || "PLAY NOW"
|
|
|
|
|
+ : successActionButton.dataset.confirmLabel || "CONFIRM";
|
|
|
|
|
+ }
|
|
|
showSubscriptionResult(isSuccess ? "success" : "fail", response?.message || "");
|
|
showSubscriptionResult(isSuccess ? "success" : "fail", response?.message || "");
|
|
|
},
|
|
},
|
|
|
error: function () {
|
|
error: function () {
|
|
@@ -608,6 +660,10 @@ const initKittyFall = () => {
|
|
|
openSubscriptionModal();
|
|
openSubscriptionModal();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if (subscriptionModal.dataset.autoOpenBuyTurn === "true") {
|
|
|
|
|
+ openBuyTurnModal();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
openBuyTurnButtons.forEach((button) => {
|
|
openBuyTurnButtons.forEach((button) => {
|
|
|
button.addEventListener("click", openBuyTurnModal);
|
|
button.addEventListener("click", openBuyTurnModal);
|
|
|
});
|
|
});
|