local hudScreen = nil local Alive = false local Class = nil local Team = 0 local WaitingToRespawn = false local InRound = false local RoundResult = 0 local RoundWinner = nil local IsObserver = false local ObserveMode = 0 local ObserveTarget = NULL local InVote = false function GM:AddHUDItem( item, pos, parent ) hudScreen:AddItem( item, parent, pos ) end function GM:HUDNeedsUpdate() if ( !IsValid( LocalPlayer() ) ) then return false end if ( Class != LocalPlayer():GetNWString( "Class", "Default" ) ) then return true end if ( Alive != LocalPlayer():Alive() ) then return true end if ( Team != LocalPlayer():Team() ) then return true end if ( WaitingToRespawn != ( (LocalPlayer():GetNWFloat( "RespawnTime", 0 ) > CurTime()) && LocalPlayer():Team() != TEAM_SPECTATOR && !LocalPlayer():Alive()) ) then return true end if ( InRound != GetGlobalBool( "InRound", false ) ) then return true end if ( RoundResult != GetGlobalInt( "RoundResult", 0 ) ) then return true end if ( RoundWinner != GetGlobalEntity( "RoundWinner", nil ) ) then return true end if ( IsObserver != LocalPlayer():IsObserver() ) then return true end if ( ObserveMode != LocalPlayer():GetObserverMode() ) then return true end if ( ObserveTarget != LocalPlayer():GetObserverTarget() ) then return true end if ( InVote != GAMEMODE:InGamemodeVote() ) then return true end return false end function GM:OnHUDUpdated() Class = LocalPlayer():GetNWString( "Class", "Default" ) Alive = LocalPlayer():Alive() Team = LocalPlayer():Team() WaitingToRespawn = (LocalPlayer():GetNWFloat( "RespawnTime", 0 ) > CurTime()) && LocalPlayer():Team() != TEAM_SPECTATOR && !Alive InRound = GetGlobalBool( "InRound", false ) RoundResult = GetGlobalInt( "RoundResult", 0 ) RoundWinner = GetGlobalEntity( "RoundWinner", nil ) IsObserver = LocalPlayer():IsObserver() ObserveMode = LocalPlayer():GetObserverMode() ObserveTarget = LocalPlayer():GetObserverTarget() InVote = GAMEMODE:InGamemodeVote() end function GM:OnHUDPaint() end function GM:RefreshHUD() if ( !GAMEMODE:HUDNeedsUpdate() ) then return end GAMEMODE:OnHUDUpdated() if ( IsValid( hudScreen ) ) then hudScreen:Remove() end hudScreen = vgui.Create( "DHudLayout" ) if ( InVote ) then return end if ( RoundWinner and RoundWinner != NULL ) then GAMEMODE:UpdateHUD_RoundResult( RoundWinner, Alive ) elseif ( RoundResult != 0 ) then GAMEMODE:UpdateHUD_RoundResult( RoundResult, Alive ) elseif ( IsObserver ) then GAMEMODE:UpdateHUD_Observer( WaitingToRespawn, InRound, ObserveMode, ObserveTarget ) elseif ( !Alive ) then GAMEMODE:UpdateHUD_Dead( WaitingToRespawn, InRound ) else GAMEMODE:UpdateHUD_Alive( InRound ) if ( GetGlobalBool( "RoundWaitForPlayers" ) && ( ( team.NumPlayers( TEAM_HUNTERS ) < 1 ) || ( team.NumPlayers( TEAM_PROPS ) < 1 ) ) ) then GAMEMODE:UpdateHUD_WaitForPlayers( InRound ) end end end function GM:HUDPaint() self.BaseClass:HUDPaint() GAMEMODE:OnHUDPaint() GAMEMODE:RefreshHUD() end function GM:UpdateHUD_WaitForPlayers( InRound ) if ( InRound && Alive ) then local WaitText = vgui.Create( "DHudElement" ); WaitText:SizeToContents() WaitText:SetText( "Waiting for players..." ) GAMEMODE:AddHUDItem( WaitText, 8 ) end end function GM:UpdateHUD_RoundResult( RoundResult, Alive ) local txt = GetGlobalString( "RRText" ) if ( type( RoundResult ) == "number" ) && ( team.GetAllTeams()[ RoundResult ] && txt == "" ) then local TeamName = team.GetName( RoundResult ) if ( TeamName ) then txt = TeamName .. " Wins!" end elseif ( type( RoundResult ) == "Player" && IsValid( RoundResult ) && txt == "" ) then txt = RoundResult:Name() .. " Wins!" end local RespawnText = vgui.Create( "DHudElement" ); RespawnText:SizeToContents() RespawnText:SetText( txt ) GAMEMODE:AddHUDItem( RespawnText, 8 ) end function GM:UpdateHUD_Observer( bWaitingToSpawn, InRound, ObserveMode, ObserveTarget ) local lbl = nil local txt = nil local col = Color( 255, 255, 255 ); if ( IsValid( ObserveTarget ) && ObserveTarget:IsPlayer() && ObserveTarget != LocalPlayer() && ObserveMode != OBS_MODE_ROAMING ) then lbl = "SPECTATING" txt = ObserveTarget:Nick() col = team.GetColor( ObserveTarget:Team() ); end if ( ObserveMode == OBS_MODE_DEATHCAM || ObserveMode == OBS_MODE_FREEZECAM ) then txt = "You Died!" // were killed by? end if ( txt ) then local txtLabel = vgui.Create( "DHudElement" ); txtLabel:SetText( txt ) if ( lbl ) then txtLabel:SetLabel( lbl ) end txtLabel:SetTextColor( col ) GAMEMODE:AddHUDItem( txtLabel, 2 ) end GAMEMODE:UpdateHUD_Dead( bWaitingToSpawn, InRound ) end function GM:UpdateHUD_Dead( bWaitingToSpawn, InRound ) if ( !InRound && GAMEMODE.RoundBased ) then local RespawnText = vgui.Create( "DHudElement" ); RespawnText:SizeToContents() RespawnText:SetText( "Waiting for round start" ) GAMEMODE:AddHUDItem( RespawnText, 8 ) return end if ( bWaitingToSpawn ) then local RespawnTimer = vgui.Create( "DHudCountdown" ); RespawnTimer:SizeToContents() RespawnTimer:SetValueFunction( function() return LocalPlayer():GetNWFloat( "RespawnTime", 0 ) end ) RespawnTimer:SetLabel( "SPAWN IN" ) GAMEMODE:AddHUDItem( RespawnTimer, 8 ) return end --[[ if ( InRound ) then local RoundTimer = vgui.Create( "DHudCountdown" ); RoundTimer:SizeToContents() RoundTimer:SetValueFunction( function() if ( GetGlobalFloat( "RoundStartTime", 0 ) > CurTime() ) then return GetGlobalFloat( "RoundStartTime", 0 ) end return GetGlobalFloat( "RoundEndTime" ) end ) RoundTimer:SetLabel( "TIME" ) GAMEMODE:AddHUDItem( RoundTimer, 8 ) return end ]]-- local Bar = vgui.Create( "DHudBar" ) GAMEMODE:AddHUDItem( Bar, 8 ) -- This should show on dead players too if ( InRound ) then local TeamIndicator_Name_AddString = "(DEAD) " if ( LocalPlayer():Team() == TEAM_SPECTATOR ) then TeamIndicator_Name_AddString = "" end local TeamIndicator = vgui.Create( "DHudUpdater" ); TeamIndicator:SizeToContents() TeamIndicator:SetValueFunction( function() return TeamIndicator_Name_AddString..""..team.GetName( LocalPlayer():Team() ) end ) TeamIndicator:SetColorFunction( function() return team.GetColor( LocalPlayer():Team() ) end ) TeamIndicator:SetFont( "HudSelectionText" ) Bar:AddItem( TeamIndicator ) local RoundNumber = vgui.Create( "DHudUpdater" ); RoundNumber:SizeToContents() RoundNumber:SetValueFunction( function() return GetGlobalInt( "RoundNumber", 0 ) end ) RoundNumber:SetLabel( "ROUND" ) Bar:AddItem( RoundNumber ) local RoundTimer = vgui.Create( "DHudCountdown" ); RoundTimer:SizeToContents() RoundTimer:SetValueFunction( function() if ( GetGlobalFloat( "RoundStartTime", 0 ) > CurTime() ) then return GetGlobalFloat( "RoundStartTime", 0 ) end return GetGlobalFloat( "RoundEndTime" ) end ) RoundTimer:SetLabel( "TIME" ) Bar:AddItem( RoundTimer ) end if ( Team != TEAM_SPECTATOR && !Alive && !GAMEMODE.RoundBased ) then local RespawnText = vgui.Create( "DHudElement" ); RespawnText:SizeToContents() RespawnText:SetText( "Press Fire to Spawn" ) GAMEMODE:AddHUDItem( RespawnText, 8 ) end end function GM:UpdateHUD_Alive( InRound ) if ( GAMEMODE.RoundBased || GAMEMODE.TeamBased ) then local Bar = vgui.Create( "DHudBar" ) GAMEMODE:AddHUDItem( Bar, 2 ) if ( GAMEMODE.TeamBased && GAMEMODE.ShowTeamName ) then local TeamIndicator = vgui.Create( "DHudUpdater" ); TeamIndicator:SizeToContents() TeamIndicator:SetValueFunction( function() return team.GetName( LocalPlayer():Team() ) end ) TeamIndicator:SetColorFunction( function() return team.GetColor( LocalPlayer():Team() ) end ) TeamIndicator:SetFont( "HudSelectionText" ) Bar:AddItem( TeamIndicator ) end if ( GAMEMODE.RoundBased ) then local RoundNumber = vgui.Create( "DHudUpdater" ); RoundNumber:SizeToContents() RoundNumber:SetValueFunction( function() return GetGlobalInt( "RoundNumber", 0 ) end ) RoundNumber:SetLabel( "ROUND" ) Bar:AddItem( RoundNumber ) local RoundTimer = vgui.Create( "DHudCountdown" ); RoundTimer:SizeToContents() RoundTimer:SetValueFunction( function() if ( GetGlobalFloat( "RoundStartTime", 0 ) > CurTime() ) then return GetGlobalFloat( "RoundStartTime", 0 ) end return GetGlobalFloat( "RoundEndTime" ) end ) RoundTimer:SetLabel( "TIME" ) Bar:AddItem( RoundTimer ) end end end --[[ this thing is obsolete/depcretaed. Sorry! function GM:UpdateHUD_AddedTime( iTimeAdded ) // to do or to override, your choice end usermessage.Hook( "RoundAddedTime", function( um ) if( GAMEMODE && um ) then GAMEMODE:UpdateHUD_AddedTime( um:ReadFloat() ) end end ) ]]--