mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
155 lines
3.0 KiB
Lua
155 lines
3.0 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 PANEL = {}
|
||
|
|
local PlayerVoicePanels = {}
|
||
|
|
|
||
|
|
function PANEL:Init()
|
||
|
|
|
||
|
|
self.LabelName = vgui.Create( "DLabel", self )
|
||
|
|
self.LabelName:SetFont( "GModNotify" )
|
||
|
|
self.LabelName:Dock( FILL )
|
||
|
|
self.LabelName:DockMargin( 8, 0, 0, 0 )
|
||
|
|
self.LabelName:SetTextColor( color_white )
|
||
|
|
|
||
|
|
self.Avatar = vgui.Create( "AvatarImage", self )
|
||
|
|
self.Avatar:Dock( LEFT )
|
||
|
|
self.Avatar:SetSize( 32, 32 )
|
||
|
|
|
||
|
|
self.Color = color_transparent
|
||
|
|
|
||
|
|
self:SetSize( 250, 32 + 8 )
|
||
|
|
self:DockPadding( 4, 4, 4, 4 )
|
||
|
|
self:DockMargin( 2, 2, 2, 2 )
|
||
|
|
self:Dock( BOTTOM )
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
function PANEL:Setup( ply )
|
||
|
|
|
||
|
|
self.ply = ply
|
||
|
|
self.LabelName:SetText( ply:Nick() )
|
||
|
|
self.Avatar:SetPlayer( ply )
|
||
|
|
|
||
|
|
self.Color = team.GetColor( ply:Team() )
|
||
|
|
|
||
|
|
self:InvalidateLayout()
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
function PANEL:Paint( w, h )
|
||
|
|
|
||
|
|
if ( !IsValid( self.ply ) ) then return end
|
||
|
|
draw.RoundedBox( 4, 0, 0, w, h, Color( 0, self.ply:VoiceVolume() * 255, 0, 240 ) )
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
function PANEL:Think()
|
||
|
|
|
||
|
|
if ( IsValid( self.ply ) ) then
|
||
|
|
self.LabelName:SetText( self.ply:Nick() )
|
||
|
|
end
|
||
|
|
|
||
|
|
if ( self.fadeAnim ) then
|
||
|
|
self.fadeAnim:Run()
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
function PANEL:FadeOut( anim, delta, data )
|
||
|
|
|
||
|
|
if ( anim.Finished ) then
|
||
|
|
|
||
|
|
if ( IsValid( PlayerVoicePanels[ self.ply ] ) ) then
|
||
|
|
PlayerVoicePanels[ self.ply ]:Remove()
|
||
|
|
PlayerVoicePanels[ self.ply ] = nil
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
return end
|
||
|
|
|
||
|
|
self:SetAlpha( 255 - ( 255 * delta ) )
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
derma.DefineControl( "VoiceNotify", "", PANEL, "DPanel" )
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
function GM:PlayerStartVoice( ply )
|
||
|
|
|
||
|
|
if ( !IsValid( g_VoicePanelList ) ) then return end
|
||
|
|
|
||
|
|
-- There'd be an exta one if voice_loopback is on, so remove it.
|
||
|
|
GAMEMODE:PlayerEndVoice( ply )
|
||
|
|
|
||
|
|
|
||
|
|
if ( IsValid( PlayerVoicePanels[ ply ] ) ) then
|
||
|
|
|
||
|
|
if ( PlayerVoicePanels[ ply ].fadeAnim ) then
|
||
|
|
PlayerVoicePanels[ ply ].fadeAnim:Stop()
|
||
|
|
PlayerVoicePanels[ ply ].fadeAnim = nil
|
||
|
|
end
|
||
|
|
|
||
|
|
PlayerVoicePanels[ ply ]:SetAlpha( 255 )
|
||
|
|
|
||
|
|
return
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
if ( !IsValid( ply ) ) then return end
|
||
|
|
|
||
|
|
local pnl = g_VoicePanelList:Add( "VoiceNotify" )
|
||
|
|
pnl:Setup( ply )
|
||
|
|
|
||
|
|
PlayerVoicePanels[ ply ] = pnl
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
local function VoiceClean()
|
||
|
|
|
||
|
|
for k, v in pairs( PlayerVoicePanels ) do
|
||
|
|
|
||
|
|
if ( !IsValid( k ) ) then
|
||
|
|
GAMEMODE:PlayerEndVoice( k )
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|
||
|
|
timer.Create( "VoiceClean", 10, 0, VoiceClean )
|
||
|
|
|
||
|
|
function GM:PlayerEndVoice( ply )
|
||
|
|
|
||
|
|
if ( IsValid( PlayerVoicePanels[ ply ] ) ) then
|
||
|
|
|
||
|
|
if ( PlayerVoicePanels[ ply ].fadeAnim ) then return end
|
||
|
|
|
||
|
|
PlayerVoicePanels[ ply ].fadeAnim = Derma_Anim( "FadeOut", PlayerVoicePanels[ ply ], PlayerVoicePanels[ ply ].FadeOut )
|
||
|
|
PlayerVoicePanels[ ply ].fadeAnim:Start( 2 )
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
local function CreateVoiceVGUI()
|
||
|
|
|
||
|
|
g_VoicePanelList = vgui.Create( "DPanel" )
|
||
|
|
|
||
|
|
g_VoicePanelList:ParentToHUD()
|
||
|
|
g_VoicePanelList:SetPos( ScrW() - 300, 100 )
|
||
|
|
g_VoicePanelList:SetSize( 250, ScrH() - 200 )
|
||
|
|
g_VoicePanelList:SetPaintBackground( false )
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
hook.Add( "InitPostEntity", "CreateVoiceVGUI", CreateVoiceVGUI )
|