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.

1035 lines
35 KiB

local _, addon = ...
local currentVersion = 10500;
local lastMajorVersion = 0;
local _, _, _, tocversion = GetBuildInfo();
tocversion = tonumber(tocversion);
local TEST_ALAWYS_SHOW = false;
-----------------------------------------------------------------
local function ApplyPatchFix(self)
--Apply fix--
--None
return;
end
local After = C_Timer.After;
local FadeFrame = NarciAPI_FadeFrame;
local UIFrameFadeIn = UIFrameFadeIn;
local UIFrameFadeOut = UIFrameFadeOut;
local GetMouseFocus = addon.TransitionAPI.GetMouseFocus;
local pi = math.pi;
local sin = math.sin;
local cos = math.cos;
local pow = math.pow;
local L = Narci.L;
local function outSine(t, b, e, d)
return (e - b) * sin(t / d * (pi / 2)) + b
end
local function inOutSine(t, b, e, d)
return (b - e) / 2 * (cos(pi * t / d) - 1) + b
end
--New Splash--
local MainFrame, PreviewFrame;
------------------------------------------------------------------
local playerOffsetX = 0;
local playerOffsetZ = -0.5;
local playerModelInfo;
local PI = math.pi;
local facing = -PI/2.5;
local ModelOffsets = {
--[raceID] = {Eye male's, female's, male's Z, female's Z}
[1] = {1.6, 1.5, -0.58, -0.6}, -- Human
[2] = {1.6, 1.5, -0.54, -0.6}, -- Orc bow
[3] = {1.7, 1.5, -0.3, -0.4}, -- Dwarf
[4] = {1.6, 1.5, -0.67, -0.65}, -- Night Elf
[5] = {1.6, 1.5, -0.7, -0.54}, -- UD **Changed
[6] = {1.9, 1.7, -0.6, -0.6}, -- Tauren
[7] = {1.7, 1.7, -0.1, -0.2}, -- Gnome
[8] = {1.6, 1.5, -0.72, -0.6}, -- Troll 0.9414 too high?
[9] = {1.8, 1.8, -0.32, -0.25}, -- Goblin
[10] = {1.45, 1.4, -0.58, -0.6}, -- Blood Elf
[11] = {1.6, 1.5, -0.6, -0.65}, -- Goat
[22] = {1.75, 1.5, -0.6, -0.6}, -- Worgen
[24] = {1.85, 1.7, -0.42, -0.58}, -- Pandaren
[27] = {1.45, 1.4, -0.72, -0.5}, -- Nightborne
--[29] = {1, }, -- Void Elf
--[28] = {490, 491}, -- Highmountain Tauren
--[30] = {488, 489}, -- Lightforged Draenei
[31] = {1.6, 1.5, -0.85, -0.76}, -- Zandalari
[32] = {1.7, 1.65, -0.7, -0.65}, -- Kul'Tiran
--[34] = {499, nil}, -- Dark Iron Dwarf
[35] = {1.7, 1.5, -0.3, -0.2}, -- Vulpera
--[36] = {495, 498}, -- Mag'har
--[37] = {929, 931}, -- Mechagnome
}
local AnimationPresets = {
--Patch 8.3.0 Narcissus 1.0.8
--[raceID] = {male's, female's}
--/run SetSplashModelAnimation()
[1] = {860, 1240}, -- Human
[2] = {860, 988}, -- Orc bow
[3] = {860, 860}, -- Dwarf
[4] = {860, 52}, -- Night Elf
[5] = {944, 860}, -- UD
[6] = {944, 1330}, -- Tauren
[7] = {940, 944}, -- Gnome
[8] = {1330, 860}, -- Troll
[9] = {944, 944}, -- Goblin
[10] = {940, 988}, -- Blood Elf
[11] = {988, 988}, -- Goat
[22] = {944, 988}, -- Worgen
[24] = {732, 1448}, -- Pandaren
[27] = {988, 944}, -- Nightborne
[31] = {988, 860}, -- Zandalari
[32] = {1240, 1330}, -- Kul'Tiran
[35] = {862, 860}, -- Vulpera 125 4
}
local SplashModelAnimationID = 860;
local function SetModelOffset()
local unit = "player";
local _, _, raceID = UnitRace(unit);
local genderID = UnitSex(unit);
if genderID and raceID then
genderID = genderID - 1;
else
return
end
if raceID == 25 or raceID == 26 then --Pandaren A|H
raceID = 24;
elseif raceID == 29 then
raceID = 10;
elseif raceID == 37 then
raceID = 7;
elseif raceID == 30 then
raceID = 11;
elseif raceID == 28 then
raceID = 6;
elseif raceID == 34 then
raceID = 3;
elseif raceID == 36 then
raceID = 2;
elseif raceID == 22 then
local _, inAlternateForm = HasAlternateForm();
if not inAlternateForm then
--Wolf
raceID = 22;
else
raceID = 1;
end
end
--Set offsetX for a few
if raceID == 11 then
if genderID == 1 then
playerOffsetX = 0.2;
else
playerOffsetX = -0.06;
end
elseif raceID == 2 then
playerOffsetX = -0.05;
elseif raceID == 5 then
if genderID == 1 then
playerOffsetX = 0;
else
playerOffsetX = -0.03;
end
elseif raceID == 24 then
if genderID == 1 then
playerOffsetX = -0.035;
end
elseif raceID == 31 then
if genderID == 1 then
playerOffsetX = -0.04;
end
elseif raceID == 35 then
if genderID == 1 then
playerOffsetX = -0.04;
else
playerOffsetX = 0.035;
end
elseif raceID == 10 then
--***Changed
playerOffsetX = 0.05;
elseif raceID == 3 then
if genderID == 1 then
playerOffsetX = 0.03;
end
elseif raceID == 22 then
if genderID == 1 then
playerOffsetX = 0.11;
else
playerOffsetX = -0.02;
end
elseif raceID == 6 then
if genderID == 1 then
playerOffsetX = 0.03;
end
elseif raceID == 27 then
if genderID == 1 then
playerOffsetX = -0.04;
else
playerOffsetX = 0.02;
end
end
local info = ModelOffsets[raceID];
if info then
playerOffsetZ = info[genderID + 2] or playerOffsetZ;
end
local animationID = AnimationPresets[raceID][genderID];
if animationID then
--defalut 860
SplashModelAnimationID = animationID;
end
end
local function SetPlayerModel(model, visualIDs, animationID, fullBody, isReverseSpeed)
local playerActor = model.narciPlayerActor;
------
playerActor:ClearModel()
playerActor:SetAlpha(0);
local camera = model.narciPlayerCamera;
model:SetActiveCamera(camera);
--must-do
playerActor:SetSpellVisualKit(nil)
playerActor:SetModelByUnit("player");
------
After(0.0, function()
playerActor:SetSheathed(true);
playerActor:SetAlpha(1);
model:InitializeActor(playerActor, playerModelInfo); --Re-scale
local zoom;
if fullBody then
playerActor:SetYaw(-3.14/3);
playerActor:SetPosition(0, 0, 0);
zoom = 3.8;
else
playerActor:SetYaw(facing);
playerActor:SetPosition(playerOffsetX, 0, playerOffsetZ);
zoom = NarciAPI_GetCameraZoomDistanceByUnit("player");
end
if isReverseSpeed then
playerActor:SetAnimation(animationID, 0, 0.25, 0);
else
playerActor:SetAnimation(animationID, 0, 0.25, 0);
end
playerActor:UndressSlot(1); --Remove helm
playerActor:UndressSlot(17)
playerActor:UndressSlot(16)
camera:SetZoomDistance(1);
camera:SnapAllInterpolatedValues();
After(0.0, function()
camera:SetZoomDistance(zoom);
if visualIDs then
local _type = type(visualIDs);
if _type == "number" then
playerActor:SetSpellVisualKit(visualIDs);
elseif _type == "table" then
for i = 1, #visualIDs do
playerActor:SetSpellVisualKit(visualIDs[i]);
end
end
else
playerActor:SetSpellVisualKit(nil);
end
--playerActor:SetDesaturation(0.6);
end)
end);
end
-------------------------------------------------------------------------------------
--[[
local BarberAssets = {};
BarberAssets.filePath = "Interface/AddOns/Narcissus/Art/Splash/BarberShop/";
BarberAssets.seaLevel = -1;
BarberAssets.defaultFacing = pi;
BarberAssets.Lighting = {
dirX = -0.0349, dirY = -0.6435, dirZ = -0.7646,
dirR = 0.8, dirG = 0.65, dirB = 0.6,
ambR = 0.8, ambG = 0.65, ambB = 0.6,
};
BarberAssets.ActorInfo = {
{name = "Barber", displayID = 25955, facing = pi*0.05, position = {2.5, 0.7, 0}, animation = {69, 2, 1, 0}, front = true },
{name = "PoleGround", fileID = 194749, facing = 0, position = {7, 2.4, -0.7}, front = true},
{name = "PoleWall", fileID = 194750, facing = -pi*0.25, position = {20, -0.3, 1.3},},
{name = "Bear", displayID = 65503, facing = -pi*0.6, position = {9, -1.2, -0.3}, },
{name = "Sergeant", displayID = 65663, facing = -pi*0.4, position = {9, -3.5, -0.4},},
{name = "Orc", displayID = 86330, facing = -pi*0.4, position = {9, -4.4, -0.4},},
{name = "Gold", fileID = 1455683, facing = 0, position = {6, 1, -0.4}, front = true},
{name = "Grunt", displayID = 4259, facing = pi*0.5, position = {7, 3, -0.4}, animation = {4, 0, 0.34, 0}, spell = 111290,},
};
function BarberAssets:CreateScene()
local Container = self.Container;
Container.Background:SetTexture(self.filePath.."BarberShop");
Container.BackgroundLeft:SetTexture(self.filePath.."BarberShop");
local FrontScene = self.FrontScene;
if self.Lighting then
local info = self.Lighting;
if info.dirX then
Container:SetLightDirection(info.dirX, info.dirY, info.dirZ);
FrontScene:SetLightDirection(info.dirX, info.dirY, info.dirZ);
end
if info.dirR then
Container:SetLightDiffuseColor(info.dirR, info.dirG, info.dirB);
FrontScene:SetLightDiffuseColor(info.dirR, info.dirG, info.dirB);
end
if info.ambR then
Container:SetLightAmbientColor(info.ambR, info.ambG, info.ambB);
FrontScene:SetLightAmbientColor(info.ambR, info.ambG, info.ambB);
end
end
local seaLevel = self.seaLevel or 0;
local defaultFacing = self.defaultFacing or 0;
for i = 1, #self.ActorInfo do
local info = self.ActorInfo[i];
local actor;
if info.front then
actor = FrontScene:CreateActor();
else
actor = Container:CreateActor();
end
if info.displayID then
actor:SetModelByCreatureDisplayID(info.displayID);
elseif info.fileID then
actor:SetModelByFileID(info.fileID);
end
if info.position then
local x, y, z = unpack(info.position);
actor:SetPosition(x, y, z + seaLevel);
else
actor:SetPosition(0, 0, seaLevel);
end
if info.animation then
actor:SetAnimation(unpack(info.animation));
else
actor:SetAnimation(0, 0, 1, 0);
end
if info.facing then
actor:SetYaw(defaultFacing + info.facing);
end
if info.spell then
actor:SetSpellVisualKit(info.spell);
end
if info.name == "Grunt" then
local GroundShadow = Container.GroundShadow;
local animWalk= NarciAPI_CreateAnimationFrame(18);
animWalk:SetScript("OnUpdate", function(frame, elapsed)
frame.total = frame.total + elapsed;
local offset = linear(frame.total, 6, -6, frame.duration);
if frame.total > frame.duration then
frame:Hide();
end
actor:SetPosition(7, offset, -1.4);
local x, y = Container:Project3DPointTo2D(7, offset, -1.4);
GroundShadow:SetPoint("CENTER", Container, "BOTTOMLEFT", x, y);
end);
function self:PlayWalking()
animWalk:Hide();
animWalk:Show();
end
function self:StopWalking()
animWalk:Hide();
actor:SetPosition(7, 3, -1.4);
end
end
end
end
function BarberAssets:CreateColorStrips()
local Container = self.Container;
local NUM_STRIPS = 8;
local strips = {};
local stripWidth = Container:GetWidth()/NUM_STRIPS;
for i = 1, NUM_STRIPS do
local strip = CreateFrame("Frame", nil, Container, "NarciSplashColorStripTemplate");
tinsert(strips, strip);
strip:SetPoint("BOTTOMLEFT", Container, "BOTTOMLEFT", (i - 1)*stripWidth, -60);
strip:SetWidth(stripWidth);
strip.Scroll:SetWidth(stripWidth);
strip.Background:SetColorTexture(0.05, 0.05, 0.05);
strip.Scroll:SetVertexColor(0.93, 0, 0.55);
strip.t = (1 - i)/5;
end
local animStrip = NarciAPI_CreateAnimationFrame(3);
animStrip:SetScript("OnUpdate", function(frame, elapsed)
frame.total = frame.total + elapsed;
for i = 1, NUM_STRIPS do
local strip = strips[i];
strip.t = strip.t + elapsed;
if strip.t > 0 then
local height = inOutSine(strip.t, 560, 0, 1);
if height <= 2 or strip.t > 1 then
strip:Hide();
else
strip:SetHeight(height);
end
end
end
if frame.total >= frame.duration then
frame:Hide();
end
end)
function self:ResetStrips()
for i = 1, NUM_STRIPS do
strips[i]:Show();
strips[i]:SetHeight(560);
strips[i].t = (1 - i)/5;
end
self:StopWalking();
end
function self:PlayStrips()
animStrip:Hide();
animStrip:Show();
self:PlayWalking();
end
end
function BarberAssets:CreateLogo()
local Container = self.Container;
Container.TextBottomRight:SetText(L["Flavored Text"] .."\n|cfff8b0deZa uul og nuq i fssh zz oou iiyoq ez oou 10‰ gul'kafh anagg.|r");
local LogoFrame = CreateFrame("Frame", "LOGO", Container, "NarciSplashSponsorFrameTemplate");
LogoFrame:SetPoint("CENTER", Container, "CENTER", 0, 0);
LogoFrame.Logo:SetTexture( self.filePath.."Logo");
local Text = LogoFrame.SponsoredBy;
Text:SetTextColor(0.5, 0.5, 0.5);
Text:SetAlpha(0);
local OilActor = Container:GetParent().VFX:CreateActor();
OilActor:SetModelByFileID(916495);
OilActor:SetPitch(pi/2);
OilActor:SetPosition(6, 0, 0);
OilActor:SetAlpha(0);
local animText = NarciAPI_CreateAnimationFrame(1.5);
local animFlyIn = NarciAPI_CreateAnimationFrame(0.5);
local animLogo = NarciAPI_CreateAnimationFrame(1);
animText.object = Text;
animText:SetScript("OnUpdate", function(frame, elapsed)
frame.total = frame.total + elapsed;
if frame.total >= frame.duration then
frame:Hide();
animFlyIn:Show();
OilActor:Show();
end
end)
animFlyIn.object = LogoFrame.Logo;
animFlyIn:SetScript("OnUpdate", function(frame, elapsed)
frame.total = frame.total + elapsed;
local alpha = frame.total/0.5;
if alpha > 1 then
alpha = 1;
end
local scale = outQuart(frame.total, 0.5, 1, frame.duration);
if frame.total >= frame.duration then
alpha = 1;
scale = 1;
frame:Hide();
After(3, function()
self:PlayStrips();
After(0.75, function()
animLogo:Show();
end)
end);
end
frame.object:SetAlpha(alpha);
frame.object:SetScale(scale);
OilActor:SetAlpha(alpha);
Text:SetAlpha(alpha);
end)
animLogo:SetScript("OnUpdate", function(frame, elapsed)
frame.total = frame.total + elapsed;
local x = outSine(frame.total, 0, -300, frame.duration);
local y = outSine(frame.total, 0, 170, frame.duration);
local scale = outSine(frame.total, 1, 0.6, frame.duration);
local alpha = 1 - frame.total/0.5;
if alpha < 0 then
alpha = 0;
Text:Hide();
OilActor:Hide();
end
if scale < 0.6 then
scale = 0.6;
end
if frame.total >= frame.duration then
x = -300;
y = 170;
scale = 0.6;
alpha = 0;
frame:Hide();
end
Text:SetAlpha(alpha);
OilActor:SetAlpha(alpha);
LogoFrame.Logo:SetScale(scale);
LogoFrame:SetPoint("CENTER", Container, "CENTER", x, y);
end);
function self:StartAnimation()
animFlyIn:Hide();
animText:Hide();
animLogo:Hide();
OilActor:SetAlpha(0);
Text:SetAlpha(0);
--Container.Background:SetAlpha(0);
Container:SetScale(1);
LogoFrame:SetPoint("CENTER", Container, "CENTER", 0, 0);
LogoFrame.Logo:SetAlpha(0);
LogoFrame.Logo:SetScale(1);
Text:Show();
self:ResetStrips();
animText:Show();
end
end
--]]
local UpdateFrame = CreateFrame("Frame");
UpdateFrame:Hide();
UpdateFrame.t = 0;
UpdateFrame.duration = 0.5;
local function OnUpdateFunc(self, elapsed)
self.t = self.t + elapsed;
local modelOffset = inOutSine(self.t, self.startX, self.endX, self.duration);
local frameOffset = inOutSine(self.t, self.textstartX, self.textendX, self.duration);
local scale = outSine(self.t, self.startScale, self.endScale, self.duration);
if self.t >= self.duration then
modelOffset = self.endX;
frameOffset = self.textendX;
scale = self.endScale;
self:Hide();
end
self.welcome:SetPoint("LEFT", modelOffset, 0);
self.note:SetPoint("LEFT", frameOffset , 0);
self.preview:SetScale(scale);
end
UpdateFrame:SetScript("OnUpdate", OnUpdateFunc);
UpdateFrame:SetScript("OnHide", function(self)
self.t = 0;
end);
local function FlyOutModel()
local f = MainFrame;
local clip = f.ClipFrame;
local UpdateFrame = UpdateFrame;
if not UpdateFrame.frame then
UpdateFrame.welcome = clip.ItemShop;
UpdateFrame.note = clip.NoteFrame;
UpdateFrame.preview = clip.Preview;
end
if UpdateFrame:IsShown() then return end;
if f.IsExpanded then
--Hide patch note
UpdateFrame.startX = 180;
UpdateFrame.endX = 0;
UpdateFrame.textstartX = 0;
UpdateFrame.textendX = -100;
UpdateFrame.startScale = 1;
UpdateFrame.endScale = 1;
--FadeFrame(clip.ModelScene, UpdateFrame.duration, "IN");
--UIFrameFadeIn(clip.AssetContainer, UpdateFrame.duration, 0, 1);
FadeFrame(clip.ItemShop, UpdateFrame.duration, "IN");
FadeFrame(clip.NoteFrame, 0.45, "OUT");
FadeFrame(clip.Preview, 0.25, "OUT");
if not clip.ItemShop.isPlayed then
clip.ItemShop:PlayEntrance();
end
--button visual
f.LogoButton:Hide();
f.LogoButton.Text:SetText(SPLASH_BASE_HEADER);
f.LogoButton.Text.Bling:Play();
else
--Show patch note
UpdateFrame.startX = 0;
UpdateFrame.endX = 180;
UpdateFrame.textstartX = -100;
UpdateFrame.textendX = 0;
UpdateFrame.startScale = 1.5;
UpdateFrame.endScale = 1;
--FadeFrame(clip.ModelScene, UpdateFrame.duration, "OUT");
--UIFrameFadeOut(clip.AssetContainer, UpdateFrame.duration, 1, 0);
FadeFrame(clip.ItemShop, UpdateFrame.duration, "OUT");
FadeFrame(clip.NoteFrame, 0.35, "IN");
FadeFrame(clip.Preview, 0.5, "IN");
--button visual
FadeFrame(f.LogoButton, 0.2, "Forced_IN");
local version = NarciAPI.GetAddOnVersionInfo(true);
f.LogoButton.Text:SetText(string.format("|cff"..NARCI_COLOR_CYAN_DARK.. L["Splash Whats New Format"], version));
f.LogoButton.Text.Bling:Stop();
end
f.IsExpanded = not f.IsExpanded;
UpdateFrame:Show();
end
local function LogoButton_OnClick(self)
FlyOutModel();
end
--The text will then be replaced
local PatchNotes = {
{category = "Photo Mode",
contents = {
{name = "Weapon Browser", description = "-", hasPicture = true},
{name = "Character Select Screen", description = "-", hasPicture = true},
{name = "Dressing Room", description = "-", hasPicture = true},
{name = "NPC Brwoser", description = "-", },
},
},
{category = "Character Frame",
contents = {
{name = "Shard of Domination", description = "-", hasPicture = true},
{name = "Soulbinds", description = "-", hasPicture = true},
{name = "Visuals", description = "-"},
},
},
};
local function SetUpSplash(SplashFrame)
--Model
--[[
local ModelScene = SplashFrame.ClipFrame.ModelScene;
local FrontScene = ModelScene.FrontScene;
local actor = NarciAPI_SetupModelScene(ModelScene, nil, 3, "FRONT");
local actor = NarciAPI_SetupModelScene(FrontScene, nil, 3, "FRONT");
NarciAPI_SetupModelScene(SplashFrame.ClipFrame.VFX, nil, 3, "FRONT");
BarberAssets.Container = ModelScene;
BarberAssets.FrontScene = FrontScene;
BarberAssets:CreateColorStrips();
BarberAssets:CreateLogo();
BarberAssets:CreateScene();
--]]
--Create Patch Notes
local NoteFrame = SplashFrame.ClipFrame.NoteFrame;
local ScrollChild = NoteFrame.ScrollFrame.ScrollChild;
ScrollChild:SetSize(NoteFrame:GetSize());
local data;
local frameHeight = 0;
local numText = 0;
for i = 1, #PatchNotes do
data = PatchNotes[i];
local Header = ScrollChild:CreateFontString(nil, "OVERLAY", "NarciSplashHeaderTemplate");
Header:SetPoint("TOPLEFT", ScrollChild, "TOPLEFT", 50, -frameHeight);
Header:SetText(L["Splash Category"..i]);--data.category
frameHeight = frameHeight + Header:GetHeight() + 12;
local Arrow = ScrollChild:CreateTexture(nil, "OVERLAY");
Arrow:SetSize(32, 32);
Arrow:SetTexture("Interface\\AddOns\\Narcissus\\ART\\Splash\\Pointer-Right");
Arrow:SetPoint("RIGHT", Header, "LEFT", -4, 2);
for j = 1, #data.contents do
local content = data.contents[j];
local TextFrame = CreateFrame("Frame", nil, ScrollChild, "NarciSplashInteractiveTextFrame");
TextFrame:SetPoint("TOPLEFT", ScrollChild, "TOPLEFT", 50, -frameHeight);
numText = numText + 1;
local textHeight = TextFrame:SetUpFrame(numText, L["Splash Content"..numText.." Name"], L["Splash Content"..numText.." Description"], content.hasPicture);
frameHeight = frameHeight + textHeight + 16;
end
frameHeight = frameHeight + 8;
end
local deltaRatio = 1;
local speedRatio = 0.2;
local positionFunc = function(endValue, delta, scrollBar, isTop, isBottom)if isBottom then scrollBar.BottomArrow:Hide() end end;
local buttonHeight = 80;
local range = frameHeight - NoteFrame.ScrollFrame:GetHeight();
NarciAPI_ApplySmoothScrollToScrollFrame(NoteFrame.ScrollFrame, deltaRatio, speedRatio, positionFunc, buttonHeight, range);
end
NarciInteractveSplashMixin = {};
function NarciInteractveSplashMixin:OnLoad()
MainFrame = self;
PreviewFrame = self.ClipFrame.Preview;
tinsert(UISpecialFrames, self:GetName());
SetUpSplash(self);
self.LogoButton:SetScript("OnClick", LogoButton_OnClick);
--Item Shop
self.ClipFrame.ItemShop.Header.Logo1:SetScript("OnClick", LogoButton_OnClick);
end
function NarciInteractveSplashMixin:OnShow()
--BarberAssets:StartAnimation();
end
function NarciInteractveSplashMixin:OnEnter()
--FadeFrame(self.CloseButton, 0.25, "IN");
FadeFrame(self.LogoButton.Text, 0.25, "IN");
end
function NarciInteractveSplashMixin:OnLeave()
if self:IsMouseOver() then return end
--NarciAPI_FadeFrame(self.CloseButton, 0.25, "OUT");
if not self.LogoButton.IsExpanded then
NarciAPI_FadeFrame(self.LogoButton.Text, 0.15, "OUT");
end
end
function NarciInteractveSplashMixin:OnHide()
self:SetAlpha(0);
self:StopAnimating();
end
local function CreateSplashFrame()
if not Narci_InteractiveSplash then
local frame = CreateFrame("Frame", "Narci_InteractiveSplash", nil, "NarciInteractiveSplashTemplate");
end
end
local function ShowSplash()
FadeFrame(Narci_InteractiveSplash, 0.25, "Forced_IN");
--Narci_InteractiveSplash.ClipFrame.ItemShop:PlayEntrance();
end
local EventListener = CreateFrame("Frame");
if tocversion > 89999 then
EventListener:RegisterEvent("ADDON_LOADED");
end
function EventListener:AttempToOpenSplash()
if (CinematicFrame and CinematicFrame:IsShown()) or (MovieFrame and MovieFrame:IsShown()) then
self:RegisterEvent("CINEMATIC_STOP");
elseif (SplashFrame and SplashFrame:IsShown()) then
return
--[[
if not self.splashFrameHooked then
self.splashFrameHooked = true;
SplashFrame:HookScript("OnHide", function()
After(1, function()
ShowSplash();
end)
end);
end
--]]
else
ShowSplash();
end
end
EventListener:SetScript("OnEvent", function(self, event, ...)
if event == "ADDON_LOADED" then
local name = ...
if name == "Narcissus" then
self:UnregisterEvent(event);
else
return
end
if currentVersion > NarcissusDB.Version or TEST_ALAWYS_SHOW then
ApplyPatchFix();
if NarcissusDB.Version < lastMajorVersion or TEST_ALAWYS_SHOW then
self:RegisterEvent("GARRISON_UPDATE");
self:RegisterEvent("LOADING_SCREEN_DISABLED");
CreateSplashFrame();
end
NarcissusDB.Version = currentVersion;
end
elseif event == "LOADING_SCREEN_DISABLED" then
self:UnregisterEvent(event);
self.loadingScreenOff = true;
if not self.hasPlayed and self.garrisonUpdated then
self.hasPlayed = true;
After(2.5, function()
self:AttempToOpenSplash();
end)
end
elseif event == "GARRISON_UPDATE" then
self:UnregisterEvent(event);
self.garrisonUpdated = true;
if self.loadingScreenOff and not self.hasPlayed then
self.hasPlayed = true;
After(2.5, function()
self:AttempToOpenSplash();
end);
end
elseif event == "CINEMATIC_STOP" then
self:UnregisterEvent(event);
After(2, function()
ShowSplash();
end);
end
end)
local RunDelayedFunction = NarciAPI_RunDelayedFunction;
local function ShowButtonTab(Preview, id)
--Narcissus 1.0.9
if true then
return
end
--Narcissus 1.0.8
if id == 2 then
Preview.ButtonTab:Show();
else
Preview.ButtonTab:Hide();
end
end
function NarciSplash_PreviewFadeIn_OnFinished(self)
local Preview = PreviewFrame; --Preview frame
Preview.pauseUpdate = nil;
self:GetParent():SetTexture(Preview.ImageBottom:GetTexture())
self:GetParent():SetAlpha(1);
Preview.ImageBottom:SetAlpha(0);
if Preview:GetParent().NoteFrame:IsMouseOver() then
local button = GetMouseFocus();
if button then
if button.isInteractive and button.hasPicture then
local id = button.id;
if id ~= Preview.id then
ShowButtonTab(Preview, id);
--------
Preview.pauseUpdate = true;
Preview.ImageBottom:SetTexture("Interface\\AddOns\\Narcissus\\ART\\Splash\\SplashIMG"..id);
Preview.ImageBottom:SetAlpha(1);
After(0.2, function()
Preview.ImageTop.fadeOut:Play();
After(0.5, function()
Preview.id = id;
end)
end)
end
end
end
end
end
NarciSplashInteractiveTextMixin = {};
function NarciSplashInteractiveTextMixin:SetUpFrame(id, name, description, hasPicture)
self.isInteractive = true;
self.id = id;
self.hasPicture = hasPicture;
self.Text:SetText(NARCI_COLOR_GREY_85..name.."|r\n"..description);
local RGB = NarciAPI.ConvertHexColorToRGB(NARCI_COLOR_CYAN_DARK);
self.Marker:SetColorTexture(RGB[1], RGB[2], RGB[3]);
local textHeight = self.Text:GetHeight();
self:SetHeight(textHeight);
return textHeight
end
function NarciSplashInteractiveTextMixin:OnEnter()
UIFrameFadeIn(self.Marker, 0.25, self.Marker:GetAlpha(), 1);
self.Marker.scaleIn:Play();
if not self.hasPicture then
return
end
local id = self.id;
local Preview = PreviewFrame;
RunDelayedFunction(self, 0.25, function()
if not Preview.pauseUpdate then
Preview.pauseUpdate = true;
Preview.ImageBottom:SetTexture("Interface\\AddOns\\Narcissus\\ART\\Splash\\SplashIMG"..id);
Preview.ImageBottom:SetAlpha(1);
After(0, function()
Preview.ImageTop.fadeOut:Play();
ShowButtonTab(Preview, id);
After(0.5, function()
Preview.id = id;
end)
end)
end
end)
end
function NarciSplashInteractiveTextMixin:OnLeave()
UIFrameFadeOut(self.Marker, 0.25, self.Marker:GetAlpha(), 0);
end
function Narci:ShowSplash()
CreateSplashFrame();
ShowSplash();
end
local function SelectionArrow_OnUpdate(self, elapsed)
self.t = self.t + elapsed;
local offsetY = inOutSine(self.t, self.fromY, self.toY, self.duration);
if self.t >= self.duration then
offsetY = self.toY;
self:SetScript("OnUpdate", nil);
end
self.SelectionMarkLeft:SetPoint("CENTER", self, "LEFT", 0, offsetY);
self.SelectionMarkRight:SetPoint("CENTER", self, "RIGHT", 0, -offsetY);
end
NarciSplashNavButtonMixin = {};
function NarciSplashNavButtonMixin:OnLoad()
if self.destination == "changelog" then
self.Backdrop:SetColorTexture(216/255, 189/255, 90/255);
self.SelectionMarkLeft:SetVertexColor(4/255, 30/255, 60/255);
self.SelectionMarkRight:SetVertexColor(4/255, 30/255, 60/255);
self.Logo:SetTexture("Interface\\AddOns\\Narcissus\\ART\\Logos\\NarcissusLogoFlatMono128");
self.Logo:SetVertexColor(4/255, 30/255, 60/255);
local version = NarciAPI.GetAddOnVersionInfo(true);
self.Title:SetText( string.format(L["Splash Whats New Format"], version) );
self.Title:SetTextColor(4/255, 30/255, 60/255);
--self.SelectionMarkLeft:Hide();
else
self.Backdrop:SetColorTexture(4/255, 30/255, 60/255);
self.SelectionMarkLeft:SetVertexColor(216/255, 189/255, 90/255);
self.SelectionMarkRight:SetVertexColor(216/255, 189/255, 90/255);
self.Logo:SetTexture("Interface\\AddOns\\Narcissus\\ART\\Splash\\Mawmart\\BrandLogo128");
self.Title:SetText( L["See Ads"] );
self.Title:SetTextColor(1, 1, 1);
--self.SelectionMarkRight:Hide();
end
local arrowSize = self.SelectionMarkLeft:GetHeight();
local selfHeight = self:GetHeight();
local vanishingOffset = (selfHeight + arrowSize)/2 + 2;
self.vanishingOffset = vanishingOffset;
self.SelectionMarkLeft:ClearAllPoints();
self.SelectionMarkLeft:SetPoint("CENTER", self, "LEFT", 0, vanishingOffset);
self.SelectionMarkRight:ClearAllPoints();
self.SelectionMarkRight:SetPoint("CENTER", self, "RIGHT", 0, -vanishingOffset);
end
function NarciSplashNavButtonMixin:OnEnter()
if not self.isShrinking then
self.isShrinking = true;
self.t = 0;
local _, _, _, _, offsetY = self.SelectionMarkLeft:GetPoint();
if offsetY ~= 0 then
self.duration = 0.5 * math.abs( offsetY / self.vanishingOffset );
self.fromY = offsetY;
self.toY = 0;
self:SetScript("OnUpdate", SelectionArrow_OnUpdate);
end
end
end
function NarciSplashNavButtonMixin:OnLeave()
if self:IsMouseOver() then
return
end
self.t = 0;
self.isShrinking = false;
self.t = 0;
local _, _, _, _, offsetY = self.SelectionMarkLeft:GetPoint();
if offsetY ~= self.vanishingOffset then
self.duration = 0.5 * math.abs( 1 - offsetY / self.vanishingOffset );
self.fromY = offsetY;
self.toY = self.vanishingOffset;
self:SetScript("OnUpdate", SelectionArrow_OnUpdate);
end
end
function NarciSplashNavButtonMixin:OnClick()
local container = self:GetParent();
FadeFrame(container, 0.25, "OUT");
container.SeeChangelog:Disable();
container.SeeSplash:Disable();
if self.destination == "changelog" then
FlyOutModel();
else
Narci_InteractiveSplash.ClipFrame.ItemShop:PlayEntrance();
end
end
function NarciSplashNavButtonMixin:OnHide()
self:SetScript("OnUpdate", nil);
end
--Events Test--
--235326 Icecrown Sky
--/run SetSplashModelAnimation()
--[[
local EventListener = CreateFrame("Frame");
--EventListener:RegisterAllEvents()
--EventListener:RegisterEvent("CVAR_UPDATE")
--EventListener:RegisterEvent("CONSOLE_MESSAGE")
--EventListener:RegisterEvent("CHAT_MSG_SYSTEM")
--EventListener:RegisterEvent("PLAYER_STARTED_LOOKING");
--EventListener:RegisterEvent("PLAYER_LEAVING_WORLD");
--EventListener:RegisterEvent("PLAYER_MOUNT_DISPLAY_CHANGED")
--EventListener:RegisterEvent("PLAYER_FLAGS_CHANGED")
EventListener:RegisterEvent("UNIT_MODEL_CHANGED")
--EventListener:RegisterEvent("CRITERIA_UPDATE")
EventListener:SetScript("OnEvent",function(self,event,...)
if event ~= "COMBAT_LOG_EVENT" and event ~= "COMBAT_LOG_EVENT_UNFILTERED" and event ~= "CHAT_MSG_ADDON"
and event ~= "UNIT_COMBAT" and event ~= "ACTIONBAR_UPDATE_COOLDOWN" and event ~= "UNIT_AURA"
and event ~= "GUILD_ROSTER_UPDATE" and event ~= "GUILD_TRADESKILL_UPDATE" and event ~= "GUILD_RANKS_UPDATE"
and event ~= "UPDATE_MOUSEOVER_UNIT" and event ~= "CURSOR_UPDATE"
and event ~= "NAME_PLATE_UNIT_ADDED" and event ~= "NAME_PLATE_UNIT_REMOVED" and event ~= "NAME_PLATE_CREATED"
and event ~= "SPELL_UPDATE_COOLDOWN" and event ~= "SPELL_UPDATE_USABLE"
and event ~= "BN_FRIEND_INFO_CHANGED" and event ~= "FRIENDLIST_UPDATE"
and event ~= "MODIFIER_STATE_CHANGED" and event ~= "UPDATE_SHAPESHIFT_FORM" and event ~= "SOCIAL_QUEUE_UPDATE" and event ~= "COMPANION_UPDATE" and event ~= "UPDATE_MOUSEOVER_UNIT"
and event ~= "COMPANION_UPDATE" and event ~= "UPDATE_INVENTORY_DURABILITY"
and event ~= "CHAT_MSG_TRADESKILLS" then
print("Event: |cFFFFD100"..event)
local name, value, value2, value3, value4, value5 = ...
print(name)
--print(value)
--print(value2)
--print("\n")
print(IsFalling())
end
end)
--To add a player into the scene, select a player in your sight and click + button.
--Click a selected button will temporarily hide its model.
--Drag a button to change the model's layer level.
--You may also change the race and gender by clicking the portrait.
--]]