|
|
|
|
local L = Narci.L;
|
|
|
|
|
local step = 1;
|
|
|
|
|
|
|
|
|
|
local cos = math.cos;
|
|
|
|
|
local pi = math.pi;
|
|
|
|
|
local function inOutSine(t, b, c, d)
|
|
|
|
|
return -c / 2 * (cos(pi * t / d) - 1) + b
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function PlaySFX(id)
|
|
|
|
|
PlaySound(id, "Master");
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local Conversation;
|
|
|
|
|
local UpdateFrame = CreateFrame("Frame");
|
|
|
|
|
UpdateFrame:Hide();
|
|
|
|
|
UpdateFrame.t = 0;
|
|
|
|
|
UpdateFrame.d = 0.5;
|
|
|
|
|
UpdateFrame:SetScript("OnHide", function(self)
|
|
|
|
|
self.t = 0;
|
|
|
|
|
self.height = 0;
|
|
|
|
|
end);
|
|
|
|
|
UpdateFrame:SetScript("OnShow", function(self)
|
|
|
|
|
self.StartHeight = Conversation:GetHeight();
|
|
|
|
|
end);
|
|
|
|
|
UpdateFrame:SetScript("OnUpdate", function(self, elapsed)
|
|
|
|
|
self.t = self.t + elapsed;
|
|
|
|
|
local extra = inOutSine(self.t, 0, self.height, self.d);
|
|
|
|
|
if self.t >= self.d then
|
|
|
|
|
extra = self.height;
|
|
|
|
|
self:Hide();
|
|
|
|
|
end
|
|
|
|
|
Conversation:SetHeight(self.StartHeight + extra);
|
|
|
|
|
end);
|
|
|
|
|
|
|
|
|
|
local function HeightenTab(extraHeight)
|
|
|
|
|
UpdateFrame:Hide();
|
|
|
|
|
UpdateFrame.height = extraHeight;
|
|
|
|
|
UpdateFrame:Show();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
----------------------------------------------
|
|
|
|
|
--Clamp Animations
|
|
|
|
|
local MoveFrame = CreateFrame("Frame");
|
|
|
|
|
MoveFrame:Hide();
|
|
|
|
|
MoveFrame.t = 0;
|
|
|
|
|
MoveFrame.d = 1;
|
|
|
|
|
MoveFrame.X = 0;
|
|
|
|
|
MoveFrame:SetScript("OnHide", function(self)
|
|
|
|
|
self.t = 0;
|
|
|
|
|
end);
|
|
|
|
|
MoveFrame:SetScript("OnShow", function(self)
|
|
|
|
|
MoveFrame.t = 0;
|
|
|
|
|
end);
|
|
|
|
|
MoveFrame:SetScript("OnUpdate", function(self, elapsed)
|
|
|
|
|
self.t = self.t + elapsed;
|
|
|
|
|
local offset = inOutSine(self.t, self.Start, self.End - self.Start, self.d);
|
|
|
|
|
if self.t >= self.d then
|
|
|
|
|
offset = self.End;
|
|
|
|
|
self:Hide();
|
|
|
|
|
end
|
|
|
|
|
self.Target:SetPoint(self.Point, self.RelativeTo, self.RelativePoint, self.X, offset);
|
|
|
|
|
end);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local function ClampMoveUp2()
|
|
|
|
|
local Clamp = Conversation.Clamp;
|
|
|
|
|
MoveFrame.Start = 20;
|
|
|
|
|
MoveFrame.End = 440;
|
|
|
|
|
MoveFrame.Target = Clamp;
|
|
|
|
|
MoveFrame.Point = "BOTTOM";
|
|
|
|
|
MoveFrame.RelativeTo = Narci_ExitConfirmationDialog;
|
|
|
|
|
MoveFrame.RelativePoint = "TOP";
|
|
|
|
|
MoveFrame.d = 4;
|
|
|
|
|
MoveFrame:SetScript("OnHide", function()
|
|
|
|
|
C_Timer.After(1, function()
|
|
|
|
|
Conversation.Send:Enable();
|
|
|
|
|
end);
|
|
|
|
|
return;
|
|
|
|
|
end);
|
|
|
|
|
PlaySFX(4897);
|
|
|
|
|
C_Timer.After(1, function()
|
|
|
|
|
MoveFrame:Show();
|
|
|
|
|
end);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function UnClamping()
|
|
|
|
|
PlaySFX(112166);
|
|
|
|
|
local Clamp = Conversation.Clamp;
|
|
|
|
|
C_Timer.After(0.2, function()
|
|
|
|
|
Clamp.Front:SetTexCoord(0.5, 1, 0, 1);
|
|
|
|
|
Clamp.Back:SetTexCoord(1, 0.5, 0, 1);
|
|
|
|
|
Clamp.Dust.animIn:SetScript("OnFinished", ClampMoveUp2);
|
|
|
|
|
Clamp.Dust.animIn:Play();
|
|
|
|
|
end);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function ClampMoveDown()
|
|
|
|
|
local frame = Narci_ExitConfirmationDialog;
|
|
|
|
|
frame:SetScale(1);
|
|
|
|
|
frame:SetPoint("CENTER", UIParent, "CENTER", 0, 0);
|
|
|
|
|
|
|
|
|
|
MoveFrame.Start = 500;
|
|
|
|
|
MoveFrame.End = 15;
|
|
|
|
|
MoveFrame.Target = frame;
|
|
|
|
|
MoveFrame.Point = "CENTER";
|
|
|
|
|
MoveFrame.RelativeTo = UIParent;
|
|
|
|
|
MoveFrame.RelativePoint = "CENTER";
|
|
|
|
|
MoveFrame.d = 4.3;
|
|
|
|
|
MoveFrame:SetScript("OnHide", function()
|
|
|
|
|
C_Timer.After(1, function()
|
|
|
|
|
UnClamping();
|
|
|
|
|
end);
|
|
|
|
|
end);
|
|
|
|
|
PlaySFX(4897);
|
|
|
|
|
MoveFrame:Show();
|
|
|
|
|
C_Timer.After(0.1, function()
|
|
|
|
|
frame:SetAlpha(1);
|
|
|
|
|
end);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function ClampMoveUp1()
|
|
|
|
|
local frame = Narci_ExitConfirmationDialog;
|
|
|
|
|
MoveFrame.Start = 15;
|
|
|
|
|
MoveFrame.End = 200;
|
|
|
|
|
MoveFrame.Target = frame;
|
|
|
|
|
MoveFrame.Point = "CENTER";
|
|
|
|
|
MoveFrame.RelativeTo = UIParent;
|
|
|
|
|
MoveFrame.RelativePoint = "CENTER";
|
|
|
|
|
MoveFrame.d = 8;
|
|
|
|
|
|
|
|
|
|
local function OnFinished(self)
|
|
|
|
|
self.loop = self.loop + 1;
|
|
|
|
|
local i = self.loop;
|
|
|
|
|
if i < 10 then
|
|
|
|
|
self:Play();
|
|
|
|
|
else
|
|
|
|
|
self.loop = 0;
|
|
|
|
|
self:GetParent().animOut:Play();
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
MoveFrame:SetScript("OnHide", function()
|
|
|
|
|
PlaySFX(129677);
|
|
|
|
|
local Clamp = Conversation.Clamp;
|
|
|
|
|
Clamp.Halo.Bling:SetScript("OnFinished", OnFinished);
|
|
|
|
|
C_Timer.After(0.5, function()
|
|
|
|
|
Clamp.Halo.animIn:Play();
|
|
|
|
|
end);
|
|
|
|
|
|
|
|
|
|
C_Timer.After(6, function()
|
|
|
|
|
ClampMoveDown();
|
|
|
|
|
end)
|
|
|
|
|
end)
|
|
|
|
|
PlaySFX(4901);
|
|
|
|
|
MoveFrame:Show();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function BeginClamping(func)
|
|
|
|
|
PlaySFX(112166);
|
|
|
|
|
local Clamp = Conversation.Clamp;
|
|
|
|
|
C_Timer.After(0.2, function()
|
|
|
|
|
Clamp.Front:SetTexCoord(0, 0.5, 0, 1);
|
|
|
|
|
Clamp.Back:SetTexCoord(0.5, 0, 0, 1);
|
|
|
|
|
Clamp.Dust.animIn:SetScript("OnFinished", func);
|
|
|
|
|
Clamp.Dust.animIn:Play();
|
|
|
|
|
end);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function PlayClampAnimation()
|
|
|
|
|
local Clamp = Conversation.Clamp;
|
|
|
|
|
MoveFrame.Start = 300;
|
|
|
|
|
MoveFrame.End = 20;
|
|
|
|
|
MoveFrame.Target = Clamp;
|
|
|
|
|
MoveFrame.Point = "BOTTOM";
|
|
|
|
|
MoveFrame.RelativeTo = Narci_ExitConfirmationDialog;
|
|
|
|
|
MoveFrame.RelativePoint = "TOP";
|
|
|
|
|
MoveFrame.d = 4.2;
|
|
|
|
|
MoveFrame:SetScript("OnHide", function()
|
|
|
|
|
C_Timer.After(1, function()
|
|
|
|
|
BeginClamping(ClampMoveUp1);
|
|
|
|
|
end);
|
|
|
|
|
end);
|
|
|
|
|
PlaySFX(4897);
|
|
|
|
|
MoveFrame:Show();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function ClampMoveUp3()
|
|
|
|
|
local frame = Conversation;
|
|
|
|
|
frame:SetClampedToScreen(false);
|
|
|
|
|
MoveFrame.Start = 235;
|
|
|
|
|
MoveFrame.X = -424;
|
|
|
|
|
MoveFrame.End = 880;
|
|
|
|
|
MoveFrame.Target = frame;
|
|
|
|
|
MoveFrame.Point = "BOTTOMRIGHT";
|
|
|
|
|
MoveFrame.RelativeTo = UIParent;
|
|
|
|
|
MoveFrame.RelativePoint = "BOTTOM";
|
|
|
|
|
MoveFrame.d = 4.3;
|
|
|
|
|
MoveFrame:SetScript("OnHide", function()
|
|
|
|
|
C_Timer.After(2, function()
|
|
|
|
|
PlaySFX(16004);
|
|
|
|
|
C_Timer.After(3, function()
|
|
|
|
|
PlaySFX(4317);
|
|
|
|
|
end);
|
|
|
|
|
end);
|
|
|
|
|
end);
|
|
|
|
|
PlaySFX(4897);
|
|
|
|
|
C_Timer.After(1, function()
|
|
|
|
|
MoveFrame:Show();
|
|
|
|
|
end);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function PlayClampAnimation2()
|
|
|
|
|
local Clamp = Conversation.Clamp;
|
|
|
|
|
Clamp:ClearAllPoints();
|
|
|
|
|
MoveFrame.Start = 350;
|
|
|
|
|
MoveFrame.End = 20;
|
|
|
|
|
MoveFrame.Target = Clamp;
|
|
|
|
|
MoveFrame.Point = "BOTTOM";
|
|
|
|
|
MoveFrame.RelativeTo = Conversation;
|
|
|
|
|
MoveFrame.RelativePoint = "TOP";
|
|
|
|
|
MoveFrame.d = 4.2;
|
|
|
|
|
MoveFrame:SetScript("OnHide", function()
|
|
|
|
|
C_Timer.After(1, function()
|
|
|
|
|
BeginClamping(ClampMoveUp3);
|
|
|
|
|
end);
|
|
|
|
|
end);
|
|
|
|
|
PlaySFX(4897);
|
|
|
|
|
MoveFrame:Show();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
------------------------------------------
|
|
|
|
|
local function Response(index, delay)
|
|
|
|
|
if index <= 5 then
|
|
|
|
|
local str = Conversation["A"..index];
|
|
|
|
|
HeightenTab(str:GetHeight());
|
|
|
|
|
local circle = Conversation.Loading;
|
|
|
|
|
circle:ClearAllPoints();
|
|
|
|
|
circle:SetPoint("CENTER", str, "CENTER", 0 ,0);
|
|
|
|
|
circle:Show();
|
|
|
|
|
if index <= 4 then
|
|
|
|
|
C_Timer.After(delay, function()
|
|
|
|
|
circle:Hide();
|
|
|
|
|
PlaySFX(111367);
|
|
|
|
|
UIFrameFadeIn(str, 0.25, 0, 1);
|
|
|
|
|
|
|
|
|
|
if index == 3 then
|
|
|
|
|
C_Timer.After(2, function()
|
|
|
|
|
PlayClampAnimation();
|
|
|
|
|
end);
|
|
|
|
|
else
|
|
|
|
|
Conversation.Send:Enable();
|
|
|
|
|
end
|
|
|
|
|
end);
|
|
|
|
|
else
|
|
|
|
|
C_Timer.After(3, function()
|
|
|
|
|
PlayClampAnimation2();
|
|
|
|
|
end);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function Conversation_OnClick(self)
|
|
|
|
|
local text, delay, delay2;
|
|
|
|
|
--print(step)
|
|
|
|
|
if step == 1 then
|
|
|
|
|
text = L["Q2"];
|
|
|
|
|
delay = 5;
|
|
|
|
|
delay2 = 4;
|
|
|
|
|
elseif step == 2 then
|
|
|
|
|
text = L["Q3"];
|
|
|
|
|
delay = 3;
|
|
|
|
|
delay2 = 2;
|
|
|
|
|
elseif step == 3 then
|
|
|
|
|
text = L["Q4"];
|
|
|
|
|
delay = 2;
|
|
|
|
|
delay2 = 1;
|
|
|
|
|
elseif step == 4 then
|
|
|
|
|
text = L["Q5"];
|
|
|
|
|
delay = 4;
|
|
|
|
|
delay2 = 3;
|
|
|
|
|
elseif step == 5 then
|
|
|
|
|
text = "...";
|
|
|
|
|
delay = 1;
|
|
|
|
|
delay2 = "1";
|
|
|
|
|
else
|
|
|
|
|
return;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if step == 2 then
|
|
|
|
|
C_Timer.After(3, function()
|
|
|
|
|
--Gnome Laughs
|
|
|
|
|
PlaySFX(6913);
|
|
|
|
|
end);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self:Disable();
|
|
|
|
|
self:SetScript("OnEnable", function(self)
|
|
|
|
|
PlaySFX(3093);
|
|
|
|
|
C_Timer.After(delay2, function()
|
|
|
|
|
if self:IsEnabled() then
|
|
|
|
|
self:SetText(text);
|
|
|
|
|
self.Bling.animIn:Play();
|
|
|
|
|
end
|
|
|
|
|
end);
|
|
|
|
|
end);
|
|
|
|
|
local str = self:GetParent()["Q"..step];
|
|
|
|
|
UIFrameFadeIn(str, 0.25, 0, 1);
|
|
|
|
|
self.VirtualText:SetText(text);
|
|
|
|
|
local height = self.VirtualText:GetHeight() + 16;
|
|
|
|
|
self:SetHeight(height);
|
|
|
|
|
HeightenTab(height);
|
|
|
|
|
|
|
|
|
|
C_Timer.After(2, function()
|
|
|
|
|
Response(step - 1, delay);
|
|
|
|
|
end);
|
|
|
|
|
step = step + 1;
|
|
|
|
|
|
|
|
|
|
PlaySFX(111367);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function Initialize()
|
|
|
|
|
local ECD = Narci_ExitConfirmationDialog;
|
|
|
|
|
Conversation = CreateFrame("Frame", nil, ECD, "Narci_ECDConversation");
|
|
|
|
|
Conversation:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOM", -424, 235);
|
|
|
|
|
Conversation:Show();
|
|
|
|
|
Conversation.Send:SetScript("OnClick", Conversation_OnClick);
|
|
|
|
|
Conversation.Send:SetText(L["Q1"]);
|
|
|
|
|
Conversation.Q1:SetText(L["Q1"]);
|
|
|
|
|
Conversation.Q2:SetText(L["Q2"]);
|
|
|
|
|
Conversation.Q3:SetText(L["Q3"]);
|
|
|
|
|
Conversation.Q4:SetText(L["Q4"]);
|
|
|
|
|
Conversation.Q5:SetText(L["Q5"]);
|
|
|
|
|
Conversation.A1:SetText(L["A1"]);
|
|
|
|
|
Conversation.A2:SetText(L["A2"]);
|
|
|
|
|
Conversation.A3:SetText(L["A3"]);
|
|
|
|
|
Conversation.A4:SetText(L["A4"]);
|
|
|
|
|
Conversation.A5:SetText(L["A4"]);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local Initialization = CreateFrame("Frame");
|
|
|
|
|
Initialization:RegisterEvent("VARIABLES_LOADED");
|
|
|
|
|
Initialization:SetScript("OnEvent", function(self, event, ...)
|
|
|
|
|
self:UnregisterEvent("VARIABLES_LOADED");
|
|
|
|
|
if NarcissusDB.Tutorials["ExitConfirmation"] then
|
|
|
|
|
Initialize();
|
|
|
|
|
end
|
|
|
|
|
end);
|