mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
Upload
This commit is contained in:
240
gamemodes/terrortown/gamemode/vgui/simpleicon.lua
Normal file
240
gamemodes/terrortown/gamemode/vgui/simpleicon.lua
Normal file
@@ -0,0 +1,240 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
-- Altered version of gmod's SpawnIcon
|
||||
-- This panel does not deal with models and such
|
||||
|
||||
|
||||
local matHover = Material( "vgui/spawnmenu/hover" )
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
AccessorFunc( PANEL, "m_iIconSize", "IconSize" )
|
||||
|
||||
function PANEL:Init()
|
||||
self.Icon = vgui.Create( "DImage", self )
|
||||
self.Icon:SetMouseInputEnabled( false )
|
||||
self.Icon:SetKeyboardInputEnabled( false )
|
||||
|
||||
self.animPress = Derma_Anim( "Press", self, self.PressedAnim )
|
||||
|
||||
self:SetIconSize(64)
|
||||
|
||||
end
|
||||
|
||||
function PANEL:OnMousePressed( mcode )
|
||||
if mcode == MOUSE_LEFT then
|
||||
self:DoClick()
|
||||
self.animPress:Start(0.1)
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:OnMouseReleased()
|
||||
end
|
||||
|
||||
function PANEL:DoClick()
|
||||
end
|
||||
|
||||
function PANEL:OpenMenu()
|
||||
end
|
||||
|
||||
function PANEL:ApplySchemeSettings()
|
||||
end
|
||||
|
||||
function PANEL:OnCursorEntered()
|
||||
self.PaintOverOld = self.PaintOver
|
||||
self.PaintOver = self.PaintOverHovered
|
||||
end
|
||||
|
||||
function PANEL:OnCursorExited()
|
||||
if self.PaintOver == self.PaintOverHovered then
|
||||
self.PaintOver = self.PaintOverOld
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:PaintOverHovered()
|
||||
|
||||
if self.animPress:Active() then return end
|
||||
|
||||
surface.SetDrawColor( 255, 255, 255, 80 )
|
||||
surface.SetMaterial( matHover )
|
||||
self:DrawTexturedRect()
|
||||
|
||||
end
|
||||
|
||||
function PANEL:PerformLayout()
|
||||
if self.animPress:Active() then return end
|
||||
self:SetSize( self.m_iIconSize, self.m_iIconSize )
|
||||
self.Icon:StretchToParent( 0, 0, 0, 0 )
|
||||
end
|
||||
|
||||
function PANEL:SetIcon( icon )
|
||||
self.Icon:SetImage(icon)
|
||||
end
|
||||
|
||||
function PANEL:GetIcon()
|
||||
return self.Icon:GetImage()
|
||||
end
|
||||
|
||||
function PANEL:SetIconColor(clr)
|
||||
self.Icon:SetImageColor(clr)
|
||||
end
|
||||
|
||||
function PANEL:Think()
|
||||
self.animPress:Run()
|
||||
end
|
||||
|
||||
function PANEL:PressedAnim( anim, delta, data )
|
||||
|
||||
if anim.Started then
|
||||
return
|
||||
end
|
||||
|
||||
if anim.Finished then
|
||||
self.Icon:StretchToParent( 0, 0, 0, 0 )
|
||||
return
|
||||
end
|
||||
|
||||
local border = math.sin( delta * math.pi ) * (self.m_iIconSize * 0.05 )
|
||||
self.Icon:StretchToParent( border, border, border, border )
|
||||
|
||||
end
|
||||
|
||||
vgui.Register( "SimpleIcon", PANEL, "Panel" )
|
||||
|
||||
---
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
self.Layers = {}
|
||||
end
|
||||
|
||||
-- Add a panel to this icon. Most recent addition will be the top layer.
|
||||
function PANEL:AddLayer(pnl)
|
||||
if not IsValid(pnl) then return end
|
||||
|
||||
pnl:SetParent(self)
|
||||
|
||||
pnl:SetMouseInputEnabled(false)
|
||||
pnl:SetKeyboardInputEnabled(false)
|
||||
|
||||
table.insert(self.Layers, pnl)
|
||||
end
|
||||
|
||||
function PANEL:PerformLayout()
|
||||
if self.animPress:Active() then return end
|
||||
self:SetSize( self.m_iIconSize, self.m_iIconSize )
|
||||
self.Icon:StretchToParent( 0, 0, 0, 0 )
|
||||
|
||||
for _, p in ipairs(self.Layers) do
|
||||
p:SetPos(0, 0)
|
||||
p:InvalidateLayout()
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:EnableMousePassthrough(pnl)
|
||||
for _, p in pairs(self.Layers) do
|
||||
if p == pnl then
|
||||
p.OnMousePressed = function(s, mc) s:GetParent():OnMousePressed(mc) end
|
||||
p.OnCursorEntered = function(s) s:GetParent():OnCursorEntered() end
|
||||
p.OnCursorExited = function(s) s:GetParent():OnCursorExited() end
|
||||
|
||||
p:SetMouseInputEnabled(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
vgui.Register("LayeredIcon", PANEL, "SimpleIcon")
|
||||
|
||||
-- Avatar icon
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
self.imgAvatar = vgui.Create( "AvatarImage", self )
|
||||
self.imgAvatar:SetMouseInputEnabled( false )
|
||||
self.imgAvatar:SetKeyboardInputEnabled( false )
|
||||
self.imgAvatar.PerformLayout = function(s) s:Center() end
|
||||
|
||||
self:SetAvatarSize(32)
|
||||
|
||||
self:AddLayer(self.imgAvatar)
|
||||
|
||||
--return self.BaseClass.Init(self)
|
||||
end
|
||||
|
||||
function PANEL:SetAvatarSize(s)
|
||||
self.imgAvatar:SetSize(s, s)
|
||||
end
|
||||
|
||||
function PANEL:SetPlayer(ply)
|
||||
self.imgAvatar:SetPlayer(ply)
|
||||
end
|
||||
|
||||
vgui.Register( "SimpleIconAvatar", PANEL, "LayeredIcon" )
|
||||
|
||||
|
||||
--- Labelled icon
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
AccessorFunc(PANEL, "IconText", "IconText")
|
||||
AccessorFunc(PANEL, "IconTextColor", "IconTextColor")
|
||||
AccessorFunc(PANEL, "IconFont", "IconFont")
|
||||
AccessorFunc(PANEL, "IconTextShadow", "IconTextShadow")
|
||||
AccessorFunc(PANEL, "IconTextPos", "IconTextPos")
|
||||
|
||||
function PANEL:Init()
|
||||
self:SetIconText("")
|
||||
self:SetIconTextColor(Color(255, 200, 0))
|
||||
self:SetIconFont("TargetID")
|
||||
self:SetIconTextShadow({opacity=255, offset=2})
|
||||
self:SetIconTextPos({32, 32})
|
||||
|
||||
-- DPanelSelect loves to overwrite its children's PaintOver hooks and such,
|
||||
-- so have to use a dummy panel to do some custom painting.
|
||||
self.FakeLabel = vgui.Create("Panel", self)
|
||||
self.FakeLabel.PerformLayout = function(s) s:StretchToParent(0,0,0,0) end
|
||||
|
||||
self:AddLayer(self.FakeLabel)
|
||||
|
||||
return self.BaseClass.Init(self)
|
||||
end
|
||||
|
||||
function PANEL:PerformLayout()
|
||||
self:SetLabelText(self:GetIconText(), self:GetIconTextColor(), self:GetIconFont(), self:GetIconTextPos())
|
||||
|
||||
return self.BaseClass.PerformLayout(self)
|
||||
end
|
||||
|
||||
function PANEL:SetIconProperties(color, font, shadow, pos)
|
||||
self:SetIconTextColor( color or self:GetIconTextColor())
|
||||
self:SetIconFont( font or self:GetIconFont())
|
||||
self:SetIconTextShadow(shadow or self:GetIconShadow())
|
||||
self:SetIconTextPos( pos or self:GetIconTextPos())
|
||||
end
|
||||
|
||||
function PANEL:SetLabelText(text, color, font, pos)
|
||||
if self.FakeLabel then
|
||||
local spec = {pos=pos, color=color, text=text, font=font, xalign=TEXT_ALIGN_CENTER, yalign=TEXT_ALIGN_CENTER}
|
||||
|
||||
local shadow = self:GetIconTextShadow()
|
||||
local opacity = shadow and shadow.opacity or 0
|
||||
local offset = shadow and shadow.offset or 0
|
||||
|
||||
local drawfn = shadow and draw.TextShadow or draw.Text
|
||||
|
||||
self.FakeLabel.Paint = function()
|
||||
drawfn(spec, offset, opacity)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
vgui.Register("SimpleIconLabelled", PANEL, "LayeredIcon")
|
||||
Reference in New Issue
Block a user