mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
273
gamemodes/terrortown/gamemode/vgui/sb_info.lua
Normal file
273
gamemodes/terrortown/gamemode/vgui/sb_info.lua
Normal file
@@ -0,0 +1,273 @@
|
||||
--[[
|
||||
| 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")
|
||||
Reference in New Issue
Block a user