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
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
|
|
|
|
|