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.
142 lines
4.3 KiB
142 lines
4.3 KiB
local _, addon = ...
|
|
|
|
local ag = addon.CreateActionGroup("EnhancementList");
|
|
ag.repeatInterval = 0.125;
|
|
|
|
function ag:Init()
|
|
self.frame = Narci_EquipmentOption.ItemList;
|
|
self.itemButtons = self.frame:GetItemButtons();
|
|
self.filter = self.frame.FilterToggle;
|
|
self.index = 1;
|
|
self.GemActionButton = self.frame.GemActionButton;
|
|
self.EnchantActionButton = NarciEquipmentEnchantActionButton;
|
|
|
|
hooksecurefunc(self.GemActionButton, "MarkActive", function(f, isActive)
|
|
self.gemActionActive = isActive;
|
|
if not isActive then
|
|
if self.pad3 then
|
|
self.pad3:Hide();
|
|
self.pad3 = nil;
|
|
end
|
|
addon.ClickProxy:Remove();
|
|
end
|
|
end);
|
|
|
|
hooksecurefunc(self.EnchantActionButton, "MarkActive", function(f, isActive)
|
|
self.enchantActionActive = isActive;
|
|
if isActive then
|
|
addon.ClickProxy:SetRunMacro( self.EnchantActionButton:GetMacroText() );
|
|
else
|
|
if self.pad3 then
|
|
self.pad3:Hide();
|
|
self.pad3 = nil;
|
|
end
|
|
addon.ClickProxy:Remove();
|
|
end
|
|
end);
|
|
end
|
|
|
|
function ag:PlaceButtonNote()
|
|
if self.currentObj and self.currentObj:IsShown() then
|
|
self.pad1 = addon.GamePadButtonPool:SetupButton("PAD1", "", self.currentObj, "RIGHT", self.currentObj, "RIGHT", -8, 0);
|
|
elseif self.pad1 then
|
|
self.pad1:Hide();
|
|
end
|
|
end
|
|
|
|
function ag:Navigate(x, y)
|
|
if self.gemActionActive then
|
|
self.frame:ClearActionButtons();
|
|
return
|
|
elseif self.enchantActionActive then
|
|
self.frame:ClearActionButtons();
|
|
return
|
|
end
|
|
|
|
if self.currentObj and self.currentObj.i then
|
|
self.index = self.currentObj.i;
|
|
end
|
|
local hold, propagate;
|
|
local scroll = 0;
|
|
if y > 0 then
|
|
self.index = self.index - 1;
|
|
if self.index <= 1 then
|
|
scroll = 1;
|
|
end
|
|
hold = true;
|
|
elseif y < 0 then
|
|
self.index = self.index + 1;
|
|
if self.index >= 6 then
|
|
scroll = -1
|
|
end
|
|
hold = true;
|
|
end
|
|
if self.index < 1 then
|
|
self.index = 1;
|
|
elseif self.index > 6 then
|
|
self.index = 6;
|
|
end
|
|
local obj = self.itemButtons[self.index];
|
|
if obj:IsShown() then
|
|
self:Enter(obj);
|
|
self:PlaceButtonNote();
|
|
self.frame:ScrollByOneButton(scroll);
|
|
return hold, propagate
|
|
end
|
|
end
|
|
|
|
function ag:KeyDown(key)
|
|
if self.gemActionActive then
|
|
if key == "PAD3" then
|
|
self.GemActionButton:Click("LeftButton");
|
|
else
|
|
self.frame:ClearActionButtons();
|
|
self:PlaceButtonNote();
|
|
end
|
|
return
|
|
elseif self.enchantActionActive then
|
|
local hold, propagate;
|
|
if key == "PAD3" then
|
|
if self.EnchantActionButton.isActive then
|
|
propagate = true; --click enchant action button
|
|
self.EnchantActionButton:PostClick("LeftButton");
|
|
ClearCursor(); --failed when using gamepad why??
|
|
--SetGamePadCursorControl(false); --this failed too
|
|
end
|
|
else
|
|
self.frame:ClearActionButtons();
|
|
self:PlaceButtonNote();
|
|
end
|
|
return hold, propagate
|
|
end
|
|
|
|
if key == "PAD1" then
|
|
if self.currentObj then
|
|
if self.currentObj:IsEnabled() then
|
|
self.currentObj:Click();
|
|
self.pad3 = addon.GamePadButtonPool:SetupButton("PAD3", "Confirm", Narci_Character, "CENTER", self.currentObj, "LEFT", 0, 0, 1); --execute
|
|
self.pad3:PlayEntrance();
|
|
end
|
|
end
|
|
elseif key == "PAD2" then
|
|
self.frame:GetParent():ShowMenu();
|
|
elseif key == "PAD4" then
|
|
self.filter:Click();
|
|
self:OnActiveCallback();
|
|
end
|
|
end
|
|
|
|
function ag:OnActiveCallback()
|
|
self.index = 2;
|
|
C_Timer.After(0, function()
|
|
self:Enter(self.itemButtons[self.index]);
|
|
self:PlaceButtonNote();
|
|
end)
|
|
local pad4 = addon.GamePadButtonPool:SetupButton("PAD4", "", self.frame, "LEFT", self.filter, "RIGHT", 6, 0);
|
|
end
|
|
|
|
function ag:ResetNavigation()
|
|
self.index = 1;
|
|
self.gemActionActive = nil;
|
|
self.enchantActionActive = nil;
|
|
end
|