Залив

This commit is contained in:
Refosel
2026-03-30 10:39:52 +03:00
commit 2b57c019cb
2010 changed files with 185745 additions and 0 deletions

View File

@@ -0,0 +1,213 @@
local cachedEntities = {}
local max_radar_distance = 800
local max_radar_distance_sqr = max_radar_distance ^ 2
local radar_scale = 2
local uav_update_rate = 5
local radarMat = Material("tdmg/hud/radar.png", "noclamp")
local glitchMat = Material("tdmg/hud/glitch.png", "noclamp")
local playerMat = Material("tdmg/hud/radar/player.png", "noclamp")
local enemyColor = Color(200, 50, 0)
local playerColor = Color(0, 150, 250)
local yourColor = Color(255, 255, 0)
local enemyMat = Material("tdmg/hud/radar/enemy.png", "noclamp")
local UAVEnemies = {}
local function GetFriends()
cachedEntities = {}
for k, v in pairs(ents.FindInSphere(LocalPlayer():GetPos(), max_radar_distance * radar_scale)) do
if !v:IsPlayer() or v == LocalPlayer() or !v:Alive() or v:Team() != LocalPlayer():Team() then continue end
table.insert(cachedEntities, v)
end
return cachedEntities
end
local function GetEnemies(ismuav)
cachedEntities = {}
for k, v in pairs(ents.FindInSphere(LocalPlayer():GetPos(), max_radar_distance * radar_scale)) do
if !v:IsPlayer() or v == LocalPlayer() or !v:Alive() or v:Team() == LocalPlayer():Team() then continue end
if not ismuav then
table.insert(cachedEntities, {pos = v:GetPos(), alpha = 255})
UAVEnemies = cachedEntities
else
table.insert(cachedEntities, v)
end
end
return cachedEntities
end
local function GetEntities()
cachedEntities = {}
for k, v in pairs(ents.FindInSphere(LocalPlayer():GetPos(), max_radar_distance * radar_scale)) do
if v:IsPlayer() or v:Health() <= 0 then continue end
if v:GetNWFloat('Team') > 0 then
table.insert(cachedEntities, v)
end
end
return cachedEntities
end
local IconsEntityTab = {
["tdm_harrier"] = {mat = Material("tdmg/hud/radar/jet.png"), rotate = true, size = 32, without_uav = true, bone = "tag_body"},
["tdm_infil"] = {mat = Material("tdmg/hud/radar/heli.png"), rotate = true, size = 32, without_uav = true, bone = "tag_body"},
["tdm_mi24"] = {mat = Material("tdmg/hud/radar/heli.png"), rotate = true, size = 32, without_uav = true, bone = "Body"},
["tdm_ah64"] = {mat = Material("tdmg/hud/radar/heli.png"), rotate = true, size = 32, without_uav = true, bone = "root"},
["tdm_drone"] = {mat = Material("tdmg/hud/radar/drone.png"), rotate = true, size = 16, without_uav = false},
["tdm_sentry"] = {mat = Material("tdmg/hud/radar/turret.png"), rotate = false, size = 24, without_uav = false},
["vj_tdm_k9"] = {mat = Material("tdmg/hud/radar/dog.png"), rotate = false, size = 20, without_uav = false},
["vj_tdm_npc"] = {mat = Material("tdmg/hud/radar/soldier.png"), rotate = false, size = 20, without_uav = false},
["vj_tdm_invasion_soldier1"] = {mat = Material("tdmg/hud/radar/enemy.png"), rotate = false, size = 16, without_uav = false},
["vj_tdm_invasion_soldier2"] = {mat = Material("tdmg/hud/radar/enemy.png"), rotate = false, size = 16, without_uav = false},
}
local function Draw()
if COD.HideHUD or !LocalPlayer():Alive() then return end
local w, h = ScrW(), ScrH()
local x, y, size = 10, 10, 250
local cx, cy = x + size / 2, y + size / 2
local playerSize = 24
local enemySize = 16
local IsMUAV = false
local ply = LocalPlayer()
draw.RoundedBox(0, x, y, size, size, Color(0, 0, 0, 200))
local localPos = ply:GetPos()
local localAng = ply:GetAngles()
if not COD.Counter_UAV_Active then
local entities = GetFriends()
for k, ent in pairs(entities) do
if !IsValid(ent) then continue end
local enemyPos = ply:GetPos() - ent:GetPos()
enemyPos:Rotate(Angle(180, (ply:EyeAngles().y) * -1, -180))
local ex = size / 2 * (enemyPos.y / max_radar_distance / radar_scale)
local ey = size / 2 * (enemyPos.x / max_radar_distance / radar_scale)
local posx = cx - ex - (enemySize / 2)
local posy = cy - ey - (enemySize / 2)
local mat = enemyMat
posx = math.Clamp(posx, x, x + size - playerSize / 2)
posy = math.Clamp(posy, y, y + size - playerSize / 2)
local size = playerSize
surface.SetDrawColor(playerColor)
surface.SetMaterial(playerMat)
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, (ent:IsPlayer() and ent:EyeAngles() or ent:GetAngles()).y + ply:EyeAngles().y * -1)
end
local entnpc = GetEntities()
for k, ent in pairs(entnpc) do
if !IsValid(ent) then continue end
local data = IconsEntityTab[ent:GetClass()]
local enemyPos = ply:GetPos() - ent:GetPos()
local enemyAng = ent:GetAngles().y
if data and data.bone then
local bonepos, boneang = ent:GetBonePosition(ent:LookupBone(data.bone))
enemyPos = ply:GetPos() - bonepos
enemyAng = boneang.y
end
enemyPos:Rotate(Angle(180, (ply:EyeAngles().y) * -1, -180))
local ex = size / 2 * (enemyPos.y / max_radar_distance / radar_scale)
local ey = size / 2 * (enemyPos.x / max_radar_distance / radar_scale)
local posx = cx - ex - (enemySize / 2)
local posy = cy - ey - (enemySize / 2)
posx = math.Clamp(posx, x, x + size - playerSize / 2)
posy = math.Clamp(posy, y, y + size - playerSize / 2)
local size = playerSize
if ent:GetNWFloat('Team') == LocalPlayer():Team() then
surface.SetDrawColor(playerColor)
else
surface.SetDrawColor(enemyColor)
end
if data then
if not data.without_uav and ent:GetNWFloat('Team') != LocalPlayer():Team() and (not COD.UAV_Active and not COD.Adv_UAV_Active) then continue end
surface.SetMaterial(data.mat)
size = data.size
if data.rotate then
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, enemyAng + ply:EyeAngles().y * -1)
else
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, 0)
end
else
surface.SetMaterial(enemyMat)
size = 12
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, 0)
end
end
if not COD.Adv_UAV_Active and COD.UAV_Active then
if uav_update_rate < CurTime() then
uav_update_rate = CurTime() + 4
GetEnemies()
end
local entities = UAVEnemies
for k, ent in pairs(entities) do
ent.alpha = math.max(ent.alpha - FrameTime()*75, 0)
local enemyPos = ply:GetPos() - ent.pos
enemyPos:Rotate(Angle(180, (ply:EyeAngles().y) * -1, -180))
local ex = size / 2 * (enemyPos.y / max_radar_distance / radar_scale)
local ey = size / 2 * (enemyPos.x / max_radar_distance / radar_scale)
local posx = cx - ex - (enemySize / 2)
local posy = cy - ey - (enemySize / 2)
local mat = enemyMat
posx = math.Clamp(posx, x, x + size - playerSize / 2)
posy = math.Clamp(posy, y, y + size - playerSize / 2)
local size = enemySize
surface.SetDrawColor(Color(enemyColor.r, enemyColor.g, enemyColor.b, ent.alpha))
surface.SetMaterial(enemyMat)
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, 0)
end
end
if COD.Adv_UAV_Active then
local entities = GetEnemies(true)
for k, ent in pairs(entities) do
if !IsValid(ent) then continue end
local enemyPos = ply:GetPos() - ent:GetPos()
enemyPos:Rotate(Angle(180, (ply:EyeAngles().y) * -1, -180))
local ex = size / 2 * (enemyPos.y / max_radar_distance / radar_scale)
local ey = size / 2 * (enemyPos.x / max_radar_distance / radar_scale)
local posx = cx - ex - (enemySize / 2)
local posy = cy - ey - (enemySize / 2)
local mat = enemyMat
posx = math.Clamp(posx, x, x + size - playerSize / 2)
posy = math.Clamp(posy, y, y + size - playerSize / 2)
local size = playerSize
surface.SetDrawColor(enemyColor)
surface.SetMaterial(playerMat)
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, (ent:IsPlayer() and ent:EyeAngles() or ent:GetAngles()).y + ply:EyeAngles().y * -1)
end
end
surface.SetMaterial(playerMat)
surface.SetDrawColor(yourColor)
surface.DrawTexturedRect(cx - playerSize / 2, cy - playerSize / 2, playerSize, playerSize)
else
surface.SetDrawColor(Color(255, 255, 255, 255))
surface.SetMaterial(glitchMat)
surface.DrawTexturedRect(x, y, size, size)
end
surface.SetDrawColor(Color(255, 255, 255, 255))
surface.SetMaterial(radarMat)
surface.DrawTexturedRect(x, y, size, size)
end
hook.Add("HUDPaint", "MWRadar", Draw)