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.

834 lines
25 KiB

local addonName, addon = ...
addon = LibStub("AceAddon-3.0"):GetAddon(addonName)
local L = LibStub("AceLocale-3.0"):GetLocale(addonName)
local DressingRoom = {}
local DressUpModel
local SLOT_BUTTON_INDEX = {}
local INVENTORY_SLOT_NAMES = addon.Globals.INVENTORY_SLOT_NAMES
local import = false
local useCharacterSources = true
local defaultWidth, defaultHeight = 450, 545
local Buttons
local Profile
local itemhistory = {}
-------Create Mogit List-------
local newSet = {items = {}}
-------------------------------
local ItemList = {}
local EmptySlotAlpha = 0.4
local UnitInfo = {
raceID = nil,
genderID = nil,
classID = nil,
}
local HideArmorOnShow = false
local HideWeaponOnShow = false
local HideTabardOnShow = false
local HideShirtOnShow = false
local useTarget = true
local forceView = true
local inspectView = false
local TP = CreateFrame("GameTooltip", "BW_VirtualTooltip", nil, "GameTooltipTemplate")
TP:SetScript("OnLoad", GameTooltip_OnLoad)
TP:SetOwner(UIParent, 'ANCHOR_NONE')
local TP = CreateFrame("GameTooltip", "BW_GameTooltip", nil, "GameTooltipTemplate")
TP:SetScript("OnLoad", GameTooltip_OnLoad)
--BW_GameTooltip.Text:SetFontObject(GameTooltipTextSmall)
local TP = GameTooltip
BW_GameTooltip = GameTooltip
function BetterWardrobe:ToggleDressingRoom()
if DressUpFrame:IsShown() then
HideUIPanel(DressUpFrame)
else
DressUpFrame_Show(DressUpFrame)
end
DressingRoom:Update()
end
function addon.Init:DressingRoom()
DressUpFrameOutfitDropdown:Hide()
Buttons = BW_DressingRoomFrame.PreviewButtonFrame.Slots
Profile = addon.Profile
if addon.Profile.DR_OptionsEnable then
addon:DressingRoom_Enable()
else
addon:DressingRoom_Disable()
end
end
local reset = false
local defaultWidth, defaultHeight = 450, 545
function addon:DressingRoom_Enable()
BW_DressingRoomFrame:Show()
addon:HookScript(DressUpFrameResetButton,"OnClick", function()
reset = true
HideArmorOnShow = addon.Profile.DR_StartUndressed
HideWeaponOnShow = addon.Profile.DR_HideWeapons
HideTabardOnShow = addon.Profile.DR_HideTabard
HideShirtOnShow = addon.Profile.DR_HideShirt
DressingRoom:Update()
end)
if DressUpFrame.MaximizeMinimizeFrame then
DressUpFrame.MaximizeMinimizeFrame:SetOnMaximizedCallback(function(self)
DressUpFrameOutfitDropdown:Hide()
if Profile.DR_ResizeWindow then
DressUpFrame.MaximizeMinimizeFrame:GetParent():SetSize(Profile.DR_Width, Profile.DR_Height)
else
DressUpFrame.MaximizeMinimizeFrame:GetParent():SetSize(defaultWidth, defaultHeight)
end
UpdateUIPanelPositions(DressUpFrame.MaximizeMinimizeFrame)
end)
----- addon:Hook(DressUpFrame.MaximizeMinimizeFrame, "minimizedCallback", function() DressUpFrameOutfitDropdown:Hide() end, true)
end
DressUpFrame:SetMovable(true)
DressUpFrame:RegisterForDrag("LeftButton")
DressUpFrame:SetScript("OnDragStart", DressUpFrame.StartMoving)
DressUpFrame:SetScript("OnDragStop", DressUpFrame.StopMovingOrSizing)
hooksecurefunc("DressUpVisual", DressingRoom.Update);
hooksecurefunc("DressUpCollectionAppearance", DressingRoom.Update);
end
function addon:DressingRoom_Disable()
BW_DressingRoomFrame:Hide()
addon:Unhook("DressUpSources")
addon:Unhook(DressUpFrameResetButton,"OnClick")
DressUpFrame:SetMovable(false)
DressUpFrame:SetScript("OnDragStart", nil)
DressUpFrame:SetScript("OnDragStop", nil)
if DressUpFrame.MaximizeMinimizeFrame then
DressUpFrame.MaximizeMinimizeFrame:SetOnMaximizedCallback(function(self)
DressUpFrame.MaximizeMinimizeFrame:GetParent():SetSize(defaultWidth, defaultHeight)
UpdateUIPanelPositions(DressUpFrame.MaximizeMinimizeFrame)
end)
addon:Unhook(DressUpFrame.MaximizeMinimizeFrame, "minimizedCallback")
end
end
local function IsAppearanceKnown(itemLink)
--Need to correspond with C_TransmogCollection.C_TransmogCollection.PlayerHasTransmog
if not itemLink then return end
TP:SetHyperlink(itemLink)
local str
local num = TP:NumLines()
for i = num, num - 2, -1 do
str = nil
str = _G["BW_VirtualTooltipTextLeft"..i]
if not str then
return false
else
str = str:GetText()
end
if str == SOURCE_KNOWN or str == APPEARANCE_KNOWN then
return true
elseif str == APPEARANCE_UNKNOWN then
return false
end
end
return false
end
local rangedWeapon
local function GetDressUpModelSlotSource(slotID, enchantID)
local playerActor = DressUpFrame.ModelScene:GetPlayerActor()
if not playerActor then
return
end
local slotname = TransmogUtil.GetSlotName(slotID)
local transmogLocation = TransmogUtil.GetTransmogLocation(slotname, Enum.TransmogType.Appearance, Enum.TransmogModification.Main)
local info = playerActor:GetItemTransmogInfoList()
appliedSourceID = info[slotID].appearanceID
if appliedSourceID < 0 then return end
local sourceInfo = C_TransmogCollection.GetSourceInfo(appliedSourceID)
if not sourceInfo then return end
local sourceType = sourceInfo.sourceType
local itemModID = sourceInfo.itemModID
local itemID = sourceInfo.itemID
local itemName = sourceInfo.name
local appearanceID, sourceID = C_TransmogCollection.GetItemInfo(itemID, itemModID)
local itemIcon = C_TransmogCollection.GetSourceIcon(appliedSourceID)
local itemLink = select(6, C_TransmogCollection.GetAppearanceSourceInfo(appliedSourceID))
local hasAppearance = C_TransmogCollection.PlayerHasTransmog(itemID, itemModID) or IsAppearanceKnown(itemLink)
if itemName and (slotID == 16 or slotID == 17) then
local GetItemInfo = C_Item and C_Item.GetItemInfo
local _, _, _, _, _, _, _, _, _, _, _, classID, subclassID = GetItemInfo(itemName)
if classID == LE_ITEM_CLASS_WEAPON then
if subclassID == LE_ITEM_WEAPON_BOWS or subclassID == LE_ITEM_WEAPON_GUNS or subclassID == LE_ITEM_WEAPON_CROSSBOW then
rangedWeapon = true
else
rangedWeapon = false
end
end
end
return appliedSourceID, appearanceID, itemIcon, hasAppearance, itemLink, itemName, itemID
end
BW_DressingRoomItemButtonMixin = {}
function BW_DressingRoomItemButtonMixin:OnLoad()
local slot = self:GetID()
local invslot = INVENTORY_SLOT_NAMES[slot]
local _, slotTexture = GetInventorySlotInfo(invslot)
self.Background:SetTexture(slotTexture)
self:RegisterForClicks("LeftButtonDown", "RightButtonDown")
end
function BW_DressingRoomItemButtonMixin:OnEnter()
local slot = INVENTORY_SLOT_NAMES[self:GetID()]
BW_GameTooltip:SetOwner(self, "ANCHOR_BOTTOMRIGHT", 0, 40)
if self.itemLink then
BW_GameTooltip:SetHyperlink(self.itemLink)
else
BW_GameTooltip:AddLine(_G[slot])
end
BW_GameTooltip:Show()
--ShoppingTooltip1:Hide()
--ShoppingTooltip2:Hide()
--if ShoppingTooltip3 then ShoppingTooltip3:Hide() end
--GameTooltip_ClearMoney()
end
function BW_DressingRoomItemButtonMixin:OnLeave()
BW_GameTooltip:Hide()
end
function BW_DressingRoomItemButtonMixin:OnClick()
end
function BW_DressingRoomItemButtonMixin:ResetButton()
self.Icon:Hide()
self.IconBorder:Hide()
self.itemSource = nil
self.enchantID = nil
self.sourceID = nil
self.isHidden = false
self.itemLink = false
self:SetAlpha(EmptySlotAlpha)
end
function BW_DressingRoomItemButtonMixin:EnableButton()
self.Icon:SetDesaturated(false)
self:SetAlpha(1)
self.Icon:Show()
self.IconBorder:Show()
end
function BW_DressingRoomItemButtonMixin:OnMouseDown(button)
local sharedActor = DressUpFrame.ModelScene:GetPlayerActor()
BW_GameTooltip:Hide()
if button == "LeftButton" then
if not self.sourceID then return end
self.isHidden = not self.isHidden
if (not sharedActor) then
return
end
local slot = self:GetID()
if self.isHidden then
if slot == 16 and rangedWeapon then
sharedActor:UndressSlot(16)
sharedActor:UndressSlot(17)
end
sharedActor:UndressSlot(self:GetID())
self.Icon:SetDesaturated(true)
self:SetAlpha(EmptySlotAlpha)
elseif self.sourceID then
sharedActor:TryOn(self.sourceID)
self:SetAlpha(1)
self.Icon:SetDesaturated(false)
end
elseif button == "RightButton" then
local slot = self:GetID()
if not self.sourceID then
return
elseif slot == 16 and rangedWeapon then
sharedActor:UndressSlot(16)
sharedActor:UndressSlot(17)
rangedWeapon = false
end
sharedActor:UndressSlot(self:GetID())
self:ResetButton()
end
end
function DressingRoom:Update(...)
local viewedLink = ...
local frame = BW_DressingRoomFrame
if not BW_DressingRoomFrame then return end
if not frame.pauseUpdate or viewedLink then
frame.pauseUpdate = true
inspectView = false
C_Timer.After(0, function()
DressingRoom:GetSource(frame.mainHandEnchant, frame.offHandEnchant)
frame.pauseUpdate = nil
local sharedActor = DressUpFrame.ModelScene:GetPlayerActor()
if (not sharedActor) then
return false
end
if not inspectView and (HideWeaponOnShow or HideTabardOnShow or HideShirtOnShow or HideArmorOnShow) then
for _, button in pairs(Buttons) do
local slot = button:GetID()
if ((HideWeaponOnShow and (slot == INVSLOT_MAINHAND or slot == INVSLOT_OFFHAND)) or
(HideTabardOnShow and slot == INVSLOT_TABARD) or
(HideShirtOnShow and slot == INVSLOT_BODY) or
HideArmorOnShow) then
button.isHidden = true
sharedActor:UndressSlot(slot)
button.Icon:SetDesaturated(true)
button:SetAlpha(EmptySlotAlpha)
end
end
HideArmorOnShow = false
HideWeaponOnShow = false
HideTabardOnShow = false
HideShirtOnShow = false
reset = false
end
if viewedLink and viewedLink.sourceID and forceView then
sharedActor:TryOn(viewedLink)
forceView = false
DressingRoom:Update()
end
end)
end
end
function addon:UpdateDressingRoom(...)
DressingRoom:Update()
end
function DressingRoom:GetSource(mainHandEnchant, offHandEnchant)
local enchantID
wipe(newSet.items)
wipe(ItemList)
for _, button in pairs(Buttons) do
local slotID = button:GetID()
if slotID == 16 then
enchantID = mainHandEnchant or ""
elseif slotID == 17 then
enchantID = offHandEnchant or ""
else
enchantID = ""
end
local appliedSourceID, appearanceID, icon, hasMog, itemLink, itemName, itemID = GetDressUpModelSlotSource(slotID, enchantID)
ItemList[slotID] = {itemName, sourceTextColorized, itemID, bonusID}
newSet.items[slotID] = itemLink
button.itemLink = itemLink
button.appearanceID = appearanceID
if icon then
if appliedSourceID then
button.sourceID = appliedSourceID
end
button.Icon:SetTexture(icon)
if hasMog then
button.IconBorder:SetAtlas("loottoast-itemborder-gold")
else
button.IconBorder:SetAtlas("loottoast-itemborder-purple")
end
button.Icon:SetDesaturated(false)
button.isHidden = false
button:SetAlpha(1)
button.Icon:Show()
button.IconBorder:Show()
else
if button.isHidden then
button:SetAlpha(EmptySlotAlpha)
else
button:ResetButton()
end
end
end
end
local DefaultActorID = 1620;
local ActorIDList = {
[4207724] = 1653, --Dracthyr
[4395382] = 1654, --Dracthyr Male Visage
[4220488] = 1654, --Dracthyr Female Visage
[307454] = 1626, --Worgen Male
[307453] = 1645, --Worgen Female
};
local isPlayer = false
function DressingRoom:UpdateModel(unit)
local unit = unit or "player";
if not UnitExists(unit) or not UnitIsPlayer(unit) or not CanInspect(unit, false) then
return
end
SetDressUpBackground(unit);
local actor = DressUpFrame.ModelScene:GetPlayerActor();
if not actor then return end;
local itemList;
if actor then
itemList = CopyTable(actor:GetItemTransmogInfoList());
end
if unit ~= "player" then
BW_DressingRoomFrame:RegisterEvent("INSPECT_READY")
NotifyInspect(unit);
end
UnitInfo.raceID = select(3, UnitRace(unit));
UnitInfo.classID = select(3, UnitClass(unit));
UnitInfo.genderID = UnitSex(unit);
local model, refresh;
local sheatheWeapons = actor:GetSheathed() or false;
if useTarget then
model = unit;
isPlayer = false;
actor:SetModelByUnit(model, sheatheWeapons, true, false, addon.useNativeForm );
refresh = true;
else
model = "player";
if not isPlayer then
isPlayer = true;
actor:SetModelByUnit(model, sheatheWeapons, true, false, addon.useNativeForm);
refresh = true;
end
end
if refresh then
C_Timer.After(0.1, function()
local fileID = actor:GetModelFileID();
local infoID;
if fileID and ActorIDList[fileID] then
infoID = ActorIDList[fileID];
else
infoID = DefaultActorID;
end
local modelInfo = C_ModelInfo.GetModelSceneActorInfoByID(infoID);
if modelInfo then
actor:ApplyFromModelSceneActorInfo(modelInfo);
end
if itemList then
for slotID, transmogInfo in ipairs(itemList) do
actor:SetItemTransmogInfo(transmogInfo, slotID);
end
end
end)
end
end
BW_DressingRoomFrameMixin = {}
function BW_DressingRoomFrameMixin:OnLoad()
self:RegisterEvent("ADDON_LOADED");
--[[
DressUpFrame.LinkButton:ClearAllPoints()
DressUpFrame.LinkButton:SetPoint("LEFT",BW_DressingRoomFrame.BW_DressingRoomUndressButton, "RIGHT",-6,0)
DressUpFrame.LinkButton:SetText("")
DressUpFrame.LinkButton.Left:Hide()
DressUpFrame.LinkButton.Right:Hide()
DressUpFrame.LinkButton.Middle:Hide()
DressUpFrame.LinkButton:SetSize(32,32)
DressUpFrame.LinkButton:SetFrameLevel(BW_DressingRoomFrame.BW_DressingRoomUndressButton:GetFrameLevel()+5)
DressUpFrame.LinkButton:SetNormalTexture("Interface\\Buttons\\UI-SquareButton-Up")
DressUpFrame.LinkButton:SetHighlightTexture("Interface\\Buttons\\UI-Common-MouseHilight","ADD")
DressUpFrame.LinkButton:SetHitRectInsets(0, 0, 0, 0)
DressUpFrame.LinkButton.Icon = DressUpFrame.LinkButton:CreateTexture(nil, "OVERLAY")
DressUpFrame.LinkButton.Icon:SetTexture("Interface\\CHATFRAME\\UI-ChatWhisperIcon")
DressUpFrame.LinkButton.Icon:SetWidth(13)
DressUpFrame.LinkButton.Icon:SetHeight(13)
DressUpFrame.LinkButton.Icon:SetPoint("CENTER")
local highlight = DressUpFrame.LinkButton:GetHighlightTexture()
highlight:ClearAllPoints()
highlight:SetPoint("TOPLEFT",DressUpFrame.LinkButton, "TOPLEFT",-3,-1 )
highlight:SetPoint("BOTTOMRIGHT",DressUpFrame.LinkButton, "BOTTOMRIGHT",-8,5 )
--]]
if C_AddOns.IsAddOnLoaded("Narcissus") then
BW_DressingRoomFrame.BW_DressingRoomSwapFormButton:Hide();
end
end
function BW_DressingRoomFrameMixin:OnShow()
itemhistory = {};
BW_DressingRoomFrame.BW_DressingRoomUndoButton:Hide();
addon:StoreItems();
if not Profile.DR_OptionsEnable then return end
BW_DressingRoomFrame.PreviewButtonFrame:SetShown(addon.Profile.DR_ShowItemButtons);
DressingRoom:UpdateBackground();
HideArmorOnShow = addon.Profile.DR_StartUndressed;
HideWeaponOnShow = addon.Profile.DR_HideWeapons;
HideTabardOnShow = addon.Profile.DR_HideTabard;
HideShirtOnShow = addon.Profile.DR_HideShirt;
forceView = true;
if not GetCVarBool("transmogShouldersSeparately") then
BW_DressingRoomFrame.PreviewButtonFrame.PreviewButtonRightShoulder:Hide();
BW_DressingRoomFrame.PreviewButtonFrame.PreviewButtonBack:ClearAllPoints();
BW_DressingRoomFrame.PreviewButtonFrame.PreviewButtonBack:SetPoint("TOPLEFT", BW_DressingRoomFrame.PreviewButtonFrame.PreviewButtonLeftShoulder,"BOTTOMLEFT")
else
BW_DressingRoomFrame.PreviewButtonFrame.PreviewButtonRightShoulder:Show();
BW_DressingRoomFrame.PreviewButtonFrame.PreviewButtonBack:ClearAllPoints();
BW_DressingRoomFrame.PreviewButtonFrame.PreviewButtonBack:SetPoint("TOPLEFT", BW_DressingRoomFrame.PreviewButtonFrame.PreviewButtonRightShoulder,"BOTTOMLEFT")
end
C_Timer.After(0, function() DressingRoom:GetSource() end);
end
function BW_DressingRoomFrameMixin:OnHide()
self:UnregisterEvent("INSPECT_READY")
self.isActorHooked = false
end
function BW_DressingRoomFrameMixin:OnEvent(event, ...)
local arg1 = ...
if event == "INSPECT_READY" then
self:UnregisterEvent("INSPECT_READY")
C_Timer.After(0, function()
DressUpItemTransmogInfoList(C_TransmogCollection.GetInspectItemTransmogInfoList())
ClearInspectPlayer()
end)
elseif event == "ADDON_LOADED" and arg1 == "Blizzard_InspectUI" then
addon:HookScript(InspectPaperDollFrame.ViewButton, "OnClick", function() inspectView = true end)
self:UnregisterEvent("ADDON_LOADED")
elseif event == "ADDON_LOADED" and arg1 == "Narcissus" then
BW_DressingRoomFrame.BW_DressingRoomSwapFormButton:Hide()
end
end
local function DressupSettingsButton_OnClick(self)
local function GeneratorFunction(owner, rootDescription)
local Profile = addon.Profile
rootDescription:CreateTitle(L["Display Options"]);
rootDescription:CreateCheckbox(L["Show Item Buttons"], function() return Profile.DR_ShowItemButtons end, function()
Profile.DR_ShowItemButtons = not Profile.DR_ShowItemButtons
BW_DressingRoomFrame.PreviewButtonFrame:SetShown(addon.Profile.DR_ShowItemButtons)
end);
rootDescription:CreateCheckbox(L["Show DressingRoom Controls"], function() return Profile.DR_ShowControls end, function()
Profile.DR_ShowControls = not Profile.DR_ShowControls
--DressingRoom:ToggleControlPanel(Profile.DR_ShowControls)
end);
rootDescription:CreateCheckbox(L["Dim Backround Image"], function() return Profile.DR_DimBackground end, function()
Profile.DR_DimBackground = not Profile.DR_DimBackground
DressingRoom:UpdateBackground()
end);
rootDescription:CreateCheckbox(L["Hide Backround Image"], function() return Profile.DR_HideBackground end, function()
Profile.DR_HideBackground = not Profile.DR_HideBackground
DressingRoom:UpdateBackground()
end);
rootDescription:CreateTitle(L["Character Options"]);
rootDescription:CreateCheckbox(L["Start Undressed"], function() return Profile.DR_StartUndressed end, function() Profile.DR_StartUndressed = not Profile.DR_StartUndressed end);
rootDescription:CreateCheckbox(L["Hide Tabard"], function() return Profile.DR_HideTabard end, function() Profile.DR_HideTabard = not Profile.DR_HideTabard end);
rootDescription:CreateCheckbox(L["Hide Weapons"], function() return Profile.DR_HideWeapons end, function() Profile.DR_HideWeapons = not Profile.DR_HideWeapons end);
rootDescription:CreateCheckbox(L["Hide Shirt"], function() return Profile.DR_HideShirt end, function() Profile.DR_HideShirt = not Profile.DR_HideShirt end);
end
MenuUtil.CreateContextMenu(parent, GeneratorFunction);
end
local function BW_DressingRoomImportButton_OnClick(self)
local function GeneratorFunction(owner, rootDescription)
local Profile = addon.Profile
rootDescription:CreateTitle(L["Import/Export Options"]);
rootDescription:CreateButton(L["Load Set: %s"]:format( name or L["None Selected"]), function()
local sources
local setType = addon.QueueList[1]
local setID = addon.QueueList[2]
local playerActor = DressUpFrame.ModelScene:GetPlayerActor()
if not playerActor or not setID then
return false
end
if setType == "set" then
sources = C_TransmogSets.GetSetSources(setID)
elseif setType == "extraset" then
sources = addon.SetsDataProvider:GetSetSources(setID) --addon.GetSetsources(setID)
end
if not sources then return end
playerActor:Undress()
for i, d in pairs(sources)do
playerActor:TryOn(i)
end
import = true
--DressUpSources(sources)
import = false
DressingRoom:Update()
end);
if C_Transmog.IsAtTransmogNPC() then
rootDescription:CreateButton(L["Import Set"], function() addon.importFrom = "tmog"; BetterWardrobeOutfitManager:ShowPopup("BETTER_WARDROBE_IMPORT_SET_POPUP") end);
rootDescription:CreateButton(L["Export Set"], function() addon:ExportTransmogVendorSet() end);
else
rootDescription:CreateButton(L["Import Item"], function() BetterWardrobeOutfitManager:ShowPopup("BETTER_WARDROBE_IMPORT_ITEM_POPUP") end);
rootDescription:CreateButton(L["Import Set"], function() BetterWardrobeOutfitManager:ShowPopup("BETTER_WARDROBE_IMPORT_SET_POPUP") end);
rootDescription:CreateButton(L["Export Set"], function() addon:ExportSet() end);
--rootDescription:CreateButton(L["Create Dressing Room Command Link"], function() addon:CreateChatLink() end);
end
end
MenuUtil.CreateContextMenu(parent, GeneratorFunction);
end
BW_DressingRoomButtonMixin = {}
function BW_DressingRoomButtonMixin:OnMouseDown()
BW_GameTooltip:Hide()
local button = self.buttonID
if not button then return end
if button == "Settings" then
DressupSettingsButton_OnClick(self)
elseif button == "Import" then
BW_DressingRoomImportButton_OnClick(self)
elseif button == "Player" then
useTarget = false
DressingRoom:UpdateModel("player")
elseif button == "Target" then
useTarget = true
DressingRoom:UpdateModel("target")
elseif button == "Gear" then
--DressingRoom:SetTargetGear()
useTarget = false
DressingRoom:UpdateModel("target")
elseif button == "Reset" then
text = RESET
elseif button == "Undress" then
BW_DressingRoomHideArmorButton_OnClick(self)
elseif button == "Undo" then
DressingRoom:Undo()
--elseif button == "Link" then
--DressUpModelFrameLinkButtonMixin:OnClick()
end
end
function BW_DressingRoomButtonMixin.OnEnter(self)
local button = self.buttonID
local text
if not button then return end
if button == "Settings" then
text = L["General Options"]
elseif button == "Import" then
text = L["Import/Export Options"]
elseif button == "Player" then
text = L["Use Player Model"]
elseif button == "Target" then
text = L["Use Target Model"]
elseif button == "Gear" then
text = L["Use Target Gear"]
elseif button == "Reset" then
text = RESET
elseif button == "Undress" then
text = L["Undress"]
elseif button == "Undo" then
text = L["Undo"]
elseif button == "HideSlot" then
text = L["Hide Armor Slots"]
elseif button == "Link" then
text = LINK_TRANSMOG_OUTFIT_HELPTIP
end
BW_GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
BW_GameTooltip:SetText(text)
BW_GameTooltip:Show()
end
function BW_DressingRoomButtonMixin.OnLeave()
BW_GameTooltip:Hide()
end
function DressingRoom:UpdateBackground()
if (addon.Profile.DR_DimBackground) then
DressUpFrame.ModelBackground:SetVertexColor(0.52, 0.52, 0.52)
else
DressUpFrame.ModelBackground:SetVertexColor(1.0, 1.0, 1.0)
end
if (addon.Profile.DR_HideBackground) then
DressUpFrame.ModelBackground:SetVertexColor(0, 0, 0)
end
end
function BW_DressingRoomHideArmorButton_OnClick()
local playerActor = DressUpFrame.ModelScene:GetPlayerActor()
if (not playerActor) then
return false
end
playerActor:Undress()
DressingRoom:Update()
end
function addon:StoreItems()
local playerActor = DressUpFrame.ModelScene:GetPlayerActor();
local itemTransmogInfoList = playerActor and playerActor:GetItemTransmogInfoList();
local slashCommand = itemTransmogInfoList and TransmogUtil.CreateOutfitSlashCommand(itemTransmogInfoList) or "";
slashCommand = string.gsub(slashCommand, "/outfit ", "")
tinsert(itemhistory, slashCommand)
if #itemhistory > 1 then
BW_DressingRoomFrame.BW_DressingRoomUndoButton:Show()
end
end
function DressingRoom:Undo()
local msg = itemhistory[#itemhistory]
tremove(itemhistory, #itemhistory)
local itemTransmogInfoList = TransmogUtil.ParseOutfitSlashCommand(msg);
if itemTransmogInfoList then
local showOutfitDetails = true;
DressUpItemTransmogInfoList(itemTransmogInfoList, showOutfitDetails);
end
if #itemhistory == 1 then
BW_DressingRoomFrame.BW_DressingRoomUndoButton:Hide()
end
end
--======
BetterDressUpOutfitMixin = { }
function BetterDressUpOutfitMixin:GetItemTransmogInfoList()
local playerActor = DressUpFrame.ModelScene:GetPlayerActor()
if playerActor then
return playerActor:GetItemTransmogInfoList()
end
return nil
end
function BetterDressUpOutfitMixin:LoadOutfit(outfitID)
if not outfitID then
return false
end
local playerActor = DressUpFrame.ModelScene:GetPlayerActor()
if (not playerActor) then
return false
end
local MogItOutfit = false
if outfitID > 1000 then MogItOutfit = true end
playerActor:Undress()
DressingRoom:Update()
import = true
local setType = addon.GetSetType(outfitID)
if setType == "SavedBlizzard" or (outfitID >= 5000 and outfitID <= 5020) then
local outfitID = addon:GetBlizzID(outfitID)
DressUpItemTransmogInfoList(C_TransmogCollection.GetOutfitItemTransmogInfoList(outfitID))
else
local outfit = addon.GetSetInfo(outfitID)
local itemTransmogInfoList = {}
local itemData = outfit.itemData
--itemData[i] = {"'"..itemID..":"..itemMod.."'", sourceID, appearanceID}
local items = outfit.items
local itemTransmogInfo
--for index, data in ipairs(itemData) do
for i = 1, 19 do
local secondary = (i == 3 and outfit.offShoulder) or 0
local sourceID = itemData[i] and itemData[i][2]
if sourceID then
itemTransmogInfo = ItemUtil.CreateItemTransmogInfo(sourceID or 0, secondary, 0)
else
itemTransmogInfo = ItemUtil.CreateItemTransmogInfo( 0, 0, 0)
end
itemTransmogInfoList[i] = itemTransmogInfo
end
DressUpItemTransmogInfoList(itemTransmogInfoList)
end
import = false
DressingRoom:Update()
end
function addon:DressinRoomFormSwap()
DressingRoom:UpdateModel("player")
end