2018-05-02 06:32:59 +08:00
|
|
|
local TEXT_ALIGN_CENTER = TEXT_ALIGN_CENTER
|
|
|
|
local EyePos = EyePos
|
|
|
|
local EyeVector = EyeVector
|
|
|
|
local CurTime = CurTime
|
|
|
|
local string_format = string.format
|
|
|
|
local string_match = string.match
|
|
|
|
local math_max = math.max
|
|
|
|
local math_ceil = math.ceil
|
|
|
|
local draw = draw
|
|
|
|
local util = util
|
|
|
|
|
|
|
|
local trace = {mask = MASK_SHOT, mins = Vector(-2, -2, -2), maxs = Vector(2, 2, 2)}
|
|
|
|
local filter = {}
|
2014-10-02 08:49:54 +08:00
|
|
|
local entitylist = {}
|
|
|
|
|
|
|
|
local colTemp = Color(255, 255, 255)
|
|
|
|
function GM:DrawTargetID(ent, fade)
|
|
|
|
fade = fade or 1
|
2018-05-02 06:32:59 +08:00
|
|
|
local pos = ent:GetPos()
|
|
|
|
pos.z = pos.z + 16
|
|
|
|
local ts = pos:ToScreen()
|
2014-10-02 08:49:54 +08:00
|
|
|
local x, y = ts.x, math.Clamp(ts.y, 0, ScrH() * 0.95)
|
|
|
|
|
|
|
|
colTemp.a = fade * 255
|
|
|
|
util.ColorCopy(COLOR_FRIENDLY, colTemp)
|
|
|
|
|
|
|
|
local name = ent:Name()
|
|
|
|
draw.SimpleTextBlur(name, "ZSHUDFontSmaller", x, y, colTemp, TEXT_ALIGN_CENTER)
|
2018-05-02 06:32:59 +08:00
|
|
|
y = y + draw.GetFontHeight("ZSHUDFontSmaller") + 3
|
2014-10-02 08:49:54 +08:00
|
|
|
|
2018-05-02 06:32:59 +08:00
|
|
|
local healthfraction = math_max(ent:Health() / (ent:Team() == TEAM_UNDEAD and ent:GetMaxZombieHealth() or ent:GetMaxHealth()), 0)
|
2014-10-02 08:49:54 +08:00
|
|
|
if healthfraction ~= 1 then
|
|
|
|
util.ColorCopy(0.75 <= healthfraction and COLOR_HEALTHY or 0.5 <= healthfraction and COLOR_SCRATCHED or 0.25 <= healthfraction and COLOR_HURT or COLOR_CRITICAL, colTemp)
|
|
|
|
|
2018-05-02 06:32:59 +08:00
|
|
|
local hptxt = self.HealthTargetDisplay == 1 and math_ceil(ent:Health()).." HP" or math_ceil(healthfraction * 100).."%"
|
|
|
|
|
|
|
|
draw.SimpleTextBlur(hptxt, "ZSHUDFont", x, y, colTemp, TEXT_ALIGN_CENTER)
|
|
|
|
y = y + draw.GetFontHeight("ZSHUDFont") + 3
|
|
|
|
|
|
|
|
if self.MedicalAura then
|
|
|
|
if ent:GetDTBool(DT_PLAYER_BOOL_FRAIL) then
|
|
|
|
util.ColorCopy(COLOR_LBLUE, colTemp)
|
|
|
|
draw.SimpleTextBlur("(FRAIL)", "ZSHUDFontSmaller", x, y, colTemp, TEXT_ALIGN_CENTER)
|
|
|
|
y = y + draw.GetFontHeight("ZSHUDFontSmaller") + 2
|
|
|
|
end
|
|
|
|
|
|
|
|
local poison = ent:GetPoisonDamage()
|
|
|
|
local bleed = ent:GetBleedDamage()
|
|
|
|
local phant = ent:GetPhantomHealth()
|
|
|
|
if poison >= 1 then
|
|
|
|
util.ColorCopy(COLOR_LIMEGREEN, colTemp)
|
|
|
|
draw.SimpleTextBlur("(POISON - " .. math.floor(poison) ..")", "ZSHUDFontSmaller", x, y, colTemp, TEXT_ALIGN_CENTER)
|
|
|
|
y = y + draw.GetFontHeight("ZSHUDFontSmaller") + 2
|
|
|
|
end
|
|
|
|
if bleed >= 1 then
|
|
|
|
util.ColorCopy(COLOR_SOFTRED, colTemp)
|
|
|
|
draw.SimpleTextBlur("(BLEED - " .. math.floor(bleed) ..")", "ZSHUDFontSmaller", x, y, colTemp, TEXT_ALIGN_CENTER)
|
|
|
|
y = y + draw.GetFontHeight("ZSHUDFontSmaller") + 2
|
|
|
|
end
|
|
|
|
if phant >= 1 then
|
|
|
|
util.ColorCopy(COLOR_MIDGRAY, colTemp)
|
|
|
|
draw.SimpleTextBlur("(BLOODLUST)", "ZSHUDFontSmaller", x, y, colTemp, TEXT_ALIGN_CENTER)
|
|
|
|
y = y + draw.GetFontHeight("ZSHUDFontSmaller") + 2
|
|
|
|
end
|
|
|
|
end
|
2014-10-02 08:49:54 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
util.ColorCopy(color_white, colTemp)
|
|
|
|
|
|
|
|
if ent:Team() == TEAM_UNDEAD then
|
|
|
|
local classtab = ent:GetZombieClassTable()
|
|
|
|
local classname = classtab.TranslationName and translate.Get(classtab.TranslationName) or classtab.Name
|
|
|
|
if classname then
|
|
|
|
draw.SimpleTextBlur(classname, "ZSHUDFontTiny", x, y, colTemp, TEXT_ALIGN_CENTER)
|
|
|
|
end
|
|
|
|
else
|
|
|
|
local holding = ent:GetHolding()
|
|
|
|
if holding:IsValid() then
|
2018-05-02 06:32:59 +08:00
|
|
|
draw.SimpleTextBlur(string_format("Carrying [%s]", string_match(holding:GetModel(), ".*/(.+)%.mdl") or "object"), "ZSHUDFontTiny", x, y, colTemp, TEXT_ALIGN_CENTER)
|
2014-10-02 08:49:54 +08:00
|
|
|
else
|
|
|
|
local wep = ent:GetActiveWeapon()
|
|
|
|
if wep:IsValid() then
|
|
|
|
draw.SimpleTextBlur(wep:GetPrintName(), "ZSHUDFontTiny", x, y, colTemp, TEXT_ALIGN_CENTER)
|
|
|
|
end
|
|
|
|
end
|
2018-05-02 06:32:59 +08:00
|
|
|
|
|
|
|
local level = ent:GetZSLevel()
|
|
|
|
local remortlevel = ent:GetZSRemortLevel()
|
|
|
|
y = y + draw.GetFontHeight("ZSHUDFontTiny") + 4
|
|
|
|
if remortlevel >= 1 then
|
|
|
|
draw.SimpleTextBlur(string_format("LVL %d R.LVL %d", level, remortlevel), "ZSHUDFontTiny", x, y, colTemp, TEXT_ALIGN_CENTER)
|
|
|
|
else
|
|
|
|
draw.SimpleTextBlur("LVL "..level, "ZSHUDFontTiny", x, y, colTemp, TEXT_ALIGN_CENTER)
|
|
|
|
end
|
2014-10-02 08:49:54 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-05-02 06:32:59 +08:00
|
|
|
function GM:DrawSigilTargetHint(ent, fade)
|
|
|
|
fade = fade or 1
|
|
|
|
local pos = ent:GetPos()
|
|
|
|
pos.z = pos.z + 16
|
|
|
|
local ts = pos:ToScreen()
|
|
|
|
local x, y = ts.x, math.Clamp(ts.y, 0, ScrH() * 0.95)
|
|
|
|
|
|
|
|
colTemp.a = fade * 128
|
|
|
|
util.ColorCopy(color_white, colTemp)
|
|
|
|
|
|
|
|
draw.SimpleTextBlur("Sigil", "ZSHUDFontSmaller", x, y, colTemp, TEXT_ALIGN_CENTER)
|
|
|
|
y = y + draw.GetFontHeight("ZSHUDFontSmaller") + 0
|
|
|
|
|
|
|
|
draw.SimpleTextBlur("Press E to teleport", "ZSHUDFontTiny", x, y, colTemp, TEXT_ALIGN_CENTER)
|
|
|
|
end
|
|
|
|
|
|
|
|
GM.TraceTarget = NULL
|
|
|
|
|
|
|
|
local function FuncFilterPlayers(ent)
|
|
|
|
return not ent:IsPlayer()
|
|
|
|
end
|
|
|
|
local function FuncFilterTeam(ent)
|
|
|
|
return not (ent:IsPlayer() and ent:Team() == MySelf:Team())
|
|
|
|
end
|
2014-10-02 08:49:54 +08:00
|
|
|
function GM:HUDDrawTargetID(teamid)
|
|
|
|
local start = EyePos()
|
|
|
|
trace.start = start
|
2018-05-02 06:32:59 +08:00
|
|
|
trace.endpos = start + EyeVector() * 2048
|
|
|
|
filter[1] = MySelf.TargetIDFilter or MySelf
|
|
|
|
filter[2] = MySelf:GetObserverTarget()
|
|
|
|
trace.filter = filter
|
2014-10-02 08:49:54 +08:00
|
|
|
|
2015-03-10 01:45:47 +08:00
|
|
|
local isspectator = MySelf:IsSpectator()
|
|
|
|
|
2014-10-02 08:49:54 +08:00
|
|
|
local entity = util.TraceHull(trace).Entity
|
2018-05-02 06:32:59 +08:00
|
|
|
self.TraceTarget = entity
|
|
|
|
trace.filter = FuncFilterPlayers
|
|
|
|
self.TraceTargetNoPlayers = util.TraceLine(trace).Entity
|
|
|
|
|
|
|
|
if MySelf.TargetLocus then
|
|
|
|
trace.filter = FuncFilterTeam
|
|
|
|
self.TraceTargetTeam = util.TraceLine(trace).Entity
|
|
|
|
end
|
|
|
|
|
|
|
|
if entity:IsValid() and (entity:IsPlayer() and (entity:Team() == teamid or isspectator) or entity.Sigil) then
|
2014-10-02 08:49:54 +08:00
|
|
|
entitylist[entity] = CurTime()
|
|
|
|
end
|
|
|
|
|
|
|
|
for ent, time in pairs(entitylist) do
|
2018-05-02 06:32:59 +08:00
|
|
|
if ent:IsValidPlayer() and (ent:Team() == teamid or isspectator) and CurTime() < time + 1.5 then
|
|
|
|
self:DrawTargetID(ent, 1 - math.Clamp((CurTime() - time) / 1.5, 0, 1))
|
|
|
|
elseif teamid == TEAM_HUMAN and ent.Sigil and CurTime() < time + 0.5 then
|
|
|
|
self:DrawSigilTargetHint(ent, 1 - math.Clamp((CurTime() - time) / 0.5, 0, 1))
|
2014-10-02 08:49:54 +08:00
|
|
|
else
|
|
|
|
entitylist[ent] = nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|