mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
204 lines
6.6 KiB
Lua
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
|