|
|
|
|
local addonName, addon = ...
|
|
|
|
|
addon = LibStub("AceAddon-3.0"):GetAddon(addonName)
|
|
|
|
|
|
|
|
|
|
local L = LibStub("AceLocale-3.0"):GetLocale(addonName)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local MAX_DEFAULT_OUTFITS = C_TransmogCollection.GetNumMaxOutfits()
|
|
|
|
|
|
|
|
|
|
--Coresponds to wardrobeOutfits
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local function GetTableIndex(index)
|
|
|
|
|
local numOutfits = #C_TransmogCollection.GetOutfits()
|
|
|
|
|
return index - numOutfits + 1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local function IsDefaultSet(outfitID)
|
|
|
|
|
return addon.IsDefaultSet(outfitID)
|
|
|
|
|
--return outfitID < MAX_DEFAULT_OUTFITS -- #C_TransmogCollection.GetOutfits()--MAX_DEFAULT_OUTFITS
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function LookupOutfitIDFromName(name)
|
|
|
|
|
local outfits = addon.GetOutfits(true)
|
|
|
|
|
for i, data in ipairs(outfits) do
|
|
|
|
|
if data.name == name then
|
|
|
|
|
return data.outfitID
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function LookupIndexFromID(outfitID)
|
|
|
|
|
local outfits = addon.GetOutfits(true)
|
|
|
|
|
for i, data in ipairs(outfits) do
|
|
|
|
|
if data.outfitID == outfitID then
|
|
|
|
|
return data.index
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function GetOutfitName(outfitID)
|
|
|
|
|
local savedSets = addon.GetSavedList()
|
|
|
|
|
for i, data in ipairs(savedSets) do
|
|
|
|
|
if data.setID == outfitID then
|
|
|
|
|
return data.name
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
addon.GetOutfitName = GetOutfitName
|
|
|
|
|
|
|
|
|
|
StaticPopupDialogs["BW_NAME_TRANSMOG_OUTFIT"] = {
|
|
|
|
|
preferredIndex = 3,
|
|
|
|
|
text = TRANSMOG_OUTFIT_NAME,
|
|
|
|
|
button1 = SAVE,
|
|
|
|
|
button2 = CANCEL,
|
|
|
|
|
OnAccept = function(self)
|
|
|
|
|
BetterWardrobeOutfitManager:NameOutfit(self.editBox:GetText(), self.data)
|
|
|
|
|
end,
|
|
|
|
|
timeout = 0,
|
|
|
|
|
whileDead = 1,
|
|
|
|
|
hideOnEscape = 1,
|
|
|
|
|
hasEditBox = 1,
|
|
|
|
|
maxLetters = 31,
|
|
|
|
|
OnShow = function(self)
|
|
|
|
|
self.button1:Disable()
|
|
|
|
|
self.button2:Enable()
|
|
|
|
|
self.editBox:SetFocus()
|
|
|
|
|
end,
|
|
|
|
|
OnHide = function(self)
|
|
|
|
|
self.editBox:SetText("")
|
|
|
|
|
end,
|
|
|
|
|
EditBoxOnEnterPressed = function(self)
|
|
|
|
|
if (self:GetParent().button1:IsEnabled()) then
|
|
|
|
|
StaticPopup_OnClick(self:GetParent(), 1)
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
EditBoxOnTextChanged = function (self)
|
|
|
|
|
local parent = self:GetParent()
|
|
|
|
|
if (parent.editBox:GetText() ~= "") then
|
|
|
|
|
parent.button1:Enable()
|
|
|
|
|
else
|
|
|
|
|
parent.button1:Disable()
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
EditBoxOnEscapePressed = function(self)
|
|
|
|
|
self:GetParent():Hide()
|
|
|
|
|
end
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StaticPopupDialogs["BW_CONFIRM_DELETE_TRANSMOG_OUTFIT"] = {
|
|
|
|
|
preferredIndex = 3,
|
|
|
|
|
text = TRANSMOG_OUTFIT_CONFIRM_DELETE,
|
|
|
|
|
button1 = YES,
|
|
|
|
|
button2 = NO,
|
|
|
|
|
OnAccept = function (self) BetterWardrobeOutfitManager:DeleteOutfit(self.data) end,
|
|
|
|
|
OnCancel = function (self) end,
|
|
|
|
|
hideOnEscape = 1,
|
|
|
|
|
timeout = 0,
|
|
|
|
|
whileDead = 1,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StaticPopupDialogs["BW_TRANSMOG_OUTFIT_SOME_INVALID_APPEARANCES"] = {
|
|
|
|
|
preferredIndex = 3,
|
|
|
|
|
text = TRANSMOG_OUTFIT_SOME_INVALID_APPEARANCES,
|
|
|
|
|
button1 = OKAY,
|
|
|
|
|
button2 = CANCEL,
|
|
|
|
|
OnShow = function(self)
|
|
|
|
|
if (BetterWardrobeOutfitManager.name) then
|
|
|
|
|
self.button1:SetText(SAVE)
|
|
|
|
|
else
|
|
|
|
|
self.button1:SetText(CONTINUE)
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
OnAccept = function(self)
|
|
|
|
|
BetterWardrobeOutfitManager:ContinueWithSave()
|
|
|
|
|
end,
|
|
|
|
|
hideOnEscape = 1,
|
|
|
|
|
timeout = 0,
|
|
|
|
|
whileDead = 1,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local overwriteID
|
|
|
|
|
StaticPopupDialogs["BW_CONFIRM_OVERWRITE_TRANSMOG_OUTFIT"] = {
|
|
|
|
|
preferredIndex = 3,
|
|
|
|
|
text = TRANSMOG_OUTFIT_CONFIRM_OVERWRITE,
|
|
|
|
|
button1 = YES,
|
|
|
|
|
button2 = NO,
|
|
|
|
|
OnAccept = function (self)
|
|
|
|
|
local name = self.data
|
|
|
|
|
BetterWardrobeOutfitManager:DeleteOutfit(overwriteID)
|
|
|
|
|
overwriteID = nil
|
|
|
|
|
BetterWardrobeOutfitManager:NewOutfit(self.data)
|
|
|
|
|
--BetterWardrobeOutfitManager:SaveOutfit(self.data)
|
|
|
|
|
--if DressUpFrame:IsShown() then --todo fix
|
|
|
|
|
--BW_DressingRoomOutfitFrameMixin:SaveOutfit(self.data)
|
|
|
|
|
--else
|
|
|
|
|
--BetterWardrobeOutfitManager:NewOutfit(self.data)
|
|
|
|
|
--end
|
|
|
|
|
end,
|
|
|
|
|
OnCancel = function (self)
|
|
|
|
|
local name = self.data
|
|
|
|
|
self:Hide()
|
|
|
|
|
local dialog = StaticPopup_Show("BW_NAME_TRANSMOG_OUTFIT")
|
|
|
|
|
if (dialog) then
|
|
|
|
|
self.editBox:SetText(name)
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
hideOnEscape = 1,
|
|
|
|
|
timeout = 0,
|
|
|
|
|
whileDead = 1,
|
|
|
|
|
noCancelOnEscape = 1,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--===================================================================================================================================
|
|
|
|
|
|
|
|
|
|
BetterWardrobeOutfitDropdownMixin = { }
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:OnLoad()
|
|
|
|
|
WowStyle1DropdownMixin.OnLoad(self);
|
|
|
|
|
self:SetWidth(self.width or 200);
|
|
|
|
|
self:SetDefaultText(GRAY_FONT_COLOR:WrapTextInColorCode(TRANSMOG_OUTFIT_NONE));
|
|
|
|
|
|
|
|
|
|
self.SaveButton:SetScript("OnClick", function()
|
|
|
|
|
BetterWardrobeOutfitManager:StartOutfitSave(self, self:GetSelectedOutfitID());
|
|
|
|
|
end);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:SetSelectedOutfitID(outfitID)
|
|
|
|
|
self.selectedOutfitID = outfitID;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:GetSelectedOutfitID()
|
|
|
|
|
return self.selectedOutfitID;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:OnShow()
|
|
|
|
|
self:RegisterEvent("TRANSMOG_OUTFITS_CHANGED");
|
|
|
|
|
self:RegisterEvent("TRANSMOGRIFY_UPDATE");
|
|
|
|
|
|
|
|
|
|
self:SelectOutfit(self:GetLastOutfitID());
|
|
|
|
|
self:InitOutfitDropdown();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:SelectOutfit(outfitID)
|
|
|
|
|
if not outfitID then return end;
|
|
|
|
|
self:SetSelectedOutfitID(outfitID);
|
|
|
|
|
self:LoadOutfit(outfitID);
|
|
|
|
|
self:UpdateSaveButton();
|
|
|
|
|
|
|
|
|
|
self.selectedOutfitID = outfitID;
|
|
|
|
|
if BetterWardrobeCollectionFrame then
|
|
|
|
|
BetterWardrobeCollectionFrame.SetsTransmogFrame.selectedSetID = outfitID;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:OnHide()
|
|
|
|
|
self:UnregisterEvent("TRANSMOG_OUTFITS_CHANGED");
|
|
|
|
|
self:UnregisterEvent("TRANSMOGRIFY_UPDATE");
|
|
|
|
|
BetterWardrobeOutfitManager:ClosePopups(self);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:OnEvent(event)
|
|
|
|
|
if event == "TRANSMOG_OUTFITS_CHANGED" then
|
|
|
|
|
-- Outfits may have been deleted, or their names changed, so we need to
|
|
|
|
|
-- rebuild the menu state.
|
|
|
|
|
self:GenerateMenu();
|
|
|
|
|
self:UpdateSaveButton();
|
|
|
|
|
elseif event == "TRANSMOGRIFY_UPDATE" then
|
|
|
|
|
self:UpdateSaveButton();
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:UpdateSaveButton()
|
|
|
|
|
if self:GetSelectedOutfitID() then
|
|
|
|
|
self.SaveButton:SetEnabled(not self:IsOutfitDressed());
|
|
|
|
|
else
|
|
|
|
|
self.SaveButton:SetEnabled(false);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:OnOutfitSaved(outfitID)
|
|
|
|
|
if self:ShouldReplaceInvalidSources() then
|
|
|
|
|
self:LoadOutfit(outfitID);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:OnOutfitModified(outfitID)
|
|
|
|
|
if self:ShouldReplaceInvalidSources() then
|
|
|
|
|
self:LoadOutfit(outfitID);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:InitOutfitDropdown()
|
|
|
|
|
local function IsOutfitSelected(outfitID)
|
|
|
|
|
return self:GetSelectedOutfitID() == outfitID;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function SetOutfitSelected(outfitID)
|
|
|
|
|
self:SelectOutfit(outfitID);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self:SetupMenu(function(dropdown, rootDescription)
|
|
|
|
|
rootDescription:SetTag("MENU_WARDROBE_OUTFITS");
|
|
|
|
|
|
|
|
|
|
local extent = 20;
|
|
|
|
|
local maxCharacters = 8;
|
|
|
|
|
local maxScrollExtent = extent * maxCharacters;
|
|
|
|
|
rootDescription:SetScrollMode(maxScrollExtent);
|
|
|
|
|
|
|
|
|
|
local text = GREEN_FONT_COLOR:WrapTextInColorCode(TRANSMOG_OUTFIT_NEW);
|
|
|
|
|
local button = rootDescription:CreateButton(text, function()
|
|
|
|
|
if WardrobeTransmogFrame and HelpTip:IsShowing(WardrobeTransmogFrame, TRANSMOG_OUTFIT_DROPDOWN_TUTORIAL) then
|
|
|
|
|
HelpTip:Hide(WardrobeTransmogFrame, TRANSMOG_OUTFIT_DROPDOWN_TUTORIAL);
|
|
|
|
|
SetCVarBitfield("closedInfoFrames", LE_FRAME_TUTORIAL_TRANSMOG_OUTFIT_DROPDOWN, true);
|
|
|
|
|
end
|
|
|
|
|
BetterWardrobeOutfitManager:StartOutfitSave(self);
|
|
|
|
|
end);
|
|
|
|
|
|
|
|
|
|
button:AddInitializer(function(button, description, menu)
|
|
|
|
|
local texture = button:AttachTexture();
|
|
|
|
|
texture:SetSize(19,19);
|
|
|
|
|
texture:SetPoint("LEFT");
|
|
|
|
|
texture:SetTexture([[Interface\PaperDollInfoFrame\Character-Plus]]);
|
|
|
|
|
|
|
|
|
|
local fontString = button.fontString;
|
|
|
|
|
fontString:SetPoint("LEFT", texture, "RIGHT", 3, 0);
|
|
|
|
|
end);
|
|
|
|
|
|
|
|
|
|
local outfits = addon.GetOutfits(true)
|
|
|
|
|
for i = 1, #outfits do
|
|
|
|
|
local outfit = outfits[i]
|
|
|
|
|
|
|
|
|
|
local name = NORMAL_FONT_COLOR_CODE..outfits[i].name..FONT_COLOR_CODE_CLOSE
|
|
|
|
|
local icon = outfit.icon;
|
|
|
|
|
local text = NORMAL_FONT_COLOR:WrapTextInColorCode(outfits[i].name);
|
|
|
|
|
|
|
|
|
|
local radio = rootDescription:CreateButton(text, SetOutfitSelected, outfit.outfitID);
|
|
|
|
|
radio:SetIsSelected(IsOutfitSelected);
|
|
|
|
|
radio:AddInitializer(function(button, description, menu)
|
|
|
|
|
local texture = button:AttachTexture();
|
|
|
|
|
texture:SetSize(19,19);
|
|
|
|
|
texture:SetPoint("LEFT");
|
|
|
|
|
texture:SetTexture(icon);
|
|
|
|
|
|
|
|
|
|
local fontString = button.fontString;
|
|
|
|
|
fontString:SetPoint("LEFT", texture, "RIGHT", 3, 0);
|
|
|
|
|
|
|
|
|
|
if outfit.outfitID == self:GetSelectedOutfitID() then
|
|
|
|
|
local fontString2 = button:AttachFontString();
|
|
|
|
|
fontString2:SetPoint("LEFT", button.fontString, "RIGHT");
|
|
|
|
|
fontString2:SetHeight(16);
|
|
|
|
|
|
|
|
|
|
local size = 20;
|
|
|
|
|
fontString2:SetTextToFit(CreateSimpleTextureMarkup([[Interface\Buttons\UI-CheckBox-Check]], size, size));
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local gearButton = MenuTemplates.AttachAutoHideGearButton(button);
|
|
|
|
|
gearButton:SetPoint("RIGHT");
|
|
|
|
|
|
|
|
|
|
MenuUtil.HookTooltipScripts(gearButton, function(tooltip)
|
|
|
|
|
GameTooltip_SetTitle(tooltip, TRANSMOG_OUTFIT_EDIT);
|
|
|
|
|
end);
|
|
|
|
|
|
|
|
|
|
gearButton:SetScript("OnClick", function()
|
|
|
|
|
BetterWardrobeOutfitEditFrame:ShowForOutfit(outfit.outfitID)
|
|
|
|
|
menu:Close();
|
|
|
|
|
end);
|
|
|
|
|
end);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:NewOutfit(outfitID)
|
|
|
|
|
self:SetSelectedOutfitID(outfitID);
|
|
|
|
|
self:InitOutfitDropdown();
|
|
|
|
|
self:UpdateSaveButton();
|
|
|
|
|
|
|
|
|
|
self:OnOutfitSaved(outfitID);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:GetLastOutfitID()
|
|
|
|
|
-- Expected to return nil for the dropdown in DressUpModelFrame. See WardrobeOutfitMixin:GetLastOutfitID()
|
|
|
|
|
-- for the regular implementation.
|
|
|
|
|
return nil;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function IsSourceArtifact(sourceID)
|
|
|
|
|
local link = select(6, C_TransmogCollection.GetAppearanceSourceInfo(sourceID));
|
|
|
|
|
if not link then
|
|
|
|
|
return false;
|
|
|
|
|
end
|
|
|
|
|
local _, _, quality = GetItemInfo(link);
|
|
|
|
|
return quality == Enum.ItemQuality.Artifact;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function isHiddenAppearance(appearanceID, set_appearanceID, slotID)
|
|
|
|
|
if set_appearanceID == 0 then return true end;
|
|
|
|
|
local sourceInfo = C_TransmogCollection.GetSourceInfo(set_appearanceID);
|
|
|
|
|
|
|
|
|
|
if sourceInfo then
|
|
|
|
|
local isCollected = sourceInfo.isCollected;
|
|
|
|
|
|
|
|
|
|
local isemptyslot = (appearanceID == 0);
|
|
|
|
|
if not isCollected and isemptyslot then
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:IsOutfitDressed()
|
|
|
|
|
if not self.selectedOutfitID or self.selectedOutfitID == "" then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--if addon.GetSetType(self.selectedOutfitID) == "SavedBlizzard" then
|
|
|
|
|
if self.selectedOutfitID >= 5000 and self.selectedOutfitID <= 5020 then
|
|
|
|
|
local selectedOutfitID = addon:GetBlizzID(self.selectedOutfitID);
|
|
|
|
|
local outfitItemTransmogInfoList = C_TransmogCollection.GetOutfitItemTransmogInfoList(selectedOutfitID);
|
|
|
|
|
if not outfitItemTransmogInfoList then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local currentItemTransmogInfoList = self:GetItemTransmogInfoList();
|
|
|
|
|
if not currentItemTransmogInfoList then
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for slotID, itemTransmogInfo in ipairs(currentItemTransmogInfoList) do
|
|
|
|
|
if not itemTransmogInfo:IsEqual(outfitItemTransmogInfoList[slotID]) then
|
|
|
|
|
if itemTransmogInfo.appearanceID ~= Constants.Transmog.NoTransmogID then
|
|
|
|
|
return false;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
local outfit = addon.GetSetInfo(self.selectedOutfitID); --addon.OutfitDB.char.outfits[LookupIndexFromID(self.selectedOutfitID)]
|
|
|
|
|
if not outfit then
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local outfitItemTransmogInfoList = addon.C_TransmogCollection.GetOutfitItemTransmogInfoList(self.selectedOutfitID);
|
|
|
|
|
local currentItemTransmogInfoList = self:GetItemTransmogInfoList();
|
|
|
|
|
if not currentItemTransmogInfoList then
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for slotID, itemTransmogInfo in ipairs(currentItemTransmogInfoList) do
|
|
|
|
|
if not itemTransmogInfo:IsEqual(outfitItemTransmogInfoList[slotID]) then
|
|
|
|
|
if itemTransmogInfo.appearanceID ~= Constants.Transmog.NoTransmogID or outfitItemTransmogInfoList[slotID].appearanceID ~= Constants.Transmog.NoTransmogID then
|
|
|
|
|
if not isHiddenAppearance(itemTransmogInfo.appearanceID, outfitItemTransmogInfoList[slotID].appearanceID, slotID) then
|
|
|
|
|
return false;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:IsDefaultSet(outfitID)
|
|
|
|
|
return addon.IsDefaultSet(outfitID);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitDropdownMixin:ShouldReplaceInvalidSources()
|
|
|
|
|
return self.replaceInvalidSources;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--===================================================================================================================================
|
|
|
|
|
BetterWardrobeOutfitManager = { }
|
|
|
|
|
|
|
|
|
|
BetterWardrobeOutfitManager.popups = {
|
|
|
|
|
"BW_NAME_TRANSMOG_OUTFIT",
|
|
|
|
|
"BW_CONFIRM_DELETE_TRANSMOG_OUTFIT",
|
|
|
|
|
"CONFIRM_SAVE_TRANSMOG_OUTFIT",
|
|
|
|
|
"BW_CONFIRM_OVERWRITE_TRANSMOG_OUTFIT",
|
|
|
|
|
"TRANSMOG_OUTFIT_CHECKING_APPEARANCES",
|
|
|
|
|
"BW_TRANSMOG_OUTFIT_SOME_INVALID_APPEARANCES",
|
|
|
|
|
"TRANSMOG_OUTFIT_ALL_INVALID_APPEARANCES",
|
|
|
|
|
"BETTER_WARDROBE_IMPORT_ITEM_POPUP",
|
|
|
|
|
"BETTER_WARDROBE_IMPORT_SET_POPUP"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local OUTFIT_FRAME_MIN_STRING_WIDTH = 152;
|
|
|
|
|
local OUTFIT_FRAME_MAX_STRING_WIDTH = 216;
|
|
|
|
|
local OUTFIT_FRAME_ADDED_PIXELS = 90; -- pixels added to string width
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:NewOutfit(name)
|
|
|
|
|
local outfitID = LookupOutfitIDFromName(name); --or ((#C_TransmogCollection.GetOutfits() <= MAX_DEFAULT_OUTFITS) and #C_TransmogCollection.GetOutfits() -1 ) -- or #GetOutfits()-1
|
|
|
|
|
local icon = QUESTION_MARK_ICON;
|
|
|
|
|
local outfit;
|
|
|
|
|
|
|
|
|
|
for slotID, itemTransmogInfo in ipairs(self.itemTransmogInfoList) do
|
|
|
|
|
local appearanceID = itemTransmogInfo.appearanceID;
|
|
|
|
|
if appearanceID ~= Constants.Transmog.NoTransmogID then
|
|
|
|
|
icon = select(4, C_TransmogCollection.GetAppearanceSourceInfo(appearanceID));
|
|
|
|
|
if icon then
|
|
|
|
|
break;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--[[local sources = {}
|
|
|
|
|
for i, data in pairs(self.itemTransmogInfoList) do
|
|
|
|
|
sources[i] = data.appearanceID
|
|
|
|
|
end]]
|
|
|
|
|
|
|
|
|
|
if (outfitID and IsDefaultSet(outfitID)) or (#C_TransmogCollection.GetOutfits() < MAX_DEFAULT_OUTFITS) then
|
|
|
|
|
outfitID = C_TransmogCollection.NewOutfit(name, icon, self.itemTransmogInfoList);
|
|
|
|
|
else
|
|
|
|
|
if outfitID then
|
|
|
|
|
addon.OutfitDB.char.outfits[LookupIndexFromID(outfitID)] = addon.OutfitDB.char.outfits[LookupIndexFromID(outfitID)] or {};
|
|
|
|
|
outfit = addon.OutfitDB.char.outfits[LookupIndexFromID(outfitID)];
|
|
|
|
|
else
|
|
|
|
|
tinsert(addon.OutfitDB.char.outfits, {});
|
|
|
|
|
outfit = addon.OutfitDB.char.outfits[#addon.OutfitDB.char.outfits];
|
|
|
|
|
end
|
|
|
|
|
outfit["name"] = name;
|
|
|
|
|
----local icon = select(4, C_TransmogCollection.GetAppearanceSourceInfo(outfit[1]))
|
|
|
|
|
outfit["icon"] = icon;
|
|
|
|
|
--outfit.itemData = itemData
|
|
|
|
|
|
|
|
|
|
local itemData = {};
|
|
|
|
|
for i, data in pairs(self.itemTransmogInfoList) do
|
|
|
|
|
outfit[i] = data.appearanceID;
|
|
|
|
|
if i == 3 then
|
|
|
|
|
outfit["offShoulder"] = data.secondaryAppearanceID or 0;
|
|
|
|
|
elseif i == 16 then
|
|
|
|
|
outfit["mainHandEnchant"] = data.illusionID or 0;
|
|
|
|
|
elseif i == 17 then
|
|
|
|
|
outfit["offHandEnchant"] = data.illusionID or 0;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--outfit.sources = sources
|
|
|
|
|
--outfit.itemTransmogInfoList = self.itemTransmogInfoList or {}
|
|
|
|
|
--outfitID = index
|
|
|
|
|
end
|
|
|
|
|
if outfitID then
|
|
|
|
|
self:SaveLastOutfit(outfitID);
|
|
|
|
|
end
|
|
|
|
|
if ( self.dropdown ) then
|
|
|
|
|
self.dropdown:NewOutfit(outfitID);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--addon.setdb.global.sets[addon.setdb:GetCurrentProfile()] = addon.GetSavedList()
|
|
|
|
|
addon.setdb.global.sets[addon.setdb:GetCurrentProfile()] = addon.StoreBlizzardSets();
|
|
|
|
|
addon.GetSavedList()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:DeleteOutfit(outfitID)
|
|
|
|
|
if IsDefaultSet(outfitID) then
|
|
|
|
|
C_TransmogCollection.DeleteOutfit(addon:GetBlizzID(outfitID))
|
|
|
|
|
else
|
|
|
|
|
tremove(addon.OutfitDB.char.outfits, LookupIndexFromID(outfitID))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--[[---TODO:CHeck
|
|
|
|
|
if GetCVarBool("transmogCurrentSpecOnly") then
|
|
|
|
|
local specIndex = GetSpecialization()
|
|
|
|
|
|
|
|
|
|
if addon.IsDefaultSet(outfitID) then
|
|
|
|
|
SetCVar("lastTransmogOutfitIDSpec"..specIndex, value)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local value = addon.OutfitDB.char.lastTransmogOutfitIDSpec[specIndex]
|
|
|
|
|
if type(value) == number and value > 0 then addon.OutfitDB.char.lastTransmogOutfitIDSpec[specIndex] = value - 1 end
|
|
|
|
|
|
|
|
|
|
--SetCVar("lastTransmogOutfitIDSpec"..specIndex, value)
|
|
|
|
|
else
|
|
|
|
|
for specIndex = 1, GetNumSpecializations() do
|
|
|
|
|
--SetCVar("lastTransmogOutfitIDSpec"..specIndex, value)
|
|
|
|
|
local value = addon.OutfitDB.char.lastTransmogOutfitIDSpec[specIndex]
|
|
|
|
|
if type(value) == number and value > 0 then addon.OutfitDB.char.lastTransmogOutfitIDSpec[specIndex] = value - 1 end
|
|
|
|
|
end
|
|
|
|
|
end]]
|
|
|
|
|
|
|
|
|
|
--addon.setdb.global.sets[addon.setdb:GetCurrentProfile()] = addon.GetSavedList()
|
|
|
|
|
addon.setdb.global.sets[addon.setdb:GetCurrentProfile()] = addon.StoreBlizzardSets();
|
|
|
|
|
|
|
|
|
|
addon:SendMessage("BW_TRANSMOG_COLLECTION_UPDATED");
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:NameOutfit(newName, outfitID)
|
|
|
|
|
local outfits = addon.GetOutfits(true);
|
|
|
|
|
for i = 1, #outfits do
|
|
|
|
|
if (outfits[i].name == newName) then
|
|
|
|
|
if (outfitID) then
|
|
|
|
|
UIErrorsFrame:AddMessage(TRANSMOG_OUTFIT_ALREADY_EXISTS, 1.0, 0.1, 0.1, 1.0);
|
|
|
|
|
else
|
|
|
|
|
overwriteID = outfits[i].outfitID;
|
|
|
|
|
BetterWardrobeOutfitManager:ShowPopup("BW_CONFIRM_OVERWRITE_TRANSMOG_OUTFIT", newName, nil, newName);
|
|
|
|
|
end
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if outfitID and IsDefaultSet(outfitID) then
|
|
|
|
|
local blizzardID = addon:GetBlizzID(outfitID);
|
|
|
|
|
-- this is a rename
|
|
|
|
|
C_TransmogCollection.RenameOutfit(blizzardID, newName);
|
|
|
|
|
elseif outfitID then
|
|
|
|
|
local index = LookupIndexFromID(outfitID);
|
|
|
|
|
addon.OutfitDB.char.outfits[index].name = newName;
|
|
|
|
|
else
|
|
|
|
|
-- this is a new outfit
|
|
|
|
|
self:NewOutfit(newName);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:ShowPopup(popup, ...)
|
|
|
|
|
-- close all other popups
|
|
|
|
|
for _, listPopup in pairs(self.popups) do
|
|
|
|
|
if ( listPopup ~= popup ) then
|
|
|
|
|
StaticPopup_Hide(listPopup);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if ( popup ~= BetterWardrobeOutfitEditFrame ) then
|
|
|
|
|
StaticPopupSpecial_Hide(BetterWardrobeOutfitEditFrame);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if ( popup == BetterWardrobeOutfitEditFrame ) then
|
|
|
|
|
StaticPopupSpecial_Show(BetterWardrobeOutfitEditFrame);
|
|
|
|
|
else
|
|
|
|
|
StaticPopup_Show(popup, ...);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:ClosePopups(requestingDropDown)
|
|
|
|
|
if ( requestingDropDown and requestingDropDown ~= self.popupDropdown ) then
|
|
|
|
|
return;
|
|
|
|
|
end
|
|
|
|
|
for _, popup in pairs(self.popups) do
|
|
|
|
|
StaticPopup_Hide(popup);
|
|
|
|
|
end
|
|
|
|
|
StaticPopupSpecial_Hide(BetterWardrobeOutfitEditFrame)
|
|
|
|
|
|
|
|
|
|
-- clean up
|
|
|
|
|
self.itemTransmogInfoList = nil;
|
|
|
|
|
self.hasAnyPendingAppearances = nil;
|
|
|
|
|
self.hasAnyValidAppearances = nil;
|
|
|
|
|
self.hasAnyInvalidAppearances = nil;
|
|
|
|
|
self.outfitID = nil;
|
|
|
|
|
self.dropdown = nil;
|
|
|
|
|
self.name = nil;
|
|
|
|
|
self.sources = nil;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:StartOutfitSave(popupDropDown, outfitID)
|
|
|
|
|
self.dropdown = popupDropDown;
|
|
|
|
|
self.outfitID = outfitID;
|
|
|
|
|
self:EvaluateAppearances();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:EvaluateAppearance(appearanceID, category, transmogLocation)
|
|
|
|
|
local preferredAppearanceID, hasAllData, canCollect;
|
|
|
|
|
if self.dropdown:ShouldReplaceInvalidSources() then
|
|
|
|
|
preferredAppearanceID, hasAllData, canCollect = CollectionWardrobeUtil.GetPreferredSourceID(appearanceID, nil, category, transmogLocation);
|
|
|
|
|
else
|
|
|
|
|
preferredAppearanceID = appearanceID;
|
|
|
|
|
hasAllData, canCollect = C_TransmogCollection.PlayerCanCollectSource(appearanceID);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if canCollect then
|
|
|
|
|
self.hasAnyValidAppearances = true;
|
|
|
|
|
else
|
|
|
|
|
if hasAllData then
|
|
|
|
|
self.hasAnyInvalidAppearances = true;
|
|
|
|
|
else
|
|
|
|
|
self.hasAnyPendingAppearances = true;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
local isInvalidAppearance = hasAllData and not canCollect;
|
|
|
|
|
return preferredAppearanceID, isInvalidAppearance;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:EvaluateAppearances()
|
|
|
|
|
self.hasAnyInvalidAppearances = false;
|
|
|
|
|
self.hasAnyValidAppearances = false;
|
|
|
|
|
self.hasAnyPendingAppearances = false;
|
|
|
|
|
self.itemTransmogInfoList = self.dropdown:GetItemTransmogInfoList();
|
|
|
|
|
-- all illusions are collectible
|
|
|
|
|
for slotID, itemTransmogInfo in ipairs(self.itemTransmogInfoList) do
|
|
|
|
|
local isValidAppearance = false;
|
|
|
|
|
if TransmogUtil.IsValidTransmogSlotID(slotID) then
|
|
|
|
|
local appearanceID = itemTransmogInfo.appearanceID;
|
|
|
|
|
isValidAppearance = appearanceID ~= Constants.Transmog.NoTransmogID;
|
|
|
|
|
-- skip offhand if mainhand is an appeance from Legion Artifacts category and the offhand matches the paired appearance
|
|
|
|
|
if isValidAppearance and slotID == INVSLOT_OFFHAND then
|
|
|
|
|
local mhInfo = self.itemTransmogInfoList[INVSLOT_MAINHAND];
|
|
|
|
|
if mhInfo:IsMainHandPairedWeapon() then
|
|
|
|
|
isValidAppearance = appearanceID ~= C_TransmogCollection.GetPairedArtifactAppearance(mhInfo.appearanceID);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if isValidAppearance then
|
|
|
|
|
local transmogLocation = TransmogUtil.CreateTransmogLocation(slotID, Enum.TransmogType.Appearance, Enum.TransmogModification.Main);
|
|
|
|
|
local category = C_TransmogCollection.GetCategoryForItem(appearanceID);
|
|
|
|
|
local preferredAppearanceID, isInvalidAppearance = self:EvaluateAppearance(appearanceID, category, transmogLocation);
|
|
|
|
|
if isInvalidAppearance then
|
|
|
|
|
isValidAppearance = false;
|
|
|
|
|
else
|
|
|
|
|
itemTransmogInfo.appearanceID = preferredAppearanceID;
|
|
|
|
|
end
|
|
|
|
|
-- secondary check
|
|
|
|
|
if itemTransmogInfo.secondaryAppearanceID ~= Constants.Transmog.NoTransmogID and C_Transmog.CanHaveSecondaryAppearanceForSlotID(slotID) then
|
|
|
|
|
local secondaryTransmogLocation = TransmogUtil.CreateTransmogLocation(slotID, Enum.TransmogType.Appearance, Enum.TransmogModification.Secondary);
|
|
|
|
|
local secondaryCategory = C_TransmogCollection.GetCategoryForItem(itemTransmogInfo.secondaryAppearanceID);
|
|
|
|
|
local secondaryPreferredAppearanceID, secondaryIsInvalidAppearance = self:EvaluateAppearance(itemTransmogInfo.secondaryAppearanceID, secondaryCategory, secondaryTransmogLocation);
|
|
|
|
|
if secondaryIsInvalidAppearance then
|
|
|
|
|
-- secondary is invalid, clear it
|
|
|
|
|
itemTransmogInfo.secondaryAppearanceID = Constants.Transmog.NoTransmogID;
|
|
|
|
|
else
|
|
|
|
|
if isInvalidAppearance then
|
|
|
|
|
-- secondary is valid but primary is invalid, make the secondary the primary
|
|
|
|
|
isValidAppearance = true;
|
|
|
|
|
itemTransmogInfo.appearanceID = secondaryPreferredAppearanceID;
|
|
|
|
|
itemTransmogInfo.secondaryAppearanceID = Constants.Transmog.NoTransmogID;
|
|
|
|
|
else
|
|
|
|
|
-- both primary and secondary are valid
|
|
|
|
|
itemTransmogInfo.secondaryAppearanceID = secondaryPreferredAppearanceID;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if not isValidAppearance then
|
|
|
|
|
itemTransmogInfo:Clear();
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self:EvaluateSaveState();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:EvaluateSaveState()
|
|
|
|
|
--if self.hasAnyPendingAppearances then
|
|
|
|
|
-- wait
|
|
|
|
|
--if ( not StaticPopup_Visible("TRANSMOG_OUTFIT_CHECKING_APPEARANCES") ) then
|
|
|
|
|
--BetterWardrobeOutfitManager:ShowPopup("TRANSMOG_OUTFIT_CHECKING_APPEARANCES", nil, nil, nil, WardrobeOutfitCheckAppearancesFrame);
|
|
|
|
|
--print(1)
|
|
|
|
|
--end
|
|
|
|
|
--else
|
|
|
|
|
StaticPopup_Hide("TRANSMOG_OUTFIT_CHECKING_APPEARANCES");
|
|
|
|
|
if not self.hasAnyValidAppearances then
|
|
|
|
|
-- stop
|
|
|
|
|
BetterWardrobeOutfitManager:ShowPopup("TRANSMOG_OUTFIT_ALL_INVALID_APPEARANCES");
|
|
|
|
|
elseif self.hasAnyInvalidAppearances then
|
|
|
|
|
-- warn
|
|
|
|
|
BetterWardrobeOutfitManager:ShowPopup("TRANSMOG_OUTFIT_SOME_INVALID_APPEARANCES");
|
|
|
|
|
else
|
|
|
|
|
BetterWardrobeOutfitManager:ContinueWithSave();
|
|
|
|
|
end
|
|
|
|
|
--end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:ContinueWithSave()
|
|
|
|
|
if self.outfitID and IsDefaultSet(self.outfitID) then
|
|
|
|
|
-- this is a rename
|
|
|
|
|
C_TransmogCollection.ModifyOutfit(addon:GetBlizzID(self.outfitID), self.itemTransmogInfoList)
|
|
|
|
|
self:SaveLastOutfit(self.outfitID);
|
|
|
|
|
if ( self.dropdown ) then
|
|
|
|
|
self.dropdown:OnOutfitModified(self.outfitID);
|
|
|
|
|
end
|
|
|
|
|
BetterWardrobeOutfitManager:ClosePopups()
|
|
|
|
|
elseif self.outfitID then
|
|
|
|
|
addon.OutfitDB.char.outfits[LookupIndexFromID(self.outfitID)] = addon.OutfitDB.char.outfits[LookupIndexFromID(self.outfitID)] or {}
|
|
|
|
|
outfit = addon.OutfitDB.char.outfits[LookupIndexFromID(self.outfitID)]
|
|
|
|
|
--outfit.itemTransmogInfoList = self.itemTransmogInfoList or {}
|
|
|
|
|
local itemData = {}
|
|
|
|
|
for i, data in pairs(self.itemTransmogInfoList) do
|
|
|
|
|
local sourceInfo = C_TransmogCollection.GetSourceInfo(data.appearanceID)
|
|
|
|
|
if sourceInfo then
|
|
|
|
|
local appearanceID = sourceInfo.visualID
|
|
|
|
|
local itemID = sourceInfo.itemID
|
|
|
|
|
local itemMod = sourceInfo.itemModID
|
|
|
|
|
local sourceID = sourceInfo.sourceID
|
|
|
|
|
itemData[i] = {"'"..itemID..":"..itemMod.."'", sourceID, appearanceID}
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
outfit.itemData = itemData
|
|
|
|
|
BetterWardrobeOutfitManager:ClosePopups()
|
|
|
|
|
addon.GetSavedList()
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
-- this is a new outfit
|
|
|
|
|
BetterWardrobeOutfitFrame:ShowPopup("BW_NAME_TRANSMOG_OUTFIT")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:SaveLastOutfit(outfitID)
|
|
|
|
|
local value = outfitID or "";
|
|
|
|
|
local currentSpecIndex = GetCVarBool("transmogCurrentSpecOnly") and GetSpecialization() or nil;
|
|
|
|
|
for specIndex = 1, GetNumSpecializations() do
|
|
|
|
|
if not currentSpecIndex or specIndex == currentSpecIndex then
|
|
|
|
|
SetCVar("lastTransmogOutfitIDSpec"..specIndex, value);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitManager:OverwriteOutfit(outfitID)
|
|
|
|
|
self.outfitID = outfitID;
|
|
|
|
|
self:ContinueWithSave();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--===================================================================================================================================
|
|
|
|
|
BetterWardrobeOutfitEditFrameMixin = { }
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitEditFrameMixin:ShowForOutfit(outfitID)
|
|
|
|
|
BetterWardrobeOutfitFrame:Hide()
|
|
|
|
|
BetterWardrobeOutfitFrame:ShowPopup(self)
|
|
|
|
|
self.outfitID = outfitID
|
|
|
|
|
local name = GetOutfitName(outfitID)
|
|
|
|
|
self.EditBox:SetText(name)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitEditFrameMixin:OnDelete()
|
|
|
|
|
BetterWardrobeOutfitFrame:Hide()
|
|
|
|
|
local name = C_TransmogCollection.GetOutfitInfo(addon:GetBlizzID(self.outfitID)) or self.name or ""
|
|
|
|
|
BetterWardrobeOutfitFrame:ShowPopup("BW_CONFIRM_DELETE_TRANSMOG_OUTFIT", name, nil, self.outfitID)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitEditFrameMixin:OnAccept()
|
|
|
|
|
if ( not self.AcceptButton:IsEnabled() ) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
StaticPopupSpecial_Hide(self)
|
|
|
|
|
BetterWardrobeOutfitFrame:NameOutfit(self.EditBox:GetText(), self.outfitID)
|
|
|
|
|
addon:SendMessage("BW_TRANSMOG_COLLECTION_UPDATED")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--===================================================================================================================================
|
|
|
|
|
BetterWardrobeOutfitCheckAppearancesMixin = { }
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitCheckAppearancesMixin:OnShow()
|
|
|
|
|
LoadingSpinnerMixin.OnShow(self);
|
|
|
|
|
self:RegisterEvent("TRANSMOG_COLLECTION_ITEM_UPDATE");
|
|
|
|
|
self:RegisterEvent("TRANSMOG_SOURCE_COLLECTABILITY_UPDATE")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitCheckAppearancesMixin:OnHide()
|
|
|
|
|
self:UnregisterEvent("TRANSMOG_COLLECTION_ITEM_UPDATE");
|
|
|
|
|
self:UnregisterEvent("TRANSMOG_SOURCE_COLLECTABILITY_UPDATE")
|
|
|
|
|
self.reevaluate = nil;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitCheckAppearancesMixin:OnEvent(event, appearanceID, canCollect)
|
|
|
|
|
self.reevaluate = true;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BetterWardrobeOutfitCheckAppearancesMixin:OnUpdate()
|
|
|
|
|
if self.reevaluate then
|
|
|
|
|
self.reevaluate = nil;
|
|
|
|
|
BetterWardrobeOutfitManager:EvaluateAppearances();
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|