This commit is contained in:
lifestorm
2024-08-04 23:12:27 +03:00
parent 0e770b2b49
commit ba1fc01b16
7084 changed files with 2173495 additions and 14 deletions

View File

@@ -0,0 +1,173 @@
--[[
| 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/
--]]
include( "preset_editor.lua" )
local PANEL = {}
function PANEL:Init()
self.DropDown = vgui.Create( "DComboBox", self )
self.DropDown.OnSelect = function( dropdown, index, value, data ) self:OnSelect( index, value, data ) end
self.DropDown:SetText( "Presets" )
self.DropDown:Dock( FILL )
self.Button = vgui.Create( "DImageButton", self )
self.Button.DoClick = function() self:OpenPresetEditor() end
self.Button:Dock( RIGHT )
self.Button:SetToolTip( "#preset.edit" )
self.Button:SetImage( "icon16/wrench.png" )
self.Button:SetStretchToFit( false )
self.Button:SetSize( 20, 20 )
self.Button:DockMargin( 0, 0, 0, 0 )
self.AddButton = vgui.Create( "DImageButton", self )
self.AddButton.DoClick = function()
if ( !IsValid( self ) ) then return end
self:QuickSavePreset()
end
self.AddButton:Dock( RIGHT )
self.AddButton:SetToolTip( "#preset.add" )
self.AddButton:SetImage( "icon16/add.png" )
self.AddButton:SetStretchToFit( false )
self.AddButton:SetSize( 20, 20 )
self.AddButton:DockMargin( 2, 0, 0, 0 )
self:SetTall( 20 )
self.Options = {}
self.ConVars = {}
end
function PANEL:SetLabel( strName )
self.Label:SetText( strName )
end
function PANEL:AddOption( strName, data )
self.DropDown:AddChoice( strName, data )
self.Options[ strName ] = data
end
function PANEL:SetOptions( Options )
if ( Options ) then
table.Merge( self.Options, Options )
end
end
function PANEL:OnSelect( index, value, data )
if ( !data ) then return end
for k, v in pairs( data ) do
RunConsoleCommand( k, v )
end
end
function PANEL:QuickSaveInternal( text )
local tabValues = {}
for k, v in pairs( self:GetConVars() ) do
tabValues[ v ] = GetConVarString( v )
end
presets.Add( self.m_strPreset, text, tabValues )
self:Update()
end
function PANEL:QuickSavePreset()
Derma_StringRequest( "#preset.saveas_title", "#preset.saveas_desc", "", function( text )
if ( !text || text:Trim() == "" ) then presets.BadNameAlert() return end
if ( presets.Exists( self.m_strPreset, text ) ) then
presets.OverwritePresetPrompt( function()
self:QuickSaveInternal( text )
end )
return
end
self:QuickSaveInternal( text )
end )
end
function PANEL:OpenPresetEditor()
if ( !self.m_strPreset ) then return end
self.Window = vgui.Create( "PresetEditor" )
self.Window:MakePopup()
self.Window:Center()
self.Window:SetType( self.m_strPreset )
self.Window:SetConVars( self:GetConVars() )
self.Window:SetPresetControl( self )
end
function PANEL:AddConVar( convar )
table.insert( self.ConVars, convar )
end
function PANEL:GetConVars()
return self.ConVars
end
function PANEL:SetPreset( strName )
self.m_strPreset = strName
self:ReloadPresets()
end
function PANEL:ReloadPresets()
self:Clear()
for name, data in pairs( self.Options ) do
self:AddOption( name, data )
end
local Presets = presets.GetTable( self.m_strPreset )
local sortedPresets, i = {}, 1
for name in pairs( Presets ) do
sortedPresets[ i ] = name
i = i + 1
end
table.sort( sortedPresets )
for _, name in ipairs( sortedPresets ) do
self.DropDown:AddChoice( name, Presets[ name ] )
end
end
function PANEL:Update()
self:ReloadPresets()
end
function PANEL:Clear()
self.DropDown:Clear()
end
vgui.Register( "ControlPresets", PANEL, "Panel" )

View File

@@ -0,0 +1,59 @@
--[[
| 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/
--]]
local PANEL = {}
function PANEL:Init()
self.Mixer = vgui.Create( "DColorMixer", self )
self.Mixer:Dock( FILL )
self:SetTall( 245 )
end
function PANEL:PerformLayout( x, y )
-- Magic number, the target width for self.Mixer
-- Number picked to that Palette would not have a gap, at button size 17
local targetWidth = 272
-- Don't scale the Mixer in width, keep it to the target width
local s = math.max( ( self:GetWide() - targetWidth ) / 2, 0 )
self.Mixer:DockMargin( s, 8, s, 0 )
-- Ugly hack, because of the docking system
self.OldMixerW = self.OldMixerW or self.Mixer:GetWide()
-- Number of panels in one row
local ColorRows = math.ceil( #self.Mixer.Palette:GetChildren() / 3 )
-- Set the button size closest to fill the Mixer width
local bSize = math.floor( self:GetWide() / ColorRows )
self.Mixer.Palette:SetButtonSize( math.min( bSize, 17 ) )
end
function PANEL:Paint()
-- Invisible background!
end
function PANEL:SetLabel( text ) self.Mixer:SetLabel( text ) end
function PANEL:SetConVarR( cvar ) self.Mixer:SetConVarR( cvar ) end
function PANEL:SetConVarG( cvar ) self.Mixer:SetConVarG( cvar ) end
function PANEL:SetConVarB( cvar ) self.Mixer:SetConVarB( cvar ) end
function PANEL:SetConVarA( cvar ) self.Mixer:SetConVarA( cvar ) end
function PANEL:GetConVarR() return self.Mixer:GetConVarR() end
function PANEL:GetConVarG() return self.Mixer:GetConVarG() end
function PANEL:GetConVarB() return self.Mixer:GetConVarB() end
function PANEL:GetConVarA() return self.Mixer:GetConVarA() end
vgui.Register( "CtrlColor", PANEL, "DPanel" )

View File

@@ -0,0 +1,118 @@
--[[
| 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/
--]]
local PANEL = {}
--AccessorFunc( PANEL, "m_ConVarR", "ConVarR" )
--[[---------------------------------------------------------
Name: Init
-----------------------------------------------------------]]
function PANEL:Init()
self.ConVars = {}
self.Options = {}
end
--[[---------------------------------------------------------
Name: AddOption
-----------------------------------------------------------]]
function PANEL:AddOption( strName, tabConVars )
self:AddChoice( strName, tabConVars )
for k, v in pairs( tabConVars ) do
self.ConVars[ k ] = 1
end
end
--[[---------------------------------------------------------
Name: OnSelect
-----------------------------------------------------------]]
function PANEL:OnSelect( index, value, data )
for k, v in pairs( data ) do
RunConsoleCommand( k, tostring( v ) )
end
end
--[[---------------------------------------------------------
Name: Think
-----------------------------------------------------------]]
function PANEL:Think( CheckConvarChanges )
self:CheckConVarChanges()
end
--[[---------------------------------------------------------
Name: ConVarsChanged
-----------------------------------------------------------]]
function PANEL:ConVarsChanged()
for k, v in pairs( self.ConVars ) do
if ( self[ k ] == nil ) then return true end
if ( self[ k ] != GetConVarString( k ) ) then return true end
end
return false
end
--[[---------------------------------------------------------
Name: CheckForMatch
-----------------------------------------------------------]]
function PANEL:CheckForMatch( cvars )
if ( table.IsEmpty( cvars ) ) then return false end
for k, v in pairs( cvars ) do
if ( tostring(v) != GetConVarString( k ) ) then
return false
end
end
return true
end
--[[---------------------------------------------------------
Name: CheckConVarChanges
-----------------------------------------------------------]]
function PANEL:CheckConVarChanges()
if (!self:ConVarsChanged()) then return end
for k, v in pairs( self.ConVars ) do
self[ k ] = GetConVarString( k )
end
for k, v in pairs( self.Data ) do
if ( self:CheckForMatch( v ) ) then
self:SetText( self:GetOptionText(k) )
return
end
end
end
vgui.Register( "CtrlListBox", PANEL, "DComboBox" )

View File

@@ -0,0 +1,117 @@
--[[
| 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/
--]]
local PANEL = {}
AccessorFunc( PANEL, "m_ConVar1", "ConVar1" )
AccessorFunc( PANEL, "m_ConVar2", "ConVar2" )
--[[---------------------------------------------------------
Name: Init
-----------------------------------------------------------]]
function PANEL:Init()
self.NumPad1 = vgui.Create( "DBinder", self )
self.Label1 = vgui.Create( "DLabel", self )
self.Label1:SetDark( true )
self.NumPad2 = vgui.Create( "DBinder", self )
self.Label2 = vgui.Create( "DLabel", self )
self.Label2:SetDark( true )
self:SetPaintBackground( false )
self:SetHeight( 200 )
end
--[[---------------------------------------------------------
Name: SetLabel1
-----------------------------------------------------------]]
function PANEL:SetLabel1( txt )
if ( !txt ) then return end
self.Label1:SetText( txt )
end
--[[---------------------------------------------------------
Name: SetLabel2
-----------------------------------------------------------]]
function PANEL:SetLabel2( txt )
if ( !txt ) then return end
self.Label2:SetText( txt )
end
--[[---------------------------------------------------------
Name: SetConVar1
-----------------------------------------------------------]]
function PANEL:SetConVar1( cvar )
self.NumPad1:SetConVar( cvar )
self.m_ConVar1 = cvar
end
--[[---------------------------------------------------------
Name: SetConVar2
-----------------------------------------------------------]]
function PANEL:SetConVar2( cvar )
self.NumPad2:SetConVar( cvar )
self.m_ConVar2 = cvar
end
--[[---------------------------------------------------------
Name: Init
-----------------------------------------------------------]]
function PANEL:PerformLayout()
self:SetTall( 70 )
self.NumPad1:InvalidateLayout( true )
self.NumPad1:SetSize( 100, 50 )
if ( self.m_ConVar2 ) then
self.NumPad2:InvalidateLayout( true )
self.NumPad2:SetSize( 100, 50 )
end
if ( !self.m_ConVar2 ) then
self.Label1:SizeToContents()
self.NumPad2:SetVisible( false )
self.Label2:SetVisible( false )
self.NumPad1:CenterHorizontal( 0.5 )
self.NumPad1:AlignTop( 20 )
self.Label1:CenterHorizontal()
self.Label1:AlignTop( 0 )
else
self.Label1:SizeToContents()
self.Label2:SizeToContents()
self.NumPad2:SetVisible( true )
self.Label2:SetVisible( true )
self.NumPad1:CenterHorizontal( 0.25 )
self.Label1:CenterHorizontal( 0.25 )
self.NumPad1:AlignTop( 20 )
self.NumPad2:CenterHorizontal( 0.75 )
self.Label2:CenterHorizontal( 0.75 )
self.NumPad2:AlignTop( 20 )
self.Label2:AlignTop( 0 )
end
end
vgui.Register( "CtrlNumPad", PANEL, "DPanel" )

View File

@@ -0,0 +1,17 @@
--[[
| 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/
--]]
include( "control_presets.lua" )
include( "ropematerial.lua" )
include( "ctrlnumpad.lua" )
include( "ctrlcolor.lua" )
include( "ctrllistbox.lua" )

View File

@@ -0,0 +1,272 @@
--[[
| 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/
--]]
local PANEL = {}
AccessorFunc( PANEL, "m_strType", "Type" )
AccessorFunc( PANEL, "m_ConVars", "ConVars" )
AccessorFunc( PANEL, "m_PresetControl", "PresetControl" )
function PANEL:Init()
self:SetSize( 450, 350 )
self:SetMinWidth( 450 )
self:SetMinHeight( 350 )
self:SetSizable( true )
self:SetTitle( "#preset.editor" )
self:DockPadding( 6, 29, 6, 6 )
local pnlTop = vgui.Create( "Panel", self )
pnlTop:Dock( FILL )
pnlTop:DockMargin( 0, 0, 0, 5 )
self.PresetList = vgui.Create( "DListView", pnlTop )
self.PresetList:Dock( LEFT )
self.PresetList:DockMargin( 0, 0, 5, 0 )
self.PresetList:SetWide( 150 )
self.PresetList:SetMultiSelect( false )
self.PresetList:SetSortable( false )
self.PresetList.OnRowSelected = function( s, idx, pnl ) self:OnPresetSelected( pnl ) end
local pnlEditor = vgui.Create( "DPanel", pnlTop )
pnlEditor:Dock( FILL )
self.pnlDetails = vgui.Create( "DProperties", pnlEditor )
self.pnlDetails:Dock( FILL )
self.pnlDetails:DockMargin( 5, 5, 5, 5 )
----------
local pnlModify = vgui.Create( "Panel", pnlEditor )
pnlModify:Dock( BOTTOM )
pnlModify:SetTall( 20 )
pnlModify:DockMargin( 5, 0, 5, 5 )
local btnDelete = vgui.Create( "DButton", pnlModify )
btnDelete.DoClick = function() self:Delete() end
btnDelete:SetTooltip( "#preset.delete" )
btnDelete:SetImage( "icon16/bin.png" )
btnDelete:SetText( "" )
btnDelete:Dock( RIGHT )
btnDelete:SetWide( 25 )
btnDelete:SetEnabled( false )
self.txtRename = vgui.Create( "DTextEntry", pnlModify )
self.txtRename:Dock( FILL )
self.txtRename:SetEnabled( false )
self.txtRename:SetTooltip( "#preset.rename" )
local btnRename = vgui.Create( "DButton", pnlModify )
btnRename:SetTooltip( "#preset.save" )
btnRename:SetImage( "icon16/disk.png" )
btnRename:SetText( "" )
btnRename:Dock( RIGHT )
btnRename:DockMargin( 5, 0, 5, 0 )
btnRename:SetWide( 24 )
btnRename.DoClick = function() self:SaveChanges() end
btnRename:SetEnabled( false )
----------
local bottom = vgui.Create( "Panel", self )
bottom:Dock( BOTTOM )
bottom:SetTall( 30 )
self.pnlAdd = vgui.Create( "DPanel", bottom )
self.pnlAdd:Dock( FILL )
self.pnlAdd:DockPadding( 5, 5, 5, 5 )
self.pnlAdd:DockMargin( 0, 0, 5, 0 )
self.txtName = vgui.Create( "DTextEntry", self.pnlAdd )
self.txtName:SetTooltip( "#preset.addnew_field" )
self.txtName:Dock( FILL )
self.txtName:DockMargin( 0, 0, 5, 0 )
self.txtName.OnChange = function( s ) self.btnAdd:SetEnabled( s:GetText():Trim() != "" ) end
self.btnAdd = vgui.Create( "DButton", self.pnlAdd )
self.btnAdd:SetText( "#preset.addnew" )
self.btnAdd:Dock( RIGHT )
self.btnAdd:SetEnabled( false )
self.btnAdd.DoClick = function() self:Add() end
----------
local pnlClose = vgui.Create( "DPanel", bottom )
pnlClose:Dock( RIGHT )
pnlClose:SetWide( 100 )
pnlClose:DockPadding( 5, 5, 5, 5 )
local btnCloseIt = vgui.Create( "DButton", pnlClose )
btnCloseIt:SetText( "#preset.close" )
btnCloseIt:Dock( FILL )
btnCloseIt.DoClick = function() self:Remove() end
end
function PANEL:SetType( strType )
self.m_strType = strType
self.PresetList:AddColumn( self:GetType() )
self:Update()
end
function PANEL:OnPresetSelected( item )
local name = item:GetValue( 1 )
self.txtRename:SetText( name )
for id, pnl in ipairs( self.txtRename:GetParent():GetChildren() ) do pnl:SetEnabled( true ) end
self.pnlDetails:Clear()
for cvar, val in SortedPairs( item:GetTable().Data ) do
local Row = self.pnlDetails:CreateRow( name, cvar:lower() )
if ( tonumber( val ) != nil && false ) then
Row:Setup( "Float", { min = 0, max = 1000 } )
Row:SetValue( val )
else
Row:Setup( "Generic" )
end
Row:SetValue( val )
Row.__Value = val
Row.DataChanged = function( s, value ) Row.__Value = value end
end
end
function PANEL:Update()
self.PresetList:Clear()
self.pnlDetails:Clear()
self.txtRename:SetText( "" )
local Presets = presets.GetTable( self:GetType() )
local sortedPresets, i = {}, 1
for name in pairs( Presets ) do
sortedPresets[i] = name
i = i + 1
end
table.sort( sortedPresets )
for _, name in ipairs( sortedPresets ) do
local item = self.PresetList:AddLine( name )
item.Data = Presets[ name ]
end
end
function PANEL:SelectPresetByName( name )
for id, line in pairs( self.PresetList:GetLines() ) do
if ( line:GetValue( 1 ) != name ) then continue end
self.PresetList:SelectItem( line )
end
end
function PANEL:Delete()
if ( !self.PresetList:GetSelectedLine() || !IsValid( self.PresetList:GetLine( self.PresetList:GetSelectedLine() ) ) ) then return end
local Selected = self.PresetList:GetLine( self.PresetList:GetSelectedLine() ):GetValue( 1 ):Trim()
if ( Selected == "" ) then return end
presets.Remove( self:GetType(), Selected )
self:Update()
if ( self:GetPresetControl() ) then self:GetPresetControl():Update() end
end
function PANEL:SaveChangesInternal( Selected, ToName )
local tabValues = {}
local cat = self.pnlDetails:GetCategory( Selected )
-- WARNING: This will discard ConVars in the preset that no longer exist on the tool/whatever this preset is for
for k, v in pairs( self:GetConVars() ) do
if ( cat:GetRow( v:lower() ) ) then
tabValues[ v:lower() ] = cat:GetRow( v:lower() ).__Value
end
end
presets.Rename( self:GetType(), Selected, ToName ) -- Raname the preset if necessary
presets.Add( self:GetType(), ToName, tabValues ) -- Update the values
self:Update()
self.txtRename:SetText( "" )
self:SelectPresetByName( ToName )
if ( self:GetPresetControl() ) then self:GetPresetControl():Update() end
end
function PANEL:SaveChanges()
if ( !self.PresetList:GetSelectedLine() || !IsValid( self.PresetList:GetLine( self.PresetList:GetSelectedLine() ) ) ) then return end
local Selected = self.PresetList:GetLine( self.PresetList:GetSelectedLine() ):GetValue( 1 ):Trim()
if ( Selected == "" ) then return end
local ToName = self.txtRename:GetValue():Trim()
if ( !ToName || ToName == "" ) then presets.BadNameAlert() return end
if ( presets.Exists( self:GetType(), ToName ) && Selected != ToName ) then
presets.OverwritePresetPrompt( function()
self:SaveChangesInternal( Selected, ToName )
end )
return
end
self:SaveChangesInternal( Selected, ToName )
end
function PANEL:InternalAdd( ToName )
local tabValues = {}
for k, v in pairs( self:GetConVars() ) do
tabValues[ v ] = GetConVarString( v:lower() )
end
presets.Add( self:GetType(), ToName, tabValues )
self:Update()
self.txtName:SetText( "" )
self:SelectPresetByName( ToName )
if ( self:GetPresetControl() ) then self:GetPresetControl():Update() end
end
function PANEL:Add()
if ( !self:GetConVars() ) then return end
local ToName = self.txtName:GetValue():Trim()
if ( !ToName || ToName == "" ) then presets.BadNameAlert() return end
if ( presets.Exists( self:GetType(), ToName ) ) then
presets.OverwritePresetPrompt( function()
self:InternalAdd( ToName )
end )
return
end
self:InternalAdd( ToName )
end
vgui.Register( "PresetEditor", PANEL, "DFrame" )

View File

@@ -0,0 +1,46 @@
--[[
| 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/
--]]
list.Set( "RopeMaterials", "#ropematerial.rope", "cable/rope" )
list.Set( "RopeMaterials", "#ropematerial.cable", "cable/cable2" )
list.Set( "RopeMaterials", "#ropematerial.xbeam", "cable/xbeam" )
list.Set( "RopeMaterials", "#ropematerial.laser", "cable/redlaser" )
list.Set( "RopeMaterials", "#ropematerial.electric", "cable/blue_elec" )
list.Set( "RopeMaterials", "#ropematerial.physbeam", "cable/physbeam" )
list.Set( "RopeMaterials", "#ropematerial.hydra", "cable/hydra" )
local PANEL = {}
--[[---------------------------------------------------------
Name: Paint
-----------------------------------------------------------]]
function PANEL:Init()
self:SetItemWidth( 0.14 )
self:SetItemHeight( 0.3 )
self:SetAutoHeight( true )
local mats = list.Get( "RopeMaterials" )
for k, v in pairs( mats ) do
self:AddMaterial( k, v )
end
end
function PANEL:Paint( w, h )
draw.RoundedBox( 4, 0, 0, w, h, Color( 128, 128, 128, 255 ) )
end
vgui.Register( "RopeMaterial", PANEL, "MatSelect" )