annotate Bloodhound2.lua @ 2:91131c35a2c3

Added the ability for Trove of the Thunderking to be tracked while on Isle of Thunder. Config options have not been tested and these nodes will only show up if you haven't looted a trove this week and should disappear as soon as you do loot a trove.
author only1yzerman
date Fri, 10 May 2013 20:56:25 -0400
parents 6ab5b23877a6
children a10b7ef54e09
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@0 94 SetMapZoom(cmap, zmap);
only1yzerman@0 95
only1yzerman@0 96 if (c ~= player.C and c ~= 0) then -- reload continent data if continent has changed
only1yzerman@0 97 Bloodhound2.HerbNodes, Bloodhound2.ContinentHerbs = Bloodhound2.ReloadNodes(Bloodhound2.HerbDatabase[c], Bloodhound2.ZoneDatum[c]);
only1yzerman@0 98 Bloodhound2.OreNodes, Bloodhound2.ContinentOre = Bloodhound2.ReloadNodes(Bloodhound2.OreDatabase[c], Bloodhound2.ZoneDatum[c]);
only1yzerman@2 99 Bloodhound2.MiscNodes, Bloodhound2.ContinentNode = Bloodhound2.ReloadNodes(Bloodhound2.MiscDatabase[c], Bloodhound2.ZoneDatum[c]);
only1yzerman@0 100 end
only1yzerman@0 101
only1yzerman@0 102 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 103 player.C = c;
only1yzerman@0 104 player.Z = z;
only1yzerman@0 105 player.X = x;
only1yzerman@0 106 player.Y = y;
only1yzerman@0 107 player.F = f;
only1yzerman@0 108 lastzoom = m;
only1yzerman@0 109 local t0 = GetTime();
only1yzerman@0 110 Bloodhound2.UpdateMinimap(); -- player has moved or minimap scale has changed
only1yzerman@0 111 local t1 = GetTime() - t0;
only1yzerman@0 112
only1yzerman@0 113 -- calculate and throttle CPU usage to 5%
only1yzerman@0 114 updateTotalTime = updateTotalTime + t1
only1yzerman@0 115
only1yzerman@0 116 if updateCount > 10 then
only1yzerman@0 117 local avgTime = updateTotalTime / updateCount
only1yzerman@0 118 updatePeriod = avgTime / cpuThrottle
only1yzerman@0 119 Print(updateCount);
only1yzerman@0 120
only1yzerman@0 121 if updatePeriod < minUpdatePeriod then
only1yzerman@0 122 updatePeriod = minUpdatePeriod
only1yzerman@0 123 end
only1yzerman@0 124
only1yzerman@0 125 if updateCount >= 100 then
only1yzerman@0 126 updateTotalTime = updateTotalTime / 2
only1yzerman@0 127 updateCount = updateCount / 2
only1yzerman@0 128 end
only1yzerman@0 129 end
only1yzerman@0 130 end
only1yzerman@0 131 end
only1yzerman@0 132 end
only1yzerman@0 133
only1yzerman@0 134 function Bloodhound2.UpdateMinimap()
only1yzerman@0 135 local facing = 0
only1yzerman@0 136
only1yzerman@0 137 if GetCVar("rotateMinimap") ~= "0" then
only1yzerman@0 138 facing = GetPlayerFacing() * 57.2957795;
only1yzerman@0 139 end
only1yzerman@0 140
only1yzerman@0 141 local cf = cos(facing);
only1yzerman@0 142 local sf = sin(facing);
only1yzerman@0 143 local gx, gy = Bloodhound2.CalculateForce(cf, sf);
only1yzerman@0 144 Bloodhound2.DrawArrow(gx, gy, cf, sf);
only1yzerman@0 145 end
only1yzerman@0 146
only1yzerman@0 147
only1yzerman@0 148 -------- DATABASE LOADING
only1yzerman@0 149
only1yzerman@0 150 Bloodhound2.HerbNodes = {};
only1yzerman@0 151 Bloodhound2.OreNodes = {};
only1yzerman@2 152 Bloodhound2.MiscNodes = {};
only1yzerman@0 153 Bloodhound2.ContinentHerbs = {};
only1yzerman@0 154 Bloodhound2.ContinentOre = {};
only1yzerman@0 155
only1yzerman@0 156 function Bloodhound2.ReloadNodes(database, zoneDatum)
only1yzerman@0 157
only1yzerman@0 158 if (database == nil) then return {}; end
only1yzerman@0 159
only1yzerman@0 160 local nodes = {};
only1yzerman@0 161 local db = {};
only1yzerman@0 162
only1yzerman@0 163 local zoneNode, positions;
only1yzerman@0 164 for zoneNode, positions in pairs(database) do
only1yzerman@0 165 local _, _, zone, node = string.find(zoneNode, "Z(%d+)N(%d+)");
only1yzerman@0 166 local z = tonumber(zone);
only1yzerman@0 167 local datum = zoneDatum[z];
only1yzerman@0 168 local n = tonumber(node);
only1yzerman@0 169 db[n] = true;
only1yzerman@0 170 local pxy = 0
only1yzerman@0 171
only1yzerman@0 172 for _,pos in ipairs(positions) do
only1yzerman@0 173 local xy = pos + pxy
only1yzerman@0 174 pxy = xy
only1yzerman@0 175 local x = floor(xy / 1000);
only1yzerman@0 176 local y = xy - 1000 * x;
only1yzerman@0 177 x, y = Bloodhound2.ZoneDatum.LocalToGlobal(x / 1000.0, y / 1000.0, datum);
only1yzerman@0 178 tinsert(nodes, {Z = z, N = n, X = x, Y = y, TimeStamp = time() - 60 - 3600 * math.random() });
only1yzerman@0 179 end
only1yzerman@0 180 end
only1yzerman@0 181
only1yzerman@0 182 return nodes, db;
only1yzerman@0 183 end
only1yzerman@0 184
only1yzerman@0 185
only1yzerman@0 186 -------- UTILITY FUNCTIONS
only1yzerman@0 187
only1yzerman@0 188 function Print(message)
only1yzerman@0 189 DEFAULT_CHAT_FRAME:AddMessage(message);
only1yzerman@0 190 end
only1yzerman@0 191
only1yzerman@0 192
only1yzerman@0 193
only1yzerman@0 194 -------- ARROW LOADING AND DISPLAY
only1yzerman@0 195
only1yzerman@0 196 local function GetArrowTexture()
only1yzerman@0 197
only1yzerman@0 198 local tex = Bloodhound2.GravityTexture
only1yzerman@0 199
only1yzerman@0 200 if not ( tex ) then
only1yzerman@1 201 tex = Minimap:CreateTexture("Bloodhound2_Arrow", "OVERLAY");
only1yzerman@0 202 tex:SetTexture("Interface\\AddOns\\Bloodhound2\\MinimapArrow");
only1yzerman@0 203 Bloodhound2.GravityTexture = tex
only1yzerman@0 204 end
only1yzerman@0 205
only1yzerman@0 206 return tex
only1yzerman@0 207 end
only1yzerman@0 208
only1yzerman@0 209 function Bloodhound2.DrawArrow(grx, gry, cf, sf)
only1yzerman@0 210
only1yzerman@0 211 local gravityX = grx * cf - gry * sf;
only1yzerman@0 212 local gravityY = gry * cf + grx * sf;
only1yzerman@0 213 local gravityTexture = GetArrowTexture()
only1yzerman@0 214
only1yzerman@0 215 if (gravityX == 0 and gravityY == 0) then
only1yzerman@0 216 gravityTexture:Hide();
only1yzerman@0 217 return;
only1yzerman@0 218 end
only1yzerman@0 219
only1yzerman@0 220 local gravityScale = sqrt(gravityX * gravityX + gravityY * gravityY)
only1yzerman@0 221 gravityX = gravityX / gravityScale
only1yzerman@0 222 gravityY = gravityY / gravityScale
only1yzerman@0 223
only1yzerman@0 224 -- determine rotated and scaled texture coordinates
only1yzerman@0 225 local gy = (gravityX + gravityY) / 2.82843
only1yzerman@0 226 local gx = (gravityX - gravityY) / 2.82843
only1yzerman@0 227
only1yzerman@0 228 gravityTexture:SetTexCoord(
only1yzerman@0 229 0.5 - gx, 0.5 + gy,
only1yzerman@0 230 0.5 + gy, 0.5 + gx,
only1yzerman@0 231 0.5 - gy, 0.5 - gx,
only1yzerman@0 232 0.5 + gx, 0.5 - gy);
only1yzerman@0 233
only1yzerman@0 234 gravityTexture:SetPoint("CENTER", Minimap, "CENTER", 40 * gravityX, -40 * gravityY)
only1yzerman@0 235 gravityTexture:Show()
only1yzerman@0 236 end
only1yzerman@0 237
only1yzerman@0 238
only1yzerman@0 239 -------- "RUBY" MANAGEMENT (REUSE RUBIES AND ONLY CREATE NEW ONES WHEN NEEDED)
only1yzerman@0 240
only1yzerman@0 241 local circles = {};
only1yzerman@0 242 local nextCircle = 1;
only1yzerman@0 243 local circleScale = 1;
only1yzerman@0 244
only1yzerman@0 245 function Bloodhound2.ResetCircles()
only1yzerman@0 246 nextCircle = 1;
only1yzerman@0 247 circleScale = Minimap:GetHeight() * 0.015 / (7 - Minimap:GetZoom());
only1yzerman@0 248 end
only1yzerman@0 249
only1yzerman@0 250 function Bloodhound2.SetCircle(dx, dy, alpha)
only1yzerman@0 251 local circle;
only1yzerman@0 252 if (#circles < nextCircle) then
only1yzerman@1 253 circle = Minimap:CreateTexture("Bloodhound_Circle", "ARTWORK", nil, -7);
only1yzerman@0 254 circles[nextCircle] = circle;
only1yzerman@0 255 circle:SetTexture("Interface\\AddOns\\Bloodhound2\\Circle");
only1yzerman@0 256 circle:SetWidth(12);
only1yzerman@0 257 circle:SetHeight(12);
only1yzerman@0 258 circle:SetAlpha(1);
only1yzerman@0 259 else
only1yzerman@0 260 circle = circles[nextCircle];
only1yzerman@0 261 end
only1yzerman@0 262
only1yzerman@0 263 nextCircle = nextCircle + 1;
only1yzerman@0 264 circle:SetPoint("CENTER", Minimap, "CENTER", dx * circleScale, -dy * circleScale);
only1yzerman@0 265 circle:SetAlpha(alpha);
only1yzerman@0 266 circle:Show();
only1yzerman@0 267 end
only1yzerman@0 268
only1yzerman@0 269 function Bloodhound2.HideExtraCircles()
only1yzerman@0 270 for i=nextCircle,#circles,1 do
only1yzerman@0 271 circles[i]:Hide();
only1yzerman@0 272 end
only1yzerman@0 273 end
only1yzerman@0 274
only1yzerman@0 275
only1yzerman@0 276
only1yzerman@0 277 -------- MAIN FUNCTION FOR CALCULATING RECOMMENDED DIRECTION OF TRAVEL
only1yzerman@0 278
only1yzerman@0 279 function Bloodhound2.CalculateForce(cf, sf)
only1yzerman@0 280
only1yzerman@0 281 local c = player.C; -- get player position
only1yzerman@0 282 local z = player.Z;
only1yzerman@0 283 local x = player.X;
only1yzerman@0 284 local y = player.Y;
only1yzerman@0 285
only1yzerman@0 286 if c == 0 or z == 0 then return 0,0 end -- don't draw arrow if using world coordinates
only1yzerman@0 287 if not Bloodhound2.ZoneDatum then return 0,0 end
only1yzerman@0 288
only1yzerman@0 289 local datum = Bloodhound2.ZoneDatum[c][z]; -- get scale and offset for current zone map
only1yzerman@0 290 if datum == nil then return 0,0 end
only1yzerman@0 291
only1yzerman@0 292 local gx, gy = Bloodhound2.ZoneDatum.LocalToGlobal(x, y, datum); -- convert player position to world coordinates
only1yzerman@0 293 local now = time(); -- value to use for time-stamping visited nodes
only1yzerman@0 294 local fx = 0; -- cumulative force, X-component
only1yzerman@0 295 local fy = 0; -- cumulative force, Y-component
only1yzerman@0 296 local multiZone = true; -- whether to include more than the current zone
only1yzerman@0 297 local inspectionRadius = 60;
only1yzerman@0 298
only1yzerman@0 299 if Settings then
only1yzerman@0 300 if Settings.MultiZoneMode==0 then
only1yzerman@0 301 multiZone = IsFlying();
only1yzerman@0 302 elseif Settings.MultiZoneMode==1 then
only1yzerman@0 303 multiZone = true;
only1yzerman@0 304 else
only1yzerman@0 305 multiZone = false;
only1yzerman@0 306 end
only1yzerman@0 307
only1yzerman@0 308 if Settings.InspectionRadius then
only1yzerman@0 309 inspectionRadius = Settings.InspectionRadius;
only1yzerman@0 310 end
only1yzerman@0 311 end
only1yzerman@0 312
only1yzerman@0 313 local settingsFilter = {}; -- which node types to ignore
only1yzerman@0 314 local nodes = {}; -- which nodes to track
only1yzerman@0 315
only1yzerman@0 316 for i=1,GetNumTrackingTypes(),1 do
only1yzerman@0 317 local name, _, active, _ = GetTrackingInfo(i);
only1yzerman@0 318 if (active == 1) then
only1yzerman@0 319 if (name == L["Find Herbs"]) then
only1yzerman@0 320 for k,v in pairs(Settings.HerbFilter) do settingsFilter[k] = v end
only1yzerman@0 321 for k,v in pairs(Bloodhound2.HerbNodes) do tinsert(nodes, v) end
only1yzerman@2 322 if (IsQuestFlaggedCompleted(32609) ~= 1) then
only1yzerman@2 323 for k,v in pairs(Bloodhound2.MiscNodes) do tinsert(nodes, v) end
only1yzerman@2 324 end
only1yzerman@0 325 elseif (name == L["Find Minerals"]) then
only1yzerman@0 326 for k,v in pairs(Settings.OreFilter) do settingsFilter[k] = v end
only1yzerman@0 327 for k,v in pairs(Bloodhound2.OreNodes) do tinsert(nodes, v) end
only1yzerman@2 328 if (IsQuestFlaggedCompleted(32609) ~= 1) then
only1yzerman@2 329 for k,v in pairs(Bloodhound2.MiscNodes) do tinsert(nodes, v) end
only1yzerman@2 330 end
only1yzerman@0 331 end
only1yzerman@0 332 end
only1yzerman@0 333 end
only1yzerman@0 334
only1yzerman@0 335 local avoidZones = {}; -- which zones to avoid
only1yzerman@0 336
only1yzerman@0 337 if multiZone then
only1yzerman@0 338 local cmc = GetCurrentMapContinent()
only1yzerman@0 339
only1yzerman@0 340 if not Settings.ZoneFilter[cmc] then
only1yzerman@0 341 Settings.ZoneFilter[cmc] = {}
only1yzerman@0 342 end
only1yzerman@0 343
only1yzerman@0 344 for k,v in pairs(Settings.ZoneFilter[GetCurrentMapContinent()]) do
only1yzerman@0 345 avoidZones[k] = true;
only1yzerman@0 346 end
only1yzerman@0 347 end
only1yzerman@0 348
only1yzerman@0 349 local avoidNodes = {}; -- which node types to ignore
only1yzerman@0 350
only1yzerman@0 351 if settingsFilter then
only1yzerman@0 352 for k,v in pairs(settingsFilter) do
only1yzerman@0 353 avoidNodes[k] = true;
only1yzerman@0 354 end
only1yzerman@0 355 end
only1yzerman@0 356
only1yzerman@0 357 local minimapSize = Minimap:GetWidth() / 2 - 2;
only1yzerman@0 358 Bloodhound2.ResetCircles();
only1yzerman@0 359
only1yzerman@0 360 for key, node in pairs(nodes) do
only1yzerman@0 361 if (avoidNodes[node.N] ~= true) and (avoidZones[node.Z] ~= true) and (multiZone or (node.Z == z)) then
only1yzerman@0 362 local dx = node.X - gx;
only1yzerman@0 363 local dy = node.Y - gy;
only1yzerman@0 364 local rsqrd = dx * dx + dy * dy;
only1yzerman@0 365 local r = sqrt(rsqrd); -- distance to node
only1yzerman@0 366 local age = now - node.TimeStamp; -- time since last inspected
only1yzerman@0 367
only1yzerman@0 368 if (r < inspectionRadius) then
only1yzerman@0 369 node.TimeStamp = now;
only1yzerman@0 370 else
only1yzerman@0 371 --[[
only1yzerman@0 372 The magnitude of the force is proportional to the age and inversely
only1yzerman@0 373 proportional to the square of the distance, and the direction is towards
only1yzerman@0 374 the node. The math for this starts out as
only1yzerman@0 375
only1yzerman@0 376 local force = age / rsqrd
only1yzerman@0 377 local angle = math.atan2(dy, dx)
only1yzerman@0 378 fx = fx + force * math.cos(angle)
only1yzerman@0 379 fy = fy + force * math.sin(angle)
only1yzerman@0 380
only1yzerman@0 381 But cos(angle) is just dx/r and sin(angle) is just dy/r, so we don't
only1yzerman@0 382 actually need atan2, cos, and sin and instead we can write this as
only1yzerman@0 383 ]]
only1yzerman@0 384 local force = age / (r * rsqrd)
only1yzerman@0 385 fx = fx + force * dx
only1yzerman@0 386 fy = fy + force * dy
only1yzerman@0 387 end
only1yzerman@0 388
only1yzerman@0 389 if (r * circleScale < minimapSize) and (age > 60) then -- draw ruby
only1yzerman@0 390 local alpha = r / (minimapSize / circleScale) / 0.7 - 0.3;
only1yzerman@0 391 alpha = max(0, alpha);
only1yzerman@0 392 Bloodhound2.SetCircle(dx * cf - dy * sf, dy * cf + dx * sf, alpha);
only1yzerman@0 393 end
only1yzerman@0 394 end
only1yzerman@0 395 end
only1yzerman@0 396
only1yzerman@0 397 Bloodhound2.HideExtraCircles();
only1yzerman@0 398 return fx, fy;
only1yzerman@0 399 end
only1yzerman@0 400
only1yzerman@0 401
only1yzerman@0 402
only1yzerman@0 403
only1yzerman@0 404
only1yzerman@0 405
only1yzerman@0 406
only1yzerman@0 407 ----------------------------------------------------------------------------------------------------
only1yzerman@0 408 -------- REPARENT THE MINIMAP FOR 3RD PARTY MINIMAPS AND HUDS
only1yzerman@0 409 -------- - Added by Zasurus(www.curseforge.com/profiles/Zasurus/) for MiniHugeHUD
only1yzerman@0 410 ----------------------------------------------------------------------------------------------------
only1yzerman@0 411 function Bloodhound2.ReparentMinimap(NewMinimap, MinimapName)
only1yzerman@0 412 Bloodhound2.OnUpdateScript(nil, 1000000)
only1yzerman@0 413 -- Hide the circles currently on the minimap
only1yzerman@0 414 Bloodhound2.ResetCircles();
only1yzerman@0 415 Bloodhound2.HideExtraCircles();
only1yzerman@0 416 -- Hide this minimap's copy of the arrow
only1yzerman@0 417 if Bloodhound2.GravityTexture then
only1yzerman@0 418 Bloodhound2.GravityTexture:Hide();
only1yzerman@0 419 end;
only1yzerman@0 420 -- Store the current set of circles and arrow on this minimap for later
only1yzerman@0 421 Minimap.Bloodhound2Circles = circles;
only1yzerman@0 422 Minimap.Bloodhound2Arrow = Bloodhound2.GravityTexture;
only1yzerman@0 423 -- Pull back (or create for circles) the arrow and circles for this minimap
only1yzerman@0 424 circles = NewMinimap.Bloodhound2Circles or {};
only1yzerman@0 425 ZasCircles = circles;
only1yzerman@0 426 Bloodhound2.GravityTexture = NewMinimap.Bloodhound2Arrow;
only1yzerman@0 427 -- Move Bloodhound2's Local Minimap pointer to the new minimap
only1yzerman@0 428 Minimap = NewMinimap;
only1yzerman@0 429 Minimap.MinimapName = MinimapName;
only1yzerman@0 430 -- Update all points
only1yzerman@0 431 Bloodhound2.UpdateMinimap();
only1yzerman@0 432 end
only1yzerman@0 433 ----------------------------------------------------------------------------------------------------