Files
wnsrc/gamemodes/sandbox/entities/weapons/gmod_tool/stools/simfphyseditor.lua

336 lines
12 KiB
Lua
Raw Normal View History

2024-08-05 18:40:29 +03:00
--[[
| 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/
--]]
TOOL.Category = "simfphys"
TOOL.Name = "#Vehicle Editor"
TOOL.Command = nil
TOOL.ConfigName = ""
TOOL.ClientConVar[ "steerspeed" ] = 8
TOOL.ClientConVar[ "fadespeed" ] = 535
TOOL.ClientConVar[ "faststeerangle" ] = 0.3
TOOL.ClientConVar[ "soundpreset" ] = 0
TOOL.ClientConVar[ "idlerpm" ] = 800
TOOL.ClientConVar[ "maxrpm" ] = 6200
TOOL.ClientConVar[ "powerbandstart" ] = 2000
TOOL.ClientConVar[ "powerbandend" ] = 6000
TOOL.ClientConVar[ "maxtorque" ] = 280
TOOL.ClientConVar[ "turbocharged" ] = "0"
TOOL.ClientConVar[ "supercharged" ] = "0"
TOOL.ClientConVar[ "revlimiter" ] = "0"
TOOL.ClientConVar[ "diffgear" ] = 0.65
TOOL.ClientConVar[ "traction" ] = 43
TOOL.ClientConVar[ "tractionbias" ] = -0.02
TOOL.ClientConVar[ "brakepower" ] = 45
TOOL.ClientConVar[ "powerdistribution" ] = 1
TOOL.ClientConVar[ "efficiency" ] = 1.25
if CLIENT then
language.Add( "tool.simfphyseditor.name", "simfphys vehicle editor" )
language.Add( "tool.simfphyseditor.desc", "A tool used to edit simfphys vehicles" )
language.Add( "tool.simfphyseditor.0", "Left click apply settings. Right click copy settings. Reload to reset" )
language.Add( "tool.simfphyseditor.1", "Left click apply settings. Right click copy settings. Reload to reset" )
language.Add( "tool.simfphyseditor.steerspeed", "Steer Speed" )
language.Add( "tool.simfphyseditor.steerspeed.help", "How fast the steering will move to its target angle" )
language.Add( "tool.simfphyseditor.fastspeed", "Fast Steercone Fadespeed" )
language.Add( "tool.simfphyseditor.fastspeed.help", "At wich speed (gmod units per second) we want to fade from slow steer angle to fast steer angle" )
language.Add( "tool.simfphyseditor.faststeerang", "Fast Steer Angle" )
language.Add( "tool.simfphyseditor.faststeerang.help", "Steering angle at high speeds." )
language.Add( "tool.simfphyseditor.tractionbias", "Tractionbias" )
language.Add( "tool.simfphyseditor.tractionbias.help", "A negative value will get more understeer, a positive value more oversteer. NOTE: this will not affect under/oversteer caused by engine power." )
language.Add( "tool.simfphyseditor.powerdist", "Powerdistribution" )
language.Add( "tool.simfphyseditor.powerdist.help", "How much power goes to the front and rear wheels, 1 = rear wheel drive -1 = front wheel drive 0 = all wheel drive with power distributed equally on front and rear wheels." )
language.Add( "tool.simfphyseditor.efficiency", "Efficiency" )
language.Add( "tool.simfphyseditor.efficiency.help", "This defines how good the wheels can put the engine power to the ground. Also may affect max torque and hand brake performance. Its a cheap way to make your car accelerate faster without having to deal with griploss." )
language.Add( "tool.simfphyseditor.turbo", "Turbocharged" )
language.Add( "tool.simfphyseditor.turbo.help", "Enables Turbo sounds and increases torque at high RPM" )
language.Add( "tool.simfphyseditor.blower", "Supercharged" )
language.Add( "tool.simfphyseditor.blower.help", "Enables Supercharger sounds and increases torque at low to mid RPM" )
language.Add( "tool.simfphyseditor.revlimiter", "Revlimiter" )
language.Add( "tool.simfphyseditor.revlimiter.help", "Enables bouncy revlimiter. NOTE: This does not work if Limit RPM is less than 2500!" )
end
function TOOL:LeftClick( trace )
local ent = trace.Entity
if not simfphys.IsCar( ent ) then return false end
if CLIENT then return true end
ent:SetSteerSpeed( math.Clamp( self:GetClientNumber( "steerspeed" ), 1, 16 ) )
ent:SetFastSteerConeFadeSpeed( math.Clamp( self:GetClientNumber( "fadespeed" ), 1, 5000 ) )
ent:SetFastSteerAngle( math.Clamp( self:GetClientNumber( "faststeerangle" ),0,1) )
ent:SetEngineSoundPreset( math.Clamp( self:GetClientNumber( "soundpreset" ), -1, 14) )
ent:SetIdleRPM( math.Clamp( self:GetClientNumber( "idlerpm" ),1,25000) )
ent:SetLimitRPM( math.Clamp( self:GetClientNumber( "maxrpm" ),4,25000) )
ent:SetPowerBandStart( math.Clamp( self:GetClientNumber( "powerbandstart" ),2,25000) )
ent:SetPowerBandEnd( math.Clamp( self:GetClientNumber( "powerbandend" ),3,25000) )
ent:SetMaxTorque( math.Clamp( self:GetClientNumber( "maxtorque" ),20,1000) )
ent:SetTurboCharged( self:GetClientInfo( "turbocharged" ) == "1" )
ent:SetSuperCharged( self:GetClientInfo( "supercharged" ) == "1" )
ent:SetRevlimiter( self:GetClientInfo( "revlimiter" ) == "1" )
ent:SetDifferentialGear( math.Clamp( self:GetClientNumber( "diffgear" ),0.2,6 ) )
ent:SetMaxTraction( math.Clamp(self:GetClientNumber( "traction" ) , 5,1000) )
ent:SetTractionBias( math.Clamp( self:GetClientNumber( "tractionbias" ),-0.99,0.99) )
ent:SetBrakePower( math.Clamp( self:GetClientNumber( "brakepower" ),0.1,500) )
ent:SetPowerDistribution( math.Clamp( self:GetClientNumber( "powerdistribution" ) ,-1,1) )
ent:SetEfficiency( math.Clamp( self:GetClientNumber( "efficiency" ) ,0.2,4) )
return true
end
function TOOL:RightClick( trace )
local ent = trace.Entity
local ply = self:GetOwner()
if not simfphys.IsCar( ent ) then return false end
if CLIENT then return true end
ply:ConCommand( "simfphyseditor_steerspeed " ..ent:GetSteerSpeed() )
ply:ConCommand( "simfphyseditor_fadespeed " ..ent:GetFastSteerConeFadeSpeed() )
ply:ConCommand( "simfphyseditor_faststeerangle " ..ent:GetFastSteerAngle() )
ply:ConCommand( "simfphyseditor_soundpreset " ..ent:GetEngineSoundPreset() )
ply:ConCommand( "simfphyseditor_idlerpm " ..ent:GetIdleRPM() )
ply:ConCommand( "simfphyseditor_maxrpm " ..ent:GetLimitRPM() )
ply:ConCommand( "simfphyseditor_powerbandstart " ..ent:GetPowerBandStart() )
ply:ConCommand( "simfphyseditor_powerbandend " ..ent:GetPowerBandEnd() )
ply:ConCommand( "simfphyseditor_maxtorque " ..ent:GetMaxTorque() )
ply:ConCommand( "simfphyseditor_turbocharged " ..(ent:GetTurboCharged() and 1 or 0) )
ply:ConCommand( "simfphyseditor_supercharged " ..(ent:GetSuperCharged() and 1 or 0) )
ply:ConCommand( "simfphyseditor_revlimiter " ..(ent:GetRevlimiter() and 1 or 0) )
ply:ConCommand( "simfphyseditor_diffgear " ..ent:GetDifferentialGear() )
ply:ConCommand( "simfphyseditor_traction " ..ent:GetMaxTraction() )
ply:ConCommand( "simfphyseditor_tractionbias " ..ent:GetTractionBias() )
ply:ConCommand( "simfphyseditor_brakepower " ..ent:GetBrakePower() )
ply:ConCommand( "simfphyseditor_powerdistribution " ..ent:GetPowerDistribution() )
ply:ConCommand( "simfphyseditor_efficiency " ..ent:GetEfficiency() )
return true
end
function TOOL:Think()
if CLIENT then
local ply = self:GetOwner()
if not IsValid( ply ) then return end
ply.simeditor_nextrequest = isnumber( ply.simeditor_nextrequest ) and ply.simeditor_nextrequest or 0
local ent = ply:GetEyeTrace().Entity
if not simfphys.IsCar( ent ) then return end
if ply.simeditor_nextrequest < CurTime() then
net.Start( "simfphys_plyrequestinfo" )
net.WriteEntity( ent )
net.SendToServer()
ply.simeditor_nextrequest = CurTime() + 0.6
end
end
end
function TOOL:Reload( trace )
local ent = trace.Entity
local ply = self:GetOwner()
if not simfphys.IsCar( ent ) then return false end
if (SERVER) then
local vname = ent:GetSpawn_List()
local VehicleList = list.Get( "simfphys_vehicles" )[vname]
ent:SetSteerSpeed( VehicleList.Members.TurnSpeed )
ent:SetFastSteerConeFadeSpeed( VehicleList.Members.SteeringFadeFastSpeed )
ent:SetFastSteerAngle( VehicleList.Members.FastSteeringAngle / ent.VehicleData["steerangle"] )
ent:SetEngineSoundPreset( VehicleList.Members.EngineSoundPreset )
ent:SetIdleRPM( VehicleList.Members.IdleRPM )
ent:SetLimitRPM( VehicleList.Members.LimitRPM )
ent:SetPowerBandStart( VehicleList.Members.PowerbandStart )
ent:SetPowerBandEnd( VehicleList.Members.PowerbandEnd )
ent:SetMaxTorque( VehicleList.Members.PeakTorque )
ent:SetTurboCharged( VehicleList.Members.Turbocharged or false )
ent:SetSuperCharged( VehicleList.Members.Supercharged or false )
ent:SetRevlimiter( VehicleList.Members.Revlimiter or false )
ent:SetDifferentialGear( VehicleList.Members.DifferentialGear )
ent:SetMaxTraction( VehicleList.Members.MaxGrip )
ent:SetTractionBias( VehicleList.Members.GripOffset / VehicleList.Members.MaxGrip )
ent:SetBrakePower( VehicleList.Members.BrakePower )
ent:SetPowerDistribution( VehicleList.Members.PowerBias )
ent:SetEfficiency( VehicleList.Members.Efficiency )
end
return true
end
local ConVarsDefault = TOOL:BuildConVarList()
function TOOL.BuildCPanel( panel )
panel:AddControl( "Header", { Text = "#tool.simfphyseditor.name", Description = "#tool.simfphyseditor.desc" } )
panel:AddControl( "ComboBox", { MenuButton = 1, Folder = "simfphys", Options = { [ "#preset.default" ] = ConVarsDefault }, CVars = table.GetKeys( ConVarsDefault ) } )
panel:AddControl( "Label", { Text = "" } )
panel:AddControl( "Label", { Text = "--- Steering ---" } )
panel:AddControl( "Slider",
{
Label = "#tool.simfphyseditor.steerspeed",
Type = "Float",
Min = "1",
Max = "16",
Command = "simfphyseditor_steerspeed",
Help = true
})
panel:AddControl( "Slider",
{
Label = "#tool.simfphyseditor.fastspeed",
Type = "Float",
Min = "1",
Max = "5000",
Command = "simfphyseditor_fadespeed",
Help = true
})
panel:AddControl( "Slider",
{
Label = "#tool.simfphyseditor.faststeerang",
Type = "Float",
Min = "0",
Max = "1",
Command = "simfphyseditor_faststeerangle",
Help = true
})
panel:AddControl( "Label", { Text = "" } )
panel:AddControl( "Label", { Text = "--- Engine ---" } )
panel:AddControl( "Slider",
{
Label = "Engine Sound Preset",
Type = "Int",
Min = "-1",
Max = "14",
Command = "simfphyseditor_soundpreset"
})
panel:AddControl( "Slider",
{
Label = "Idle RPM",
Type = "Int",
Min = "1",
Max = "25000",
Command = "simfphyseditor_idlerpm"
})
panel:AddControl( "Slider",
{
Label = "Limit RPM",
Type = "Int",
Min = "4",
Max = "25000",
Command = "simfphyseditor_maxrpm"
})
panel:AddControl( "Slider",
{
Label = "Powerband Start",
Type = "Int",
Min = "2",
Max = "25000",
Command = "simfphyseditor_powerbandstart"
})
panel:AddControl( "Slider",
{
Label = "Powerband End",
Type = "Int",
Min = "3",
Max = "25000",
Command = "simfphyseditor_powerbandend"
})
panel:AddControl( "Slider",
{
Label = "Max Torque",
Type = "Float",
Min = "20",
Max = "1000",
Command = "simfphyseditor_maxtorque"
})
panel:AddControl( "Checkbox",
{
Label = "#tool.simfphyseditor.revlimiter",
Command = "simfphyseditor_revlimiter",
Help = true
})
panel:AddControl( "Checkbox",
{
Label = "#tool.simfphyseditor.turbo",
Command = "simfphyseditor_turbocharged",
Help = true
})
panel:AddControl( "Checkbox",
{
Label = "#tool.simfphyseditor.blower",
Command = "simfphyseditor_supercharged",
Help = true
})
panel:AddControl( "Label", { Text = "" } )
panel:AddControl( "Label", { Text = "--- Transmission ---" } )
panel:AddControl( "Slider",
{
Label = "DifferentialGear",
Type = "Float",
Min = "0.2",
Max = "6",
Command = "simfphyseditor_diffgear"
})
panel:AddControl( "Label", { Text = "" } )
panel:AddControl( "Label", { Text = "--- Wheels ---" } )
panel:AddControl( "Slider",
{
Label = "Max Traction",
Type = "Float",
Min = "5",
Max = "1000",
Command = "simfphyseditor_traction"
})
panel:AddControl( "Slider",
{
Label = "#tool.simfphyseditor.tractionbias",
Type = "Float",
Min = "-0.99",
Max = "0.99",
Command = "simfphyseditor_tractionbias",
Help = true
})
panel:AddControl( "Slider",
{
Label = "Brakepower",
Type = "Float",
Min = "0.1",
Max = "500",
Command = "simfphyseditor_brakepower"
})
panel:AddControl( "Slider",
{
Label = "#tool.simfphyseditor.powerdist",
Type = "Float",
Min = "-1",
Max = "1",
Command = "simfphyseditor_powerdistribution",
Help = true
})
panel:AddControl( "Slider",
{
Label = "#tool.simfphyseditor.efficiency",
Type = "Float",
Min = "0.2",
Max = "4",
Command = "simfphyseditor_efficiency",
Help = true
})
end