135 lines
4.1 KiB
Lua
135 lines
4.1 KiB
Lua
WireToolSetup.setCategory( "Visuals/Lights" )
|
|
WireToolSetup.open( "light", "Light", "gmod_wire_light", nil, "Lights" )
|
|
|
|
if CLIENT then
|
|
language.Add( "tool.wire_light.name", "Light Tool (Wire)" )
|
|
language.Add( "tool.wire_light.desc", "Spawns a Light for use with the wire system." )
|
|
language.Add( "WireLightTool_RopeLength", "Rope Length:")
|
|
language.Add( "WireLightTool_bright", "Glow brightness:")
|
|
language.Add( "WireLightTool_size", "Glow size:" )
|
|
language.Add( "WireLightTool_directional", "Directional Component" )
|
|
language.Add( "WireLightTool_radiant", "Radiant Component" )
|
|
language.Add( "WireLightTool_glow", "Glow Component" )
|
|
language.Add( "WireLightTool_const", "Constraint:" )
|
|
language.Add( "WireLightTool_color", "Initial Color:" )
|
|
TOOL.Information = { { name = "left", text = "Create/Update " .. TOOL.Name } }
|
|
|
|
WireToolSetup.setToolMenuIcon( "icon16/lightbulb.png" )
|
|
end
|
|
WireToolSetup.BaseLang()
|
|
WireToolSetup.SetupMax(8)
|
|
|
|
if SERVER then
|
|
function TOOL:GetConVars()
|
|
return
|
|
self:GetClientNumber("directional") ~= 0,
|
|
self:GetClientNumber("radiant") ~= 0,
|
|
self:GetClientNumber("glow") ~= 0,
|
|
self:GetClientNumber("brightness"),
|
|
self:GetClientNumber("size"),
|
|
self:GetClientNumber("r"),
|
|
self:GetClientNumber("g"),
|
|
self:GetClientNumber("b")
|
|
end
|
|
|
|
function TOOL:LeftClick_PostMake( ent, ply, trace )
|
|
if ent == true then return true end
|
|
if ent == nil or ent == false or not ent:IsValid() then return false end
|
|
|
|
local const = self:GetClientInfo( "const" )
|
|
|
|
if const == "weld" then
|
|
local const = WireLib.Weld( ent, trace.Entity, trace.PhysicsBone, true )
|
|
undo.Create( self.WireClass )
|
|
undo.AddEntity( ent )
|
|
undo.AddEntity( const )
|
|
undo.SetPlayer( ply )
|
|
undo.Finish()
|
|
elseif const == "rope" then
|
|
|
|
local length = math.Clamp( self:GetClientNumber( "ropelength" ), 4, 1024 )
|
|
local material = "cable/rope"
|
|
|
|
local LPos1 = Vector( 0, 0, 0 )
|
|
if ent:GetModel() == "models/maxofs2d/light_tubular.mdl" then LPos1 = Vector( 0, 0, 5 ) end
|
|
|
|
local LPos2 = trace.Entity:WorldToLocal( trace.HitPos )
|
|
|
|
if trace.Entity:IsValid() then
|
|
local phys = trace.Entity:GetPhysicsObjectNum( trace.PhysicsBone )
|
|
if phys:IsValid() then
|
|
LPos2 = phys:WorldToLocal( trace.HitPos )
|
|
end
|
|
end
|
|
|
|
local constraint, rope = constraint.Rope( ent, trace.Entity, 0, trace.PhysicsBone, LPos1, LPos2, 0, length, 0, 1.5, material, nil )
|
|
|
|
ent:GetPhysicsObject():Wake()
|
|
|
|
undo.Create( self.WireClass )
|
|
undo.AddEntity( ent )
|
|
undo.AddEntity( rope )
|
|
undo.AddEntity( constraint )
|
|
undo.SetPlayer( ply )
|
|
undo.Finish()
|
|
|
|
else --none
|
|
ent:GetPhysicsObject():EnableMotion(false) -- freeze
|
|
|
|
undo.Create( self.WireClass )
|
|
undo.AddEntity( ent )
|
|
undo.SetPlayer( ply )
|
|
undo.Finish()
|
|
end
|
|
|
|
ply:AddCleanup( self.WireClass, ent )
|
|
|
|
return true
|
|
end
|
|
end
|
|
|
|
TOOL.ClientConVar = {
|
|
model = "models/jaanus/wiretool/wiretool_siren.mdl",
|
|
directional = 0,
|
|
radiant = 0,
|
|
glow = 0,
|
|
ropelength = 64,
|
|
brightness = 2,
|
|
size = 256,
|
|
const = "weld",
|
|
r = 0,
|
|
g = 0,
|
|
b = 0
|
|
}
|
|
|
|
function TOOL.BuildCPanel(panel)
|
|
local Models = list.Get( "Wire_Misc_Tools_Models" ) -- default wire models
|
|
Models["models/MaxOfS2D/light_tubular.mdl"] = true -- GMod light
|
|
|
|
WireDermaExts.ModelSelect(panel, "wire_light_model", Models, 1)
|
|
panel:CheckBox("#WireLightTool_directional", "wire_light_directional")
|
|
panel:CheckBox("#WireLightTool_radiant", "wire_light_radiant")
|
|
panel:CheckBox("#WireLightTool_glow", "wire_light_glow")
|
|
panel:NumSlider("#WireLightTool_bright", "wire_light_brightness", 0, 10, 0)
|
|
panel:NumSlider("#WireLightTool_size", "wire_light_size", 0, 1024, 0)
|
|
panel:AddControl("ComboBox", {
|
|
Label = "#WireLightTool_Const",
|
|
Options = {
|
|
["Weld"] = { wire_light_const = "weld" },
|
|
["None"] = { wire_light_const = "none" },
|
|
["Rope"] = { wire_light_const = "rope" }
|
|
}
|
|
})
|
|
panel:NumSlider("#WireLightTool_RopeLength", "wire_light_ropelength", 4, 1024, 0)
|
|
panel:AddControl("Color", {
|
|
Label = "#WireLightTool_color",
|
|
Red = "wire_light_r",
|
|
Green = "wire_light_g",
|
|
Blue = "wire_light_b",
|
|
ShowAlpha = "0",
|
|
ShowHSV = "1",
|
|
ShowRGB = "1",
|
|
Multiplier = "255"
|
|
})
|
|
|
|
end
|