/ElvUI/modules/actionbars/BarVehicle.lua

https://github.com/realsupr/ElvUI-ME · Lua · 111 lines · 102 code · 6 blank · 3 comment · 7 complexity · b15bff42167778ab3498e242aba29d5b MD5 · raw file

  1. local E, C, L, DB = unpack(select(2, ...)) -- Import Functions/Constants, Config, Locales
  2. if not C["actionbar"].enable == true then return end
  3. ---------------------------------------------------------------------------
  4. -- Setup Vehicle Bar
  5. ---------------------------------------------------------------------------
  6. local vbar = CreateFrame("Frame", "ElvuiVehicleBar", ElvuiVehicleBarBackground, "SecureHandlerStateTemplate")
  7. vbar:ClearAllPoints()
  8. vbar:SetAllPoints(ElvuiVehicleBarBackground)
  9. vbar:RegisterEvent("UNIT_ENTERED_VEHICLE")
  10. vbar:RegisterEvent("UNIT_DISPLAYPOWER")
  11. vbar:RegisterEvent("PLAYER_LOGIN")
  12. vbar:RegisterEvent("PLAYER_ENTERING_WORLD")
  13. vbar:SetScript("OnEvent", function(self, event, ...)
  14. if event == "PLAYER_LOGIN" then
  15. local button
  16. for i = 1, VEHICLE_MAX_ACTIONBUTTONS do
  17. button = _G["VehicleMenuBarActionButton"..i]
  18. self:SetFrameRef("VehicleMenuBarActionButton"..i, button)
  19. end
  20. self:SetAttribute("_onstate-vehicleupdate", [[
  21. if newstate == "s1" then
  22. self:GetParent():Show()
  23. else
  24. self:GetParent():Hide()
  25. end
  26. ]])
  27. RegisterStateDriver(self, "vehicleupdate", "[vehicleui]s1;s2")
  28. elseif event == "PLAYER_ENTERING_WORLD" then
  29. local button
  30. for i = 1, VEHICLE_MAX_ACTIONBUTTONS do
  31. button = _G["VehicleMenuBarActionButton"..i]
  32. button:SetSize(E.buttonsize, E.buttonsize)
  33. button:ClearAllPoints()
  34. button:SetParent(ElvuiVehicleBar)
  35. if i == 1 then
  36. button:SetPoint("BOTTOMLEFT", ElvuiVehicleBar, E.buttonspacing, E.buttonspacing)
  37. else
  38. local previous = _G["VehicleMenuBarActionButton"..i-1]
  39. button:SetPoint("LEFT", previous, "RIGHT", E.buttonspacing, 0)
  40. end
  41. end
  42. else
  43. VehicleMenuBar_OnEvent(self, event, ...)
  44. end
  45. end)
  46. --Create our custom Vehicle Button Hotkeys, because blizzard is fucking gay and won't let us reposition the default ones
  47. do
  48. for i=1, VEHICLE_MAX_ACTIONBUTTONS do
  49. _G["ElvuiVehicleHotkey"..i] = _G["VehicleMenuBarActionButton"..i]:CreateFontString("ElvuiVehicleHotkey"..i, "OVERLAY", nil)
  50. _G["ElvuiVehicleHotkey"..i]:ClearAllPoints()
  51. _G["ElvuiVehicleHotkey"..i]:SetPoint("TOPRIGHT", 0, E.Scale(-3))
  52. _G["ElvuiVehicleHotkey"..i]:SetFont(C["media"].font, 12, "OUTLINE")
  53. _G["ElvuiVehicleHotkey"..i].ClearAllPoints = E.dummy
  54. _G["ElvuiVehicleHotkey"..i].SetPoint = E.dummy
  55. if not C["actionbar"].hotkey == true then
  56. _G["ElvuiVehicleHotkey"..i]:SetText("")
  57. _G["ElvuiVehicleHotkey"..i]:Hide()
  58. _G["ElvuiVehicleHotkey"..i].Show = E.dummy
  59. else
  60. _G["ElvuiVehicleHotkey"..i]:SetText(_G["VehicleMenuBarActionButton"..i.."HotKey"]:GetText())
  61. end
  62. end
  63. end
  64. local UpdateVehHotkeys = function()
  65. if not UnitHasVehicleUI("player") then return end
  66. if C["actionbar"].hotkey ~= true then return end
  67. for i=1, VEHICLE_MAX_ACTIONBUTTONS do
  68. _G["ElvuiVehicleHotkey"..i]:SetText(_G["VehicleMenuBarActionButton"..i.."HotKey"]:GetText())
  69. _G["ElvuiVehicleHotkey"..i]:SetTextColor(_G["VehicleMenuBarActionButton"..i.."HotKey"]:GetTextColor())
  70. end
  71. end
  72. local VehTextUpdate = CreateFrame("Frame")
  73. VehTextUpdate:RegisterEvent("UNIT_ENTERING_VEHICLE")
  74. VehTextUpdate:RegisterEvent("UNIT_ENTERED_VEHICLE")
  75. VehTextUpdate:SetScript("OnEvent", UpdateVehHotkeys)
  76. -- vehicle button under minimap
  77. local vehicle = CreateFrame("Button", nil, E.UIParent, "SecureHandlerClickTemplate")
  78. vehicle:SetWidth(E.Scale(26))
  79. vehicle:SetHeight(E.Scale(26))
  80. vehicle:SetPoint("BOTTOMLEFT", Minimap, "BOTTOMLEFT", E.Scale(2), E.Scale(2))
  81. vehicle:SetNormalTexture("Interface\\AddOns\\ElvUI\\media\\textures\\vehicleexit")
  82. vehicle:SetPushedTexture("Interface\\AddOns\\ElvUI\\media\\textures\\vehicleexit")
  83. vehicle:SetHighlightTexture("Interface\\AddOns\\ElvUI\\media\\textures\\vehicleexit")
  84. vehicle:SetTemplate("Default")
  85. vehicle:RegisterForClicks("AnyUp")
  86. vehicle:SetScript("OnClick", function() VehicleExit() end)
  87. RegisterStateDriver(vehicle, "visibility", "[vehicleui][target=vehicle,noexists] hide;show")
  88. -- vehicle on vehicle bar, dont need to have a state driver.. its parented to vehicle bar
  89. local vehicle2 = CreateFrame("BUTTON", nil, ElvuiVehicleBarBackground, "SecureActionButtonTemplate")
  90. vehicle2:SetWidth(E.buttonsize)
  91. vehicle2:SetHeight(E.buttonsize)
  92. vehicle2:SetPoint("RIGHT", ElvuiVehicleBarBackground, "RIGHT", -E.buttonspacing, 0)
  93. vehicle2:RegisterForClicks("AnyUp")
  94. vehicle2:SetNormalTexture("Interface\\AddOns\\ElvUI\\media\\textures\\vehicleexit")
  95. vehicle2:SetPushedTexture("Interface\\AddOns\\ElvUI\\media\\textures\\vehicleexit")
  96. vehicle2:SetHighlightTexture("Interface\\AddOns\\ElvUI\\media\\textures\\vehicleexit")
  97. vehicle2:SetTemplate("Default")
  98. vehicle2:SetScript("OnClick", function() VehicleExit() end)