You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
271 lines
9.1 KiB
271 lines
9.1 KiB
local _, addon = ...
|
|
local SetTextureCurrentClass = addon.SetTextureCurrentClass;
|
|
|
|
|
|
local function CountDown_OnUpdate(self, elapased)
|
|
self.t = self.t + elapased;
|
|
if self.t > 6 then
|
|
self.t = 0;
|
|
self:SetScript("OnUpdate", nil);
|
|
self.Text2.Blink:Stop();
|
|
self.Text2.Blink:Play();
|
|
self.Text2:Show();
|
|
end
|
|
end
|
|
|
|
local function SpinButton_OnUpdate(self, elapased)
|
|
self.t = self.t + elapased;
|
|
if self.t >= 0.125 then
|
|
self.t = 0;
|
|
local sequence = self.sequence + 1;
|
|
if sequence > 16 then
|
|
sequence = 1;
|
|
end
|
|
self.sequence = sequence;
|
|
local row = math.floor( (sequence - 1) * 0.25);
|
|
local col = sequence - row * 4 - 1;
|
|
self.SpinTexture:SetTexCoord(0.25*col, 0.25*(col + 1), 0.25*row, 0.25*(row + 1));
|
|
end
|
|
end
|
|
|
|
local function Close_OnUpdate(self, elapased)
|
|
self.t = self.t + elapased;
|
|
local sat = 1 - self.t * 2;
|
|
if sat < 0 then
|
|
sat = 0;
|
|
end
|
|
if self.t > 0.5 then
|
|
sat = 0;
|
|
self:SetScript("OnUpdate", nil);
|
|
self.t = nil;
|
|
self:Hide();
|
|
end
|
|
self.parentActor:SetDesaturation(sat);
|
|
self.panel:SetAlpha(1 - sat);
|
|
self:SetAlpha(sat);
|
|
end
|
|
|
|
|
|
NarciShowcaseSplashFrameMixin = {};
|
|
|
|
function NarciShowcaseSplashFrameMixin:OnLoad()
|
|
local root = self:GetParent();
|
|
|
|
self:ClearAllPoints();
|
|
self:SetPoint("TOPLEFT", root, "TOPLEFT", 0, 0);
|
|
self:SetPoint("BOTTOMRIGHT", root, "BOTTOMRIGHT", 0, 0);
|
|
self:SetFrameStrata("HIGH");
|
|
|
|
local width, height = root:GetSize();
|
|
self.frameHeight = height;
|
|
local rightWidth = width - height * 0.75;
|
|
self.RightArea:SetSize(rightWidth, height);
|
|
|
|
local previewWidth = rightWidth * 0.8;
|
|
local prewviewHeight = previewWidth * 0.75;
|
|
self.PreviewFrame:SetSize(previewWidth, prewviewHeight);
|
|
self.LeftModelScene:SetWidth(height * 0.75);
|
|
self.PreviewFrame.Image:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Modules\\Showcase\\Splash\\ModelBackground");
|
|
self.SyncButton.Icon:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Modules\\Showcase\\Splash\\SyncButtonBig", nil, nil, "TRILINEAR");
|
|
self.SpinButton.Background:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Modules\\Showcase\\Splash\\SpinButtonBackground");
|
|
self.Text1:SetWidth(previewWidth);
|
|
self.Text2:SetText(Narci.L["Click To Continue"]);
|
|
|
|
local function InitModelScene(m)
|
|
m:SetCameraPosition(4, 0, 0);
|
|
m:SetCameraOrientationByYawPitchRoll(math.pi, 0, 0);
|
|
m:SetCameraFieldOfView(0.75);
|
|
m:SetLightDiffuseColor(0.8, 0.8, 0.8);
|
|
m:SetLightAmbientColor(0.6, 0.6, 0.6);
|
|
m:SetLightPosition(1, 0, 1);
|
|
m:SetLightDirection(-1, 0, -1);
|
|
local a = m:CreateActor(nil, "NarciAutoFittingActorTemplate");
|
|
a:SetUseCenterForOrigin(false, false, true);
|
|
a:SetPosition(0, 0, 0);
|
|
return a
|
|
end
|
|
|
|
local modelScene = self.PreviewFrame.MicroModelScene;
|
|
modelScene:SetSize(prewviewHeight*0.75, prewviewHeight);
|
|
SetTextureCurrentClass(modelScene.Background);
|
|
|
|
local microActor = InitModelScene(modelScene);
|
|
microActor.GroundShadow = modelScene.GroundShadow;
|
|
microActor.yaw = 0;
|
|
self.microActor = microActor;
|
|
|
|
local function ModelScene_OnUpdate(f, elapased)
|
|
microActor.yaw = microActor.yaw + elapased * 0.7854; --8s
|
|
microActor:SetYaw(microActor.yaw);
|
|
end
|
|
|
|
modelScene:SetScript("OnUpdate", ModelScene_OnUpdate);
|
|
|
|
local leftActor = InitModelScene(self.LeftModelScene);
|
|
leftActor.GroundShadow = self.LeftModelScene.HiddenShadow;
|
|
leftActor:SetUseTransmogSkin(false);
|
|
leftActor:SetParticleOverrideScale(0);
|
|
leftActor:SetModelByUnit("player", true, false);
|
|
self.LeftModelScene:SetFogColor(0.13, 0.13, 0.13);
|
|
self.LeftModelScene:SetFogNear(0);
|
|
self.LeftModelScene:SetFogFar(0.1);
|
|
|
|
root.TextFrame.Divider:Hide();
|
|
root.ControlPanel:Hide();
|
|
|
|
self:Step1();
|
|
end
|
|
|
|
function NarciShowcaseSplashFrameMixin:ShowNotification(state)
|
|
if state then
|
|
self.t = 0;
|
|
self:SetScript("OnUpdate", CountDown_OnUpdate);
|
|
else
|
|
self:SetScript("OnUpdate", nil);
|
|
self.Text2:Hide();
|
|
end
|
|
end
|
|
|
|
|
|
function NarciShowcaseSplashFrameMixin:Step1()
|
|
self.step = 1;
|
|
self:UpdateWidgetVisibility();
|
|
self.LeftModelScene:Show();
|
|
|
|
self.Text1:SetText(Narci.L["Showcase Splash 1"]);
|
|
local gap = 12;
|
|
local textHeight = self.Text1:GetHeight();
|
|
local height1 = textHeight + self.PreviewFrame:GetHeight() + gap;
|
|
local offsetY = (height1 - self.frameHeight) * 0.5;
|
|
self.Text1:ClearAllPoints();
|
|
self.Text1:SetPoint("TOP", self.RightArea, "TOP", 0, offsetY);
|
|
self.Text1:SetJustifyH("LEFT");
|
|
self.PreviewFrame:ClearAllPoints();
|
|
self.PreviewFrame:SetPoint("TOP", self.RightArea, "TOP", 0, offsetY - gap - textHeight);
|
|
self.microActor.yaw = 0;
|
|
self.microActor:SetModelByUnit("player");
|
|
self.microActor:UndressSlot(16);
|
|
self.microActor:UndressSlot(17);
|
|
self.Divider:SetHeight(height1 + 32);
|
|
self:FadeInText();
|
|
self.PreviewFrame:SetAlpha(0);
|
|
self.PreviewFrame.FadeIn:Play();
|
|
end
|
|
|
|
function NarciShowcaseSplashFrameMixin:Step2()
|
|
self.step = 2;
|
|
self:UpdateWidgetVisibility();
|
|
self.LeftModelScene:Show();
|
|
|
|
self.Text1:SetText(Narci.L["Showcase Splash 2"]);
|
|
self.Text1:SetJustifyH("CENTER");
|
|
local gap = 12;
|
|
local buttonSize = 24;
|
|
local textHeight = self.Text1:GetHeight();
|
|
local height1 = textHeight + gap + buttonSize;
|
|
self.Divider:SetHeight(height1 + 32);
|
|
local offsetY = (height1 - self.frameHeight) * 0.5;
|
|
self.Text1:ClearAllPoints();
|
|
self.Text1:SetPoint("TOP", self.RightArea, "TOP", 0, offsetY);
|
|
self.SyncButton:ClearAllPoints();
|
|
self.SyncButton:SetPoint("TOP", self.Text1, "BOTTOM", 0, -gap);
|
|
self.SyncButton:SetSize(buttonSize, buttonSize);
|
|
self.SyncButton:Show();
|
|
self.SyncButton.AnimRotate:Play();
|
|
self:FadeInText();
|
|
end
|
|
|
|
function NarciShowcaseSplashFrameMixin:Step3()
|
|
self.step = 3;
|
|
self:UpdateWidgetVisibility();
|
|
self.Text1:SetText(Narci.L["Showcase Splash 3"]);
|
|
self.Text1:SetJustifyH("CENTER");
|
|
local gap = 12;
|
|
local buttonSize = 24;
|
|
local textHeight = self.Text1:GetHeight();
|
|
local height1 = textHeight + gap + buttonSize;
|
|
local offsetY = (height1 - self.frameHeight) * 0.5;
|
|
self.Text1:ClearAllPoints();
|
|
self.Text1:SetPoint("TOP", self.RightArea, "TOP", 0, offsetY);
|
|
self.SpinButton:ClearAllPoints();
|
|
self.SpinButton:SetPoint("TOP", self.Text1, "BOTTOM", 0, -gap);
|
|
self.SpinButton:SetSize(buttonSize, buttonSize);
|
|
self.SpinButton:Show();
|
|
self.SpinButton.t = 0;
|
|
self.SpinButton.sequence = 1;
|
|
self.SpinButton.FadeIn:Play();
|
|
self.SpinButton:SetScript("OnUpdate", SpinButton_OnUpdate);
|
|
|
|
self.SyncButton:SetSize(16, 16);
|
|
self.SyncButton:ClearAllPoints();
|
|
self.SyncButton.AnimRotate:Play();
|
|
self.SyncButton:SetPoint("CENTER", self, "TOPLEFT", 16, -16);
|
|
self.SyncButton:Show();
|
|
self:GetParent().actor:SetDesaturation(1);
|
|
self.LeftModelScene.FadeOut:Play();
|
|
self:FadeInText();
|
|
end
|
|
|
|
function NarciShowcaseSplashFrameMixin:Step4()
|
|
self.step = 4;
|
|
self:UpdateWidgetVisibility();
|
|
|
|
self.Text1:SetText(Narci.L["Showcase Splash 4"]);
|
|
self.Text1:SetJustifyH("CENTER");
|
|
local textHeight = self.Text1:GetHeight();
|
|
local gap = 12;
|
|
local imageHeight = 27;
|
|
local height1 = textHeight + gap + imageHeight;
|
|
local offsetY = (height1 - self.frameHeight) * 0.5;
|
|
self.Text1:ClearAllPoints();
|
|
self.Text1:SetPoint("TOP", self.RightArea, "TOP", 0, offsetY);
|
|
self.ConvertIcon:ClearAllPoints();
|
|
self.ConvertIcon:SetPoint("TOP", self.Text1, "BOTTOM", 0, -gap);
|
|
self.ConvertIcon.FadeIn:Play();
|
|
self:GetParent():SpinActor(true);
|
|
self:FadeInText();
|
|
end
|
|
|
|
function NarciShowcaseSplashFrameMixin:Close()
|
|
self.t = 0;
|
|
local root = self:GetParent();
|
|
self.parentActor = root.actor;
|
|
self.panel = root.ControlPanel;
|
|
self.panel:Show();
|
|
root.TextFrame.Divider:Show();
|
|
self:SetScript("OnUpdate", Close_OnUpdate);
|
|
end
|
|
|
|
function NarciShowcaseSplashFrameMixin:FadeInText()
|
|
self.Text1.FadeIn:Stop();
|
|
self.Text1.FadeIn:Play();
|
|
end
|
|
|
|
function NarciShowcaseSplashFrameMixin:UpdateWidgetVisibility()
|
|
self.PreviewFrame:SetShown(self.step == 1);
|
|
self.SyncButton:SetShown(self.step ~= 1);
|
|
self.SpinButton:SetShown(self.step == 3);
|
|
self.ConvertIcon:SetShown(self.step == 4);
|
|
self:ShowNotification(self.step == 1 or self.step == 4);
|
|
end
|
|
|
|
function NarciShowcaseSplashFrameMixin:OnMouseDown(button)
|
|
if button == "LeftButton" then
|
|
self.step = self.step + 1;
|
|
else
|
|
self.step = self.step - 1;
|
|
end
|
|
if self.step <= 4 then
|
|
if self.step == 1 then
|
|
self:Step1();
|
|
elseif self.step == 2 then
|
|
self:Step2();
|
|
elseif self.step == 3 then
|
|
self:Step3();
|
|
else
|
|
self:Step4();
|
|
end
|
|
else
|
|
self:Close();
|
|
end
|
|
end
|