/Tukui/modules/skins/worldmap.lua

http://github.com/Asphyxia/Tukui · Lua · 262 lines · 215 code · 44 blank · 3 comment · 56 complexity · 788242a3fd7f092e8a3a4e13fd6b2b64 MD5 · raw file

  1. local T, C, L = unpack(select(2, ...))
  2. local Taint = T.FullMapQuestTaintFix
  3. local function LoadSkin()
  4. WorldMapFrame:CreateBackdrop("Transparent")
  5. WorldMapDetailFrame.backdrop = CreateFrame("Frame", nil, WorldMapFrame)
  6. WorldMapDetailFrame.backdrop:SetTemplate("Transparent")
  7. WorldMapDetailFrame.backdrop:Point("TOPLEFT", WorldMapDetailFrame, "TOPLEFT", -2, 2)
  8. WorldMapDetailFrame.backdrop:Point("BOTTOMRIGHT", WorldMapDetailFrame, "BOTTOMRIGHT", 2, -2)
  9. WorldMapDetailFrame.backdrop:SetFrameLevel(WorldMapDetailFrame:GetFrameLevel() - 2)
  10. T.SkinCloseButton(WorldMapFrameCloseButton)
  11. T.SkinCloseButton(WorldMapFrameSizeDownButton)
  12. T.SkinCloseButton(WorldMapFrameSizeUpButton)
  13. T.SkinDropDownBox(WorldMapLevelDropDown)
  14. T.SkinDropDownBox(WorldMapZoneMinimapDropDown)
  15. T.SkinDropDownBox(WorldMapContinentDropDown)
  16. T.SkinDropDownBox(WorldMapZoneDropDown)
  17. T.SkinButton(WorldMapZoomOutButton)
  18. WorldMapZoomOutButton:Point("LEFT", WorldMapZoneDropDown, "RIGHT", 0, 4)
  19. WorldMapLevelUpButton:Point("TOPLEFT", WorldMapLevelDropDown, "TOPRIGHT", -2, 8)
  20. WorldMapLevelDownButton:Point("BOTTOMLEFT", WorldMapLevelDropDown, "BOTTOMRIGHT", -2, 2)
  21. T.SkinCheckBox(WorldMapTrackQuest)
  22. T.SkinCheckBox(WorldMapQuestShowObjectives)
  23. T.SkinCheckBox(WorldMapShowDigSites)
  24. --Mini
  25. local function SmallSkin()
  26. WorldMapLevelDropDown:ClearAllPoints()
  27. WorldMapLevelDropDown:Point("TOPLEFT", WorldMapDetailFrame, "TOPLEFT", -10, -4)
  28. WorldMapFrame.backdrop:ClearAllPoints()
  29. WorldMapFrame.backdrop:Point("TOPLEFT", 2, 2)
  30. WorldMapFrame.backdrop:Point("BOTTOMRIGHT", 2, -2)
  31. end
  32. --Large
  33. local function LargeSkin()
  34. if not InCombatLockdown() then
  35. WorldMapFrame:SetParent(UIParent)
  36. WorldMapFrame:EnableMouse(false)
  37. WorldMapFrame:EnableKeyboard(false)
  38. SetUIPanelAttribute(WorldMapFrame, "area", "center");
  39. SetUIPanelAttribute(WorldMapFrame, "allowOtherPanels", true)
  40. end
  41. WorldMapFrame.backdrop:ClearAllPoints()
  42. WorldMapFrame.backdrop:Point("TOPLEFT", WorldMapDetailFrame, "TOPLEFT", -25, 70)
  43. WorldMapFrame.backdrop:Point("BOTTOMRIGHT", WorldMapDetailFrame, "BOTTOMRIGHT", 25, -30)
  44. end
  45. local function QuestSkin()
  46. if not InCombatLockdown() then
  47. WorldMapFrame:SetParent(UIParent)
  48. WorldMapFrame:EnableMouse(false)
  49. WorldMapFrame:EnableKeyboard(false)
  50. SetUIPanelAttribute(WorldMapFrame, "area", "center");
  51. SetUIPanelAttribute(WorldMapFrame, "allowOtherPanels", true)
  52. end
  53. WorldMapFrame.backdrop:ClearAllPoints()
  54. WorldMapFrame.backdrop:Point("TOPLEFT", WorldMapDetailFrame, "TOPLEFT", -25, 70)
  55. WorldMapFrame.backdrop:Point("BOTTOMRIGHT", WorldMapDetailFrame, "BOTTOMRIGHT", 325, -235)
  56. if not WorldMapQuestDetailScrollFrame.backdrop then
  57. WorldMapQuestDetailScrollFrame:CreateBackdrop("Transparent")
  58. WorldMapQuestDetailScrollFrame.backdrop:Point("TOPLEFT", -22, 2)
  59. WorldMapQuestDetailScrollFrame.backdrop:Point("BOTTOMRIGHT", 23, -4)
  60. end
  61. if not WorldMapQuestRewardScrollFrame.backdrop then
  62. WorldMapQuestRewardScrollFrame:CreateBackdrop("Transparent")
  63. WorldMapQuestRewardScrollFrame.backdrop:Point("BOTTOMRIGHT", 22, -4)
  64. end
  65. if not WorldMapQuestScrollFrame.backdrop then
  66. WorldMapQuestScrollFrame:CreateBackdrop("Transparent")
  67. WorldMapQuestScrollFrame.backdrop:Point("TOPLEFT", 0, 2)
  68. WorldMapQuestScrollFrame.backdrop:Point("BOTTOMRIGHT", 24, -3)
  69. end
  70. end
  71. local function FixSkin()
  72. WorldMapFrame:StripTextures()
  73. if WORLDMAP_SETTINGS.size == WORLDMAP_FULLMAP_SIZE then
  74. LargeSkin()
  75. elseif WORLDMAP_SETTINGS.size == WORLDMAP_WINDOWED_SIZE then
  76. SmallSkin()
  77. elseif WORLDMAP_SETTINGS.size == WORLDMAP_QUESTLIST_SIZE then
  78. QuestSkin()
  79. end
  80. if not InCombatLockdown() then
  81. WorldMapFrame:SetScale(1)
  82. WorldMapFrameSizeDownButton:Show()
  83. WorldMapFrame:SetFrameLevel(40)
  84. WorldMapFrame:SetFrameStrata("HIGH")
  85. end
  86. WorldMapFrameAreaLabel:SetFont(C["media"].font, 50, "OUTLINE")
  87. WorldMapFrameAreaLabel:SetShadowOffset(2, -2)
  88. WorldMapFrameAreaLabel:SetTextColor(0.90, 0.8294, 0.6407)
  89. WorldMapFrameAreaDescription:SetFont(C["media"].font, 40, "OUTLINE")
  90. WorldMapFrameAreaDescription:SetShadowOffset(2, -2)
  91. WorldMapZoneInfo:SetFont(C["media"].font, 27, "OUTLINE")
  92. WorldMapZoneInfo:SetShadowOffset(2, -2)
  93. end
  94. WorldMapFrame:HookScript("OnShow", FixSkin)
  95. hooksecurefunc("WorldMapFrame_SetFullMapView", LargeSkin)
  96. hooksecurefunc("WorldMapFrame_SetQuestMapView", QuestSkin)
  97. hooksecurefunc("WorldMap_ToggleSizeUp", function()
  98. if WORLDMAP_SETTINGS.size == WORLDMAP_QUESTLIST_SIZE then
  99. Taint = true
  100. end
  101. FixSkin()
  102. end)
  103. WorldMapFrame:RegisterEvent("PLAYER_LOGIN")
  104. WorldMapFrame:RegisterEvent("PLAYER_REGEN_ENABLED") -- fix taint with small map & big map
  105. WorldMapFrame:RegisterEvent("PLAYER_REGEN_DISABLED") -- fix taint with small map & big map
  106. WorldMapFrame:HookScript("OnEvent", function(self, event)
  107. local miniWorldMap = GetCVarBool("miniWorldMap")
  108. local quest = WorldMapQuestShowObjectives:GetChecked()
  109. if event == "PLAYER_LOGIN" then
  110. if not miniWorldMap then
  111. ToggleFrame(WorldMapFrame)
  112. ToggleFrame(WorldMapFrame)
  113. end
  114. elseif event == "PLAYER_REGEN_DISABLED" then
  115. WorldMapFrameSizeDownButton:Disable()
  116. WorldMapFrameSizeUpButton:Disable()
  117. if (quest) and (miniWorldMap or Taint) then
  118. if WorldMapFrame:IsShown() then
  119. HideUIPanel(WorldMapFrame)
  120. end
  121. if not miniWorldMap and Taint and WORLDMAP_SETTINGS.size == WORLDMAP_QUESTLIST_SIZE then
  122. WorldMapFrame_SetFullMapView()
  123. end
  124. WatchFrame.showObjectives = nil
  125. WorldMapTitleButton:Hide()
  126. WorldMapBlobFrame:Hide()
  127. WorldMapPOIFrame:Hide()
  128. WorldMapQuestShowObjectives.Show = T.dummy
  129. WorldMapTitleButton.Show = T.dummy
  130. WorldMapBlobFrame.Show = T.dummy
  131. WorldMapPOIFrame.Show = T.dummy
  132. WatchFrame_Update()
  133. end
  134. WorldMapQuestShowObjectives:Hide()
  135. elseif event == "PLAYER_REGEN_ENABLED" then
  136. WorldMapFrameSizeDownButton:Enable()
  137. WorldMapFrameSizeUpButton:Enable()
  138. if (quest) and (miniWorldMap or Taint) then
  139. WorldMapQuestShowObjectives.Show = WorldMapQuestShowObjectives:Show()
  140. WorldMapTitleButton.Show = WorldMapTitleButton:Show()
  141. WorldMapBlobFrame.Show = WorldMapBlobFrame:Show()
  142. WorldMapPOIFrame.Show = WorldMapPOIFrame:Show()
  143. WorldMapTitleButton:Show()
  144. WatchFrame.showObjectives = true
  145. if not miniWorldMap and Taint and WORLDMAP_SETTINGS.size == WORLDMAP_FULLMAP_SIZE then
  146. WorldMapFrame_SetFullMapView()
  147. end
  148. WorldMapBlobFrame:Show()
  149. WorldMapPOIFrame:Show()
  150. WatchFrame_Update()
  151. if Taint and not miniWorldMap and WorldMapFrame:IsShown() and WORLDMAP_SETTINGS.size == WORLDMAP_FULLMAP_SIZE then
  152. HideUIPanel(WorldMapFrame)
  153. ShowUIPanel(WorldMapFrame)
  154. end
  155. end
  156. WorldMapQuestShowObjectives:Show()
  157. end
  158. end)
  159. local coords = CreateFrame("Frame", "CoordsFrame", WorldMapFrame)
  160. local fontheight = select(2, WorldMapQuestShowObjectivesText:GetFont())*1.1
  161. coords:SetFrameLevel(90)
  162. coords:FontString("PlayerText", C["media"].font, fontheight, "THINOUTLINE")
  163. coords:FontString("MouseText", C["media"].font, fontheight, "THINOUTLINE")
  164. coords.PlayerText:SetTextColor(WorldMapQuestShowObjectivesText:GetTextColor())
  165. coords.MouseText:SetTextColor(WorldMapQuestShowObjectivesText:GetTextColor())
  166. coords.PlayerText:SetPoint("BOTTOMLEFT", WorldMapDetailFrame, "BOTTOMLEFT", 5, 5)
  167. coords.PlayerText:SetText("Player: 0, 0")
  168. coords.MouseText:SetPoint("BOTTOMLEFT", coords.PlayerText, "TOPLEFT", 0, 5)
  169. coords.MouseText:SetText("Mouse: 0, 0")
  170. local int = 0
  171. WorldMapFrame:HookScript("OnUpdate", function(self, elapsed)
  172. if WORLDMAP_SETTINGS.size == WORLDMAP_FULLMAP_SIZE then
  173. WorldMapFrameSizeUpButton:Hide()
  174. WorldMapFrameSizeDownButton:Show()
  175. elseif WORLDMAP_SETTINGS.size == WORLDMAP_WINDOWED_SIZE then
  176. WorldMapFrameSizeUpButton:Show()
  177. WorldMapFrameSizeDownButton:Hide()
  178. elseif WORLDMAP_SETTINGS.size == WORLDMAP_QUESTLIST_SIZE then
  179. WorldMapFrameSizeUpButton:Hide()
  180. WorldMapFrameSizeDownButton:Show()
  181. end
  182. int = int + 1
  183. if int >= 3 then
  184. local inInstance, _ = IsInInstance()
  185. local x,y = GetPlayerMapPosition("player")
  186. x = math.floor(100 * x)
  187. y = math.floor(100 * y)
  188. if x ~= 0 and y ~= 0 then
  189. coords.PlayerText:SetText(PLAYER..": "..x..", "..y)
  190. else
  191. coords.PlayerText:SetText(" ")
  192. end
  193. local scale = WorldMapDetailFrame:GetEffectiveScale()
  194. local width = WorldMapDetailFrame:GetWidth()
  195. local height = WorldMapDetailFrame:GetHeight()
  196. local centerX, centerY = WorldMapDetailFrame:GetCenter()
  197. local x, y = GetCursorPosition()
  198. local adjustedX = (x / scale - (centerX - (width/2))) / width
  199. local adjustedY = (centerY + (height/2) - y / scale) / height
  200. if (adjustedX >= 0 and adjustedY >= 0 and adjustedX <= 1 and adjustedY <= 1) then
  201. adjustedX = math.floor(100 * adjustedX)
  202. adjustedY = math.floor(100 * adjustedY)
  203. coords.MouseText:SetText(MOUSE_LABEL..": "..adjustedX..", "..adjustedY)
  204. else
  205. coords.MouseText:SetText(" ")
  206. end
  207. int = 0
  208. end
  209. end)
  210. -- dropdown on full map is scaled incorrectly
  211. WorldMapContinentDropDownButton:HookScript("OnClick", function() DropDownList1:SetScale(C.general.uiscale) end)
  212. WorldMapZoneDropDownButton:HookScript("OnClick", function(self)
  213. DropDownList1:SetScale(C.general.uiscale)
  214. DropDownList1:ClearAllPoints()
  215. DropDownList1:Point("TOPRIGHT", self, "BOTTOMRIGHT", 2, -4)
  216. end)
  217. end
  218. tinsert(T.SkinFuncs["Tukui"], LoadSkin)