diff options
Diffstat (limited to 'gamemode/cl_panels.lua')
| -rw-r--r-- | gamemode/cl_panels.lua | 1158 |
1 files changed, 1158 insertions, 0 deletions
diff --git a/gamemode/cl_panels.lua b/gamemode/cl_panels.lua new file mode 100644 index 0000000..da01d3c --- /dev/null +++ b/gamemode/cl_panels.lua @@ -0,0 +1,1158 @@ + +surface.CreateFont( "DefaultBold", { + font = "Tahoma", + size = 16, + weight = 1000, + antialias = true, + additive = false +} ) + +surface.CreateFont( "GMSUnlockDescription", { + font = "Tahoma", + size = 14, + weight = 500, + antialias = true, + additive = false +} ) + +/*--------------------------------------------------------- + Unlock window +---------------------------------------------------------*/ + +local PANEL = {} + +function PANEL:Init() + self:SetTitle( "You have unlocked a new ability!" ) + self:MakePopup() + + self.Name = "Name" + self.Description = "" + + self:SetSize( ScrW() / 3, 250 ) + self:Center() + + self.DescWindow = vgui.Create( "DLabel", self ) + self.DescWindow:SetPos( 5, 100 ) + self.DescWindow:SetSize( self:GetWide() - 10, self:GetTall() - 140 ) + self.DescWindow:SetFont( "GMSUnlockDescription" ) + self.DescWindow:SetWrap( true ) + self.DescWindow:SetText( "" ) + + self.Okay = vgui.Create( "DButton", self ) + self.Okay:SetSize( self:GetWide() - 10, 30 ) + self.Okay:SetPos( 5, self:GetTall() - 35 ) + self.Okay:SetText( "Okay" ) + self.Okay.DoClick = function() self:Close() end +end + +function PANEL:PaintOver( w, h ) + draw.SimpleTextOutlined( self.Name, "ScoreboardHead", self:GetWide() / 2, 60, Color( 10, 200, 10 ), 1, 1, 0.5, Color( 100, 100, 100, 160 ) ) + //draw.SimpleText( self.Description, "GMSUnlockDescription", self:GetWide() / 2, 140, Color( 200, 200, 200 ), 1, 1 ) +end + +function PANEL:SetUnlock( text ) + local unlock = GMS.FeatureUnlocks[ text ] + if ( !unlock ) then return end + + self.Name = unlock.Name + self.Description = unlock.Description + self.DescWindow:SetText( unlock.Description ) +end + +vgui.Register( "GMS_UnlockWindow", PANEL, "DFrame" ) + +/*--------------------------------------------------------- + Tribe Menu +---------------------------------------------------------*/ + +local PANEL = {} + +function PANEL:Init() + self:SetTitle( "Create-A-Tribe" ) + self:SetSize( 275, 305 ) + self:MakePopup() + self:Center() + + local tnamelabel = vgui.Create( "DLabel", self ) + tnamelabel:SetPos( 5, 21 ) + tnamelabel:SetText( "Tribe name" ) + + local tname = vgui.Create( "DTextEntry", self ) + tname:SetSize( self:GetWide() - 10, 20 ) + tname:SetPos( 5, 40 ) + + local tpwlabel = vgui.Create( "DLabel", self ) + tpwlabel:SetPos( 5, 65 ) + tpwlabel:SetText( "Tribe password ( Optional )" ) + tpwlabel:SizeToContents() + + local tpw = vgui.Create( "DTextEntry", self ) + tpw:SetSize( self:GetWide() - 10, 20 ) + tpw:SetPos( 5, 80 ) + + local tcollabel = vgui.Create( "DLabel", self ) + tcollabel:SetPos( 5, 105 ) + tcollabel:SetText( "Tribe color" ) + + local tcolor = vgui.Create( "DColorMixer", self ) + tcolor:SetSize( self:GetWide() - 15, 150 ) + tcolor:SetPos( 5, 125 ) + + local button = vgui.Create( "DButton", self ) + button:SetSize( self:GetWide() - 10, 20 ) + button:SetPos( 5, 280 ) + button:SetText( "Create Tribe!" ) + button.DoClick = function() + RunConsoleCommand( "gms_createtribe", tname:GetValue(), tcolor:GetColor().r, tcolor:GetColor().g, tcolor:GetColor().b, tpw:GetValue() ) + self:SetVisible( false ) + end +end +vgui.Register( "GMS_TribeMenu", PANEL, "DFrame" ) + +/*--------------------------------------------------------- + Tribes List +---------------------------------------------------------*/ + +local PANEL = {} + +function PANEL:Init() + self:SetTitle( "Join-A-Tribe" ) + self:MakePopup() + + local width = ScrW() / 4 + + for id, tabl in pairs( Tribes ) do + surface.SetFont( "DefaultBold" ) + local w = surface.GetTextSize( tabl.name ) + width = math.max( width, w + 16 + 10 + 20 ) + end + + for id, tabl in pairs( Tribes ) do + + local button = vgui.Create( "GMS_TribeButton", self ) + button:SetSize( width - 16, 16 ) + button:SetPos( 8, 10 + id * 21 ) + button:SetInfo( tabl ) + + end + + self:SetSize( width, #Tribes * 21 + 35 ) + self:Center() +end + +vgui.Register( "GMS_TribesList", PANEL, "DFrame" ) + +---------------------------------------------------------------------------------------------------- + +local PANEL = {} + +function PANEL:Init() + self:SetText( "" ) + self.Tribe = {} +end + +function PANEL:Paint() + + surface.SetDrawColor( self.Tribe.color ) + surface.DrawRect( 0, 0, self:GetTall(), self:GetTall() ) + + surface.SetDrawColor( 0, 0, 0, 200 ) + if ( self.Hovered ) then surface.SetDrawColor( 255, 255, 255, 64 ) end + surface.DrawRect( self:GetTall(), 0, self:GetWide() - self:GetTall(), self:GetTall() ) + + surface.SetFont( "DefaultBold" ) + local w = surface.GetTextSize( self.Tribe.name ) + draw.SimpleText( self.Tribe.name, "DefaultBold", ( self:GetWide() - 16 ) / 2 + 16, 0, color_white , 1 ) + +end + +function PANEL:DoClick() + if ( self.Tribe.pass ) then + local name = self.Tribe.name + Derma_StringRequest( "Please enter password", "Please enter password for the tribe.", "", function( text ) RunConsoleCommand( "gms_join", name, text ) end ) + else + RunConsoleCommand( "gms_join", self.Tribe.name ) + end + self:GetParent():Close() +end + +function PANEL:SetInfo( tbl ) + self.Tribe = tbl +end + +vgui.Register( "GMS_TribeButton", PANEL, "DButton" ) + +/*--------------------------------------------------------- + Skills panel +---------------------------------------------------------*/ + +local PANEL = {} + +function PANEL:Init() + self:SetPos( 1, 0 ) + self:SetSize( ScrW() / 6, 34 ) + + self:SetVisible( true ) + + self.Extended = false + self.SkillLabels = {} + + self:RefreshSkills() +end + +function PANEL:Paint() + + surface.SetDrawColor( StrandedBackgroundColor ) + surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() ) + + surface.SetDrawColor( StrandedBorderColor ) + surface.DrawLine( self:GetWide() - 1, 0, self:GetWide() - 1, self:GetTall() ) -- Nice line instead of messy outlined rect + surface.DrawLine( 0, self:GetTall() - 1, self:GetWide(), self:GetTall() - 1 ) + surface.DrawLine( 0, 0, 0, self:GetTall() ) + if ( self.Extended ) then + surface.DrawLine( 0, 33, self:GetWide(), 33 ) + end + + draw.SimpleText( "Skills ( F1 )", "ScoreboardSub", self:GetWide() / 2, 17, Color( 255, 255, 255, 255 ), 1, 1 ) + return true + +end + +function PANEL:RefreshSkills() + for k, v in pairs( self.SkillLabels ) do v:Remove() end + + self.SkillLabels = {} + self.Line = 39 + + for k, v in SortedPairs( Skills ) do + local lbl = vgui.Create( "gms_SkillPanel", self ) + lbl:SetPos( 0, self.Line ) + lbl:SetSize( self:GetWide(), 16 ) + local val = string.gsub( k, "_", " " ) + lbl:SetSkill( val ) + + self.Line = self.Line + lbl:GetTall() + 5 + table.insert( self.SkillLabels, lbl ) + if ( !self.Extended ) then lbl:SetVisible( false ) end + end + + if ( self.Extended ) then + self:SetSize( ScrW() / 6, 40 + ( table.Count( self.SkillLabels ) * 21 ) ) + end +end + +function PANEL:ToggleExtend() + if ( !self.Extended ) then + self:SetSize( ScrW() / 6, 40 + ( table.Count( self.SkillLabels ) * 21 ) ) + self.Extended = true + + for k, v in pairs( self.SkillLabels ) do v:SetVisible( true ) end + else + self:SetSize( ScrW() / 6, 34 ) + self.Extended = false + + for k, v in pairs( self.SkillLabels ) do v:SetVisible( false ) end + end +end + +function PANEL:OnMousePressed( mc ) + if ( mc == 107 ) then + self:ToggleExtend() + end +end + +vgui.Register( "gms_SkillsHud", PANEL, "Panel" ) + +/*--------------------------------------------------------- + Skill Sub-Panel +---------------------------------------------------------*/ + +local PANEL = {} + +function PANEL:Init() +end + +function PANEL:Paint() + surface.SetDrawColor( 0, 0, 0, 178 ) -- XP bar background + surface.DrawRect( 5, 0, self:GetWide() - 10, self:GetTall() ) + + local XP = math.floor( Experience[ self.Skill ] / 100 * ( self:GetWide() - 10 ) ) + surface.SetDrawColor( 0, 128, 0, 220 ) -- XP bar + if ( self.TxtSkill == "Survival" ) then + surface.SetDrawColor( 0, 128, 176, 220 ) -- XP bar + end + surface.DrawRect( 5, 0, XP, self:GetTall() ) + + draw.SimpleText( self.TxtSkill .. ": " .. Skills[ self.Skill ] .. " ( " .. Experience[ self.Skill ] .. " / 100 )", "DefaultBold", self:GetWide() / 2, self:GetTall() / 2 - 1, Color( 255, 255, 255, 255 ), 1, 1 ) + return true +end + +function PANEL:SetSkill( str ) + self.TxtSkill = str + self.Skill = string.gsub( str, " ", "_" ) +end + +vgui.Register( "gms_SkillPanel", PANEL, "Panel" ) + +/*--------------------------------------------------------- + Resource panel +---------------------------------------------------------*/ + +local PANEL = {} + +function PANEL:Init() + + self:SetPos( ScrW() / 6 + 2, 0 ) + self:SetSize( ScrW() / 6, 34 ) + self:SetVisible( true ) + self.Extended = false + self.ResourceLabels = {} + + self:RefreshResources() + +end + +function PANEL:Paint() + + surface.SetDrawColor( StrandedBackgroundColor ) + surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() ) + + surface.SetDrawColor( StrandedBorderColor ) + surface.DrawLine( 0, 0, 0, self:GetTall() ) + surface.DrawLine( self:GetWide() - 1, 0, self:GetWide() - 1, self:GetTall() ) + surface.DrawLine( 0, self:GetTall() - 1, self:GetWide(), self:GetTall() - 1 ) + if ( self.Extended ) then + surface.DrawLine( 0, 33, self:GetWide(), 33 ) + end + + draw.SimpleText( "Resources ( F2 )", "ScoreboardSub", self:GetWide() / 2, 17, StrandedTextColor, 1, 1 ) + return true + +end + +function PANEL:RefreshResources() + if ( IsValid( GAMEMODE.ResourcePackFrame ) ) then GAMEMODE.ResourcePackFrame:Update() end + for k, v in pairs( self.ResourceLabels ) do v:Remove() end + + self.ResourceLabels = {} + self.Line = 39 + self.Resourcez = 0 + + for k, v in SortedPairs( Resources ) do + if ( v > 0 ) then + local lbl = vgui.Create( "gms_ResourcePanel", self ) + lbl:SetPos( 0, self.Line ) + lbl:SetSize( self:GetWide(), 16 ) + lbl:SetResource( k ) + self.Resourcez = self.Resourcez + v + + self.Line = self.Line + lbl:GetTall() + 5 + table.insert( self.ResourceLabels, lbl ) + if ( !self.Extended ) then lbl:SetVisible( false ) end + end + end + + self.Line = self.Line + 21 + + local lblT = vgui.Create( "gms_ResourcePanelTotal", self ) + lblT:SetPos( 0, self.Line ) + lblT:SetSize( self:GetWide(), 16 ) + lblT:SetResources( self.Resourcez ) + + table.insert( self.ResourceLabels, lblT ) + if ( !self.Extended ) then lblT:SetVisible( false ) end + + if ( self.Extended ) then + self:SetSize( ScrW() / 6, 40 + ( ( table.Count( self.ResourceLabels ) + 1 ) * 21 ) ) + end + + if ( GAMEMODE.CommandsHud ) then GAMEMODE.CommandsHud:SetPos( ScrW() / 6 + 2, self:GetTall() ) end +end + +function PANEL:ToggleExtend() + self:SetExtended( !self.Extended ) +end + +function PANEL:SetExtended( bool ) + if ( bool ) then + self:SetSize( ScrW() / 6, 40 + ( ( table.Count( self.ResourceLabels ) + 1 ) * 21 ) ) + self.Extended = true + for k,v in pairs( self.ResourceLabels ) do + v:SetVisible( true ) + end + else + self:SetSize( ScrW() / 6, 34 ) + self.Extended = false + for k, v in pairs( self.ResourceLabels ) do + v:SetVisible( false ) + end + end + if ( GAMEMODE.CommandsHud ) then GAMEMODE.CommandsHud:SetPos( ScrW() / 6 + 2, self:GetTall() ) end +end + +function PANEL:OnMousePressed( mc ) + if ( mc == 107 ) then self:ToggleExtend() end +end +vgui.Register( "gms_ResourcesHud", PANEL, "Panel" ) + +/*--------------------------------------------------------- + Resource Sub-Panel +---------------------------------------------------------*/ + +local PANEL = {} + +PANEL.GroundActions = {} +PANEL.GroundActions[ "Sprouts" ] = { cmd = "gms_planttree", name = "Plant" } +PANEL.GroundActions[ "Banana_Seeds" ] = { cmd = "gms_plantbanana", name = "Plant" } +PANEL.GroundActions[ "Orange_Seeds" ] = { cmd = "gms_plantorange", name = "Plant" } +PANEL.GroundActions[ "Grain_Seeds" ] = { cmd = "gms_plantgrain", name = "Plant" } +PANEL.GroundActions[ "Melon_Seeds" ] = { cmd = "gms_plantmelon", name = "Plant" } +PANEL.GroundActions[ "Berries" ] = { cmd = "gms_plantbush", name = "Plant" } + +PANEL.NormalActions = {} +PANEL.NormalActions[ "Berries" ] = { cmd = "gms_EatBerry", name = "Eat" } +PANEL.NormalActions[ "Medicine" ] = { cmd = "gms_TakeMedicine", name = "Take" } +PANEL.NormalActions[ "Water_Bottles" ] = { cmd = "gms_DrinkBottle", name = "Drink" } + +function PANEL:Init() + self:SetText( "" ) +end + +function PANEL:Paint() + surface.SetDrawColor( 0, 0, 0, 178 ) -- Resource bar background + surface.DrawRect( 5, 0, self:GetWide() - 10, self:GetTall() ) + + local XP = math.floor( Resources[ self.Resource ] / MaxResources * ( self:GetWide() - 10 ) ) + surface.SetDrawColor( 0, 128, 0, 200 ) -- Resource bar + surface.DrawRect( 5, 0, XP, self:GetTall() ) + + if ( self.Hovered ) then + surface.SetDrawColor( 255, 255, 255, 64 ) -- Resource bar background + surface.DrawRect( 5, 0, self:GetWide() - 10, self:GetTall() ) + end + + draw.SimpleText( self.TxtResource .. ": " .. Resources[ self.Resource ], "DefaultBold", self:GetWide() / 2, self:GetTall() / 2 - 1, Color( 255, 255, 255, 255 ), 1, 1 ) + return true +end + +function PANEL:DoRightClick() + local menu = DermaMenu() + + if ( self.GroundActions[ self.Resource ] ) then + menu:AddOption( self.GroundActions[ self.Resource ].name, function() + if ( self.GroundActions ) then + RunConsoleCommand( self.GroundActions[ self.Resource ].cmd ) + end + end ) + end + + if ( self.NormalActions[ self.Resource ] ) then + menu:AddOption( self.NormalActions[ self.Resource ].name, function() + if ( self.NormalActions ) then + RunConsoleCommand( self.NormalActions[ self.Resource ].cmd ) + end + end ) + end + + menu:AddSpacer() + + menu:AddOption( "Drop x1", function() RunConsoleCommand( "gms_DropResources", self.Resource, " 1" ) end ) + menu:AddOption( "Drop x10", function() RunConsoleCommand( "gms_DropResources", self.Resource, " 10" ) end ) + menu:AddOption( "Drop All", function() RunConsoleCommand( "gms_DropResources", self.Resource ) end ) + menu:AddOption( "Cancel", function() end ) + menu:Open() +end + +function PANEL:DoClick() + local tr = util.TraceLine( { + start = LocalPlayer():GetShootPos(), + endpos = LocalPlayer():GetShootPos() + LocalPlayer():GetAimVector() * 150, + filter = LocalPlayer() + } ) + + if ( self.GroundActions && self.GroundActions[ self.Resource ] && tr.HitWorld ) then + RunConsoleCommand( self.GroundActions[ self.Resource ].cmd ) + elseif ( self.NormalActions && self.NormalActions[ self.Resource ] ) then + RunConsoleCommand( self.NormalActions[ self.Resource ].cmd ) + end +end + +function PANEL:SetResource( str ) + self.TxtResource = string.gsub( str, "_", " " ) + self.Resource = str +end + +vgui.Register( "gms_ResourcePanel", PANEL, "DButton" ) + +/*--------------------------------------------------------- + Resource Total Sub-Panel +---------------------------------------------------------*/ +local PANEL = {} + +function PANEL:Init() + self.Res = 0 +end + +function PANEL:Paint() + surface.SetDrawColor( 0, 0, 0, 178 ) -- Resource bar background + surface.DrawRect( 5, 0, self:GetWide() - 10, self:GetTall() ) + + local XP = math.floor( self.Res / MaxResources * ( self:GetWide() - 10 ) ) + surface.SetDrawColor( 0, 128, 176, 220 ) -- Resource bar + surface.DrawRect( 5, 0, XP, self:GetTall() ) + + draw.SimpleText( "Total: " .. self.Res .. " / " .. MaxResources, "DefaultBold", self:GetWide() / 2, self:GetTall() / 2 - 1, Color( 255, 255, 255, 255 ), 1, 1 ) + return true +end + +function PANEL:SetResources( num ) + self.Res = num +end + +vgui.Register( "gms_ResourcePanelTotal", PANEL, "Panel" ) + +/*--------------------------------------------------------- + Command panel +---------------------------------------------------------*/ + +local PANEL = {} + +function PANEL:Init() + + self:SetPos( ScrW() / 6 + 2, 33 ) + self:SetSize( ScrW() / 6, 34 ) + self:SetVisible( false ) + self.Extended = true + self.CommandLabels = {} + + self:RefreshCommands() + +end + +function PANEL:Paint() + + surface.SetDrawColor( StrandedBackgroundColor ) + surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() ) + + surface.SetDrawColor( StrandedBorderColor ) + + surface.DrawLine( self:GetWide() - 1, 0, self:GetWide() - 1, self:GetTall() ) + surface.DrawLine( 0, 0, 0, self:GetTall() ) + surface.DrawLine( 0, self:GetTall() - 1, self:GetWide(), self:GetTall() - 1 ) + if ( self.Extended ) then surface.DrawLine( 0, 33, self:GetWide(), 33 ) end + + draw.SimpleText( "Commands", "ScoreboardSub", self:GetWide() / 2, 17, Color( 255, 255, 255, 255 ), 1, 1 ) + return true + +end + +function PANEL:CreateButton( x, y, w, h, cmd, txt, clr ) + local line = vgui.Create( "gms_CommandPanel", self ) + line:SetPos( x, y ) + line:SetSize( w, h ) + line:SetCommand( cmd, txt, clr ) + + if ( !self.Extended ) then line:SetVisible( false ) end + table.insert( self.CommandLabels, line ) + + return line +end + +function PANEL:RefreshCommands() + for k, v in pairs( self.CommandLabels ) do v:Remove() end + + self.CommandLabels = {} + self.Line = 39 + self.Lines = 7 + + local halfsize = self:GetWide() / 2 + local threesize = self:GetWide() / 4 + + local line1 = self:CreateButton( 0, self.Line, halfsize, 16, "gms_sleep", "Sleep", Color( 0, 128, 255, 176 ) ) + local line1b = self:CreateButton( halfsize, self.Line, halfsize, 16, "gms_wakeup", "Wake up", Color( 0, 128, 255, 176 ) ) + + self.Line = self.Line + line1:GetTall() + 5 + + local line2 = self:CreateButton( 0, self.Line, halfsize, 16, "gms_combinations", "Combinations", Color( 200, 200, 0, 176 ) ) + local line2b = self:CreateButton( halfsize, self.Line, halfsize, 16, "gms_structures", "Structures", Color( 200, 200, 0, 176 ) ) + + self.Line = self.Line + line2:GetTall() + 5 + + local line3 = self:CreateButton( 0, self.Line, halfsize, 16, "gms_dropweapon", "Drop: Weapon", Color( 255, 0, 0, 176 ) ) + local line3b = self:CreateButton( halfsize, self.Line, halfsize, 16, "gms_dropall", "All resources", Color( 255, 0, 0, 176 ) ) + + self.Line = self.Line + line3:GetTall() + 5 + + local line4 = self:CreateButton( 0, self.Line, halfsize, 16, "gms_salvage", "Prop: Salvage", Color( 200, 0, 0, 176 ) ) + local line4b = self:CreateButton( halfsize, self.Line, halfsize, 16, "gms_steal", "Steal", Color( 200, 0, 0, 176 ) ) + + self.Line = self.Line + line4:GetTall() + 5 + + local line5 = self:CreateButton( 0, self.Line, halfsize, 16, "gms_savecharacter", "Save", Color( 0, 200, 0, 176 ) ) + local line5b = self:CreateButton( halfsize, self.Line, halfsize, 16, "gms_afk", "Toggle AFK", Color( 0, 200, 0, 176 ) ) + + self.Line = self.Line + line5:GetTall() + 5 + + local line6 = self:CreateButton( 0, self.Line, halfsize, 16, "gms_makefire", "Make Campfire", Color( 255, 128, 0, 176 ) ) + local line6b = self:CreateButton( halfsize, self.Line, halfsize, 16, "gms_help", "Help", Color( 255, 128, 0, 176 ) ) + + self.Line = self.Line + line6:GetTall() + 5 + + local line7a = self:CreateButton( 0, self.Line, halfsize, 16, "gms_tribemenu", "Tribe: Create", Color( 200, 0, 200, 176 ) ) + local line7b = self:CreateButton( halfsize, self.Line, threesize, 16, "gms_tribes", "Join", Color( 200, 0, 200, 176 ) ) + local line7c = self:CreateButton( halfsize + threesize, self.Line, threesize, 16, "gms_leave", "Leave", Color( 200, 0, 200, 176 ) ) + + if ( self.Extended ) then + self:SetSize( ScrW() / 6, 40 + ( self.Lines * 21 ) ) + end +end + +function PANEL:ToggleExtend( b ) + //self:SetExtended( !self.Extended, b ) +end + +function PANEL:SetExtended( bool ,b ) + if ( bool ) then + self:SetSize( ScrW() / 6, 40 + ( self.Lines * 21 ) ) + self.Extended = true + self:SetVisible( true ) + for k,v in pairs( self.CommandLabels ) do v:SetVisible( true ) end + else + self:SetSize( ScrW() / 6, 34 ) + self.Extended = false + self:SetVisible( false ) + for k, v in pairs( self.CommandLabels ) do v:SetVisible( false ) end + end +end + +vgui.Register( "gms_CommandsHud", PANEL, "Panel" ) + +/*--------------------------------------------------------- + Command Sub-Panel +---------------------------------------------------------*/ + +local PANEL = {} + +function PANEL:Init() + self:SetText( "" ) + self.Cmd = "" + self.Text = "" + self.Clr = Color( 0, 128, 0, 178 ) +end + +function PANEL:Paint() + surface.SetDrawColor( self.Clr.r, self.Clr.g, self.Clr.b, self.Clr.a ) -- Resource bar background + surface.DrawRect( 5, 0, self:GetWide() - 10, self:GetTall() ) + + local colr = Color( 255, 255, 255, 255 ) + if ( self.Clr.r >= 200 and self.Clr.g >= 200 and self.Clr.b >= 200 ) then colr = Color( 0, 0, 0, 255 ) end + + draw.SimpleText( self.Text, "DefaultBold", self:GetWide() / 2, self:GetTall() / 2 - 1, colr, 1, 1 ) + + if ( self.Hovered ) then + surface.SetDrawColor( 255, 255, 255, 64 ) + surface.DrawRect( 5, 0, self:GetWide() - 10, self:GetTall() ) + end + + return true +end + +function PANEL:DoClick() + RunConsoleCommand( self.Cmd ) +end + +function PANEL:SetCommand( str, text, clr ) + self.Cmd = str + self.Text = text + self.Clr = clr +end + +vgui.Register( "gms_CommandPanel", PANEL, "DButton" ) + +/*--------------------------------------------------------- + Loading bar +---------------------------------------------------------*/ + +local PANEL = {} + +function PANEL:Init() + self:SetSize( ScrW() / 2.7, ScrH() / 10 ) + self:SetPos( ScrW() / 2 - ( self:GetWide() / 2 ), ScrH() / 2 - ( self:GetTall() / 2 ) ) + + self.Dots = "." + self.Message = "" +end + +function PANEL:Paint() + draw.RoundedBox( 8, 0, 0, self:GetWide(), self:GetTall(), Color( 100, 100, 100, 150 ) ) //Background + + //Text + draw.SimpleText( "Loading" .. self.Dots, "ScoreboardHead", self:GetWide() / 2, self:GetTall() / 2, Color( 255, 255, 255, 255 ), 1, 1 ) + draw.SimpleText( self.Text, "ScoreboardText", self:GetWide() / 2, self:GetTall() / 1.2, Color( 255, 255, 255, 255 ), 1, 1 ) + return true +end + +function PANEL:Show( msg ) + self.IsStopped = false + + self.Text = msg + timer.Simple( 0.5, function() self:UpdateDots() end ) + self:SetVisible( true ) +end + +function PANEL:Hide() + self.IsStopped = true + self:SetVisible( false ) +end + +function PANEL:UpdateDots() + if ( self.IsStopped ) then return end + + if self.Dots == "...." then + self.Dots = "." + else + self.Dots = self.Dots .. "." + end + + timer.Simple( 0.5, function() self:UpdateDots() end ) +end + +vgui.Register( "gms_LoadingBar", PANEL, "Panel" ) + +/*--------------------------------------------------------- + Saving bar +---------------------------------------------------------*/ + +local PANEL = {} + +function PANEL:Init() + self:SetSize( ScrW() / 2.7, ScrH() / 10 ) + self:SetPos( ScrW() / 2 - ( self:GetWide() / 2 ), ScrH() / 2 - ( self:GetTall() / 2 ) ) + + self.Dots = "." + self.Message = "" +end + +function PANEL:Paint() + //Background + draw.RoundedBox( 8, 0, 0, self:GetWide(), self:GetTall(), Color( 100, 100, 100, 150 ) ) + + //Text + draw.SimpleText( "Saving" .. self.Dots, "ScoreboardHead", self:GetWide() / 2, self:GetTall() / 2, Color( 255, 255, 255, 255 ), 1, 1 ) + draw.SimpleText( self.Text, "ScoreboardText", self:GetWide() / 2, self:GetTall() / 1.2, Color( 255, 255, 255, 255 ), 1, 1 ) + return true +end + +function PANEL:Show( msg ) + self.IsStopped = false + + self.Text = msg + timer.Simple( 0.5, function() self:UpdateDots() end ) + self:SetVisible( true ) +end + +function PANEL:Hide() + self.IsStopped = true + self:SetVisible( false ) +end + +function PANEL:UpdateDots() + if ( self.IsStopped ) then return end + + if ( self.Dots == "...." ) then + self.Dots = "." + else + self.Dots = self.Dots .. "." + end + + timer.Simple( 0.5, function() self:UpdateDots() end ) +end + +vgui.Register( "gms_SavingBar", PANEL, "Panel" ) + +/*--------------------------------------------------------- + Command button +---------------------------------------------------------*/ +local PANEL = {} + +function PANEL:Init() +end + +function PANEL:DoClick() + LocalPlayer():ConCommand( self.Command .. "\n" ) + surface.PlaySound( Sound( "ui/buttonclickrelease.wav" ) ) +end + +function PANEL:SetConCommand( cmd ) + self.Command = cmd +end + +function PANEL:OnCursorEntered() + surface.PlaySound( Sound( "ui/buttonrollover.wav" ) ) +end + +vgui.Register( "gms_CommandButton", PANEL, "DButton" ) + +/*--------------------------------------------------------- + Combination Window +---------------------------------------------------------*/ + +local PANEL = {} + +function PANEL:Init() + self:SetSize( ScrW() / 1.3, ScrH() / 1.4 ) + self:SetDeleteOnClose( false ) + self:MakePopup() + self:Center() + + self.CombiList = vgui.Create( "DPanelList", self ) + self.CombiList:SetPos( 5, 25 ) + self.CombiList:SetSize( self:GetWide() - 10, self:GetTall() * 0.55 ) + self.CombiList:SetSpacing( 5 ) + self.CombiList:SetPadding( 5 ) + self.CombiList:EnableHorizontal( true ) + self.CombiList:EnableVerticalScrollbar( true ) + + self.Info = vgui.Create( "DPanel", self ) + self.Info:SetPos( 5, self.CombiList:GetTall() + 30 ) + self.Info:SetSize( self:GetWide() - 10, self:GetTall() - self.CombiList:GetTall() - 70 ) + + self.Info.NameLabel = vgui.Create( "DLabel", self.Info ) + self.Info.NameLabel:SetPos( 5, 5 ) + self.Info.NameLabel:SetSize( self.Info:GetWide(), 20 ) + self.Info.NameLabel:SetFont( "ScoreboardSub" ) + self.Info.NameLabel:SetDark( true ) + self.Info.NameLabel:SetText( "Select a recipe" ) + + self.Info.DescLabel = vgui.Create( "DLabel", self.Info ) + self.Info.DescLabel:SetPos( 5, 25 ) + self.Info.DescLabel:SetSize( self.Info:GetWide(), self.Info:GetTall() - 30 ) + self.Info.DescLabel:SetDark( true ) + self.Info.DescLabel:SetText( "" ) + + self.button = vgui.Create( "gms_CommandButton", self ) + self.button:SetPos( 5, self:GetTall() - 35 ) + self.button:SetSize( self:GetWide() - 10, 30 ) + self.button:SetText( "Make" ) + self.button:SetDisabled( true ) + function self.button:DoClick() + local p = self:GetParent() + local combi = p.CombiGroupName or "" + local active = p.ActiveCombi or "" + p:Close() + LocalPlayer():ConCommand( "gms_MakeCombination " .. combi .. " " .. active .. "\n" ) + end + + self.IconSize = 86 + self.CombiPanels = {} +end + +function PANEL:SetTable( str ) + self:SetTitle( "#" .. str ) + self.CombiGroupName = str + self.CombiGroup = GMS.Combinations[ str ] + self:Clear() + for name, tbl in SortedPairs( self.CombiGroup or {} ) do + local icon = vgui.Create( "GMS_CombiIcon", self.CombiList ) + icon:SetSize( self.IconSize, self.IconSize ) + icon:SetInfo( name, tbl ) + self.CombiList:AddItem( icon ) + table.insert( self.CombiPanels, icon ) + end + self:ClearActive() +end + +function PANEL:SetActive( combi, tbl ) + self.ActiveCombi = combi + self.ActiveTable = tbl + self.Info.NameLabel:SetText( tbl.Name ) + + local desc = tbl.Description + + if ( tbl.Req or tbl.SkillReq ) then + desc = desc .. "\n\nYou need:" + end + + if ( tbl.Req and table.Count( tbl.Req ) > 0 ) then + for res, num in pairs( tbl.Req ) do + if ( tbl.AllSmelt ) then + desc = desc .. "\n" .. string.Replace( res, "_", " " ) .. " ( " .. tbl.Max .. " max )" + else + desc = desc .. "\n" .. string.Replace( res, "_", " " ) .. ": " .. num + end + end + end + + if ( tbl.SkillReq and table.Count( tbl.SkillReq ) > 0 ) then + for skill, num in pairs( tbl.SkillReq ) do + desc = desc .. "\n" .. string.Replace( skill, "_", " " ) .. " level " .. num + end + end + + if ( tbl.FoodValue ) then + desc = desc .. "\n\nFood initial quality: " .. math.floor( tbl.FoodValue / 10 ) .. "%" + end + + self.Info.DescLabel:SetText( desc ) +end + +function PANEL:ClearActive() + self.ActiveCombi = nil + self.ActiveTable = nil + self.Info.NameLabel:SetText( "Select a recipe" ) + self.Info.DescLabel:SetText( "" ) +end + +function PANEL:Clear() + for k, v in pairs( self.CombiPanels ) do + v:Remove() + end + self.CombiPanels = {} +end +vgui.Register( "GMS_CombinationWindow", PANEL, "DFrame" ) + +/*--------------------------------------------------------- + Combi Icon +---------------------------------------------------------*/ + +local PANEL = {} +PANEL.TexID = Material( "gms_icons/gms_none.png" ) +PANEL.BGTexID = Material( "gms_icons/gms_none_bg.png" ) + +function PANEL:Paint( w, h ) + + surface.SetDrawColor( 200, 200, 200, 255 ) + //surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() )*/ + + surface.SetMaterial( self.BGTexID ) + surface.DrawTexturedRect( -( 128 - w ) / 2, -( 128 - h ) / 2, 128, 128 ) + + surface.SetDrawColor( StrandedBorderColor ) + surface.DrawOutlinedRect( 0, 0, self:GetWide(), self:GetTall() ) + + local hasskill = true + if ( self.CombiTable.SkillReq ) then + for k, v in pairs( self.CombiTable.SkillReq ) do + if ( GetSkill( k ) < v ) then hasskill = false end + end + end + + local hasres = true + if ( self.CombiTable.Req ) then + for k, v in pairs( self.CombiTable.Req ) do + if ( GetResource( k ) < v ) then hasres = false end + end + end + + if ( !hasskill ) then + surface.SetDrawColor( 200, 200, 0, 150 ) + surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() ) + elseif ( !hasres ) then + surface.SetDrawColor( 200, 0, 0, 100 ) + surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() ) + end + + surface.SetDrawColor( 255, 255, 255, 255 ) + + surface.SetMaterial( self.TexID ) + surface.DrawTexturedRect( -( 128 - w ) / 2, -( 128 - h ) / 2, 128, 128 ) + + local y = self:GetTall() / 2 + self:GetTall() / 4 + draw.SimpleTextOutlined( self.CombiTable.Name, "DefaultSmall", self:GetWide() / 2, y, Color( 255, 255, 255, 255 ), 1, 1, 0.5, Color( 100, 100, 100, 140 ) ) + return true + +end + +function PANEL:SetInfo( name, tbl ) + if ( tbl.Texture && Material( tbl.Texture ) ) then self.TexID = Material( tbl.Texture ) end + self.Combi = name + self.CombiTable = tbl +end + +function PANEL:OnMousePressed( mc ) + if ( mc != 107 ) then return end + surface.PlaySound( Sound( "ui/buttonclickrelease.wav" ) ) + self:GetParent():GetParent():GetParent():SetActive( self.Combi, self.CombiTable ) + self:GetParent():GetParent():GetParent().button:SetDisabled( false ) +end + +function PANEL:OnCursorEntered() + surface.PlaySound( Sound( "ui/buttonrollover.wav" ) ) +end + +vgui.Register( "GMS_CombiIcon", PANEL, "DPanel" ) + +/* Resource Pack GUI */ + +local PANEL = {} + +function PANEL:Init() + self.Text = "" + self.Num = 0 + + self.TakeX = vgui.Create( "gms_takeButton", self ) + self.TakeAll = vgui.Create( "gms_takeButton", self ) +end + +function PANEL:Paint() + draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), Color( 176, 176, 176, 255 ) ) + draw.SimpleText( self.Text .. ": " .. self.Num, "DefaultBold", 5, self:GetTall() / 2 - 1, Color( 255, 255, 255, 255 ), 0, 1 ) +end + +function PANEL:SetRes( str, num, isResPack ) + self.Text = str + self.Num = num + + if ( isResPack ) then + self.TakeX:SetRes( str, nil, false ) + self.TakeAll:SetRes( str, num, true, false ) + else + self.TakeX:Remove() + self.TakeX = nil + self.TakeAll:SetRes( str, 1, true, true ) + end +end + +function PANEL:PerformLayout() + self.TakeAll:SetSize( 64, self:GetTall() - 4 ) + self.TakeAll:SetPos( self:GetWide() - 66, 2 ) + + if ( self.TakeX and self.TakeX != NULL ) then + self.TakeX:SetSize( 64, self:GetTall() - 4 ) + self.TakeX:SetPos( self:GetWide() - 132, 2 ) + end +end + +vgui.Register( "gms_resourceLine", PANEL, "Panel" ) + +// Take button +local PANEL = {} + +function PANEL:Init() + self.Text = "" + self.Num = 0 + self.IsAll = false + self.IsFridge = false + self:SetText( "" ) +end + +function PANEL:Paint() + if ( self:GetDisabled() ) then + draw.RoundedBox( 0, 0, 0, self:GetWide(), self:GetTall(), Color( 50, 50, 50, 255 ) ) + elseif ( self.Depressed /*|| self:GetSelected()*/ ) then + draw.RoundedBox( 0, 0, 0, self:GetWide(), self:GetTall(), Color( 50, 50, 176, 255 ) ) + elseif ( self.Hovered ) then + draw.RoundedBox( 0, 0, 0, self:GetWide(), self:GetTall(), Color( 100, 100, 255, 255 ) ) + else + draw.RoundedBox( 0, 0, 0, self:GetWide(), self:GetTall(), Color( 100, 100, 100, 255 ) ) + end + + if ( self.IsFridge ) then + draw.SimpleText( "Take", "DefaultBold", self:GetWide() / 2, self:GetTall() / 2 - 1, Color( 255, 255, 255, 255 ), 1, 1 ) + elseif ( self.IsAll ) then + draw.SimpleText( "Take All", "DefaultBold", self:GetWide() / 2, self:GetTall() / 2 - 1, Color( 255, 255, 255, 255 ), 1, 1 ) + else + draw.SimpleText( "Take X", "DefaultBold", self:GetWide() / 2, self:GetTall() / 2 - 1, Color( 255, 255, 255, 255 ), 1, 1 ) + end +end + +function PANEL:DoClick() + if ( self.IsAll ) then + RunConsoleCommand( "gms_TakeResources", string.gsub( self.Text, " ", "_" ), self.Num ) + if ( self.IsFridge ) then self:GetParent():GetParent():GetParent():GetParent():Close() return end + else + local res = self.Text + Derma_StringRequest( "Please enter amount", "Please enter amount of " .. res .. " to take.", "", function( text ) + RunConsoleCommand( "gms_TakeResources", string.gsub( res, " ", "_" ), text ) + end ) + end +end + +function PANEL:SetRes( str, num, isAll, isFridge ) + self.Text = str + self.Num = num + self.IsAll = isAll + self.IsFridge = isFridge +end + +vgui.Register( "gms_takeButton", PANEL, "DButton" ) + +// Store Line +local PANEL = {} + +function PANEL:Init() + self.Text = "" + self.Num = 0 + + self.StoreX = vgui.Create( "gms_StoreButton", self ) + self.StoreAll = vgui.Create( "gms_StoreButton", self ) +end + +function PANEL:Paint() + draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), Color( 176, 176, 176, 255 ) ) + draw.SimpleText( string.Replace( self.Text, "_", " " ) .. ": " .. self.Num, "DefaultBold", 5, self:GetTall() / 2 - 1, Color( 255, 255, 255, 255 ), 0, 1 ) +end + +function PANEL:SetRes( str, num ) + self.Text = str + self.Num = num + + self.StoreX:SetRes( str, nil ) + self.StoreAll:SetRes( str, num, true ) +end + +function PANEL:PerformLayout() + self.StoreAll:SetSize( 64, self:GetTall() - 4 ) + self.StoreAll:SetPos( self:GetWide() - 66, 2 ) + + self.StoreX:SetSize( 64, self:GetTall() - 4 ) + self.StoreX:SetPos( self:GetWide() - 132, 2 ) +end + +vgui.Register( "gms_resourceLineStore", PANEL, "Panel" ) + +// Store button +local PANEL = {} + +function PANEL:Init() + self.Text = "" + self.Num = 0 + self.IsAll = false + self:SetText( "" ) +end + +function PANEL:Paint() + if ( self:GetDisabled() ) then + draw.RoundedBox( 0, 0, 0, self:GetWide(), self:GetTall(), Color( 50, 50, 50, 255 ) ) + elseif ( self.Depressed /*|| self:GetSelected()*/ ) then + draw.RoundedBox( 0, 0, 0, self:GetWide(), self:GetTall(), Color( 50, 50, 176, 255 ) ) + elseif ( self.Hovered ) then + draw.RoundedBox( 0, 0, 0, self:GetWide(), self:GetTall(), Color( 100, 100, 255, 255 ) ) + else + draw.RoundedBox( 0, 0, 0, self:GetWide(), self:GetTall(), Color( 100, 100, 100, 255 ) ) + end + + if ( self.IsAll ) then + draw.SimpleText( "Store All", "DefaultBold", self:GetWide() / 2, self:GetTall() / 2 - 1, Color( 255, 255, 255, 255 ), 1, 1 ) + else + draw.SimpleText( "Store X", "DefaultBold", self:GetWide() / 2, self:GetTall() / 2 - 1, Color( 255, 255, 255, 255 ), 1, 1 ) + end +end + +function PANEL:DoClick() + if ( self.IsAll ) then + RunConsoleCommand( "gms_DropResources", string.gsub( self.Text, " ", "_" ), self.Num ) + else + local res = self.Text + Derma_StringRequest( "Please enter amount", "Please enter amount of " .. res .. " to store.", "", function( text ) + RunConsoleCommand( "gms_DropResources", string.gsub( res, " ", "_" ), text ) + end ) + end +end +function PANEL:SetRes( str, num, isAll ) + self.Text = str + self.Num = num + self.IsAll = isAll +end + +vgui.Register( "gms_StoreButton", PANEL, "DButton" )
\ No newline at end of file |
