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.

277 lines
10 KiB

NarciGuideMixin = {};
local tutorial; --NarcissusDB
local L = Narci.L;
local After = C_Timer.After;
local FadeFrame = NarciFadeUI.Fade;
local FIXED_WIDTH = 270;
local TEXT_INSET = 18;
local CRITERIA_MET_MARK = "[OK]";
local function CloseGuide(self)
self:GetParent():Hide();
end
local function EmptyFunc()
end
function NarciGuideMixin:OnShow()
if tutorial[self.KeyValue] then
tutorial[self.KeyValue] = false;
end
FadeFrame(self, 0.25, 1, 0);
self:SetScale(NarcissusDB["GlobalScale"]);
self:SetWidth(FIXED_WIDTH);
local height = (self.Header:GetHeight() + self.Text:GetHeight() + 2 * (TEXT_INSET - 6) + 24 + 4 + 1);
self:SetHeight(height);
PlaySound(869, "SFX");
end
function NarciGuideMixin:OnHide()
self:StopAnimating();
end
function NarciGuideMixin:NewText(title, description, anchorTo, offsetX, offsetY, nextButtonOnClickFunc, horizontal)
self:Hide();
self:ClearAllPoints();
self.Header:SetText(title);
self.Text:SetText(description);
if horizontal then
self:SetPoint("RIGHT", anchorTo, "LEFT", offsetX or 0, offsetY or 0);
self.Pointer:Hide();
self.Pointer2:SetPoint("CENTER", anchorTo, "LEFT", (offsetX or 0) - 12, offsetY or 0);
self.Pointer2:Show();
else
self:SetPoint("BOTTOM", anchorTo, "TOP", offsetX or 0, offsetY or 0);
self.Pointer2:Hide();
self.Pointer:SetPoint("CENTER", anchorTo, "TOP", offsetX or 0, (offsetY or 0) + 12 );
self.Pointer:Show();
end
self:Show();
if nextButtonOnClickFunc and type(nextButtonOnClickFunc) == "function" then
self.Next:SetScript("OnClick", nextButtonOnClickFunc);
self.Next.IconClose:Hide();
self.Next.IconNext:Show();
else
self.Next.IconClose:Show();
self.Next.IconNext:Hide();
self.Next:SetScript("OnClick", CloseGuide);
end
self.Next:Show();
end
---------------------------------------------------------------------------------------
-------------------------
--Spell Visual Browser---
-------------------------
local BrowserGuide;
local LeftClickUsed, RightClickUsed = false, false;
local function MoveToEditBox()
BrowserGuide:NewText(L["Guide Input Headline"], L["Guide Input Line1"], Narci_SpellVisualBrowser.ExpandableFrames.EditBox, 0, -4, "END");
end
local function MoveToReApplyButton()
BrowserGuide:NewText(L["Refresh Model"], L["Guide Refresh Line1"], Narci_SpellVisualBrowser.ExpandableFrames.ResetButton, 0, -4, MoveToEditBox);
end
local function MoveToHistoryTab()
BrowserGuide:Hide();
After(1, function()
BrowserGuide:NewText(L["Guide History Headline"], L["Guide History Line1"], Narci_SpellVisualBrowser.ExpandableFrames.HistoryFrame, 0, -6, MoveToReApplyButton);
end);
end
local function SpellVisualBrowser_OnTabChanged(self, value)
After(2, function()
BrowserGuide:NewText(L["Guide Spell Headline"], L["Guide Spell Line1"].."\n"..L["Guide Spell Criteria1"].."\n"..L["Guide Spell Criteria2"], Narci_SpellVisualBrowser.ExpandableFrames.ListFrame, 0, 0, MoveToHistoryTab);
hooksecurefunc(NarciPlayerModelFrame1, "ApplySpellVisualKit", function(self, visualID, oneshot)
if LeftClickUsed and RightClickUsed then
return;
end
if BrowserGuide:IsVisible() then
if oneshot then
if not LeftClickUsed then
LeftClickUsed = true;
if not RightClickUsed then
BrowserGuide.Text:SetText(L["Guide Spell Line1"].."\n".."|cff007236"..CRITERIA_MET_MARK..L["Guide Spell Criteria1"].."|r\n"..L["Guide Spell Criteria2"]);
else
BrowserGuide.Text:SetText(L["Guide Spell Line1"].."\n".."|cff007236"..CRITERIA_MET_MARK..L["Guide Spell Criteria1"].."\n"..CRITERIA_MET_MARK..L["Guide Spell Criteria2"]);
MoveToHistoryTab()
end
end
else
if not RightClickUsed then
RightClickUsed = true;
if not LeftClickUsed then
BrowserGuide.Text:SetText(L["Guide Spell Line1"].."\n"..L["Guide Spell Criteria1"].."\n|cff007236"..CRITERIA_MET_MARK.. L["Guide Spell Criteria2"]);
else
BrowserGuide.Text:SetText(L["Guide Spell Line1"].."\n".."|cff007236"..CRITERIA_MET_MARK..L["Guide Spell Criteria1"].."\n"..CRITERIA_MET_MARK..L["Guide Spell Criteria2"]);
MoveToHistoryTab()
end
end
end
end
end);
end)
end
local function BuildSpellVisualBrowserGuide()
local Browser = Narci_SpellVisualBrowser;
Browser.ShowGuide = true;
BrowserGuide = CreateFrame("Frame", nil, Browser, "NarciGenericGuideTemplate");
local TabListener = CreateFrame("SLIDER", nil, BrowserGuide);
TabListener:SetMinMaxValues(-1, 5); --Necessary!
TabListener:SetScript("OnValueChanged", SpellVisualBrowser_OnTabChanged);
BrowserGuide.TabListener = TabListener;
local function SelectFirstEntry()
BrowserGuide:Hide();
NarciSpellVisualBrowser:SelectFirstEntry();
end
local ExpandableFrames = Browser.ExpandableFrames;
ExpandableFrames:SetScript("OnShow", function(self)
After(0.6, function()
BrowserGuide:NewText(L["Category"], L["Guide Spell Choose Category"], ExpandableFrames.ListFrame, 0, 0, SelectFirstEntry);
tutorial["SpellVisualBrowser"] = false;
end);
self:SetScript("OnShow", EmptyFunc);
end);
end
local function RelocateGuide(self)
local Browser = Narci_SpellVisualBrowser;
--BrowserGuide:
end
----------------------------
--Exit Confirmation Dialog--
----------------------------
local function MakeItInsanelyLarge()
local ExitConfirm = Narci_ExitConfirmationDialog;
ExitConfirm:SetScale(4);
ExitConfirm:SetScript("OnHide", function(self)
self:SetScale(1);
tutorial["ExitConfirmation"] = false;
end)
end
----------------------------------------------------------
local Initialization = CreateFrame("Frame");
Initialization:RegisterEvent("VARIABLES_LOADED");
Initialization:SetScript("OnEvent", function(self, event, ...)
self:UnregisterEvent("VARIABLES_LOADED");
After(3, function()
tutorial = NarcissusDB.Tutorials;
if not tutorial then return; end;
--True ~ will show tutorial
local key;
--Enlarged Exit Confirmation
key = tutorial["ExitConfirmation"];
if key then
MakeItInsanelyLarge();
end
--Spell Visual Browser
key = tutorial["SpellVisualBrowser"];
if key then
BuildSpellVisualBrowserGuide();
end
--Equipment Set Manager
--Character Movement
key = tutorial["Movement"];
if key then
local Movement = CreateFrame("Frame", nil, Narci_ModelSettings, "NarciGenericGuideTemplate");
Narci_ModelSettings:SetScript("OnShow", function(self)
self:RegisterEvent("MODIFIER_STATE_CHANGED");
After(2, function()
Movement:NewText(L["Guide Model Control Headline"], L["Guide Model Control Line1"], Narci_ModelSettings, 0, 32, "END");
tutorial["Movement"] = false;
end);
self:SetScript("OnShow", function(self)
self:RegisterEvent("MODIFIER_STATE_CHANGED");
end);
end);
end
--Minimap button can be influenced by other addons
key = tutorial["IndependentMinimapButton"];
if key and NarcissusDB.Version > 10000 then
local Mini = CreateFrame("Frame", nil, Minimap, "NarciGenericGuideTemplate");
After(1, function()
Mini:NewText(L["Guide Minimap Button Headline"], L["Guide Minimap Button Line1"], Narci_MinimapButton, 0, 0, "END", "LEFT");
end)
tutorial["IndependentMinimapButton"] = false;
end
--NPC Browser Entrance
key = tutorial["NPCBrowserEntance"];
if key then
local IndexButton2 = Narci_ActorPanel.ExtraPanel.buttons[2];
local Entrance = CreateFrame("Frame", nil, IndexButton2, "NarciGenericGuideTemplate");
local hasHidden = true;
IndexButton2:SetScript("OnShow", function(self)
After(0.5, function()
hasHidden = false;
Entrance:NewText(L["NPC Browser"], L["Guide NPC Entrance Line1"], IndexButton2, 0, -3, "END");
tutorial["NPCBrowserEntance"] = false;
end);
self:SetScript("OnShow", nil);
end);
IndexButton2:HookScript("OnLeave", function()
if not hasHidden then
hasHidden = true;
FadeFrame(Entrance, 0.25, 0);
end
end)
end
--NPC Browser
key = tutorial["NPCBrowser"];
if key then
local NPC = CreateFrame("Frame", nil, Narci_NPCBrowser, "NarciGenericGuideTemplate");
Narci_NPCBrowser:SetScript("OnShow", function(self)
After(0.5, function()
NPC:NewText(L["NPC Browser"], L["Guide NPC Browser Line1"], Narci_NPCBrowser, 0, 0, "END");
tutorial["NPCBrowser"] = false;
end);
self:SetScript("OnShow", nil);
end);
end
--Shards of Domination
key = tutorial["Domination"];
if key then
local parent = Narci_Attribute;
local Alert = CreateFrame("Frame", nil, parent,"NarciDominationNoEffectAlert");
local function onShowFunc()
Alert:ClearAllPoints();
Alert:SetPoint("CENTER", Narci_ItemLevelFrame, "CENTER", 0, 0);
Alert:ShowAlert();
end
local function onAlertShownFunc()
tutorial["Domination"] = false;
end
Alert.onShowFunc = onAlertShownFunc;
if not parent:GetScript("OnShow") then
parent:SetScript("OnShow", onShowFunc);
end
end
end)
end);
function Narci:ResetGuide()
wipe(NarcissusDB.Tutorials);
end