--EVERY FRAME (Throttled) function() if aura_env.lastscan < GetTime() then if UnitExists("focus") then if UnitInParty("focus") then --Get MapID for both local myMapID = C_Map.GetBestMapForUnit("player") local focusMapID = C_Map.GetBestMapForUnit("focus") --Get Coordinates for both within same map local pX, pY, fX, fY = 0, 0, 0, 0 if myMapID == focusMapID then pX, pY = aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "player").x, 4) * 10000, aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "player").y, 4) * 10000 fX, fY = aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "focus").x, 4) * 10000, aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "focus").y, 4) * 10000 end if pX > 0 and pY > 0 and fX > 0 and fY > 0 then --Get player direction facing and convert to angle local playerFace = GetPlayerFacing() or 0 local playerA = math.floor(playerFace * 100) playerA = aura_env.range(playerA, 0, 630, 360) - 1 playerA = - playerA playerA = math.floor(playerA) playerA = playerA - 90 if playerA < 0 then playerA = playerA + 360 end --Get relative Coordinates local X = fX - pX local Y = fY - pY local hyp = math.sqrt((X ^ 2) + (Y ^ 2)) local a = math.atan2(Y, X) a = a - math.rad(playerA) local Y2, X2 = hyp * math.cos(a), hyp * math.sin(a) local zoomout, zoomin = 100, 50 if (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom > 0.3 then aura_env.zoom = aura_env.zoom - 0.2 elseif (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom <= 0.3 and aura_env.zoom > 0.1 then aura_env.zoom = aura_env.zoom - 0.05 elseif (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom <= 0.1 and aura_env.zoom > 0.0005 then aura_env.zoom = aura_env.zoom - 0.0005 elseif (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom < 0.001 then aura_env.zoom = 1 end if (math.abs((X2 * aura_env.zoom)) < zoomin and math.abs((Y2 * aura_env.zoom)) < zoomin) and aura_env.zoom < 50 then aura_env.zoom = aura_env.zoom + 0.2 end aura_env.region.text:SetText("Zoom: " .. aura_env.zoom .. "\nDistance: " .. aura_env.round(hyp, 0)) aura_env.region.playerTexture:SetPoint("CENTER", aura_env.region, "CENTER", 0, 0) aura_env.region.focusTexture:SetPoint("CENTER", aura_env.region, "CENTER", X2 * aura_env.zoom, Y2 * aura_env.zoom) --Get class to color local pclass, fclass = select(3, UnitClass("player")), select(3, UnitClass("focus")) aura_env.region.playerTexture:SetVertexColor(aura_env.classColor(pclass)) aura_env.region.focusTexture:SetVertexColor(aura_env.classColor(fclass)) return true else print("Focus not in map!") end aura_env.lastscan = GetTime() + aura_env.throttle / 1000 else print("Focus not in party!"); aura_env.region.playerTexture:Hide(); aura_env.region.focusTexture:Hide(); aura_env.lastscan = GetTime() + 5 end else print("No focus found!"); aura_env.region.playerTexture:Hide(); aura_env.region.focusTexture:Hide(); aura_env.lastscan = GetTime() + 5 end end end --INIT aura_env.throttle = 250 aura_env.lastscan = 0 aura_env.zoom = 1 aura_env.range = function(val, min, max, max2) val = 1 - (((max - val) / (max - min)) * max2) return val end aura_env.round = function(var, n) if (n) then var = math.floor((var * 10^n) + 0.5) / (10^n) else var = math.floor(var+0.5) end return var end aura_env.classColor = function(class) if class == 1 then return 0.78, 0.61, 0.43, 0.75 elseif class == 2 then return 0.96, 0.55, 0.73, 0.75 elseif class == 3 then return 0.67, 0.83, 0.45, 0.75 elseif class == 4 then return 1, 0.96, 0.41, 0.75 elseif class == 5 then return 1, 1, 1, 0.75 elseif class == 6 then return 0.77, 0.12, 0.23, 0.75 elseif class == 7 then return 0, 0.44, 0.87, 0.75 elseif class == 8 then return 0.25, 0.78, 0.92, 0.75 elseif class == 9 then return 0.53, 0.53, 0.93, 0.75 elseif class == 10 then return 0, 1, 0.59, 0.75 elseif class == 11 then return 1, 0.49, 0.04, 0.75 elseif class == 12 then return 0.64, 0.19, 0.79, 0.75 else return 1, 1, 1, 1 end end if not aura_env.region.playerTexture then local playerTexture = aura_env.region:CreateTexture(nil, "OVERLAY") aura_env.region.playerTexture = playerTexture end aura_env.region.playerTexture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura72") aura_env.region.playerTexture:SetHeight(16) aura_env.region.playerTexture:SetWidth(16) aura_env.region.playerTexture:Show() if not aura_env.region.focusTexture then local focusTexture = aura_env.region:CreateTexture(nil, "OVERLAY") aura_env.region.focusTexture = focusTexture end aura_env.region.focusTexture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura72") aura_env.region.focusTexture:SetHeight(16) aura_env.region.focusTexture:SetWidth(16) aura_env.region.focusTexture:Show() if not aura_env.region.text then local text = aura_env.region:CreateFontString(nil, aura_env.region) aura_env.region.text = text end aura_env.region.text:ClearAllPoints() aura_env.region.text:SetPoint("CENTER", aura_env.region, "CENTER", 0, 500) aura_env.region.text:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\FiraCode-Medium.ttf", 16, "OUTLINE") aura_env.region.text:SetJustifyH("CENTER") aura_env.region.text:Show()