241 lines
6.3 KiB
Lua
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" )
|