summaryrefslogtreecommitdiff
path: root/ftp_gmstranded/gamemode/cl_scoreboard.lua
diff options
context:
space:
mode:
authorScott <scotth0828@gmail.com>2016-04-30 20:31:37 -0400
committerScott <scotth0828@gmail.com>2016-04-30 20:31:37 -0400
commite8fc8b5bf824ed3283dede946e66f5fd843d54ff (patch)
treecf935647c5c5ae0c44b30e8a1256df7799c41a5a /ftp_gmstranded/gamemode/cl_scoreboard.lua
parent6f6cce0561c19e7af14bcc6e6b1c7de2d5efc530 (diff)
downloadgmstranded-e8fc8b5bf824ed3283dede946e66f5fd843d54ff.tar.gz
gmstranded-e8fc8b5bf824ed3283dede946e66f5fd843d54ff.tar.bz2
gmstranded-e8fc8b5bf824ed3283dede946e66f5fd843d54ff.zip
Some changes
Diffstat (limited to 'ftp_gmstranded/gamemode/cl_scoreboard.lua')
-rw-r--r--ftp_gmstranded/gamemode/cl_scoreboard.lua231
1 files changed, 231 insertions, 0 deletions
diff --git a/ftp_gmstranded/gamemode/cl_scoreboard.lua b/ftp_gmstranded/gamemode/cl_scoreboard.lua
new file mode 100644
index 0000000..e832a4a
--- /dev/null
+++ b/ftp_gmstranded/gamemode/cl_scoreboard.lua
@@ -0,0 +1,231 @@
+
+surface.CreateFont( "ScoreboardText", {
+ font = "Tahoma",
+ size = 16,
+ weight = 1000,
+ antialias = true,
+ additive = false,
+} )
+
+surface.CreateFont( "ScoreboardSub", {
+ font = "coolvetica",
+ size = 24,
+ weight = 500,
+ antialias = true,
+ additive = false,
+} )
+
+surface.CreateFont( "ScoreboardHead", {
+ font = "coolvetica",
+ size = 48,
+ weight = 500,
+ antialias = true,
+ additive = false,
+} )
+
+function GM:ScoreboardShow()
+ GAMEMODE.ShowScoreboard = true
+end
+
+function GM:ScoreboardHide()
+ GAMEMODE.ShowScoreboard = false
+end
+
+function GM:GetTeamScoreInfo()
+ local TeamInfo = {}
+
+ for id, pl in pairs(player.GetAll()) do
+ local _team = pl:Team()
+ local _frags = pl:Frags()
+ local _deaths = pl:Deaths()
+ local _ping = pl:Ping()
+
+ if (!TeamInfo[_team]) then
+ TeamInfo[_team] = {}
+ TeamInfo[_team].TeamName = team.GetName(_team)
+ TeamInfo[_team].Color = team.GetColor(_team)
+ TeamInfo[_team].Players = {}
+ end
+
+ local PlayerInfo = {}
+ PlayerInfo.Frags = _frags
+ PlayerInfo.Deaths = pl:GetNWInt("Survival")
+ PlayerInfo.Score = _frags
+ PlayerInfo.Ping = _ping
+ PlayerInfo.Name = pl:Nick()
+ PlayerInfo.PlayerObj = pl
+
+ if ( pl:IsAdmin() ) then PlayerInfo.Name = "[ADMIN] " .. PlayerInfo.Name end
+ if ( pl:IsDeveloper() ) then PlayerInfo.Name = "[DEVELOPER] " .. pl:Nick() end
+ if ( pl:GetNWBool( "AFK" ) ) then PlayerInfo.Name = PlayerInfo.Name .. " [AFK]" end
+
+ local insertPos = #TeamInfo[_team].Players + 1
+ for idx, info in pairs(TeamInfo[_team].Players) do
+ if (PlayerInfo.Frags > info.Frags) then
+ insertPos = idx
+ break
+ elseif (PlayerInfo.Frags == info.Frags) then
+ if (PlayerInfo.Deaths < info.Deaths) then
+ insertPos = idx
+ break
+ elseif (PlayerInfo.Deaths == info.Deaths) then
+ if (PlayerInfo.Name < info.Name) then
+ insertPos = idx
+ break
+ end
+ end
+ end
+ end
+
+ table.insert( TeamInfo[ _team ].Players, insertPos, PlayerInfo )
+ end
+
+ return TeamInfo
+end
+
+function GM:HUDDrawScoreBoard()
+ if ( !GAMEMODE.ShowScoreboard ) then return end
+
+ if ( !GAMEMODE.ScoreDesign ) then
+ GAMEMODE.ScoreDesign = {}
+ GAMEMODE.ScoreDesign.HeaderY = 0
+ GAMEMODE.ScoreDesign.Height = ScrH() / 2
+ end
+
+ local alpha = 255
+ local ScoreboardInfo = self:GetTeamScoreInfo()
+ local xOffset = ScrW() / 8
+ local yOffset = 32
+ local scrWidth = ScrW()
+ local scrHeight = ScrH() - 64
+ local boardWidth = scrWidth - ( 2 * xOffset )
+ local boardHeight = scrHeight
+ local colWidth = 75
+
+ boardWidth = math.Clamp( boardWidth, 400, 600 )
+ boardHeight = GAMEMODE.ScoreDesign.Height
+
+ xOffset = (ScrW() - boardWidth) / 2.0
+ yOffset = (ScrH() - boardHeight) / 2.0
+ yOffset = yOffset - ScrH() / 4.0
+ yOffset = math.Clamp( yOffset, 32, ScrH() )
+
+ surface.SetDrawColor( 0, 0, 0, 200 )
+ surface.DrawRect( xOffset, yOffset, boardWidth, boardHeight )
+
+ surface.SetDrawColor( 0, 0, 0, 150 )
+ surface.DrawOutlinedRect( xOffset, yOffset, boardWidth, boardHeight )
+
+ surface.SetDrawColor( 0, 0, 0, 50 )
+ //surface.DrawOutlinedRect( xOffset - 1, yOffset - 1, boardWidth + 2, boardHeight + 2 )
+
+ local hostname = GetGlobalString( "ServerName" )
+ local gamemodeName = GAMEMODE.Name .. " - " .. GAMEMODE.Author
+
+ if ( string.len( hostname ) > 32 ) then
+ surface.SetFont("ScoreboardSub")
+ else
+ surface.SetFont("ScoreboardHead")
+ end
+
+ surface.SetTextColor(255, 255, 255, 255)
+ local txWidth, txHeight = surface.GetTextSize( hostname )
+ local y = yOffset + 5
+ surface.SetTextPos(xOffset + (boardWidth / 2) - (txWidth / 2), y)
+ surface.DrawText(hostname)
+
+ /*y = y + txHeight + 2
+
+ surface.SetTextColor(255, 255, 255, 255)
+ surface.SetFont("ScoreboardSub")
+ local txWidth, txHeight = surface.GetTextSize(gamemodeName)
+ surface.SetTextPos(xOffset + (boardWidth / 2) - (txWidth / 2), y)
+ surface.DrawText(gamemodeName)*/
+
+ y = y + txHeight + 4
+ GAMEMODE.ScoreDesign.HeaderY = y - yOffset
+
+ surface.SetDrawColor(0, 0, 0, 100)
+ surface.DrawRect(xOffset, y - 1, boardWidth, 1)
+
+ surface.SetDrawColor(255, 255, 255, 20)
+ surface.DrawRect(xOffset + boardWidth - (colWidth * 1), y, colWidth, boardHeight - y + yOffset)
+
+ surface.SetDrawColor(255, 255, 255, 20)
+ surface.DrawRect(xOffset + boardWidth - (colWidth * 3), y, colWidth, boardHeight - y + yOffset)
+
+ surface.SetFont("ScoreboardText")
+ local txWidth, txHeight = surface.GetTextSize("W")
+
+ surface.SetDrawColor(0, 0, 0, 100)
+ surface.DrawRect(xOffset, y, boardWidth, txHeight + 6)
+
+ y = y + 2
+
+ surface.SetTextPos(xOffset + 16, y)
+ surface.DrawText("#Name")
+ surface.SetTextPos(xOffset + boardWidth - (colWidth * 3) + 8, y)
+ surface.DrawText("#Score")
+ surface.SetTextPos(xOffset + boardWidth - (colWidth * 2) + 8, y)
+ surface.DrawText("Level")
+ surface.SetTextPos(xOffset + boardWidth - (colWidth * 1) + 8, y)
+ surface.DrawText("#Ping")
+
+ y = y + txHeight + 4
+
+ local yPosition = y
+ for team, info in pairs(ScoreboardInfo) do
+ local teamText = info.TeamName .. " (" .. #info.Players .. " Players)"
+
+ surface.SetFont("ScoreboardText")
+ if (info.Color.r < 50 and info.Color.g < 50 and info.Color.b < 50) then surface.SetTextColor(255, 255, 255, 255) else surface.SetTextColor(0, 0, 0, 255) end
+
+ txWidth, txHeight = surface.GetTextSize(teamText)
+ surface.SetDrawColor(info.Color.r, info.Color.g, info.Color.b, 255)
+ surface.DrawRect(xOffset + 1, yPosition, boardWidth - 2, txHeight + 4)
+ yPosition = yPosition + 2
+ surface.SetTextPos(xOffset + boardWidth / 2 - txWidth / 2, yPosition)
+
+ surface.DrawText(teamText)
+ yPosition = yPosition + txHeight + 4
+
+ for index, plinfo in pairs(info.Players) do
+ surface.SetFont("ScoreboardText")
+ surface.SetTextColor(info.Color.r, info.Color.g, info.Color.b, 200)
+ surface.SetTextPos(xOffset + 16, yPosition)
+ txWidth, txHeight = surface.GetTextSize(plinfo.Name)
+
+ if (plinfo.PlayerObj == LocalPlayer()) then
+ surface.SetDrawColor(info.Color.r, info.Color.g, info.Color.b, 64)
+ surface.DrawRect(xOffset + 1, yPosition, boardWidth - 2, txHeight + 2)
+ surface.SetTextColor(info.Color.r, info.Color.g, info.Color.b, 255)
+ end
+
+ local px, py = xOffset + 16, yPosition
+ local textcolor = Color(info.Color.r, info.Color.g, info.Color.b, alpha)
+ local shadowcolor = Color(0, 0, 0, alpha * 0.8)
+
+ draw.SimpleText(plinfo.Name, "ScoreboardText", px + 1, py + 1, shadowcolor)
+ draw.SimpleText(plinfo.Name, "ScoreboardText", px, py, textcolor)
+
+ px = xOffset + boardWidth - (colWidth * 3) + 8
+ draw.SimpleText(plinfo.Frags, "ScoreboardText", px + 1, py + 1, shadowcolor)
+ draw.SimpleText(plinfo.Frags, "ScoreboardText", px, py, textcolor)
+
+ px = xOffset + boardWidth - (colWidth * 2) + 8
+ draw.SimpleText(plinfo.Deaths, "ScoreboardText", px + 1, py + 1, shadowcolor)
+ draw.SimpleText(plinfo.Deaths, "ScoreboardText", px, py, textcolor)
+
+ px = xOffset + boardWidth - (colWidth * 1) + 8
+ draw.SimpleText(plinfo.Ping, "ScoreboardText", px + 1, py + 1, shadowcolor)
+ draw.SimpleText(plinfo.Ping, "ScoreboardText", px, py, textcolor)
+
+ yPosition = yPosition + txHeight + 3
+ end
+ end
+
+ yPosition = yPosition + 1
+
+ GAMEMODE.ScoreDesign.Height = (GAMEMODE.ScoreDesign.Height * 2) + (yPosition - yOffset)
+ GAMEMODE.ScoreDesign.Height = GAMEMODE.ScoreDesign.Height / 3
+end