>wowhelm_
~/forever/addon-api/source/1.60.1.70755

Interface/AddOns/Blizzard_SubscriptionInterstitialUI/Blizzard_SubscriptionInterstitialUI.lua

1.60.1.70755 compared with 1.60.1.70707 · 2026-11-03 · +81 −36· view file
@@ -2,45 +2,40 @@
local MaximumBulletPoints = 10;
-UIPanelWindows["SubscriptionInterstitialFrame"] = { area = "center", pushable = 0, whileDead = 1 };
+if not C_Glue.IsOnGlueScreen() then
+ UIPanelWindows["SubscriptionInterstitialFrame"] = { area = "center", pushable = 0, whileDead = 1 };
+end
-SubscriptionInterstitialSubscribeButtonBaseMixin = {};
+local SmartNavigationClickTrackingMixin = {};
-function SubscriptionInterstitialSubscribeButtonBaseMixin:OnLoad()
- local useAtlasSize = true;
- self.Background:SetAtlas(self.backgroundAtlas, useAtlasSize);
-
- self.ButtonText:ScaleTextToFit();
-end
-
-function SubscriptionInterstitialSubscribeButtonBaseMixin:OnShow()
+function SmartNavigationClickTrackingMixin:OnShow()
self:ClearClickState();
end
-function SubscriptionInterstitialSubscribeButtonBaseMixin:OnClick()
- PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON);
-
+function SmartNavigationClickTrackingMixin:MarkClicked()
self.wasClicked = true;
-
- if StoreInterfaceUtil.OpenToSubscriptionProduct() then
- SendSubscriptionInterstitialResponse(Enum.SubscriptionInterstitialResponseType.Clicked);
- else
- SendSubscriptionInterstitialResponse(Enum.SubscriptionInterstitialResponseType.WebRedirect)
- end
-
- HideUIPanel(self:GetParent());
end
-function SubscriptionInterstitialSubscribeButtonBaseMixin:WasClicked()
+function SmartNavigationClickTrackingMixin:WasClicked()
return self.wasClicked;
end
-function SubscriptionInterstitialSubscribeButtonBaseMixin:ClearClickState()
+function SmartNavigationClickTrackingMixin:ClearClickState()
self.wasClicked = false;
end
+SubscriptionInterstitialSubscribeButtonBaseMixin = CreateFromMixins(SmartNavigationClickTrackingMixin);
+
+function SubscriptionInterstitialSubscribeButtonBaseMixin:OnLoad()
+ local useAtlasSize = true;
+ self.Background:SetAtlas(self.backgroundAtlas, useAtlasSize);
+
+ self.ButtonText:ScaleTextToFit();
+end
+
+
SubscriptionInterstitialSubscribeButtonMixin = {};
function SubscriptionInterstitialSubscribeButtonMixin:OnLoad()
@@ -90,20 +85,46 @@ function SubscriptionInterstitialUpgradeButtonMixin:OnLoad()
end
-SubscriptionInterstitialCloseButtonMixin = {};
-
-function SubscriptionInterstitialCloseButtonMixin:OnClick()
- PlaySound(SOUNDKIT.IG_CHARACTER_INFO_CLOSE);
- HideUIPanel(self:GetParent());
-end
-
-
SubscriptionInterstitialFrameMixin = {}
function SubscriptionInterstitialFrameMixin:OnLoad()
self:RegisterEvent("SHOW_SUBSCRIPTION_INTERSTITIAL");
self.Inset.Bg:Hide();
+
+ self:CreateShadowOverlay();
+
+ local function OnCloseClick()
+ PlaySound(SOUNDKIT.IG_CHARACTER_INFO_CLOSE);
+ self:HideInterstitial();
+ end
+
+ self.CloseButton:SetScript("OnClick", OnCloseClick);
+ self.ClosePanelButton:SetScript("OnClick", OnCloseClick);
+
+ local function OnSubscribeClick(button)
+ PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON);
+
+ button:MarkClicked();
+
+ if StoreInterfaceUtil.OpenToSubscriptionProduct() then
+ SendSubscriptionInterstitialResponse(Enum.SubscriptionInterstitialResponseType.Clicked);
+ else
+ SendSubscriptionInterstitialResponse(Enum.SubscriptionInterstitialResponseType.WebRedirect);
+ end
+
+ self:HideInterstitial();
+ end
+
+ self.SubscribeButton:SetScript("OnClick", OnSubscribeClick);
+ self.UpgradeButton:SetScript("OnClick", OnSubscribeClick);
+end
+
+function SubscriptionInterstitialFrameMixin:CreateShadowOverlay()
+ self.ShadowOverlay = CreateFrame("Frame", nil, self, "ShadowOverlaySmallTemplate");
+ self.ShadowOverlay:SetFrameLevel(500);
+ self.ShadowOverlay:SetPoint("TOPLEFT", self.Inset, "TOPLEFT", 3, -3);
+ self.ShadowOverlay:SetPoint("BOTTOMRIGHT", self.Inset, "BOTTOMRIGHT", -3, 2);
end
function SubscriptionInterstitialFrameMixin:OnShow()
@@ -130,11 +151,31 @@ end
function SubscriptionInterstitialFrameMixin:OnEvent(event, ...)
if event == "SHOW_SUBSCRIPTION_INTERSTITIAL" then
local interstitialType = ...;
- self:SetInterstitialType(interstitialType);
+ self:ShowInterstitial(interstitialType);
+ end
+end
+
+function SubscriptionInterstitialFrameMixin:ShowInterstitial(interstitialType)
+ self:SetInterstitialType(interstitialType);
+
+ if C_Glue.IsOnGlueScreen() then
+ -- Parented so it hides with character select; character select raises itself on click, so only a higher strata keeps this above it.
+ self:SetParent(CharacterSelect);
+ self:SetFrameStrata("DIALOG");
+ self:Show();
+ else
ShowUIPanel(self);
end
end
+function SubscriptionInterstitialFrameMixin:HideInterstitial()
+ if C_Glue.IsOnGlueScreen() then
+ self:Hide();
+ else
+ HideUIPanel(self);
+ end
+end
+
function SubscriptionInterstitialFrameMixin:OnCinematicStarting()
self.cinematicIsShowing = true;
EventRegistry:UnregisterCallback("CinematicFrame.CinematicStarting", self);
@@ -145,11 +186,15 @@ function SubscriptionInterstitialFrameMixin:OnCinematicStopped()
self.cinematicIsShowing = nil;
EventRegistry:UnregisterCallback("CinematicFrame.CinematicStopped", self);
- ShowUIPanel(self);
+ self:ShowInterstitial(self.interstitialType);
end
function SubscriptionInterstitialFrameMixin:SetInterstitialType(interstitialType)
- local isMaxLevel = interstitialType == Enum.SubscriptionInterstitialType.MaxLevel;
- self.SubscribeButton:SetShown(not isMaxLevel);
- self.UpgradeButton:SetShown(isMaxLevel);
+ self.interstitialType = interstitialType;
+
+ local isSubscriptionPeriod = interstitialType == Enum.SubscriptionInterstitialType.SubscriptionPeriod;
+ local showUpgrade = isSubscriptionPeriod or (interstitialType == Enum.SubscriptionInterstitialType.MaxLevel);
+ self.SubscribeButton:SetShown(not showUpgrade);
+ self.UpgradeButton:SetShown(showUpgrade);
+ self.UpgradeButton.TitleSubText:SetShown(not isSubscriptionPeriod);
end