Files
wow-weakauras/Complete Projects/BFA/Map.lua
2024-08-24 22:43:07 +02:00

121 lines
5.6 KiB
Lua

--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()