mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
203
gamemodes/terrortown/gamemode/cl_hudpickup.lua
Normal file
203
gamemodes/terrortown/gamemode/cl_hudpickup.lua
Normal file
@@ -0,0 +1,203 @@
|
||||
--[[
|
||||
| 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
|
||||
Reference in New Issue
Block a user