2019-05-28 09:16:53 +02:00

241 lines
6.3 KiB
Lua

local PANEL = {}
function PANEL:Init()
self:SetSkin( GAMEMODE.HudSkin )
self:ParentToHUD()
self.ControlCanvas = vgui.Create( "Panel", self )
self.ControlCanvas:MakePopup()
self.ControlCanvas:SetKeyboardInputEnabled( false )
self.lblCountDown = vgui.Create( "DLabel", self.ControlCanvas )
self.lblCountDown:SetText( "60" )
self.lblActionName = vgui.Create( "DLabel", self.ControlCanvas )
self.ctrlList = vgui.Create( "DPanelList", self.ControlCanvas )
self.ctrlList:SetDrawBackground( false )
self.ctrlList:SetSpacing( 2 )
self.ctrlList:SetPadding( 2 )
self.ctrlList:EnableHorizontal( true )
self.ctrlList:EnableVerticalScrollbar()
self.Peeps = {}
for i =1, game.MaxPlayers() do
self.Peeps[i] = vgui.Create( "DImage", self.ctrlList:GetCanvas() )
self.Peeps[i]:SetSize( 16, 16 )
self.Peeps[i]:SetZPos( 1000 )
self.Peeps[i]:SetVisible( false )
self.Peeps[i]:SetImage( "icon16/emoticon_smile.png" )
end
end
function PANEL:PerformLayout()
local cx, cy = chat.GetChatBoxPos()
self:SetPos( 0, 0 )
self:SetSize( ScrW(), ScrH() )
self.ControlCanvas:StretchToParent( 0, 0, 0, 0 )
self.ControlCanvas:SetWide( 550 )
self.ControlCanvas:SetTall( cy - 30 )
self.ControlCanvas:SetPos( 0, 30 )
self.ControlCanvas:CenterHorizontal();
self.ControlCanvas:SetZPos( 0 )
self.lblCountDown:SetFont( "FRETTA_MEDIUM_SHADOW" )
self.lblCountDown:AlignRight()
self.lblCountDown:SetTextColor( color_white )
self.lblCountDown:SetContentAlignment( 6 )
self.lblCountDown:SetWidth( 500 )
self.lblActionName:SetFont( "FRETTA_LARGE_SHADOW" )
self.lblActionName:AlignLeft()
self.lblActionName:SetTextColor( color_white )
self.lblActionName:SizeToContents()
self.lblActionName:SetWidth( 500 )
self.ctrlList:StretchToParent( 0, 60, 0, 0 )
end
function PANEL:ChooseGamemode()
self.lblActionName:SetText( "Which Gamemode Next?" )
self.ctrlList:Clear()
for name, gamemode in RandomPairs( g_PlayableGamemodes ) do
local lbl = vgui.Create( "DButton", self.ctrlList )
lbl:SetText( gamemode.label )
Derma_Hook( lbl, "Paint", "Paint", "GamemodeButton" )
Derma_Hook( lbl, "ApplySchemeSettings", "Scheme", "GamemodeButton" )
Derma_Hook( lbl, "PerformLayout", "Layout", "GamemodeButton" )
lbl:SetTall( 24 )
lbl:SetWide( 240 )
local desc = tostring( gamemode.description );
if ( gamemode.author ) then desc = desc .. "\n\nBy: " .. tostring( gamemode.author ) end
if ( gamemode.authorurl ) then desc = desc .. "\n" .. tostring( gamemode.authorurl ) end
lbl:SetTooltip( desc )
lbl.WantName = name
lbl.NumVotes = 0
lbl.DoClick = function() if GetGlobalFloat( "VoteEndTime", 0 ) - CurTime() <= 0 then return end RunConsoleCommand( "votegamemode", name ) end
self.ctrlList:AddItem( lbl )
end
end
function PANEL:ChooseMap( gamemode )
self.lblActionName:SetText( "Which Map?" )
self:ResetPeeps()
self.ctrlList:Clear()
local gm = g_PlayableGamemodes[ gamemode ]
if ( !gm ) then MsgN( "GAMEMODE MISSING, COULDN'T VOTE FOR MAP ", gamemode ) return end
for id, mapname in RandomPairs( gm.maps ) do
local lbl = vgui.Create( "DButton", self.ctrlList )
lbl:SetText( mapname )
Derma_Hook( lbl, "Paint", "Paint", "GamemodeButton" )
Derma_Hook( lbl, "ApplySchemeSettings", "Scheme", "GamemodeButton" )
Derma_Hook( lbl, "PerformLayout", "Layout", "GamemodeButton" )
lbl:SetTall( 24 )
lbl:SetWide( 240 )
lbl.WantName = mapname
lbl.NumVotes = 0
lbl.DoClick = function() if GetGlobalFloat( "VoteEndTime", 0 ) - CurTime() <= 0 then return end RunConsoleCommand( "votemap", mapname ) end
--[[if file.Exists("maps/"..mapname..".png", "MOD") then
lbl:SetTall(72)
local Image = vgui.Create("DImage", lbl)
Image:SetImage("../maps/"..mapname..".png")
Image:SizeToContents()
Image:SetSize(math.min(Image:GetWide(), 64), math.min(Image:GetTall(), 64))
Image:AlignRight(4)
Image:CenterVertical()
end]]
self.ctrlList:AddItem( lbl )
end
end
function PANEL:ResetPeeps()
for i=1, game.MaxPlayers() do
self.Peeps[i]:SetPos( math.random( 0, 600 ), -16 )
self.Peeps[i]:SetVisible( false )
self.Peeps[i].strVote = nil
end
end
function PANEL:FindWantBar( name )
for k, v in pairs( self.ctrlList:GetItems() ) do
if ( v.WantName == name ) then return v end
end
end
function PANEL:PeepThink( peep, ent )
if ( !IsValid( ent ) ) then
peep:SetVisible( false )
return
end
peep:SetTooltip( ent:Nick() )
peep:SetMouseInputEnabled( true )
if ( !peep.strVote ) then
peep:SetVisible( true )
peep:SetPos( math.random( 0, 600 ), -16 )
if ( ent == LocalPlayer() ) then
peep:SetImage( "icon16/star.png" )
end
end
peep.strVote = ent:GetNWString( "Wants", "" )
local bar = self:FindWantBar( peep.strVote )
if ( IsValid( bar ) ) then
bar.NumVotes = bar.NumVotes + 1
local vCurrentPos = Vector( peep.x, peep.y, 0 )
local vNewPos = Vector( (bar.x + bar:GetWide()) - 15 * bar.NumVotes - 4, bar.y + ( bar:GetTall() * 0.5 - 8 ), 0 )
if ( !peep.CurPos || peep.CurPos != vNewPos ) then
peep:MoveTo( vNewPos.x, vNewPos.y, 0.2 )
peep.CurPos = vNewPos
end
end
end
function PANEL:Think()
local Seconds = GetGlobalFloat( "VoteEndTime", 0 ) - CurTime()
if ( Seconds < 0 ) then Seconds = 0 end
self.lblCountDown:SetText( Format( "%i", Seconds ) )
for k, v in pairs( self.ctrlList:GetItems() ) do
v.NumVotes = 0
end
for i=1, game.MaxPlayers() do
self:PeepThink( self.Peeps[i], Entity(i) )
end
end
function PANEL:Paint()
Derma_DrawBackgroundBlur( self )
local CenterY = ScrH() / 2.0
local CenterX = ScrW() / 2.0
surface.SetDrawColor( 0, 0, 0, 200 );
surface.DrawRect( 0, 0, ScrW(), ScrH() );
end
function PANEL:FlashItem( itemname )
local bar = self:FindWantBar( itemname )
if ( !IsValid( bar ) ) then return end
timer.Simple( 0.0, function() bar.bgColor = Color( 0, 255, 255 ) surface.PlaySound( "hl1/fvox/blip.wav" ) end )
timer.Simple( 0.2, function() bar.bgColor = nil end )
timer.Simple( 0.4, function() bar.bgColor = Color( 0, 255, 255 ) surface.PlaySound( "hl1/fvox/blip.wav" ) end )
timer.Simple( 0.6, function() bar.bgColor = nil end )
timer.Simple( 0.8, function() bar.bgColor = Color( 0, 255, 255 ) surface.PlaySound( "hl1/fvox/blip.wav" ) end )
timer.Simple( 1.0, function() bar.bgColor = Color( 100, 100, 100 ) end )
end
derma.DefineControl( "VoteScreen", "", PANEL, "DPanel" )