zombiesurvival-evolved/gamemodes/zombiesurvival/gamemode/vgui/dsidemenu.lua

93 lines
2.2 KiB
Lua
Raw Normal View History

2014-10-02 08:49:54 +08:00
local PANEL = {}
PANEL.Spacing = 8
PANEL.SlideTime = 0 --0.2
function PANEL:Init()
self:RefreshSize()
self:SetPos(ScrW() - 1, 0)
self.Items = {}
end
function PANEL:Think()
if self.CloseTime and RealTime() >= self.CloseTime then
self.CloseTime = nil
self:SetVisible(false)
elseif self.StartChecking and RealTime() >= self.StartChecking and not MySelf:KeyDown(GAMEMODE.MenuKey) then
self:CloseMenu()
end
end
function PANEL:RefreshSize()
self:SetSize(BetterScreenScale() * 256, ScrH())
end
function PANEL:OpenMenu()
if self.StartChecking and RealTime() < self.StartChecking then return end
self.CloseTime = nil
self:RefreshSize()
self:SetPos(ScrW() - self:GetWide(), 0, self.SlideTime, 0, self.SlideTime * 0.8) --self:MoveTo(ScrW() - self:GetWide(), 0, self.SlideTime, 0, self.SlideTime * 0.8)
self:SetVisible(true)
self:MakePopup()
self.StartChecking = RealTime() + 0.1
timer.Simple(0, function() gui.SetMousePos(ScrW() - self:GetWide() * 0.5, ScrH() * 0.5) end)
end
function PANEL:CloseMenu()
if self.CloseTime then return end
self.CloseTime = RealTime() + self.SlideTime
--self:MoveTo(ScrW() - 1, 0, self.SlideTime, 0, self.SlideTime * 0.8)
end
local texRightEdge = surface.GetTextureID("gui/gradient")
function PANEL:Paint()
surface.SetDrawColor(5, 5, 5, 180)
surface.DrawRect(self:GetWide() * 0.4, 0, self:GetWide() * 0.6, self:GetTall())
surface.SetTexture(texRightEdge)
surface.DrawTexturedRectRotated(self:GetWide() * 0.2, self:GetTall() * 0.5, self:GetWide() * 0.4, self:GetTall(), 180)
end
function PANEL:AddItem(item)
item:SetParent(self)
item:SetWide(self:GetWide() - 16)
table.insert(self.Items, item)
self:InvalidateLayout()
end
function PANEL:RemoveItem(item)
for k, v in ipairs(self.Items) do
if v == item then
item:Remove()
table.remove(self.Items, k)
self:InvalidateLayout()
break
end
end
end
function PANEL:PerformLayout()
local y = ScrH() * 0.5
for k, item in pairs(self.Items) do
if item and item:Valid() then
y = y - (item:GetTall() + self.Spacing) * 0.5
end
end
for k, item in ipairs(self.Items) do
if item and item:Valid() then
item:SetPos(0, y)
item:CenterHorizontal()
y = y + item:GetTall() + self.Spacing
end
end
end
vgui.Register("DSideMenu", PANEL, "DPanel")