Files
wnsrc/gamemodes/terrortown/gamemode/vgui/sb_info.lua
lifestorm df294d03aa Upload
2024-08-04 23:54:45 +03:00

274 lines
5.8 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/
--]]
---- Player info panel, based on sandbox scoreboard's infocard
local vgui = vgui
local GetTranslation = LANG.GetTranslation
local GetPTranslation = LANG.GetParamTranslation
--- Base stuff
local PANEL = {}
function PANEL:Init()
self.Player = nil
--self:SetMouseInputEnabled(false)
end
function PANEL:SetPlayer(ply)
self.Player = ply
self:UpdatePlayerData()
end
function PANEL:UpdatePlayerData()
-- override me
end
function PANEL:Paint()
return true
end
vgui.Register("TTTScorePlayerInfoBase", PANEL, "Panel")
--- Dead player search results
local PANEL = {}
function PANEL:Init()
self.List = vgui.Create("DPanelSelect", self)
self.List:EnableHorizontal(true)
if self.List.VBar then
self.List.VBar:Remove()
self.List.VBar = nil
end
self.Scroll = vgui.Create("DHorizontalScroller", self.List)
self.Help = vgui.Create("DLabel", self)
self.Help:SetText(GetTranslation("sb_info_help"))
self.Help:SetFont("treb_small")
self.Help:SetVisible(false)
end
function PANEL:PerformLayout()
self:SetSize(self:GetWide(), 75)
self.List:SetPos(0, 0)
self.List:SetSize(self:GetWide(), 70)
self.List:SetSpacing(1)
self.List:SetPadding(2)
self.List:SetPaintBackground(false)
self.Scroll:StretchToParent(3,3,3,3)
self.Help:SizeToContents()
self.Help:SetPos(5, 5)
end
function PANEL:UpdatePlayerData()
if not IsValid(self.Player) then return end
if not self.Player.search_result then
self.Help:SetVisible(true)
return
end
self.Help:SetVisible(false)
if self.Search == self.Player.search_result then return end
self.List:Clear(true)
self.Scroll.Panels = {}
local search_raw = self.Player.search_result
-- standard search result preproc
local search = PreprocSearch(search_raw)
-- wipe some stuff we don't need, like id
search.nick = nil
-- Create table of SimpleIcons, each standing for a piece of search
-- information.
for t, info in SortedPairsByMemberValue(search, "p") do
local ic = nil
-- Certain items need a special icon conveying additional information
if t == "lastid" then
ic = vgui.Create("SimpleIconAvatar", self.List)
ic:SetPlayer(info.ply)
ic:SetAvatarSize(24)
elseif t == "dtime" then
ic = vgui.Create("SimpleIconLabelled", self.List)
ic:SetIconText(info.text_icon)
else
ic = vgui.Create("SimpleIcon", self.List)
end
ic:SetIconSize(64)
ic:SetIcon(info.img)
ic:SetTooltip(info.text)
ic.info_type = t
self.List:AddPanel(ic)
self.Scroll:AddPanel(ic)
end
self.Search = search_raw
self.List:InvalidateLayout()
self.Scroll:InvalidateLayout()
self:PerformLayout()
end
vgui.Register("TTTScorePlayerInfoSearch", PANEL, "TTTScorePlayerInfoBase")
--- Living player, tags etc
local tags = {
{txt="sb_tag_friend", color=COLOR_GREEN},
{txt="sb_tag_susp", color=COLOR_YELLOW},
{txt="sb_tag_avoid", color=Color(255, 150, 0, 255)},
{txt="sb_tag_kill", color=COLOR_RED},
{txt="sb_tag_miss", color=Color(130, 190, 130, 255)}
};
local PANEL = {}
function PANEL:Init()
self.TagButtons = {}
for k, tag in ipairs(tags) do
self.TagButtons[k] = vgui.Create("TagButton", self)
self.TagButtons[k]:SetupTag(tag)
end
--self:SetMouseInputEnabled(false)
end
function PANEL:SetPlayer(ply)
self.Player = ply
for _, btn in pairs(self.TagButtons) do
btn:SetPlayer(ply)
end
self:InvalidateLayout()
end
function PANEL:ApplySchemeSettings()
end
function PANEL:UpdateTag()
self:GetParent():UpdatePlayerData()
self:GetParent():SetOpen(false)
end
function PANEL:PerformLayout()
self:SetSize(self:GetWide(), 30)
local margin = 10
local x = 250 --29
local y = 0
for k, btn in ipairs(self.TagButtons) do
btn:SetPos(x, y)
btn:SetCursor("hand")
btn:SizeToContents()
btn:PerformLayout()
x = x + btn:GetWide() + margin
end
end
vgui.Register("TTTScorePlayerInfoTags", PANEL, "TTTScorePlayerInfoBase")
--- Tag button
local PANEL = {}
function PANEL:Init()
self.Player = nil
self:SetText("")
self:SetMouseInputEnabled(true)
self:SetKeyboardInputEnabled(false)
self:SetTall(20)
self:SetPaintBackgroundEnabled(false)
self:SetPaintBorderEnabled(false)
self:SetPaintBackground(false)
self:SetDrawBorder(false)
self:SetFont("treb_small")
self:SetTextColor(self.Tag and self.Tag.color or COLOR_WHITE)
end
function PANEL:SetPlayer(ply)
self.Player = ply
end
function PANEL:SetupTag(tag)
self.Tag = tag
self.Color = tag.color
self.Text = tag.txt
self:SetTextColor(self.Tag and self.Tag.color or COLOR_WHITE)
end
function PANEL:PerformLayout()
self:SetText(self.Tag and GetTranslation(self.Tag.txt) or "")
self:SizeToContents()
self:SetContentAlignment(5)
self:SetSize(self:GetWide() + 10, self:GetTall() + 3)
end
function PANEL:DoRightClick()
if IsValid(self.Player) then
self.Player.sb_tag = nil
self:GetParent():UpdateTag()
end
end
function PANEL:DoClick()
if IsValid(self.Player) then
if self.Player.sb_tag == self.Tag then
self.Player.sb_tag = nil
else
self.Player.sb_tag = self.Tag
end
self:GetParent():UpdateTag()
end
end
local select_color = Color(255, 200, 0, 255)
function PANEL:PaintOver()
if self.Player and self.Player.sb_tag == self.Tag then
surface.SetDrawColor(255,200,0,255)
surface.DrawOutlinedRect(0, 0, self:GetWide(), self:GetTall())
end
end
vgui.Register("TagButton", PANEL, "DButton")