Files
wnsrc/lua/menu/mount/vgui/workshop.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

224 lines
5.2 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/
--]]
PANEL.Base = "DPanel"
local wsFont
if ( system.IsLinux() ) then
wsFont = "DejaVu Sans"
elseif ( system.IsWindows() ) then
wsFont = "Tahoma"
else
wsFont = "Helvetica"
end
surface.CreateFont( "WorkshopLarge", {
font = wsFont,
size = 19,
antialias = true,
weight = 800
})
local pnlRocket = vgui.RegisterFile( "addon_rocket.lua" )
local matProgressCog = Material( "gui/progress_cog.png", "nocull smooth" )
local matHeader = Material( "gui/steamworks_header.png" )
AccessorFunc( PANEL, "m_bDrawProgress", "DrawProgress", FORCE_BOOL )
function PANEL:Init()
self.Label = self:Add( "DLabel" )
self.Label:SetText( "..." )
self.Label:SetFont( "WorkshopLarge" )
self.Label:SetTextColor( Color( 255, 255, 255, 200 ) )
self.Label:Dock( TOP )
self.Label:DockMargin( 16, 10, 16, 8 )
self.Label:SetContentAlignment( 5 )
self.ProgressLabel = self:Add( "DLabel" )
self.ProgressLabel:SetText( "" )
self.ProgressLabel:SetContentAlignment( 7 )
self.ProgressLabel:SetVisible( false )
self.ProgressLabel:SetTextColor( Color( 255, 255, 255, 50 ) )
self.TotalsLabel = self:Add( "DLabel" )
self.TotalsLabel:SetText( "" )
self.TotalsLabel:SetContentAlignment( 7 )
self.TotalsLabel:SetVisible( false )
self.TotalsLabel:SetTextColor( Color( 255, 255, 255, 50 ) )
self:SetDrawProgress( false )
self.Progress = 0
self.TotalProgress = 0
end
function PANEL:PerformLayout()
self:SetSize( 500, 80 )
self:Center()
self:AlignBottom( 16 )
self.ProgressLabel:SetSize( 100, 20 )
self.ProgressLabel:SetPos( self:GetWide() - 100, 40 )
self.TotalsLabel:SetSize( 100, 20 )
self.TotalsLabel:SetPos( self:GetWide() - 100, 60 )
end
function PANEL:Spawn()
self:InvalidateLayout( true )
end
function PANEL:PrepareDownloading()
if ( self.Rocket ) then self.Rocket:Remove() end
self.Rocket = self:Add( pnlRocket )
self.Rocket:Dock( LEFT )
self.Rocket:MoveToBack()
self.Rocket:DockMargin( 8, 0, 8, 0 )
end
function PANEL:StartDownloading( id, iImageID, title, iSize )
self.Label:SetText( language.GetPhrase( "ugc.downloadingX" ):format( title ) )
self.Rocket:Charging( id, iImageID )
self:SetDrawProgress( true )
self.ProgressLabel:Show()
self.ProgressLabel:SetText( "" )
self.TotalsLabel:Show()
self:UpdateProgress( 0, iSize )
end
function PANEL:FinishedDownloading( id )
self.Progress = -1
--self:SetDrawProgress( false )
--self.ProgressLabel:Hide()
--self.TotalsLabel:Hide()
--self.Rocket:Blast()
end
function PANEL:SetMessage( msg )
self.Label:SetText( msg )
self:SetDrawProgress( false )
end
function PANEL:Paint()
DisableClipping( true )
draw.RoundedBox( 4, -1, -1, self:GetWide() + 2, self:GetTall() + 2, color_black )
DisableClipping( false )
draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), Color( 50, 50, 50, 255 ) )
surface.SetDrawColor( 0, 0, 0, 100 )
surface.SetMaterial( matProgressCog )
surface.DrawTexturedRectRotated( 0, 32, 64 * 4, 64 * 4, SysTime() * -20 )
if ( self:GetDrawProgress() ) then
-- Overall progress
local off = 0
local w = (self:GetWide() - 64 - 64 - 100)
local x = 80
draw.RoundedBox( 4, x + 32 + off, 44 + 18, w, 10, Color( 0, 0, 0, 150 ) )
draw.RoundedBox( 4, x + 33 + off, 45 + 18, w * math.Clamp( self.TotalProgress, 0.05, 1 ) - 2, 8, Color( 255, 255, 255, 200 ) )
-- Current file Progress
if ( self.Progress >= 0 ) then
draw.RoundedBox( 4, x + 32, 40, w, 15, Color( 0, 0, 0, 150 ) )
draw.RoundedBox( 4, x + 33, 41, w * math.Clamp( self.Progress, 0.05, 1 ) - 2, 15-2, Color( 255, 255, 255, 200 ) )
end
end
-- Workshop LOGO
DisableClipping( true )
local x = -8
surface.SetDrawColor( 255, 255, 255, 255 )
surface.SetMaterial( matHeader )
surface.DrawTexturedRect( x, -22, 128, 32 )
surface.SetDrawColor( 255, 255, 255, math.random( 0, 255 ) )
surface.DrawTexturedRect( x, -22, 128, 32 )
DisableClipping( false )
end
function PANEL:UpdateProgress( downloaded, expected )
if ( expected <= 0 ) then
self.Progress = 0
self.ProgressLabel:SetText( "" )
return
end
self.Progress = downloaded / expected
if ( self.Progress > 0 ) then
self.ProgressLabel:SetText( language.GetPhrase( "ugc.XoutofY" ):format( Format( "%.0f%%", self.Progress * 100 ), string.NiceSize( expected ) ) )
else
self.ProgressLabel:SetText( string.NiceSize( expected ) )
end
end
function PANEL:ExtractProgress( title, percent )
self.Label:SetText( language.GetPhrase( "ugc.extractingX" ):format( title ) )
self.Progress = percent / 100
if ( self.Progress > 0 ) then
self.ProgressLabel:SetText( Format( "%.0f%%", percent ) )
else
self.ProgressLabel:SetText( "0%" )
end
end
function PANEL:UpdateTotalProgress( iCurrent, iTotal )
self.TotalsLabel:SetText( language.GetPhrase( "ugc.addonXofY" ):format( iCurrent, iTotal ) )
self.TotalProgress = iCurrent / iTotal
end
function PANEL:SubscriptionsProgress( iCurrent, iTotal )
self.Label:SetText( "#ugc.fetching" )
self:SetDrawProgress( true )
self.Progress = iCurrent / iTotal
self.ProgressLabel:Show()
self.ProgressLabel:SetText( language.GetPhrase( "ugc.XofY" ):format( iCurrent, iTotal ) )
end