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.
243 lines
7.9 KiB
243 lines
7.9 KiB
local After = C_Timer.After;
|
|
|
|
local entranceDelay = NarciAPI_CreateAnimationFrame(0.25);
|
|
entranceDelay:SetScript("OnUpdate", function(self, elapsed)
|
|
self.total = self.total + elapsed;
|
|
if self.total >= self.duration then
|
|
self:Hide()
|
|
if self.callBack then
|
|
self.callBack();
|
|
end
|
|
end
|
|
end);
|
|
|
|
function entranceDelay:SetCallBack(func)
|
|
self:Hide();
|
|
self.callBack = func;
|
|
self:Show();
|
|
end
|
|
|
|
local requestDelay = NarciAPI_CreateAnimationFrame(0.25);
|
|
requestDelay:SetScript("OnUpdate", function(self, elapsed)
|
|
self.total = self.total + elapsed;
|
|
if self.total >= self.duration then
|
|
self:Hide()
|
|
if self.callBack then
|
|
self.callBack();
|
|
end
|
|
end
|
|
end);
|
|
|
|
function requestDelay:SetCallBack(func)
|
|
self:Hide();
|
|
self.callBack = func;
|
|
self:Show();
|
|
end
|
|
|
|
----------------------------------------------------------------------------
|
|
NarciAchievementRewardModelMixin = CreateFromMixins(ModelSceneMixin);
|
|
|
|
function NarciAchievementRewardModelMixin:OnHide()
|
|
self:Hide();
|
|
self:SetAlpha(0);
|
|
end
|
|
|
|
function NarciAchievementRewardModelMixin:Initialize()
|
|
self.reversedLighting = true;
|
|
self:OnLoad();
|
|
self.description = self.ClipFrame.description;
|
|
self.flyIn = self.ClipFrame.description.flyIn;
|
|
self.arrow.spring:Play();
|
|
|
|
--Fade In/Out
|
|
local animation = NarciAPI_CreateAnimationFrame(0.15);
|
|
|
|
animation:SetScript("OnUpdate", function(frame, elapsed)
|
|
frame.total = frame.total + elapsed;
|
|
local alpha = frame.fromAlpha + frame.delta;
|
|
frame.fromAlpha = alpha;
|
|
if alpha <= 0 then
|
|
alpha = 0;
|
|
frame:Hide();
|
|
self:Hide();
|
|
elseif alpha >= 1 then
|
|
alpha = 1;
|
|
frame:Hide();
|
|
end
|
|
self:SetAlpha(alpha);
|
|
end);
|
|
|
|
function self:FadeIn()
|
|
animation:Hide();
|
|
local state = self:IsShown();
|
|
local alpha = self:GetAlpha();
|
|
animation.fromAlpha = alpha;
|
|
if state then
|
|
if alpha ~= 1 then
|
|
animation.delta = 1 / animation.duration / 60;
|
|
animation:Show();
|
|
end
|
|
else
|
|
entranceDelay:SetCallBack(
|
|
function()
|
|
self:Show();
|
|
animation.delta = 1 / animation.duration / 60;
|
|
animation:Show();
|
|
end
|
|
);
|
|
end
|
|
end
|
|
|
|
function self:FadeOut()
|
|
if not self:IsShown() then return end
|
|
animation:Hide();
|
|
animation.fromAlpha = self:GetAlpha();
|
|
animation.delta = - 1 / animation.duration / 60;
|
|
animation:Show();
|
|
end
|
|
|
|
function self:ClearCallback()
|
|
entranceDelay.callBack = nil;
|
|
end
|
|
end
|
|
|
|
function NarciAchievementRewardModelMixin:SetItem(itemID, breakLoop)
|
|
requestDelay:SetCallBack(nil);
|
|
|
|
local mountID = C_MountJournal.GetMountFromItem(itemID);
|
|
local ModelScene = self;
|
|
local _, mode, actorTag, modelSceneID, creatureDisplayID, creatureName, description, icon, isSelfMount, isCollected;
|
|
|
|
if mountID and mountID ~= 0 then
|
|
|
|
if mountID == ModelScene.mountID and ModelScene.mode == "mount" then
|
|
self:FadeIn();
|
|
if self.isCollected then
|
|
self.SummonButton:Show();
|
|
end
|
|
return
|
|
else
|
|
mode = "mount";
|
|
ModelScene.mode = "mount";
|
|
actorTag = "unwrapped";
|
|
ModelScene.mountID = mountID;
|
|
end
|
|
|
|
creatureName, _, icon, _, _, _, _, _, _, _, isCollected = C_MountJournal.GetMountInfoByID(mountID);
|
|
creatureDisplayID, description, _, isSelfMount, _, modelSceneID, animID= C_MountJournal.GetMountInfoExtraByID(mountID);
|
|
|
|
self.isCollected = isCollected;
|
|
self.SummonButton:SetShown(isCollected);
|
|
self.SummonButton.label:SetText(MOUNT);
|
|
else
|
|
local petID, speciesID;
|
|
creatureName, icon, _, petID, _, description, _, _, _, _, _, creatureDisplayID, speciesID = C_PetJournal.GetPetInfoByItemID(itemID);
|
|
|
|
if (petID and creatureDisplayID) then
|
|
|
|
--print("This is a pet:"..creatureName);
|
|
if petID == ModelScene.petID and ModelScene.mode == "battlepet" then
|
|
self:FadeIn();
|
|
if self.isCollected then
|
|
self.SummonButton:Show();
|
|
end
|
|
return
|
|
else
|
|
mode = "battlepet";
|
|
ModelScene.mode = "battlepet";
|
|
modelSceneID = C_PetJournal.GetPetModelSceneInfoBySpeciesID(speciesID); --cardModelSceneID, loadoutModelSceneID
|
|
actorTag = "unwrapped";
|
|
ModelScene.petID = petID;
|
|
end
|
|
local _, petGUID = C_PetJournal.FindPetIDByName(creatureName);
|
|
if petGUID then
|
|
isCollected = C_PetJournal.PetIsSummonable(petGUID);
|
|
end
|
|
self.petGUID = petGUID;
|
|
self.isCollected = isCollected;
|
|
self.SummonButton:SetShown(isCollected);
|
|
self.SummonButton.label:SetText(BATTLE_PET_SUMMON);
|
|
|
|
else
|
|
--neither mount or pet
|
|
if breakLoop then
|
|
self:FadeOut();
|
|
--print("No Data");
|
|
else
|
|
--Request model info again
|
|
requestDelay:SetCallBack(function()
|
|
self:SetItem(itemID, true);
|
|
end);
|
|
end
|
|
self.SummonButton:Hide();
|
|
|
|
return false
|
|
end
|
|
end
|
|
|
|
ModelScene.itemIcon:SetTexture(icon);
|
|
--Cropped Description Text
|
|
ModelScene.flyIn:Stop();
|
|
ModelScene.header:SetText(creatureName);
|
|
ModelScene.description:SetText(description);
|
|
|
|
local textHeight = ModelScene.description:GetHeight();
|
|
local clipHeight = ModelScene.ClipFrame:GetHeight();
|
|
if textHeight > clipHeight then
|
|
local offset = textHeight - clipHeight;
|
|
ModelScene.flyIn.offset:SetOffset(0, offset);
|
|
ModelScene.flyIn.offset:SetDuration( offset / 8 );
|
|
ModelScene.flyIn:Play();
|
|
ModelScene.arrow:Show();
|
|
else
|
|
ModelScene.arrow:Hide();
|
|
end
|
|
|
|
local forceEvenIfSame = false;
|
|
ModelScene:TransitionToModelSceneID(modelSceneID, CAMERA_TRANSITION_TYPE_IMMEDIATE, CAMERA_MODIFICATION_TYPE_MAINTAIN, forceEvenIfSame);
|
|
|
|
local actor = ModelScene:GetActorByTag(actorTag);
|
|
|
|
if actor then
|
|
actor:SetModelByCreatureDisplayID(creatureDisplayID);
|
|
local fromZoom, toZoom;
|
|
-- mount self idle animation
|
|
if mode == "mount" then
|
|
fromZoom = 15;
|
|
toZoom = 12;
|
|
if (isSelfMount) then
|
|
actor:SetAnimationBlendOperation(LE_MODEL_BLEND_OPERATION_NONE);
|
|
actor:SetAnimation(618); -- MountSelfIdle
|
|
else
|
|
actor:SetAnimationBlendOperation(LE_MODEL_BLEND_OPERATION_ANIM);
|
|
actor:SetAnimation(0);
|
|
end
|
|
--ModelScene:AttachPlayerToMount(actor, animID, isSelfMount, disablePlayerMountPreview);
|
|
ModelScene:SetViewInsets(0, 0, 0, 0);
|
|
else
|
|
fromZoom = 24;
|
|
toZoom = 15;
|
|
actor:SetAnimationBlendOperation(LE_MODEL_BLEND_OPERATION_NONE);
|
|
actor:SetAnimation(0, -1);
|
|
ModelScene:SetViewInsets(0, 0, 80, 0);
|
|
end
|
|
|
|
|
|
--Zoom-In Transition
|
|
local camera = ModelScene:GetActiveCamera();
|
|
--local d = camera:GetZoomDistance();
|
|
|
|
camera:SetZoomDistance(fromZoom);
|
|
camera:SnapAllInterpolatedValues();
|
|
actor:SetAlpha(0);
|
|
After(0, function()
|
|
UIFrameFadeIn(actor, 0.15, 0, 1);
|
|
camera:SetZoomDistance(toZoom);
|
|
ModelScene:SetLightDirection(-0.0655, 1, 0);
|
|
end)
|
|
|
|
end
|
|
|
|
self:FadeIn();
|
|
return true;
|
|
end
|