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.
356 lines
12 KiB
356 lines
12 KiB
local TransmogDataProvider;
|
|
do
|
|
local _, addon = ...
|
|
TransmogDataProvider = addon.TransmogDataProvider;
|
|
end
|
|
|
|
local Narci = Narci;
|
|
|
|
local function GetItemIcon(itemID)
|
|
if itemID then
|
|
local _, _, _, _, icon = C_Item.GetItemInfoInstant(itemID);
|
|
if icon == 0 then
|
|
icon = nil;
|
|
end
|
|
return icon
|
|
end
|
|
end
|
|
|
|
|
|
local function HoldWeaponButton_OnClick(self)
|
|
local model = Narci:GetActiveActor();
|
|
self.isOn = not self.isOn;
|
|
if model.SetSheathed then
|
|
local isSheathed = not model:GetSheathed();
|
|
self.isOn = not isSheathed;
|
|
model:SetSheathed(isSheathed);
|
|
if model.bowData then
|
|
if isSheathed then
|
|
model:SetItemTransmogInfo(model.bowData, 16);
|
|
else
|
|
model:SetItemTransmogInfo(model.bowData, 17); --swtich bow to the left hand
|
|
model:UndressSlot(16);
|
|
end
|
|
end
|
|
elseif model.EquipItem then
|
|
if self.isOn then
|
|
local weapons = model.equippedWeapons;
|
|
if weapons[1] then
|
|
model:EquipItem(weapons[1]);
|
|
if weapons[2] then
|
|
model:EquipItem(weapons[2]);
|
|
end
|
|
elseif weapons[2] then
|
|
--use 2 same weapons then remove the mainhand
|
|
model:EquipItem(weapons[2]);
|
|
model:EquipItem(weapons[2]);
|
|
model:EquipItem(111532);
|
|
end
|
|
else
|
|
model:EquipItem(111532);
|
|
model:EquipItem(130105);
|
|
end
|
|
model.holdWeapon = self.isOn;
|
|
end
|
|
if self.isOn then
|
|
self.Icon:SetTexCoord(0.5, 1, 0, 1);
|
|
else
|
|
self.Icon:SetTexCoord(0, 0.5, 0, 1);
|
|
end
|
|
end
|
|
|
|
local UnequipButtonScripts = {};
|
|
|
|
function UnequipButtonScripts.OnEnter(self)
|
|
self.Icon:SetTexCoord(0.8828125, 1, 0, 0.1171875);
|
|
NarciTooltip:NewText(self, Narci.L["Unequip Item"], nil, nil, 1);
|
|
end
|
|
|
|
function UnequipButtonScripts.OnLeave(self)
|
|
self.Icon:SetTexCoord(0.7578125, 0.875, 0, 0.1171875);
|
|
NarciTooltip:HideTooltip();
|
|
end
|
|
|
|
function UnequipButtonScripts.OnMouseDown(self)
|
|
self.Icon:SetSize(16, 16);
|
|
NarciTooltip:HideTooltip();
|
|
end
|
|
|
|
function UnequipButtonScripts.OnMouseUp(self)
|
|
self.Icon:SetSize(18, 18);
|
|
end
|
|
|
|
function UnequipButtonScripts.OnClick(self)
|
|
local model = Narci:GetActiveActor();
|
|
if model then
|
|
if not model.equippedWeapons then
|
|
model.equippedWeapons = {};
|
|
end
|
|
if model.UndressSlot then
|
|
if self.slotID == 16 then
|
|
model:EquipWeapon(0, 0, 1);
|
|
model.equippedWeapons[1] = nil;
|
|
else
|
|
model:EquipWeapon(0, 0, 2);
|
|
model.equippedWeapons[2] = nil
|
|
end
|
|
elseif model.UnequipItems then
|
|
if self.slotID == 16 then
|
|
model:EquipWeapon(111532, 0, 1);
|
|
model.equippedWeapons[1] = nil;
|
|
else
|
|
model:EquipWeapon(130105, 0, 2);
|
|
model.equippedWeapons[2] = nil;
|
|
end
|
|
end
|
|
self:GetParent():SetSlotInfo(nil);
|
|
end
|
|
end
|
|
|
|
NarciActorWeaponSlotMixin = {};
|
|
|
|
function NarciActorWeaponSlotMixin:OnLoad()
|
|
local id = self:GetID();
|
|
if id == 1 then
|
|
self.UnequipButton.slotID = 16;
|
|
self.EmptyText:SetText("Main");
|
|
self.inventoryText = INVTYPE_WEAPONMAINHAND;
|
|
else
|
|
self.UnequipButton.slotID = 17;
|
|
self.EmptyText:SetText("Off");
|
|
self.inventoryText = INVTYPE_WEAPONOFFHAND;
|
|
end
|
|
local offset = 0.05;
|
|
local range = (1- offset)*14/24/2 ;
|
|
self.ItemIcon:SetTexCoord(offset, 1 - offset, 0.5 - range, 0.5 + range);
|
|
for methodName, func in pairs(UnequipButtonScripts) do
|
|
self.UnequipButton:SetScript(methodName, func);
|
|
end
|
|
self:RegisterForClicks("LeftButtonUp", "RightButtonUp");
|
|
self:SetEmptyVisual(true);
|
|
self:OnLeave();
|
|
self:SetScript("OnLoad", nil);
|
|
end
|
|
|
|
function NarciActorWeaponSlotMixin:OnClick(button)
|
|
if button == "LeftButton" then
|
|
Narci_WeaponBrowser:Open();
|
|
elseif button == "RightButton" then
|
|
self.UnequipButton:Click();
|
|
end
|
|
end
|
|
|
|
function NarciActorWeaponSlotMixin:OnEnter()
|
|
self.ItemIcon:SetVertexColor(1, 1, 1);
|
|
self.EmptyText:SetAlpha(1);
|
|
|
|
local IDFrame = self:GetParent().IDFrame;
|
|
IDFrame:ClearAllPoints();
|
|
IDFrame:SetText(self.itemName or (self.inventoryText));
|
|
IDFrame:SetPoint("BOTTOM", self, "TOP", 0, 0);
|
|
IDFrame:Show();
|
|
end
|
|
|
|
function NarciActorWeaponSlotMixin:OnLeave()
|
|
self.ItemIcon:SetVertexColor(0.8, 0.8, 0.8);
|
|
self.EmptyText:SetAlpha(0.8);
|
|
|
|
self:GetParent().IDFrame:Hide();
|
|
end
|
|
|
|
function NarciActorWeaponSlotMixin:SetSlotInfo(id, name, icon)
|
|
if id == 0 then
|
|
id = nil;
|
|
name = nil;
|
|
end
|
|
self.itemID = id;
|
|
self.itemName = name;
|
|
self.ItemIcon:SetTexture(icon);
|
|
self:SetEmptyVisual(not id);
|
|
end
|
|
|
|
function NarciActorWeaponSlotMixin:SetEmptyVisual(state)
|
|
if state then
|
|
self.ItemIcon:SetTexture(nil);
|
|
self.Border:SetTexCoord(0.34375, 0.671875, 0, 0.1171875);
|
|
self.Highlight:SetTexCoord(0.34375, 0.671875, 0.125, 0.2421875);
|
|
self.EmptyText:Show();
|
|
self.UnequipButton:Hide();
|
|
self:SetHitRectInsets(3, 3, 0, 0);
|
|
else
|
|
self.Border:SetTexCoord(0, 0.328125, 0, 0.1171875);
|
|
self.Highlight:SetTexCoord(0, 0.328125, 0.125, 0.2421875);
|
|
self.EmptyText:Hide();
|
|
self.UnequipButton:Show();
|
|
self:SetHitRectInsets(3, 12, 0, 0);
|
|
end
|
|
end
|
|
|
|
--------------------------------------------------------------------
|
|
NarciPhotoModeWeaponFrameMixin = {};
|
|
|
|
function NarciPhotoModeWeaponFrameMixin:OnLoad()
|
|
self.SheathButton:SetScript("OnClick", HoldWeaponButton_OnClick);
|
|
self.SheathButton.Background:SetVertexColor(0.5, 0.5, 0.5);
|
|
self.SheathButton.Background:Hide();
|
|
self.SheathButton:SetScript("OnEnter", function(f)
|
|
f.Background:Show();
|
|
NarciTooltip:NewText(f, BINDING_NAME_TOGGLESHEATH, nil, nil, 1);
|
|
end);
|
|
self.SheathButton:SetScript("OnLeave", function(f)
|
|
f.Background:Hide();
|
|
NarciTooltip:HideTooltip();
|
|
end);
|
|
self.SheathButton:SetScript("OnMouseDown", function(f)
|
|
if f:IsEnabled() then
|
|
f.Icon:SetSize(12, 12);
|
|
end
|
|
end);
|
|
self.SheathButton:SetScript("OnMouseUp", function(f)
|
|
f.Icon:SetSize(14, 14);
|
|
end);
|
|
self.SheathButton:SetScript("OnEnable", function(f)
|
|
f.Icon:SetVertexColor(1, 1, 1);
|
|
end);
|
|
self.SheathButton:SetScript("OnDisable", function(f)
|
|
f.Icon:SetVertexColor(0.5, 0.5, 0.5);
|
|
end);
|
|
--self.Label:SetText(Narci.L["Draw Weapon"]);
|
|
self:SetScript("OnLoad", nil);
|
|
self.OnLoad = nil;
|
|
NarciPhotoModeBar_OnLoad(self);
|
|
end
|
|
|
|
function NarciPhotoModeWeaponFrameMixin:SetItemInfo(id, slot, databaseName, overrideSheathStatus)
|
|
local icon, name;
|
|
if id then
|
|
icon = GetItemIcon(id);
|
|
name = C_Item.GetItemInfo(id) or databaseName;
|
|
end
|
|
if slot == 1 then
|
|
self.MainHandSlot:SetSlotInfo(id, name, icon);
|
|
elseif slot == 2 then
|
|
self.OffHandSlot:SetSlotInfo(id, name, icon);
|
|
end
|
|
if overrideSheathStatus then
|
|
self:ToggleSheathButton();
|
|
end
|
|
end
|
|
|
|
function NarciPhotoModeWeaponFrameMixin:SetItemFromActor(actor)
|
|
if actor then
|
|
actor.isItemLoaded = true;
|
|
actor.bowData = nil;
|
|
if actor.GetItemTransmogInfo then
|
|
--New Method in 9.1.0 return ItemTransmogInfoMixin
|
|
--DressUpModel / ModelSceneActor
|
|
local transmogInfo;
|
|
local sourceID, sourceInfo, itemID, name, icon;
|
|
for slotID = 16, 17 do
|
|
transmogInfo = actor:GetItemTransmogInfo(slotID);
|
|
if transmogInfo then
|
|
sourceID = transmogInfo.appearanceID;
|
|
sourceInfo = C_TransmogCollection.GetSourceInfo(sourceID);
|
|
if sourceInfo then
|
|
itemID = sourceInfo.itemID;
|
|
name = sourceInfo.name;
|
|
else
|
|
itemID = 0;
|
|
end
|
|
if TransmogDataProvider:IsSourceBow(sourceID) then
|
|
actor.bowData = transmogInfo;
|
|
end
|
|
else
|
|
itemID = 0;
|
|
sourceID = 0;
|
|
end
|
|
icon = C_TransmogCollection.GetSourceIcon(sourceID);
|
|
if slotID == 16 then
|
|
self.MainHandSlot:SetSlotInfo(itemID, name, icon);
|
|
else
|
|
self.OffHandSlot:SetSlotInfo(itemID, name, icon);
|
|
end
|
|
end
|
|
|
|
elseif actor.GetSlotTransmogSources then
|
|
--DressUpModel / ModelSceneActor
|
|
local sourceID, sourceInfo, itemID, name, icon;
|
|
for slotID = 16, 17 do
|
|
sourceID = actor:GetSlotTransmogSources(slotID);
|
|
sourceInfo = C_TransmogCollection.GetSourceInfo(sourceID);
|
|
if sourceInfo then
|
|
itemID = sourceInfo.itemID;
|
|
name = sourceInfo.name;
|
|
else
|
|
itemID = 0;
|
|
sourceID = 0;
|
|
end
|
|
icon = C_TransmogCollection.GetSourceIcon(sourceID);
|
|
if slotID == 16 then
|
|
self.MainHandSlot:SetSlotInfo(itemID, name, icon);
|
|
else
|
|
self.OffHandSlot:SetSlotInfo(itemID, name, icon);
|
|
end
|
|
end
|
|
|
|
else
|
|
local weapons = actor.equippedWeapons;
|
|
if weapons then
|
|
local itemID, name, icon;
|
|
for i = 1, 2 do
|
|
itemID = weapons[i];
|
|
if itemID then
|
|
icon = GetItemIcon(itemID);
|
|
name = C_Item.GetItemNameByID(itemID); --in fact, itemlink
|
|
if i == 1 then
|
|
self.MainHandSlot:SetSlotInfo(itemID, name, icon);
|
|
else
|
|
self.OffHandSlot:SetSlotInfo(itemID, name, icon);
|
|
end
|
|
else
|
|
if i == 1 then
|
|
self.MainHandSlot:SetSlotInfo(nil);
|
|
else
|
|
self.OffHandSlot:SetSlotInfo(nil);
|
|
end
|
|
end
|
|
end
|
|
else
|
|
self.MainHandSlot:SetSlotInfo(nil);
|
|
self.OffHandSlot:SetSlotInfo(nil);
|
|
end
|
|
end
|
|
|
|
self:UpdateSheathButton(actor);
|
|
end
|
|
end
|
|
|
|
function NarciPhotoModeWeaponFrameMixin:UpdateSheathButton(actor)
|
|
if actor then
|
|
local isHolding;
|
|
if actor.SetSheathed and actor.GetSheathed then
|
|
self.SheathButton:Enable();
|
|
isHolding = not actor:GetSheathed();
|
|
else
|
|
if actor.equippedWeapons then
|
|
self.SheathButton:Enable();
|
|
isHolding = actor.holdWeapon;
|
|
else
|
|
self.SheathButton:Disable();
|
|
isHolding = false;
|
|
end
|
|
end
|
|
self.SheathButton.isOn = isHolding;
|
|
if isHolding then
|
|
self.SheathButton.Icon:SetTexCoord(0.5, 1, 0, 1);
|
|
else
|
|
self.SheathButton.Icon:SetTexCoord(0, 0.5, 0, 1);
|
|
end
|
|
end
|
|
end
|
|
|
|
function NarciPhotoModeWeaponFrameMixin:ToggleSheathButton()
|
|
self.SheathButton:Enable();
|
|
self.SheathButton.Icon:SetTexCoord(0.5, 1, 0, 1);
|
|
self.SheathButton.isOn = true;
|
|
end
|