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.
99 lines
2.6 KiB
99 lines
2.6 KiB
local _, addon = ...
|
|
|
|
|
|
local ag = addon.CreateActionGroup("SwapItem");
|
|
ag.repeatInterval = 0.25;
|
|
|
|
local BUTTONS_PER_ROW = 5;
|
|
local SlotBorder = NarciGamePadOverlay.SlotBorder;
|
|
|
|
function ag:Init()
|
|
self.frame = Narci_EquipmentFlyoutFrame;
|
|
self.buttons = self.frame.buttons;
|
|
self.row = 1;
|
|
self.col = 1;
|
|
self.maxIndex = 1;
|
|
self.index = 0;
|
|
end
|
|
|
|
function ag:OnActiveCallback(slotChanged)
|
|
self.maxIndex = self.frame.numDisplayedItems or 0;
|
|
if slotChanged then
|
|
self.index = 0;
|
|
self.currentObj = nil;
|
|
else
|
|
if self.index > self.maxIndex then
|
|
self.index = self.maxIndex;
|
|
end
|
|
self:Enter(self.buttons[self.index]);
|
|
end
|
|
addon.GamePadNavBar:SelectButtonByID(1);
|
|
end
|
|
|
|
function ag:Navigate(x, y)
|
|
local hold, valid;
|
|
|
|
if self.index == 0 then
|
|
--select the first item on any press
|
|
self.index = 1;
|
|
valid = true;
|
|
else
|
|
if x > 0 then
|
|
if self.index < self.maxIndex then
|
|
self.index = self.index + 1;
|
|
hold = true;
|
|
valid = true;
|
|
end
|
|
elseif x < 0 then
|
|
if self.index > 1 then
|
|
self.index = self.index - 1;
|
|
hold = true;
|
|
valid = true;
|
|
end
|
|
elseif y > 0 then
|
|
if self.index > 1 then
|
|
if self.index - BUTTONS_PER_ROW >= 1 then
|
|
self.index = self.index - BUTTONS_PER_ROW;
|
|
hold = true;
|
|
else
|
|
self.index = 1;
|
|
end
|
|
valid = true;
|
|
end
|
|
elseif y < 0 then
|
|
if self.index < self.maxIndex then
|
|
if self.index + BUTTONS_PER_ROW <= self.maxIndex then
|
|
self.index = self.index + BUTTONS_PER_ROW;
|
|
hold = true;
|
|
else
|
|
self.index = self.maxIndex;
|
|
end
|
|
valid = true;
|
|
end
|
|
end
|
|
end
|
|
|
|
if valid then
|
|
self:Enter(self.buttons[self.index]);
|
|
end
|
|
return hold
|
|
end
|
|
|
|
function ag:Enter(currentObj)
|
|
self:Leave();
|
|
if currentObj and currentObj.OnEnter then
|
|
SlotBorder:AnchorToSlotButton(currentObj);
|
|
currentObj:OnEnter(nil, true);
|
|
end
|
|
self.currentObj = currentObj;
|
|
end
|
|
|
|
function ag:KeyDown(key)
|
|
if key == "PAD1" then
|
|
if self.currentObj then
|
|
self.currentObj:Click();
|
|
end
|
|
elseif key == "PAD2" then
|
|
self.frame:Hide();
|
|
end
|
|
end
|