Files
wnsrc/gamemodes/terrortown/gamemode/cl_hudpickup.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

204 lines
6.6 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local TryTranslation = LANG.TryTranslation
GM.PickupHistory = {}
GM.PickupHistoryLast = 0
GM.PickupHistoryTop = ScrH() / 2
GM.PickupHistoryWide = 300
GM.PickupHistoryCorner = surface.GetTextureID( "gui/corner8" )
local pickupclr = {
[ROLE_INNOCENT] = Color(55, 170, 50, 255),
[ROLE_TRAITOR] = Color(180, 50, 40, 255),
[ROLE_DETECTIVE] = Color(50, 60, 180, 255)
}
function GM:HUDWeaponPickedUp( wep )
if not (IsValid(wep) and IsValid(LocalPlayer())) or (not LocalPlayer():Alive()) then return end
local name = TryTranslation(wep.GetPrintName and wep:GetPrintName() or wep:GetClass() or "Unknown Weapon Name")
local pickup = {}
pickup.time = CurTime()
pickup.name = string.upper(name)
pickup.holdtime = 5
pickup.font = "DefaultBold"
pickup.fadein = 0.04
pickup.fadeout = 0.3
local role = LocalPlayer().GetRole and LocalPlayer():GetRole() or ROLE_INNOCENT
pickup.color = pickupclr[role]
pickup.upper = true
surface.SetFont( pickup.font )
local w, h = surface.GetTextSize( pickup.name )
pickup.height = h
pickup.width = w
if (self.PickupHistoryLast >= pickup.time) then
pickup.time = self.PickupHistoryLast + 0.05
end
table.insert( self.PickupHistory, pickup )
self.PickupHistoryLast = pickup.time
end
function GM:HUDItemPickedUp( itemname )
if not (IsValid(LocalPlayer()) and LocalPlayer():Alive()) then return end
local pickup = {}
pickup.time = CurTime()
-- as far as I'm aware TTT does not use any "items", so better leave this to
-- source's localisation
pickup.name = "#"..itemname
pickup.holdtime = 5
pickup.font = "DefaultBold"
pickup.fadein = 0.04
pickup.fadeout = 0.3
pickup.color = Color( 255, 255, 255, 255 )
pickup.upper = false
surface.SetFont( pickup.font )
local w, h = surface.GetTextSize( pickup.name )
pickup.height = h
pickup.width = w
if self.PickupHistoryLast >= pickup.time then
pickup.time = self.PickupHistoryLast + 0.05
end
table.insert( self.PickupHistory, pickup )
self.PickupHistoryLast = pickup.time
end
function GM:HUDAmmoPickedUp( itemname, amount )
if not (IsValid(LocalPlayer()) and LocalPlayer():Alive()) then return end
local itemname_trans = TryTranslation(string.lower("ammo_" .. itemname))
if self.PickupHistory then
local localized_name = string.upper(itemname_trans)
for k, v in pairs( self.PickupHistory ) do
if v.name == localized_name then
v.amount = tostring( tonumber(v.amount) + amount )
v.time = CurTime() - v.fadein
return
end
end
end
local pickup = {}
pickup.time = CurTime()
pickup.name = string.upper(itemname_trans)
pickup.holdtime = 5
pickup.font = "DefaultBold"
pickup.fadein = 0.04
pickup.fadeout = 0.3
pickup.color = Color(205, 155, 0, 255)
pickup.amount = tostring(amount)
surface.SetFont( pickup.font )
local w, h = surface.GetTextSize( pickup.name )
pickup.height = h
pickup.width = w
local w, h = surface.GetTextSize( pickup.amount )
pickup.xwidth = w
pickup.width = pickup.width + w + 16
if (self.PickupHistoryLast >= pickup.time) then
pickup.time = self.PickupHistoryLast + 0.05
end
table.insert( self.PickupHistory, pickup )
self.PickupHistoryLast = pickup.time
end
function GM:HUDDrawPickupHistory()
if (not self.PickupHistory) then return end
local x, y = ScrW() - self.PickupHistoryWide - 20, self.PickupHistoryTop
local tall = 0
local wide = 0
for k, v in pairs( self.PickupHistory ) do
if v.time < CurTime() then
if (v.y == nil) then v.y = y end
v.y = (v.y*5 + y) / 6
local delta = (v.time + v.holdtime) - CurTime()
delta = delta / v.holdtime
local alpha = 255
local colordelta = math.Clamp( delta, 0.6, 0.7 )
if delta > (1 - v.fadein) then
alpha = math.Clamp( (1.0 - delta) * (255/v.fadein), 0, 255 )
elseif delta < v.fadeout then
alpha = math.Clamp( delta * (255/v.fadeout), 0, 255 )
end
v.x = x + self.PickupHistoryWide - (self.PickupHistoryWide * (alpha/255))
local rx, ry, rw, rh = math.Round(v.x-4), math.Round(v.y-(v.height/2)-4), math.Round(self.PickupHistoryWide+9), math.Round(v.height+8)
local bordersize = 8
surface.SetTexture( self.PickupHistoryCorner )
surface.SetDrawColor( v.color.r, v.color.g, v.color.b, alpha )
surface.DrawTexturedRectRotated( rx + bordersize/2 , ry + bordersize/2, bordersize, bordersize, 0 )
surface.DrawTexturedRectRotated( rx + bordersize/2 , ry + rh -bordersize/2, bordersize, bordersize, 90 )
surface.DrawRect( rx, ry+bordersize, bordersize, rh-bordersize*2 )
surface.DrawRect( rx+bordersize, ry, v.height - 4, rh )
--surface.SetDrawColor( 230*colordelta, 230*colordelta, 230*colordelta, alpha )
surface.SetDrawColor( 20*colordelta, 20*colordelta, 20*colordelta, math.Clamp(alpha, 0, 200) )
surface.DrawRect( rx+bordersize+v.height-4, ry, rw - (v.height - 4) - bordersize*2, rh )
surface.DrawTexturedRectRotated( rx + rw - bordersize/2 , ry + rh - bordersize/2, bordersize, bordersize, 180 )
surface.DrawTexturedRectRotated( rx + rw - bordersize/2 , ry + bordersize/2, bordersize, bordersize, 270 )
surface.DrawRect( rx+rw-bordersize, ry+bordersize, bordersize, rh-bordersize*2 )
draw.SimpleText( v.name, v.font, v.x+2+v.height+8, v.y - (v.height/2)+2, Color( 0, 0, 0, alpha*0.75 ) )
draw.SimpleText( v.name, v.font, v.x+v.height+8, v.y - (v.height/2), Color( 255, 255, 255, alpha ) )
if v.amount then
draw.SimpleText( v.amount, v.font, v.x+self.PickupHistoryWide+2, v.y - (v.height/2)+2, Color( 0, 0, 0, alpha*0.75 ), TEXT_ALIGN_RIGHT )
draw.SimpleText( v.amount, v.font, v.x+self.PickupHistoryWide, v.y - (v.height/2), Color( 255, 255, 255, alpha ), TEXT_ALIGN_RIGHT )
end
y = y + (v.height + 16)
tall = tall + v.height + 18
wide = math.Max( wide, v.width + v.height + 24 )
if alpha == 0 then self.PickupHistory[k] = nil end
end
end
self.PickupHistoryTop = (self.PickupHistoryTop * 5 + ( ScrH() * 0.75 - tall ) / 2 ) / 6
self.PickupHistoryWide = (self.PickupHistoryWide * 5 + wide) / 6
end