annotate Bloodhound2.lua @ 6:ee1d6e6a4c52 Release

Added in a function to fix the ghost rubies/arrows when in Shrine of Seven Stars
author only1yzerman
date Thu, 30 May 2013 07:07:05 -0400
parents a10b7ef54e09
children 8e81e24efb3f
rev   line source
only1yzerman@0 1
only1yzerman@0 2 -------- SINGLE OBJECT IN GLOBAL NAMESPACE
only1yzerman@0 3
only1yzerman@0 4 Bloodhound2 = {};
only1yzerman@0 5
only1yzerman@0 6
only1yzerman@0 7 -------- CREATE OUR INVISIBLE FRAME TO RECEIVE EVENTS AND UPDATES
only1yzerman@0 8
only1yzerman@0 9 local frame = CreateFrame("Frame", nil, UIParent);
only1yzerman@0 10 Bloodhound2.Frame = frame;
only1yzerman@0 11
only1yzerman@0 12
only1yzerman@0 13 -------- DEFINE AND REGISTER EVENT HANDLERS
only1yzerman@0 14
only1yzerman@0 15 local events = {};
only1yzerman@0 16
only1yzerman@0 17 function events:MINIMAP_UPDATE_TRACKING(...)
only1yzerman@0 18 if player and player.Z then
only1yzerman@0 19 Bloodhound2.UpdateMinimap();
only1yzerman@0 20 end
only1yzerman@0 21 end
only1yzerman@0 22
only1yzerman@0 23 frame:SetScript("OnEvent",
only1yzerman@0 24 function(self, event, ...)
only1yzerman@0 25 events[event](self, ...);
only1yzerman@0 26 end);
only1yzerman@0 27
only1yzerman@0 28 local k, v;
only1yzerman@0 29
only1yzerman@0 30 for k, v in pairs(events) do
only1yzerman@0 31 frame:RegisterEvent(k);
only1yzerman@0 32 end
only1yzerman@0 33
only1yzerman@0 34
only1yzerman@0 35
only1yzerman@0 36
only1yzerman@0 37
only1yzerman@0 38
only1yzerman@0 39 ----------------------------------------------------------------------------------------------------
only1yzerman@0 40 -------- STORES A POINTER TO THE MINIMAP LOCALLY SO IT CAN BE CHANGED BY A RE-PARENTING FUNCTION
only1yzerman@0 41 -------- - Added by Zasurus(www.curseforge.com/profiles/Zasurus/) for MiniHugeHUD
only1yzerman@0 42 ----------------------------------------------------------------------------------------------------
only1yzerman@0 43 local Minimap = _G.Minimap;
only1yzerman@0 44 Minimap.MinimapName = "Minimap";
only1yzerman@0 45 ----------------------------------------------------------------------------------------------------
only1yzerman@0 46
only1yzerman@0 47
only1yzerman@0 48
only1yzerman@0 49
only1yzerman@0 50
only1yzerman@0 51
only1yzerman@0 52 -------- WORK AROUND WOW BUG THAT CAUSES GetPlayerMapPosition TO RETURN 0,0
only1yzerman@0 53
only1yzerman@0 54 WorldMapFrame:Show()
only1yzerman@0 55 WorldMapFrame:Hide()
only1yzerman@0 56
only1yzerman@0 57
only1yzerman@0 58 -------- HOOK INTO PER-FRAME UPDATE HANDLER
only1yzerman@0 59
only1yzerman@0 60 local player = {}; -- player position
only1yzerman@0 61 local totalElapsed = 0.0; -- time elapsed since last update
only1yzerman@0 62 local updatePeriod = 0.1; -- sec. interval for each minimap update
only1yzerman@0 63 local cpuThrottle = 0.05; -- throttle to 5% usage while moving
only1yzerman@0 64 local minUpdatePeriod = 0.04; -- sec. don't update more often than this
only1yzerman@0 65 local lastzoom = 0; -- previous minimap zoom level
only1yzerman@0 66 local updateTotalTime = 0; -- time spent updating minimap
only1yzerman@0 67 local updateCount = 0; -- number of times minimap updated
only1yzerman@0 68
only1yzerman@0 69 ----------------------------------------------------------------------------------------------------
only1yzerman@0 70 -------- MOVED OnUpdate Script into seperate function so it could be called by re-parent function
only1yzerman@0 71 -------- - Added by Zasurus(www.curseforge.com/profiles/Zasurus/) for MiniHugeHUD
only1yzerman@0 72 ----------------------------------------------------------------------------------------------------
only1yzerman@0 73 frame:SetScript("OnUpdate", function(self, elapsed) Bloodhound2.OnUpdateScript(self, elapsed) end);
only1yzerman@0 74 function Bloodhound2.OnUpdateScript(self, elapsed)
only1yzerman@0 75 totalElapsed = totalElapsed + elapsed; -- measure total elapsed time
only1yzerman@0 76
only1yzerman@0 77 if (totalElapsed >= updatePeriod) then -- if enough time has passed
only1yzerman@0 78 totalElapsed = mod(totalElapsed, updatePeriod);
only1yzerman@0 79 local isInInstance, instanceType = IsInInstance()
only1yzerman@0 80
only1yzerman@0 81 if isInInstance ~= nil then
only1yzerman@0 82 Bloodhound2.DrawArrow(0, 0, 0, 0)
only1yzerman@0 83 return
only1yzerman@0 84 end
only1yzerman@0 85
only1yzerman@0 86 local cmap = GetCurrentMapContinent();
only1yzerman@0 87 local zmap = GetCurrentMapZone();
only1yzerman@0 88 SetMapToCurrentZone();
only1yzerman@0 89 local c = GetCurrentMapContinent(); -- get current player position
only1yzerman@0 90 local z = GetCurrentMapZone();
only1yzerman@0 91 local x, y = GetPlayerMapPosition("player");
only1yzerman@0 92 local f = GetPlayerFacing();
only1yzerman@0 93 local m = Minimap:GetZoom();
only1yzerman@6 94 local ztxt = GetZoneText();
only1yzerman@6 95 local zstxt = GetSubZoneText();
only1yzerman@6 96 local badzones = { "","The Star's Bazaar", "The Emperor's Step", "The Golden Lantern", "Chamber of Reflection", "The Imperial Exchange", "Path of Serenity", "Ethereal Corridor", "The Celestial Vault", "Chamber of Enlightenment" }
only1yzerman@0 97 SetMapZoom(cmap, zmap);
only1yzerman@6 98
only1yzerman@5 99 if (c ~= player.C and c ~= 0 and c ~= -1) then -- reload continent data if continent has changed
only1yzerman@0 100 Bloodhound2.HerbNodes, Bloodhound2.ContinentHerbs = Bloodhound2.ReloadNodes(Bloodhound2.HerbDatabase[c], Bloodhound2.ZoneDatum[c]);
only1yzerman@0 101 Bloodhound2.OreNodes, Bloodhound2.ContinentOre = Bloodhound2.ReloadNodes(Bloodhound2.OreDatabase[c], Bloodhound2.ZoneDatum[c]);
only1yzerman@2 102 Bloodhound2.MiscNodes, Bloodhound2.ContinentNode = Bloodhound2.ReloadNodes(Bloodhound2.MiscDatabase[c], Bloodhound2.ZoneDatum[c]);
only1yzerman@0 103 end
only1yzerman@6 104
only1yzerman@0 105
only1yzerman@0 106 if (c ~= player.C or z ~= player.Z or x ~= player.X or y ~= player.Y or f ~= player.F or m ~= lastzoom) then
only1yzerman@0 107 player.C = c;
only1yzerman@0 108 player.Z = z;
only1yzerman@0 109 player.X = x;
only1yzerman@0 110 player.Y = y;
only1yzerman@0 111 player.F = f;
only1yzerman@0 112 lastzoom = m;
only1yzerman@0 113 local t0 = GetTime();
only1yzerman@0 114 Bloodhound2.UpdateMinimap(); -- player has moved or minimap scale has changed
only1yzerman@0 115 local t1 = GetTime() - t0;
only1yzerman@0 116
only1yzerman@0 117 -- calculate and throttle CPU usage to 5%
only1yzerman@0 118 updateTotalTime = updateTotalTime + t1
only1yzerman@0 119
only1yzerman@0 120 if updateCount > 10 then
only1yzerman@0 121 local avgTime = updateTotalTime / updateCount
only1yzerman@0 122 updatePeriod = avgTime / cpuThrottle
only1yzerman@0 123 Print(updateCount);
only1yzerman@0 124
only1yzerman@0 125 if updatePeriod < minUpdatePeriod then
only1yzerman@0 126 updatePeriod = minUpdatePeriod
only1yzerman@0 127 end
only1yzerman@0 128
only1yzerman@0 129 if updateCount >= 100 then
only1yzerman@0 130 updateTotalTime = updateTotalTime / 2
only1yzerman@0 131 updateCount = updateCount / 2
only1yzerman@0 132 end
only1yzerman@0 133 end
only1yzerman@0 134 end
only1yzerman@0 135 end
only1yzerman@0 136 end
only1yzerman@6 137 function Bloodhound2.BadZone(ztxt, zstxt, badzones)
only1yzerman@6 138 for tbl, value in pairs(badzones) do
only1yzerman@6 139 if (ztxt == "Shrine of Seven Stars" or zstxt == value) then return false
only1yzerman@6 140 end
only1yzerman@6 141 end
only1yzerman@6 142 return true
only1yzerman@6 143 end
only1yzerman@0 144
only1yzerman@0 145 function Bloodhound2.UpdateMinimap()
only1yzerman@0 146 local facing = 0
only1yzerman@0 147
only1yzerman@0 148 if GetCVar("rotateMinimap") ~= "0" then
only1yzerman@0 149 facing = GetPlayerFacing() * 57.2957795;
only1yzerman@0 150 end
only1yzerman@0 151
only1yzerman@0 152 local cf = cos(facing);
only1yzerman@0 153 local sf = sin(facing);
only1yzerman@0 154 local gx, gy = Bloodhound2.CalculateForce(cf, sf);
only1yzerman@0 155 Bloodhound2.DrawArrow(gx, gy, cf, sf);
only1yzerman@0 156 end
only1yzerman@0 157
only1yzerman@0 158
only1yzerman@0 159 -------- DATABASE LOADING
only1yzerman@0 160
only1yzerman@0 161 Bloodhound2.HerbNodes = {};
only1yzerman@0 162 Bloodhound2.OreNodes = {};
only1yzerman@2 163 Bloodhound2.MiscNodes = {};
only1yzerman@0 164 Bloodhound2.ContinentHerbs = {};
only1yzerman@0 165 Bloodhound2.ContinentOre = {};
only1yzerman@0 166
only1yzerman@0 167 function Bloodhound2.ReloadNodes(database, zoneDatum)
only1yzerman@0 168
only1yzerman@0 169 if (database == nil) then return {}; end
only1yzerman@0 170
only1yzerman@0 171 local nodes = {};
only1yzerman@0 172 local db = {};
only1yzerman@0 173
only1yzerman@0 174 local zoneNode, positions;
only1yzerman@0 175 for zoneNode, positions in pairs(database) do
only1yzerman@0 176 local _, _, zone, node = string.find(zoneNode, "Z(%d+)N(%d+)");
only1yzerman@0 177 local z = tonumber(zone);
only1yzerman@0 178 local datum = zoneDatum[z];
only1yzerman@0 179 local n = tonumber(node);
only1yzerman@0 180 db[n] = true;
only1yzerman@0 181 local pxy = 0
only1yzerman@0 182
only1yzerman@0 183 for _,pos in ipairs(positions) do
only1yzerman@0 184 local xy = pos + pxy
only1yzerman@0 185 pxy = xy
only1yzerman@0 186 local x = floor(xy / 1000);
only1yzerman@0 187 local y = xy - 1000 * x;
only1yzerman@0 188 x, y = Bloodhound2.ZoneDatum.LocalToGlobal(x / 1000.0, y / 1000.0, datum);
only1yzerman@0 189 tinsert(nodes, {Z = z, N = n, X = x, Y = y, TimeStamp = time() - 60 - 3600 * math.random() });
only1yzerman@0 190 end
only1yzerman@0 191 end
only1yzerman@0 192
only1yzerman@0 193 return nodes, db;
only1yzerman@0 194 end
only1yzerman@0 195
only1yzerman@0 196
only1yzerman@0 197 -------- UTILITY FUNCTIONS
only1yzerman@0 198
only1yzerman@0 199 function Print(message)
only1yzerman@0 200 DEFAULT_CHAT_FRAME:AddMessage(message);
only1yzerman@0 201 end
only1yzerman@0 202
only1yzerman@0 203
only1yzerman@0 204
only1yzerman@0 205 -------- ARROW LOADING AND DISPLAY
only1yzerman@0 206
only1yzerman@0 207 local function GetArrowTexture()
only1yzerman@0 208
only1yzerman@0 209 local tex = Bloodhound2.GravityTexture
only1yzerman@0 210
only1yzerman@0 211 if not ( tex ) then
only1yzerman@1 212 tex = Minimap:CreateTexture("Bloodhound2_Arrow", "OVERLAY");
only1yzerman@0 213 tex:SetTexture("Interface\\AddOns\\Bloodhound2\\MinimapArrow");
only1yzerman@0 214 Bloodhound2.GravityTexture = tex
only1yzerman@0 215 end
only1yzerman@0 216
only1yzerman@0 217 return tex
only1yzerman@0 218 end
only1yzerman@0 219
only1yzerman@0 220 function Bloodhound2.DrawArrow(grx, gry, cf, sf)
only1yzerman@0 221
only1yzerman@0 222 local gravityX = grx * cf - gry * sf;
only1yzerman@0 223 local gravityY = gry * cf + grx * sf;
only1yzerman@0 224 local gravityTexture = GetArrowTexture()
only1yzerman@0 225
only1yzerman@0 226 if (gravityX == 0 and gravityY == 0) then
only1yzerman@0 227 gravityTexture:Hide();
only1yzerman@0 228 return;
only1yzerman@0 229 end
only1yzerman@0 230
only1yzerman@0 231 local gravityScale = sqrt(gravityX * gravityX + gravityY * gravityY)
only1yzerman@0 232 gravityX = gravityX / gravityScale
only1yzerman@0 233 gravityY = gravityY / gravityScale
only1yzerman@0 234
only1yzerman@0 235 -- determine rotated and scaled texture coordinates
only1yzerman@0 236 local gy = (gravityX + gravityY) / 2.82843
only1yzerman@0 237 local gx = (gravityX - gravityY) / 2.82843
only1yzerman@0 238
only1yzerman@0 239 gravityTexture:SetTexCoord(
only1yzerman@0 240 0.5 - gx, 0.5 + gy,
only1yzerman@0 241 0.5 + gy, 0.5 + gx,
only1yzerman@0 242 0.5 - gy, 0.5 - gx,
only1yzerman@0 243 0.5 + gx, 0.5 - gy);
only1yzerman@0 244
only1yzerman@0 245 gravityTexture:SetPoint("CENTER", Minimap, "CENTER", 40 * gravityX, -40 * gravityY)
only1yzerman@0 246 gravityTexture:Show()
only1yzerman@0 247 end
only1yzerman@0 248
only1yzerman@0 249
only1yzerman@0 250 -------- "RUBY" MANAGEMENT (REUSE RUBIES AND ONLY CREATE NEW ONES WHEN NEEDED)
only1yzerman@0 251
only1yzerman@0 252 local circles = {};
only1yzerman@0 253 local nextCircle = 1;
only1yzerman@0 254 local circleScale = 1;
only1yzerman@0 255
only1yzerman@0 256 function Bloodhound2.ResetCircles()
only1yzerman@0 257 nextCircle = 1;
only1yzerman@0 258 circleScale = Minimap:GetHeight() * 0.015 / (7 - Minimap:GetZoom());
only1yzerman@0 259 end
only1yzerman@0 260
only1yzerman@0 261 function Bloodhound2.SetCircle(dx, dy, alpha)
only1yzerman@0 262 local circle;
only1yzerman@0 263 if (#circles < nextCircle) then
only1yzerman@1 264 circle = Minimap:CreateTexture("Bloodhound_Circle", "ARTWORK", nil, -7);
only1yzerman@0 265 circles[nextCircle] = circle;
only1yzerman@0 266 circle:SetTexture("Interface\\AddOns\\Bloodhound2\\Circle");
only1yzerman@0 267 circle:SetWidth(12);
only1yzerman@0 268 circle:SetHeight(12);
only1yzerman@0 269 circle:SetAlpha(1);
only1yzerman@0 270 else
only1yzerman@0 271 circle = circles[nextCircle];
only1yzerman@0 272 end
only1yzerman@0 273
only1yzerman@0 274 nextCircle = nextCircle + 1;
only1yzerman@0 275 circle:SetPoint("CENTER", Minimap, "CENTER", dx * circleScale, -dy * circleScale);
only1yzerman@0 276 circle:SetAlpha(alpha);
only1yzerman@0 277 circle:Show();
only1yzerman@0 278 end
only1yzerman@0 279
only1yzerman@0 280 function Bloodhound2.HideExtraCircles()
only1yzerman@0 281 for i=nextCircle,#circles,1 do
only1yzerman@0 282 circles[i]:Hide();
only1yzerman@0 283 end
only1yzerman@0 284 end
only1yzerman@0 285
only1yzerman@0 286
only1yzerman@0 287
only1yzerman@0 288 -------- MAIN FUNCTION FOR CALCULATING RECOMMENDED DIRECTION OF TRAVEL
only1yzerman@0 289
only1yzerman@0 290 function Bloodhound2.CalculateForce(cf, sf)
only1yzerman@0 291
only1yzerman@0 292 local c = player.C; -- get player position
only1yzerman@0 293 local z = player.Z;
only1yzerman@0 294 local x = player.X;
only1yzerman@0 295 local y = player.Y;
only1yzerman@6 296 local ztxt = GetZoneText();
only1yzerman@6 297 local zstxt = GetSubZoneText();
only1yzerman@6 298 local badzones = { "The Star's Bazaar", "The Emperor's Step", "The Golden Lantern", "Chamber of Reflection", "The Imperial Exchange", "Path of Serenity", "Ethereal Corridor", "The Celestial Vault", "Chamber of Enlightenment" }
only1yzerman@6 299
only1yzerman@6 300 if (Bloodhound2.BadZone(ztxt, zstxt, badzones) == false) then return 0,0 end -- don't draw the arrow when inside Shrine of Seven Stars
only1yzerman@5 301 if c == 0 or z == 0 or c == -1 then return 0,0 end -- don't draw arrow if using world coordinates
only1yzerman@0 302 if not Bloodhound2.ZoneDatum then return 0,0 end
only1yzerman@0 303
only1yzerman@0 304 local datum = Bloodhound2.ZoneDatum[c][z]; -- get scale and offset for current zone map
only1yzerman@0 305 if datum == nil then return 0,0 end
only1yzerman@0 306
only1yzerman@0 307 local gx, gy = Bloodhound2.ZoneDatum.LocalToGlobal(x, y, datum); -- convert player position to world coordinates
only1yzerman@0 308 local now = time(); -- value to use for time-stamping visited nodes
only1yzerman@0 309 local fx = 0; -- cumulative force, X-component
only1yzerman@0 310 local fy = 0; -- cumulative force, Y-component
only1yzerman@0 311 local multiZone = true; -- whether to include more than the current zone
only1yzerman@0 312 local inspectionRadius = 60;
only1yzerman@0 313
only1yzerman@0 314 if Settings then
only1yzerman@0 315 if Settings.MultiZoneMode==0 then
only1yzerman@0 316 multiZone = IsFlying();
only1yzerman@0 317 elseif Settings.MultiZoneMode==1 then
only1yzerman@0 318 multiZone = true;
only1yzerman@0 319 else
only1yzerman@0 320 multiZone = false;
only1yzerman@0 321 end
only1yzerman@0 322
only1yzerman@0 323 if Settings.InspectionRadius then
only1yzerman@0 324 inspectionRadius = Settings.InspectionRadius;
only1yzerman@0 325 end
only1yzerman@0 326 end
only1yzerman@0 327
only1yzerman@0 328 local settingsFilter = {}; -- which node types to ignore
only1yzerman@0 329 local nodes = {}; -- which nodes to track
only1yzerman@0 330
only1yzerman@0 331 for i=1,GetNumTrackingTypes(),1 do
only1yzerman@0 332 local name, _, active, _ = GetTrackingInfo(i);
only1yzerman@0 333 if (active == 1) then
only1yzerman@0 334 if (name == L["Find Herbs"]) then
only1yzerman@0 335 for k,v in pairs(Settings.HerbFilter) do settingsFilter[k] = v end
only1yzerman@0 336 for k,v in pairs(Bloodhound2.HerbNodes) do tinsert(nodes, v) end
only1yzerman@2 337 if (IsQuestFlaggedCompleted(32609) ~= 1) then
only1yzerman@2 338 for k,v in pairs(Bloodhound2.MiscNodes) do tinsert(nodes, v) end
only1yzerman@2 339 end
only1yzerman@0 340 elseif (name == L["Find Minerals"]) then
only1yzerman@0 341 for k,v in pairs(Settings.OreFilter) do settingsFilter[k] = v end
only1yzerman@0 342 for k,v in pairs(Bloodhound2.OreNodes) do tinsert(nodes, v) end
only1yzerman@2 343 if (IsQuestFlaggedCompleted(32609) ~= 1) then
only1yzerman@2 344 for k,v in pairs(Bloodhound2.MiscNodes) do tinsert(nodes, v) end
only1yzerman@2 345 end
only1yzerman@0 346 end
only1yzerman@0 347 end
only1yzerman@0 348 end
only1yzerman@0 349
only1yzerman@0 350 local avoidZones = {}; -- which zones to avoid
only1yzerman@0 351
only1yzerman@0 352 if multiZone then
only1yzerman@0 353 local cmc = GetCurrentMapContinent()
only1yzerman@0 354
only1yzerman@0 355 if not Settings.ZoneFilter[cmc] then
only1yzerman@0 356 Settings.ZoneFilter[cmc] = {}
only1yzerman@0 357 end
only1yzerman@0 358
only1yzerman@0 359 for k,v in pairs(Settings.ZoneFilter[GetCurrentMapContinent()]) do
only1yzerman@0 360 avoidZones[k] = true;
only1yzerman@0 361 end
only1yzerman@0 362 end
only1yzerman@0 363
only1yzerman@0 364 local avoidNodes = {}; -- which node types to ignore
only1yzerman@0 365
only1yzerman@0 366 if settingsFilter then
only1yzerman@0 367 for k,v in pairs(settingsFilter) do
only1yzerman@0 368 avoidNodes[k] = true;
only1yzerman@0 369 end
only1yzerman@0 370 end
only1yzerman@0 371
only1yzerman@0 372 local minimapSize = Minimap:GetWidth() / 2 - 2;
only1yzerman@0 373 Bloodhound2.ResetCircles();
only1yzerman@0 374
only1yzerman@0 375 for key, node in pairs(nodes) do
only1yzerman@0 376 if (avoidNodes[node.N] ~= true) and (avoidZones[node.Z] ~= true) and (multiZone or (node.Z == z)) then
only1yzerman@0 377 local dx = node.X - gx;
only1yzerman@0 378 local dy = node.Y - gy;
only1yzerman@0 379 local rsqrd = dx * dx + dy * dy;
only1yzerman@0 380 local r = sqrt(rsqrd); -- distance to node
only1yzerman@0 381 local age = now - node.TimeStamp; -- time since last inspected
only1yzerman@0 382
only1yzerman@0 383 if (r < inspectionRadius) then
only1yzerman@0 384 node.TimeStamp = now;
only1yzerman@0 385 else
only1yzerman@0 386 --[[
only1yzerman@0 387 The magnitude of the force is proportional to the age and inversely
only1yzerman@0 388 proportional to the square of the distance, and the direction is towards
only1yzerman@0 389 the node. The math for this starts out as
only1yzerman@0 390
only1yzerman@0 391 local force = age / rsqrd
only1yzerman@0 392 local angle = math.atan2(dy, dx)
only1yzerman@0 393 fx = fx + force * math.cos(angle)
only1yzerman@0 394 fy = fy + force * math.sin(angle)
only1yzerman@0 395
only1yzerman@0 396 But cos(angle) is just dx/r and sin(angle) is just dy/r, so we don't
only1yzerman@0 397 actually need atan2, cos, and sin and instead we can write this as
only1yzerman@0 398 ]]
only1yzerman@0 399 local force = age / (r * rsqrd)
only1yzerman@0 400 fx = fx + force * dx
only1yzerman@0 401 fy = fy + force * dy
only1yzerman@0 402 end
only1yzerman@0 403
only1yzerman@0 404 if (r * circleScale < minimapSize) and (age > 60) then -- draw ruby
only1yzerman@0 405 local alpha = r / (minimapSize / circleScale) / 0.7 - 0.3;
only1yzerman@0 406 alpha = max(0, alpha);
only1yzerman@0 407 Bloodhound2.SetCircle(dx * cf - dy * sf, dy * cf + dx * sf, alpha);
only1yzerman@0 408 end
only1yzerman@0 409 end
only1yzerman@0 410 end
only1yzerman@0 411
only1yzerman@0 412 Bloodhound2.HideExtraCircles();
only1yzerman@0 413 return fx, fy;
only1yzerman@0 414 end
only1yzerman@0 415
only1yzerman@0 416
only1yzerman@0 417
only1yzerman@0 418
only1yzerman@0 419
only1yzerman@0 420
only1yzerman@0 421
only1yzerman@0 422 ----------------------------------------------------------------------------------------------------
only1yzerman@0 423 -------- REPARENT THE MINIMAP FOR 3RD PARTY MINIMAPS AND HUDS
only1yzerman@0 424 -------- - Added by Zasurus(www.curseforge.com/profiles/Zasurus/) for MiniHugeHUD
only1yzerman@0 425 ----------------------------------------------------------------------------------------------------
only1yzerman@0 426 function Bloodhound2.ReparentMinimap(NewMinimap, MinimapName)
only1yzerman@0 427 Bloodhound2.OnUpdateScript(nil, 1000000)
only1yzerman@0 428 -- Hide the circles currently on the minimap
only1yzerman@0 429 Bloodhound2.ResetCircles();
only1yzerman@0 430 Bloodhound2.HideExtraCircles();
only1yzerman@0 431 -- Hide this minimap's copy of the arrow
only1yzerman@0 432 if Bloodhound2.GravityTexture then
only1yzerman@0 433 Bloodhound2.GravityTexture:Hide();
only1yzerman@0 434 end;
only1yzerman@0 435 -- Store the current set of circles and arrow on this minimap for later
only1yzerman@0 436 Minimap.Bloodhound2Circles = circles;
only1yzerman@0 437 Minimap.Bloodhound2Arrow = Bloodhound2.GravityTexture;
only1yzerman@0 438 -- Pull back (or create for circles) the arrow and circles for this minimap
only1yzerman@0 439 circles = NewMinimap.Bloodhound2Circles or {};
only1yzerman@0 440 ZasCircles = circles;
only1yzerman@0 441 Bloodhound2.GravityTexture = NewMinimap.Bloodhound2Arrow;
only1yzerman@0 442 -- Move Bloodhound2's Local Minimap pointer to the new minimap
only1yzerman@0 443 Minimap = NewMinimap;
only1yzerman@0 444 Minimap.MinimapName = MinimapName;
only1yzerman@0 445 -- Update all points
only1yzerman@0 446 Bloodhound2.UpdateMinimap();
only1yzerman@0 447 end
only1yzerman@0 448 ----------------------------------------------------------------------------------------------------