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.
339 lines
8.8 KiB
339 lines
8.8 KiB
|
3 years ago
|
local _, addon = ...
|
||
|
|
|
||
|
|
--Hotkey
|
||
|
|
local RotateBarberShopCamera = C_BarberShop.RotateCamera;
|
||
|
|
local CameraRotator = CreateFrame("Frame");
|
||
|
|
CameraRotator:Hide();
|
||
|
|
CameraRotator.speed = 0;
|
||
|
|
CameraRotator.maxSpeed = 2.5;
|
||
|
|
CameraRotator.direction = 1; --Counterclockwise
|
||
|
|
CameraRotator:SetScript("OnUpdate", function(self, elapsed)
|
||
|
|
local direction = self.direction;
|
||
|
|
local speed = self.speed + 12 * elapsed * direction;
|
||
|
|
if direction > 0 then
|
||
|
|
if speed > self.maxSpeed then
|
||
|
|
speed = self.maxSpeed;
|
||
|
|
end
|
||
|
|
elseif direction < 0 then
|
||
|
|
if speed <= -self.maxSpeed then
|
||
|
|
speed = -self.maxSpeed;
|
||
|
|
end
|
||
|
|
else
|
||
|
|
--inertia
|
||
|
|
if self.lastDirection > 0 then
|
||
|
|
speed = speed - 16 * elapsed;
|
||
|
|
if speed <= 0 then
|
||
|
|
speed = 0;
|
||
|
|
self.lastDirection = 0;
|
||
|
|
self:Hide();
|
||
|
|
end
|
||
|
|
else
|
||
|
|
speed = speed + 16 * elapsed;
|
||
|
|
if speed >= 0 then
|
||
|
|
speed = 0;
|
||
|
|
self.lastDirection = 0;
|
||
|
|
self:Hide();
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
self.speed = speed;
|
||
|
|
RotateBarberShopCamera(speed);
|
||
|
|
end)
|
||
|
|
|
||
|
|
local ZoomCamera = C_BarberShop.ZoomCamera;
|
||
|
|
local CameraZoomer = CreateFrame("Frame");
|
||
|
|
CameraZoomer:Hide();
|
||
|
|
CameraZoomer.direction = 1;
|
||
|
|
CameraZoomer.amountPerSecond = 150;
|
||
|
|
CameraZoomer:SetScript("OnUpdate", function(self, elapsed)
|
||
|
|
ZoomCamera( self.direction * self.amountPerSecond * elapsed );
|
||
|
|
end)
|
||
|
|
|
||
|
|
|
||
|
|
local function RotateBarberShopCameraLeft()
|
||
|
|
CameraRotator:Hide();
|
||
|
|
CameraRotator.direction = -1;
|
||
|
|
CameraRotator.lastDirection = -1;
|
||
|
|
CameraRotator:Show();
|
||
|
|
end
|
||
|
|
|
||
|
|
local function RotateBarberShopCameraRight()
|
||
|
|
CameraRotator:Hide();
|
||
|
|
CameraRotator.direction = 1;
|
||
|
|
CameraRotator.lastDirection = 1;
|
||
|
|
CameraRotator:Show();
|
||
|
|
end
|
||
|
|
|
||
|
|
local function StopRotatingCamera()
|
||
|
|
CameraRotator.direction = 0;
|
||
|
|
end
|
||
|
|
|
||
|
|
local function ZoomCameraIn()
|
||
|
|
CameraZoomer:Hide();
|
||
|
|
CameraZoomer.direction = 1;
|
||
|
|
CameraZoomer:Show();
|
||
|
|
end
|
||
|
|
|
||
|
|
local function ZoomCameraOut()
|
||
|
|
CameraZoomer:Hide();
|
||
|
|
CameraZoomer.direction = -1;
|
||
|
|
CameraZoomer:Show();
|
||
|
|
end
|
||
|
|
|
||
|
|
local function StopZoomingCamera()
|
||
|
|
CameraZoomer:Hide();
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
local HotkeyList = {
|
||
|
|
--[key] = {downFunc, upFunc, commandName},
|
||
|
|
};
|
||
|
|
|
||
|
|
local HotkeyManager = {};
|
||
|
|
addon.HotkeyManager = HotkeyManager;
|
||
|
|
|
||
|
|
|
||
|
|
HotkeyManager.buttons = {};
|
||
|
|
|
||
|
|
HotkeyManager.ignoredKeys = {
|
||
|
|
LALT = 1,
|
||
|
|
RALT = 2,
|
||
|
|
LCTRL = 3,
|
||
|
|
RCTRL = 4,
|
||
|
|
LSHIFT = 5,
|
||
|
|
RSHIFT = 6,
|
||
|
|
LMETA = 7,
|
||
|
|
RMETA = 8,
|
||
|
|
ALT = 9,
|
||
|
|
CTRL = 10,
|
||
|
|
SHIFT = 11,
|
||
|
|
META = 12,
|
||
|
|
UNKNOWN = true,
|
||
|
|
BUTTON1 = true,
|
||
|
|
BUTTON2 = true,
|
||
|
|
BUTTON3 = true,
|
||
|
|
};
|
||
|
|
|
||
|
|
HotkeyManager.CommandList = {
|
||
|
|
--[name] = {downFunc, upFunc, defaultKey, customKey},
|
||
|
|
["RotateLeft"] = {
|
||
|
|
onMouseDownFunc = RotateBarberShopCameraLeft,
|
||
|
|
onMouseUpFunc = StopRotatingCamera,
|
||
|
|
defaultKey = "A",
|
||
|
|
defaultKeyFrench = "Q",
|
||
|
|
},
|
||
|
|
|
||
|
|
["RotateRight"] = {
|
||
|
|
onMouseDownFunc = RotateBarberShopCameraRight,
|
||
|
|
onMouseUpFunc = StopRotatingCamera,
|
||
|
|
defaultKey = "D",
|
||
|
|
defaultKeyFrench = "D",
|
||
|
|
},
|
||
|
|
|
||
|
|
["ZoomIn"] = {
|
||
|
|
onMouseDownFunc = ZoomCameraIn,
|
||
|
|
onMouseUpFunc = StopZoomingCamera,
|
||
|
|
defaultKey = "W",
|
||
|
|
defaultKeyFrench = "Z",
|
||
|
|
},
|
||
|
|
|
||
|
|
["ZoomOut"] = {
|
||
|
|
onMouseDownFunc = ZoomCameraOut,
|
||
|
|
onMouseUpFunc = StopZoomingCamera,
|
||
|
|
defaultKey = "S",
|
||
|
|
defaultKeyFrench = "S",
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
function HotkeyManager:LoadHotkeys()
|
||
|
|
--Check French Keyboard
|
||
|
|
--GetOSLocale, GetLocale
|
||
|
|
local isAZERTY = false;
|
||
|
|
local key1, key2 = GetBindingKey("MOVEFORWARD");
|
||
|
|
if key1 == "Z" or key2 == "Z" then
|
||
|
|
isAZERTY = true;
|
||
|
|
end
|
||
|
|
|
||
|
|
----
|
||
|
|
local DB = NarciBarberShopDB;
|
||
|
|
if not DB.Hotkeys then
|
||
|
|
DB.Hotkeys = {};
|
||
|
|
end
|
||
|
|
for command, data in pairs(self.CommandList) do
|
||
|
|
local key = DB.Hotkeys[command];
|
||
|
|
if not key then
|
||
|
|
if isAZERTY then
|
||
|
|
key = data.defaultKeyFrench;
|
||
|
|
else
|
||
|
|
key = data.defaultKey;
|
||
|
|
end
|
||
|
|
DB.Hotkeys[command] = key;
|
||
|
|
end
|
||
|
|
if key ~= "NONE" then
|
||
|
|
HotkeyList[key] = {data.onMouseDownFunc, data.onMouseUpFunc, command};
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function IsKeyValidForUse(key)
|
||
|
|
if not key then return true end --clear keybind
|
||
|
|
|
||
|
|
if key == "ESCAPE" or key == "SPACE" then
|
||
|
|
return false
|
||
|
|
else
|
||
|
|
local keybind = GetBindingFromClick(key);
|
||
|
|
if keybind and (keybind == "TOGGLEMUSIC" or keybind == "TOGGLESOUND" or keybind == "SCREENSHOT") then
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
return true
|
||
|
|
end
|
||
|
|
|
||
|
|
function HotkeyManager:SetHotkey(command, newKey)
|
||
|
|
if not IsKeyValidForUse(newKey) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
if command and self.CommandList[command] then
|
||
|
|
local overriddenCommand;
|
||
|
|
--Check conflicted command
|
||
|
|
for key, v in pairs(HotkeyList) do
|
||
|
|
if v then
|
||
|
|
if v[3] == command then
|
||
|
|
HotkeyList[key] = nil;
|
||
|
|
elseif key == newKey then
|
||
|
|
overriddenCommand = v[3];
|
||
|
|
HotkeyList[key] = nil;
|
||
|
|
NarciBarberShopDB.Hotkeys[overriddenCommand] = "NONE";
|
||
|
|
--print("Conflict: "..overriddenCommand)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local success;
|
||
|
|
if newKey then
|
||
|
|
if self.ignoredKeys[newKey] then
|
||
|
|
success = false;
|
||
|
|
else
|
||
|
|
HotkeyList[newKey] = {self.CommandList[command].onMouseDownFunc, self.CommandList[command].onMouseUpFunc, command};
|
||
|
|
NarciBarberShopDB.Hotkeys[command] = newKey;
|
||
|
|
success = true;
|
||
|
|
end
|
||
|
|
else
|
||
|
|
--An empty newKey will unbind the command
|
||
|
|
NarciBarberShopDB.Hotkeys[command] = "NONE";
|
||
|
|
success = true;
|
||
|
|
end
|
||
|
|
|
||
|
|
self:RefreshKeybindingButtons();
|
||
|
|
|
||
|
|
return success
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function HotkeyManager:GetHotkey(command)
|
||
|
|
if command and self.CommandList[command] then
|
||
|
|
return NarciBarberShopDB.Hotkeys[command];
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function HotkeyManager:RefreshKeybindingButtons()
|
||
|
|
for i = 1, #self.buttons do
|
||
|
|
local key = self:GetHotkey(self.buttons[i].command);
|
||
|
|
self.buttons[i]:SetText( key );
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function HotkeyManager:RunCommandByKeyState(key, down)
|
||
|
|
if HotkeyList[key] then
|
||
|
|
if down then
|
||
|
|
if HotkeyList[key][1] then
|
||
|
|
HotkeyList[key][1]();
|
||
|
|
return true
|
||
|
|
end
|
||
|
|
else
|
||
|
|
if HotkeyList[key][2] then
|
||
|
|
HotkeyList[key][2]();
|
||
|
|
return true
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function HotkeyManager:StopMovingCamera()
|
||
|
|
CameraZoomer:Hide();
|
||
|
|
CameraRotator:Hide();
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
local function KeybindingButton_OnKeyDown(self, key)
|
||
|
|
self:Deactivate();
|
||
|
|
if HotkeyManager:SetHotkey(self.command, key) then
|
||
|
|
self:SetText(key);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
NarciBarberShopSettingKeyBindingButtonMixin = {};
|
||
|
|
|
||
|
|
function NarciBarberShopSettingKeyBindingButtonMixin:OnLoad()
|
||
|
|
table.insert(HotkeyManager.buttons, self);
|
||
|
|
self:OnLeave();
|
||
|
|
end
|
||
|
|
|
||
|
|
function NarciBarberShopSettingKeyBindingButtonMixin:OnEnter()
|
||
|
|
self.Background:SetVertexColor(1, 1, 1);
|
||
|
|
end
|
||
|
|
|
||
|
|
function NarciBarberShopSettingKeyBindingButtonMixin:OnLeave()
|
||
|
|
if not self.isOn then
|
||
|
|
self.Background:SetVertexColor(0.6, 0.6, 0.6);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function NarciBarberShopSettingKeyBindingButtonMixin:Activate()
|
||
|
|
self.Background:SetTexCoord(0, 1, 0.5, 1);
|
||
|
|
self.ButtonText:SetTextColor(0, 0, 0);
|
||
|
|
self:SetScript("OnKeyDown", KeybindingButton_OnKeyDown);
|
||
|
|
self:SetPropagateKeyboardInput(false);
|
||
|
|
self:RegisterEvent("GLOBAL_MOUSE_DOWN");
|
||
|
|
end
|
||
|
|
|
||
|
|
function NarciBarberShopSettingKeyBindingButtonMixin:Deactivate()
|
||
|
|
self.Background:SetTexCoord(0, 1, 0, 0.5);
|
||
|
|
self.ButtonText:SetTextColor(1, 0.82, 0);
|
||
|
|
self:SetScript("OnKeyDown", nil);
|
||
|
|
self.isOn = false;
|
||
|
|
self:UnregisterEvent("GLOBAL_MOUSE_DOWN");
|
||
|
|
if not self:IsMouseOver() then
|
||
|
|
self.Background:SetVertexColor(0.6, 0.6, 0.6);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function NarciBarberShopSettingKeyBindingButtonMixin:OnClick(button)
|
||
|
|
if button == "RightButton" then
|
||
|
|
HotkeyManager:SetHotkey(self.command, nil);
|
||
|
|
self:SetText("NONE");
|
||
|
|
else
|
||
|
|
self.isOn = not self.isOn;
|
||
|
|
if self.isOn then
|
||
|
|
self:Activate();
|
||
|
|
else
|
||
|
|
self:Deactivate();
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function NarciBarberShopSettingKeyBindingButtonMixin:OnEvent()
|
||
|
|
if not self:IsMouseOver() then
|
||
|
|
self:Deactivate();
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function NarciBarberShopSettingKeyBindingButtonMixin:OnHide()
|
||
|
|
if self.isOn then
|
||
|
|
self:Deactivate();
|
||
|
|
end
|
||
|
|
end
|