dobrograd-13-06-2022/garrysmod/addons/feature-cars/lua/simfphys/client/tab.lua
Jonny_Bro (Nikita) e4d5311906 first commit
2023-11-16 15:01:19 +05:00

702 lines
25 KiB
Lua

local auto = CreateClientConVar( "cl_simfphys_auto", 1 , true, true )
local sport = CreateClientConVar( "cl_simfphys_sport", 0 , true, true )
local sanic = CreateClientConVar( "cl_simfphys_sanic", 0 , true, true )
local ctenable = CreateClientConVar( "cl_simfphys_ctenable", 1 , true, true )
local ctmul = CreateClientConVar( "cl_simfphys_ctmul", 0.7 , true, true )
local ctang = CreateClientConVar( "cl_simfphys_ctang", 15 , true, true )
local hud = CreateClientConVar( "cl_simfphys_hud", "1", true, false )
local alt_hud = CreateClientConVar( "cl_simfphys_althud", "1", true, false )
local alt_hud_arc = CreateClientConVar( "cl_simfphys_althud_arcs", "0", true, false )
local hud_x = CreateClientConVar( "cl_simfphys_hud_offset_x", "0", true, false )
local hud_y = CreateClientConVar( "cl_simfphys_hud_offset_y", "0", true, false )
local hud_mph = CreateClientConVar( "cl_simfphys_hudmph", "0", true, false )
local hud_mpg = CreateClientConVar( "cl_simfphys_hudmpg", "0", true, false )
local hud_realspeed = CreateClientConVar( "cl_simfphys_hudrealspeed", "0", true, false )
local autostart = CreateClientConVar( "cl_simfphys_autostart", "1", true, true )
-- local mousesteer = CreateClientConVar( "cl_simfphys_mousesteer", "0", true, true )
local mssensitivity = CreateClientConVar( "cl_simfphys_ms_sensitivity", "1", true, true )
local msretract = CreateClientConVar( "cl_simfphys_ms_return", "1", true, true )
local msdeadzone = CreateClientConVar( "cl_simfphys_ms_deadzone", "3", true, true )
local msexponent = CreateClientConVar( "cl_simfphys_ms_exponent", "1.5", true, true )
local mslockpitch = CreateClientConVar( "cl_simfphys_ms_lockpitch", "0", true, true )
local mshud = CreateClientConVar( "cl_simfphys_ms_hud", "1", true, false )
local k_msfreelook = CreateClientConVar( "cl_simfphys_ms_keyfreelook", KEY_Y, true, true )
local mslockedpitch = CreateClientConVar( "cl_simfphys_ms_lockedpitch", "5", true, true )
local overwrite = CreateClientConVar( "cl_simfphys_overwrite", 0, true, true )
local smoothsteer = CreateClientConVar( "cl_simfphys_smoothsteer", 0, true, true )
local steerspeed = CreateClientConVar( "cl_simfphys_steerspeed", 8, true, true )
local faststeerang = CreateClientConVar( "cl_simfphys_steerangfast", 10, true, true )
local fadespeed = CreateClientConVar( "cl_simfphys_fadespeed", 535, true, true )
CreateClientConVar( "cl_simfphys_hidesprites", "0", true, false )
CreateClientConVar( "cl_simfphys_spritedamage", "1", true, false )
CreateClientConVar( "cl_simfphys_frontlamps", "1", true, false )
CreateClientConVar( "cl_simfphys_rearlamps", "1", true, false )
CreateClientConVar( "cl_simfphys_shadows", "0", true, false )
local function simplebinder_old( x, y, tbl, num, parent, sizex, sizey)
local kentry = tbl[num]
local key = kentry[1]
local setdefault = key:GetInt()
local sizex = sizex or 400
local sizey = sizey or 40
local Shape = vgui.Create( "DShape", parent)
Shape:SetType( "Rect" )
Shape:SetPos( x, y )
Shape:SetSize( sizex, sizey )
Shape:SetColor( Color( 0, 0, 0, 255 ) )
local Shape = vgui.Create( "DShape", parent)
Shape:SetType( "Rect" )
Shape:SetPos( x + 1, y + 1 )
Shape:SetSize( sizex - 2, sizey - 2 )
Shape:SetColor( Color( 241, 241, 241, 255 ) )
local binder = vgui.Create( "DBinder", parent)
binder:SetPos( sizex * 0.5 + x, y )
binder:SetSize( sizex * 0.5, sizey )
binder:SetValue( setdefault )
function binder:SetSelectedNumber( num )
self.m_iSelectedNumber = num
self:ConVarChanged( num )
self:UpdateText()
self:OnChange( num )
key:SetInt( num )
end
local TextLabel = vgui.Create( "DPanel", parent)
TextLabel:SetPos( x, y )
TextLabel:SetSize( sizex * 0.5, sizey )
TextLabel.Paint = function()
draw.SimpleText( kentry[3], "DSimfphysFont", sizex * 0.25, 20, Color( 100, 100, 100, 255 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER )
end
return binder
end
local function createcheckbox(x, y, label, command, parent, default)
local boxy = vgui.Create( "DCheckBoxLabel", parent)
boxy:SetParent( parent )
boxy:SetPos( x, y )
boxy:SetText( label )
boxy:SetConVar( command )
boxy:SetValue( default )
boxy:SizeToContents()
return boxy
end
local function createslider(x, y, sizex, sizey, label, command, parent,min,max,default)
local slider = vgui.Create( "DNumSlider", parent)
slider:SetPos( x, y )
slider:SetSize( sizex, sizey )
slider:SetText( label )
slider:SetMin( min )
slider:SetMax( max )
slider:SetDecimals( 2 )
slider:SetConVar( command )
slider:SetValue( default )
return slider
end
local function buildclientsettingsmenu( self )
local Shape = vgui.Create( "DShape", self.PropPanel)
Shape:SetType( "Rect" )
Shape:SetPos( 20, 20 )
Shape:SetSize( 350, 180 )
Shape:SetColor( Color( 0, 0, 0, 200 ) )
createcheckbox(25,25,"Show Hud","cl_simfphys_hud",self.PropPanel,hud:GetInt())
createcheckbox(210,25,"Racing Hud","cl_simfphys_althud",self.PropPanel,alt_hud:GetInt())
createcheckbox(210,45,"Draw Arcs\n(will cause problems\nwith multicore!)","cl_simfphys_althud_arcs",self.PropPanel,alt_hud_arc:GetInt())
createcheckbox(25,45,"MPH instead of KMH","cl_simfphys_hudmph",self.PropPanel,hud_mph:GetInt())
createcheckbox(25,65,"Speed relative to \nplayersize instead \nworldsize","cl_simfphys_hudrealspeed",self.PropPanel,hud_realspeed:GetInt())
createcheckbox(25,110,"Fuel consumption \nin MPG instead \nof L/100KM","cl_simfphys_hudmpg",self.PropPanel,hud_mpg:GetInt())
createslider(30,155,345,20,"Hud offset X","cl_simfphys_hud_offset_x",self.PropPanel,-1,1,hud_x:GetFloat())
createslider(30,175,345,20,"Hud offset Y","cl_simfphys_hud_offset_y",self.PropPanel,-1,1,hud_y:GetFloat())
local Shape = vgui.Create( "DShape", self.PropPanel)
Shape:SetType( "Rect" )
Shape:SetPos( 20, 210 )
Shape:SetSize( 350, 85 )
Shape:SetColor( Color( 0, 0, 0, 200 ) )
createcheckbox(25,215,"Hide Sprites","cl_simfphys_hidesprites",self.PropPanel,0)
createcheckbox(210,215,"Allow light damaging","cl_simfphys_spritedamage",self.PropPanel,0)
createcheckbox(25,235,"Front Projected Textures","cl_simfphys_frontlamps",self.PropPanel,0)
createcheckbox(25,255,"Rear Projected Textures","cl_simfphys_rearlamps",self.PropPanel,0)
createcheckbox(25,275,"Enable Shadows","cl_simfphys_shadows",self.PropPanel,0)
local Shape = vgui.Create( "DShape", self.PropPanel)
Shape:SetType( "Rect" )
Shape:SetPos( 20, 305 )
Shape:SetSize( 350, 85 )
Shape:SetColor( Color( 0, 0, 0, 200 ) )
createcheckbox(25,310,"Always Fullthrottle","cl_simfphys_sanic",self.PropPanel,sanic:GetInt())
createcheckbox(25,330,"Engine Auto Start/Stop","cl_simfphys_autostart",self.PropPanel,autostart:GetInt())
createcheckbox(25,350,"Automatic Transmission","cl_simfphys_auto",self.PropPanel,auto:GetInt())
createcheckbox(25,370,"Automatic Sportmode (late up and downshifts)","cl_simfphys_sport",self.PropPanel,sport:GetInt())
local Shape = vgui.Create( "DShape", self.PropPanel)
Shape:SetType( "Rect" )
Shape:SetPos( 20, 400 )
Shape:SetSize( 350, 115 )
Shape:SetColor( Color( 0, 0, 0, 200 ) )
local ctitem_1 = createcheckbox(25,405,"Enable Countersteer","cl_simfphys_ctenable",self.PropPanel,ctenable:GetInt())
local ctitem_2 = createslider(30,425,345,40,"Countersteer Mul","cl_simfphys_ctmul",self.PropPanel,0.1,2,ctmul:GetFloat())
local ctitem_3 = createslider(30,445,345,40,"Countersteer MaxAng","cl_simfphys_ctang",self.PropPanel,1,90,ctang:GetFloat())
local Reset = vgui.Create( "DButton" )
Reset:SetParent( self.PropPanel )
Reset:SetText( "Reset" )
Reset:SetPos( 25, 485 )
Reset:SetSize( 340, 25 )
Reset.DoClick = function()
ctitem_1:SetValue( 1 )
ctitem_2:SetValue( 0.7 )
ctitem_3:SetValue( 15 )
ctenable:SetInt( 1 )
ctmul:SetFloat( 0.7 )
ctang:SetFloat( 15 )
end
local Shape = vgui.Create( "DShape", self.PropPanel)
Shape:SetType( "Rect" )
Shape:SetPos( 20, 525 )
Shape:SetSize( 350, 165 )
Shape:SetColor( Color( 0, 0, 0, 200 ) )
local st_item_1 = createcheckbox(25,530,"Use these settings\n(you need to re-enter the vehicle)","cl_simfphys_overwrite",self.PropPanel,overwrite:GetInt())
local st_item_2 = createslider(30,550,345,40,"steer speed","cl_simfphys_steerspeed",self.PropPanel,1,16,steerspeed:GetFloat())
local st_item_3 = createslider(30,570,345,40,"fast speed steer angle","cl_simfphys_steerangfast",self.PropPanel,0,90,faststeerang:GetFloat())
local st_item_4 = createslider(30,595,345,40,"fade speed(units/seconds)\nfor fast speed steer angle","cl_simfphys_fadespeed",self.PropPanel,1,5000,fadespeed:GetFloat())
local st_item_5 = createcheckbox(25,635,"extra smooth steering","cl_simfphys_smoothsteer",self.PropPanel,smoothsteer:GetInt())
local Reset = vgui.Create( "DButton" )
Reset:SetParent( self.PropPanel )
Reset:SetText( "Reset" )
Reset:SetPos( 25, 660 )
Reset:SetSize( 340, 25 )
Reset.DoClick = function()
st_item_1:SetValue( 0 )
st_item_2:SetValue( 8 )
st_item_3:SetValue( 10 )
st_item_4:SetValue( 535 )
st_item_5:SetValue( 0 )
overwrite:SetInt( 0 )
steerspeed:SetFloat( 8 )
faststeerang:SetFloat( 10 )
fadespeed:SetFloat( 535 )
smoothsteer:SetInt( 0 )
end
end
-- local function buildcontrolsmenu( self )
-- local Background = vgui.Create( "DShape", self.PropPanel)
-- Background:SetType( "Rect" )
-- Background:SetPos( 20, 40 )
-- Background:SetColor( Color( 0, 0, 0, 200 ) )
-- local TextLabel = vgui.Create( "DPanel", self.PropPanel)
-- TextLabel:SetPos( 0, 0 )
-- TextLabel:SetSize( 600, 40 )
-- TextLabel.Paint = function()
-- draw.SimpleTextOutlined( "Чтобы настройки изменились, нужно зайти в машину заново!", "DSimfphysFont_hint", 300, 20, Color( 255, 0, 0, 255 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER , 1,Color( 0, 0, 0, 255 ) )
-- end
-- local yy = 45
-- local binders = {}
-- for i = 1, table.Count( k_list ) do
-- binders[i] = simplebinder(25,yy,k_list,i,self.PropPanel)
-- yy = yy + 45
-- end
-- local ResetButton = vgui.Create( "DButton" )
-- ResetButton:SetParent( self.PropPanel )
-- ResetButton:SetText( "Reset" )
-- ResetButton:SetPos( 25, yy + 10 )
-- ResetButton:SetSize( 500, 25 )
-- ResetButton.DoClick = function()
-- for i = 1, table.Count( binders ) do
-- local kentry = k_list[i]
-- local key = kentry[1]
-- local default = kentry[2]
-- key:SetInt( default )
-- binders[i]:SetValue( default )
-- end
-- end
-- Background:SetSize( 510, yy )
-- end
local function buildmsmenu( self )
local Shape = vgui.Create( "DShape", self.PropPanel)
Shape:SetType( "Rect" )
Shape:SetPos( 20, 20 )
Shape:SetSize( 350, 310 )
Shape:SetColor( Color( 0, 0, 0, 200 ) )
-- local msitem_1 = createcheckbox(25,25,"Enable Mouse Steering","cl_simfphys_mousesteer",self.PropPanel,mousesteer:GetInt())
local msitem_2 = createcheckbox(25,55,"Lock Pitch View","cl_simfphys_ms_lockpitch",self.PropPanel,mslockpitch:GetInt())
local msitem_8 = createcheckbox(25,85,"Show Hud","cl_simfphys_ms_hud",self.PropPanel,mshud:GetInt())
local msitem_9 = createslider(60,50,315,40,"","cl_simfphys_ms_lockedpitch",self.PropPanel,-90,90,mslockedpitch:GetFloat())
local msitem_4 = createslider(30,110,345,40,"Deadzone","cl_simfphys_ms_deadzone",self.PropPanel,0,16,msdeadzone:GetFloat())
local msitem_5 = createslider(30,140,345,40,"Exponent","cl_simfphys_ms_exponent",self.PropPanel,1,4,msexponent:GetFloat())
local msitem_6 = createslider(30,170,345,40,"Sensitivity","cl_simfphys_ms_sensitivity",self.PropPanel,0.01,10,mssensitivity:GetFloat())
local msitem_7 = createslider(30,200,345,40,"Return Speed","cl_simfphys_ms_return",self.PropPanel,0,10,msretract:GetFloat())
local msitem_3 = simplebinder_old(25,240,{{k_msfreelook,KEY_Y,"Unlock View"}},1,self.PropPanel,340, 40)
local DermaButton = vgui.Create( "DButton" )
DermaButton:SetParent( self.PropPanel )
DermaButton:SetText( "Reset" )
DermaButton:SetPos( 25, 300 )
DermaButton:SetSize( 340, 25 )
DermaButton.DoClick = function()
msitem_1:SetValue( 0 )
msitem_2:SetValue( 0 )
msitem_3:SetValue( KEY_Y )
msitem_4:SetValue( 3 )
msitem_5:SetValue( 1.5 )
msitem_6:SetValue( 1 )
msitem_7:SetValue( 1 )
msitem_8:SetValue( 1 )
msitem_9:SetValue( 5 )
mshud:SetInt( 1 )
-- mousesteer:SetInt( 0 )
mssensitivity:SetInt( 1 )
msretract:SetInt( 1 )
msdeadzone:SetFloat( 3 )
msexponent:SetFloat( 1.5 )
mslockpitch:SetInt( 0 )
k_msfreelook:SetInt( KEY_Y )
mslockedpitch:SetFloat( 5 )
end
end
local function buildserversettingsmenu( self )
local Background = vgui.Create( "DShape", self.PropPanel)
Background:SetType( "Rect" )
Background:SetPos( 20, 20 )
Background:SetColor( Color( 0, 0, 0, 200 ) )
local y = 0
if LocalPlayer():IsSuperAdmin() then
y = y + 25
local CheckBoxTeam = vgui.Create( "DCheckBoxLabel", self.PropPanel)
CheckBoxTeam:SetPos( 25, y )
CheckBoxTeam:SetText( "Disallow players of different teams to enter the same vehicle" )
CheckBoxTeam:SetValue( GetConVar( "sv_simfphys_teampassenger" ) :GetInt() )
CheckBoxTeam:SizeToContents()
y = y + 25
local CheckBoxDamage = vgui.Create( "DCheckBoxLabel", self.PropPanel)
CheckBoxDamage:SetPos( 25, y )
CheckBoxDamage:SetText( "Enable Damage" )
CheckBoxDamage:SetValue( GetConVar( "sv_simfphys_enabledamage" ) :GetInt() )
CheckBoxDamage:SizeToContents()
y = y + 18
local DamageMul = vgui.Create( "DNumSlider", self.PropPanel)
DamageMul:SetPos( 30, y )
DamageMul:SetSize( 345, 30 )
DamageMul:SetText( "Damage Multiplicator" )
DamageMul:SetMin( 0 )
DamageMul:SetMax( 10 )
DamageMul:SetDecimals( 3 )
DamageMul:SetValue( GetConVar( "sv_simfphys_damagemultiplicator" ):GetFloat() )
y = y + 32
local CheckBoxpDamage = vgui.Create( "DCheckBoxLabel", self.PropPanel)
CheckBoxpDamage:SetPos( 25, y )
CheckBoxpDamage:SetText( "Enable Player Damage (On Collision)" )
CheckBoxpDamage:SetValue( GetConVar( "sv_simfphys_playerdamage" ) :GetInt() )
CheckBoxpDamage:SizeToContents()
y = y + 25
local GibRemoveTimer = vgui.Create( "DNumSlider", self.PropPanel)
GibRemoveTimer:SetPos( 30, y )
GibRemoveTimer:SetSize( 345, 30 )
GibRemoveTimer:SetText( "Gib Lifetime\n(0 = never remove)" )
GibRemoveTimer:SetMin( 0 )
GibRemoveTimer:SetMax( 3600 )
GibRemoveTimer:SetDecimals( 0 )
GibRemoveTimer:SetValue( GetConVar( "sv_simfphys_gib_lifetime" ):GetInt() )
y = y + 45
local CheckBoxFuel = vgui.Create( "DCheckBoxLabel", self.PropPanel)
CheckBoxFuel:SetPos( 25, y )
CheckBoxFuel:SetText( "Enable Fuelsystem" )
CheckBoxFuel:SetValue( GetConVar( "sv_simfphys_fuel" ) :GetInt() )
CheckBoxFuel:SizeToContents()
y = y + 18
local ScaleFuel = vgui.Create( "DNumSlider", self.PropPanel)
ScaleFuel:SetPos( 30, y )
ScaleFuel:SetSize( 345, 30 )
ScaleFuel:SetText( "Fuel tank size multiplier" )
ScaleFuel:SetMin( 0 )
ScaleFuel:SetMax( 1 )
ScaleFuel:SetDecimals( 2 )
ScaleFuel:SetValue( GetConVar( "sv_simfphys_fuelscale" ):GetFloat() )
y = y + 45
local tractionLabel = vgui.Create( "DLabel", self.PropPanel )
tractionLabel:SetPos( 25, y )
tractionLabel:SetText( "Traction Multiplicator for:" )
tractionLabel:SizeToContents()
local NewTractionData = {}
local DemSliders = {}
y = y + 15
for k, v in pairs( simfphys.TractionData ) do
DemSliders[k] = vgui.Create( "DNumSlider", self.PropPanel)
DemSliders[k]:SetPos( 30, y )
DemSliders[k]:SetSize( 345, 30 )
DemSliders[k]:SetText( k )
DemSliders[k]:SetMin( 0 )
DemSliders[k]:SetMax( 2 )
DemSliders[k]:SetDecimals( 2 )
DemSliders[k]:SetValue( simfphys[k]:GetFloat() )
DemSliders[k].OnValueChanged = function( item, value )
NewTractionData[ k ] = value
end
y = y + 25
end
y = y + 30
local DermaButton = vgui.Create( "DButton" )
DermaButton:SetParent( self.PropPanel )
DermaButton:SetText( "Apply" )
DermaButton:SetPos( 25, y - 10 )
DermaButton:SetSize( 340, 25 )
DermaButton.DoClick = function()
net.Start("simfphys_settings")
net.WriteBool( CheckBoxDamage:GetChecked() )
net.WriteFloat( GibRemoveTimer:GetValue() )
net.WriteFloat( DamageMul:GetValue() )
net.WriteBool( CheckBoxpDamage:GetChecked() )
net.WriteBool( CheckBoxFuel:GetChecked() )
net.WriteFloat( ScaleFuel:GetValue() )
net.WriteTable( NewTractionData )
net.WriteBool( CheckBoxTeam:GetChecked() )
net.SendToServer()
end
y = y + 30
local DermaButton = vgui.Create( "DButton" )
DermaButton:SetParent( self.PropPanel )
DermaButton:SetText( "Reset" )
DermaButton:SetPos( 25, y - 10 )
DermaButton:SetSize( 340, 25 )
DermaButton.DoClick = function()
NewTractionData["ice"] = 0.35
NewTractionData["gmod_ice"] = 0.1
NewTractionData["slipperyslime"] = 0.2
NewTractionData["snow"] = 0.7
NewTractionData["grass"] = 1
NewTractionData["sand"] = 1
NewTractionData["dirt"] = 1
NewTractionData["concrete"] = 1
NewTractionData["metal"] = 1
NewTractionData["glass"] = 1
NewTractionData["gravel"] = 1
NewTractionData["rock"] = 1
NewTractionData["wood"] = 1
for k, v in pairs( NewTractionData ) do
DemSliders[k]:SetValue( v )
end
CheckBoxDamage:SetValue( 1 )
GibRemoveTimer:SetValue( 120 )
DamageMul:SetValue( 1 )
CheckBoxpDamage:SetValue( 1 )
CheckBoxFuel:SetValue( 1 )
ScaleFuel:SetValue( 0.1 )
CheckBoxTeam:SetValue( 0 )
net.Start("simfphys_settings")
net.WriteBool( true )
net.WriteFloat( 120 )
net.WriteFloat( 1 )
net.WriteBool( true )
net.WriteBool( true )
net.WriteFloat( 0.1 )
net.WriteTable( NewTractionData )
net.WriteBool( false )
net.SendToServer()
end
else
y = y + 25
local Label = vgui.Create( "DLabel", self.PropPanel )
Label:SetPos( 30, y )
Label:SetText( "Damage is "..((GetConVar( "sv_simfphys_enabledamage" ):GetInt() > 0) and "enabled" or "disabled") )
Label:SizeToContents()
y = y + 25
local Label = vgui.Create( "DLabel", self.PropPanel )
Label:SetPos( 30, y )
Label:SetText( "Damage Multiplicator is: "..GetConVar( "sv_simfphys_damagemultiplicator" ):GetFloat() )
Label:SizeToContents()
y = y + 25
local yes = "Players can take damage from collisions"
local no = "Players can't take damage from collisions"
local Label = vgui.Create( "DLabel", self.PropPanel )
Label:SetPos( 30, y )
Label:SetText( GetConVar( "sv_simfphys_playerdamage" ):GetBool() and yes or no )
Label:SizeToContents()
y = y + 25
local Label = vgui.Create( "DLabel", self.PropPanel )
local lifetime = GetConVar( "sv_simfphys_gib_lifetime" ):GetInt()
Label:SetPos( 30, y )
Label:SetText( (lifetime > 0) and ("Gib Lifetime = "..lifetime.." seconds") or "Gibs never despawn" )
Label:SizeToContents()
y = y + 25
local Label = vgui.Create( "DLabel", self.PropPanel )
Label:SetPos( 30, y )
Label:SetText( "Vehicles "..(GetConVar( "sv_simfphys_fuel" ):GetBool() and "are running on fuel" or "don't use fuel") )
Label:SizeToContents()
y = y + 25
local Label = vgui.Create( "DLabel", self.PropPanel )
local fuelscale = math.Round( GetConVar( "sv_simfphys_fuelscale" ):GetFloat() , 3 )
Label:SetPos( 30, y )
Label:SetText( "Fuel tank size multiplier is: "..fuelscale )
Label:SizeToContents()
if GetConVar( "sv_simfphys_teampassenger" ):GetBool() then
y = y + 25
local Label = vgui.Create( "DLabel", self.PropPanel )
Label:SetPos( 30, y )
Label:SetText( "Only players of the same team can enter the same vehicle" )
Label:SizeToContents()
end
y = y + 40
local Label = vgui.Create( "DLabel", self.PropPanel )
Label:SetPos( 30, y )
Label:SetText( "Traction multiplier for..." )
Label:SizeToContents()
y = y + 15
for k, v in pairs( simfphys.TractionData ) do
local tractionLabel = vgui.Create( "DLabel", self.PropPanel )
tractionLabel:SetPos( 105, y )
tractionLabel:SetText( k )
tractionLabel:SizeToContents()
local tractionLabel = vgui.Create( "DLabel", self.PropPanel )
tractionLabel:SetPos( 170, y )
tractionLabel:SetText( "=" )
tractionLabel:SizeToContents()
local tractionLabel = vgui.Create( "DLabel", self.PropPanel )
tractionLabel:SetPos( 185, y )
tractionLabel:SetText( math.Round(v,2) )
tractionLabel:SizeToContents()
y = y + 25
end
y = y - 25
end
Background:SetSize( 350, y )
end
hook.Add( "SimfphysPopulateVehicles", "AddEntityContent", function( pnlContent, tree, node )
local Categorised = {}
-- Add this list into the tormoil
local Vehicles = list.Get( "simfphys_vehicles" )
if Vehicles then
for k, v in pairs( Vehicles ) do
v.Category = v.Category or "Other"
Categorised[ v.Category ] = Categorised[ v.Category ] or {}
v.ClassName = k
v.PrintName = v.Name
table.insert( Categorised[ v.Category ], v )
end
end
--
-- Add a tree node for each category
--
for CategoryName, v in SortedPairs( Categorised ) do
-- Add a node to the tree
local node = tree:AddNode( CategoryName, "icon16/bricks.png" )
-- When we click on the node - populate it using this function
node.DoPopulate = function( self )
-- If we've already populated it - forget it.
if self.PropPanel then return end
-- Create the container panel
self.PropPanel = vgui.Create( "ContentContainer", pnlContent )
self.PropPanel:SetVisible( false )
self.PropPanel:SetTriggerSpawnlistChange( false )
for k, ent in SortedPairsByMemberValue( v, "PrintName" ) do
spawnmenu.CreateContentIcon( "simfphys_vehicles", self.PropPanel, {
nicename = ent.PrintName or ent.ClassName,
spawnname = ent.ClassName,
material = "entities/"..ent.ClassName..".png",
admin = ent.AdminOnly
} )
end
end
-- If we click on the node populate it and switch to it.
node.DoClick = function( self )
self:DoPopulate()
pnlContent:SwitchPanel( self.PropPanel )
end
end
-- KEYBOARD
-- local node = tree:AddNode( "Controls", "icon16/keyboard.png" )
-- node.DoPopulate = function( self )
-- if self.PropPanel then return end
-- self.PropPanel = vgui.Create( "ContentContainer", pnlContent )
-- self.PropPanel:SetVisible( false )
-- self.PropPanel:SetTriggerSpawnlistChange( false )
-- buildcontrolsmenu( self )
-- end
-- node.DoClick = function( self )
-- self:DoPopulate()
-- pnlContent:SwitchPanel( self.PropPanel )
-- end
-- MOUSE STEERING
local node = tree:AddNode( "Mouse Steering", "icon16/mouse.png" )
node.DoPopulate = function( self )
if self.PropPanel then return end
self.PropPanel = vgui.Create( "ContentContainer", pnlContent )
self.PropPanel:SetVisible( false )
self.PropPanel:SetTriggerSpawnlistChange( false )
buildmsmenu( self )
end
node.DoClick = function( self )
self:DoPopulate()
pnlContent:SwitchPanel( self.PropPanel )
end
-- JOYSTICK
if istable( jcon ) and file.Exists("lua/bin/gmcl_joystick_win32.dll", "GAME") then
local node = tree:AddNode( "Joystick Configuration", "icon16/joystick.png" )
node.DoClick = function( self )
RunConsoleCommand("joyconfig")
end
end
-- CLIENT SETTINGS
-- local node = tree:AddNode( "Client Settings", "icon16/wrench.png" )
-- node.DoPopulate = function( self )
-- if self.PropPanel then return end
--
-- self.PropPanel = vgui.Create( "ContentContainer", pnlContent )
-- self.PropPanel:SetVisible( false )
-- self.PropPanel:SetTriggerSpawnlistChange( false )
--
-- buildclientsettingsmenu( self )
-- end
-- node.DoClick = function( self )
-- self:DoPopulate()
-- pnlContent:SwitchPanel( self.PropPanel )
-- end
-- SERVER SETTINGS
local node = tree:AddNode( "Server Settings", "icon16/wrench_orange.png" )
node.DoPopulate = function( self )
self.PropPanel = vgui.Create( "ContentContainer", pnlContent )
self.PropPanel:SetVisible( false )
self.PropPanel:SetTriggerSpawnlistChange( false )
buildserversettingsmenu( self )
end
node.DoClick = function( self )
self:DoPopulate()
pnlContent:SwitchPanel( self.PropPanel )
end
-- Select the first node
local FirstNode = tree:Root():GetChildNode( 0 )
if IsValid( FirstNode ) then
FirstNode:InternalDoClick()
end
end )
spawnmenu.AddCreationTab( "simfphys", function()
local ctrl = vgui.Create( "SpawnmenuContentPanel" )
ctrl:CallPopulateHook( "SimfphysPopulateVehicles" )
return ctrl
end, "icon16/car.png", 50 )
spawnmenu.AddContentType( "simfphys_vehicles", function( container, obj )
if not obj.material then return end
if not obj.nicename then return end
if not obj.spawnname then return end
local icon = vgui.Create( "ContentIcon", container )
icon:SetContentType( "simfphys_vehicles" )
icon:SetSpawnName( obj.spawnname )
icon:SetName( obj.nicename )
icon:SetMaterial( obj.material )
icon:SetAdminOnly( obj.admin )
icon:SetColor( Color( 0, 0, 0, 255 ) )
icon.DoClick = function()
RunConsoleCommand( "simfphys_spawnvehicle", obj.spawnname )
surface.PlaySound( "ui/buttonclickrelease.wav" )
end
icon.OpenMenu = function( icon )
local menu = DermaMenu()
menu:AddOption( "Copy to Clipboard", function() SetClipboardText( obj.spawnname ) end )
--menu:AddSpacer()
--menu:AddOption( "Delete", function() icon:Remove() hook.Run( "SpawnlistContentChanged", icon ) end )
menu:Open()
end
if IsValid( container ) then
container:Add( icon )
end
return icon
end )