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.
133 lines
3.6 KiB
133 lines
3.6 KiB
local _, addon = ...
|
|
|
|
local ag = addon.CreateActionGroup("CharacterFrame");
|
|
|
|
ag:SetButtonDescription("A", "Select");
|
|
ag:SetButtonDescription("B", "Cancel");
|
|
ag:SetButtonDescription("X", "Use");
|
|
|
|
local NavBar = Narci_NavBar;
|
|
local AttributeFrame = Narci_Attribute;
|
|
|
|
function ag:Init()
|
|
self.frames = {
|
|
[1] = Narci_TitleManager_Switch,
|
|
};
|
|
self.col = 1; --Left: CharacterFrame, Right: Title, NavBar
|
|
self.row = 0;
|
|
self.maxRow = 1;
|
|
end
|
|
|
|
function ag:KeyDown(key)
|
|
if key == "PAD1" then
|
|
if self.currentObj and self.currentObj.OnClick then
|
|
self.currentObj:OnClick("LeftButton");
|
|
end
|
|
end
|
|
end
|
|
|
|
function ag:PlaceButtonNote()
|
|
if self.currentObj then
|
|
if self.row == 1 then
|
|
self.pad1 = addon.GamePadButtonPool:SetupButton("PAD1", "", AttributeFrame, "RIGHT", self.currentObj, "LEFT", -4, 0);
|
|
else
|
|
self.pad1 = addon.GamePadButtonPool:SetupButton("PAD1", "", AttributeFrame, "CENTER", self.currentObj, "TOP", 0, 5);
|
|
end
|
|
end
|
|
end
|
|
|
|
function ag:Navigate(x, y)
|
|
if self.col == 1 then
|
|
if x < 0 or y < 0 then
|
|
addon.SelectActionGroup("EquipmentSlot", 1); --topleft
|
|
elseif x > 0 then
|
|
addon.SelectActionGroup("EquipmentSlot", 2); --topright
|
|
elseif y > 0 then
|
|
addon.SelectActionGroup("EquipmentSlot", 3); --bottomleft
|
|
end
|
|
elseif self.col == 2 then
|
|
local hold, valid;
|
|
if y > 0 or x < 0 then
|
|
self.row = self.row - 1;
|
|
if self.row < 1 then
|
|
self.row = 1;
|
|
else
|
|
valid = true;
|
|
hold = true;
|
|
end
|
|
elseif y < 0 or x > 0 then
|
|
self.row = self.row + 1;
|
|
if self.row > self.maxRow then
|
|
self.row = self.maxRow;
|
|
else
|
|
hold = true;
|
|
valid = true;
|
|
end
|
|
end
|
|
if valid then
|
|
self:Enter(self.frames[self.row]);
|
|
self:PlaceButtonNote();
|
|
end
|
|
return hold
|
|
end
|
|
end
|
|
|
|
function ag:Switch(x)
|
|
--x > 0 PADRSHOULDER, x < 0 PADLSHOULDER
|
|
if x < 0 then
|
|
if self.row > 1 then
|
|
self.row = self.row - 1;
|
|
self.col = 2;
|
|
self:Enter(self.frames[self.row]);
|
|
self:PlaceButtonNote();
|
|
if self.row > 1 then
|
|
self:Click();
|
|
end
|
|
else
|
|
self.col = 1;
|
|
addon.SelectActionGroup("EquipmentSlot", 4);
|
|
end
|
|
elseif x > 0 then
|
|
self.col = 2;
|
|
self:Navigate(1, 0);
|
|
if self.row > 1 then
|
|
self:Click();
|
|
end
|
|
end
|
|
end
|
|
|
|
function ag:OnActiveCallback(mode)
|
|
local tabs, numTabs = NavBar:GetTabButtons();
|
|
for i = 2, 2 + numTabs do
|
|
self.frames[i] = tabs[i - 1];
|
|
end
|
|
self.maxRow = 1 + numTabs;
|
|
tabs = nil;
|
|
|
|
if mode then
|
|
if mode == 0 then
|
|
--Activate from equipment slot
|
|
self.col = 2;
|
|
if self.row == 0 then
|
|
self.row = 1;
|
|
end
|
|
else
|
|
--Activate by clicking NavBar
|
|
self.col = 2;
|
|
self.row = mode + 1;
|
|
if self.row > self.maxRow then
|
|
self.row = self.maxRow;
|
|
end
|
|
end
|
|
end
|
|
if self.row > 0 then
|
|
self:Enter(self.frames[self.row]);
|
|
self:PlaceButtonNote();
|
|
end
|
|
end
|
|
|
|
function ag:ResetNavigation()
|
|
self.col = 1;
|
|
self.row = 0;
|
|
self.pad1 = nil;
|
|
end
|