166 lines
4.7 KiB
Lua
166 lines
4.7 KiB
Lua
WireToolSetup.setCategory( "Visuals/Lights" )
|
|
WireToolSetup.open( "lamp", "Lamp", "gmod_wire_lamp", nil, "Lamps" )
|
|
|
|
if CLIENT then
|
|
language.Add( "tool.wire_lamp.name", "Wire Lamps" )
|
|
language.Add( "tool.wire_lamp.desc", "Spawns a lamp for use with the wire system." )
|
|
language.Add( "WireLampTool_RopeLength", "Rope Length:")
|
|
language.Add( "WireLampTool_FOV", "FOV:")
|
|
language.Add( "WireLampTool_Dist", "Distance:")
|
|
language.Add( "WireLampTool_Bright", "Brightness:")
|
|
language.Add( "WireLampTool_Const", "Constraint:" )
|
|
language.Add( "WireLampTool_Color", "Color:" )
|
|
TOOL.Information = {
|
|
{ name = "left", text = "Create hanging lamp" },
|
|
{ name = "right", text = "Create unattached lamp" },
|
|
}
|
|
|
|
WireToolSetup.setToolMenuIcon( "icon16/lightbulb.png" )
|
|
end
|
|
WireToolSetup.BaseLang()
|
|
WireToolSetup.SetupMax( 10 )
|
|
|
|
if SERVER then
|
|
function TOOL:GetConVars()
|
|
return math.Clamp( self:GetClientNumber( "r" ), 0, 255 ),
|
|
math.Clamp( self:GetClientNumber( "g" ), 0, 255 ),
|
|
math.Clamp( self:GetClientNumber( "b" ), 0, 255 ),
|
|
self:GetClientInfo( "texture" ),
|
|
self:GetClientNumber( "fov" ),
|
|
self:GetClientNumber( "distance" ),
|
|
self:GetClientNumber( "brightness" )
|
|
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 = self:GetClientNumber( "ropelength" )
|
|
local material = self:GetClientInfo( "ropematerial" )
|
|
|
|
local LPos1 = Vector( -15, 0, 0 )
|
|
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 )
|
|
|
|
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
|
|
|
|
function TOOL:GetAngle( trace )
|
|
return trace.HitNormal:Angle()
|
|
end
|
|
|
|
function TOOL:SetPos( ent, trace )
|
|
ent:SetPos(trace.HitPos + trace.HitNormal * 10)
|
|
end
|
|
|
|
TOOL.ClientConVar = {
|
|
ropelength = 64,
|
|
ropematerial = "cable/rope",
|
|
r = 255,
|
|
g = 255,
|
|
b = 255,
|
|
const = "rope",
|
|
texture = "effects/flashlight001",
|
|
fov = 90,
|
|
distance = 1024,
|
|
brightness = 8,
|
|
model = "models/lamps/torch.mdl"
|
|
}
|
|
|
|
-- Spawn a lamp without constraints (just frozen)
|
|
function TOOL:RightClick( trace )
|
|
-- TODO: redo this function
|
|
if not trace.HitPos then return false end
|
|
if trace.Entity:IsPlayer() then return false end
|
|
if CLIENT then return true end
|
|
|
|
local ply = self:GetOwner()
|
|
local noconstraint = true
|
|
|
|
local ent = self:LeftClick_Make( trace, ply, noconstraint )
|
|
if ent == true then return true end
|
|
if ent == nil or ent == false or not ent:IsValid() then return false end
|
|
|
|
undo.Create( self.WireClass )
|
|
undo.AddEntity( ent )
|
|
undo.AddEntity( const )
|
|
undo.SetPlayer( ply )
|
|
undo.Finish()
|
|
|
|
ply:AddCleanup( self.WireClass, ent )
|
|
|
|
return true
|
|
end
|
|
|
|
function TOOL.BuildCPanel(panel)
|
|
WireToolHelpers.MakePresetControl(panel, "wire_lamp")
|
|
|
|
WireDermaExts.ModelSelect(panel, "wire_lamp_model", list.Get( "LampModels" ), 1)
|
|
panel:NumSlider("#WireLampTool_RopeLength", "wire_lamp_ropelength", 4, 400, 0)
|
|
panel:NumSlider("#WireLampTool_FOV", "wire_lamp_fov", 10, 170, 2)
|
|
panel:NumSlider("#WireLampTool_Dist", "wire_lamp_distance", 64, 2048, 0)
|
|
panel:NumSlider("#WireLampTool_Bright", "wire_lamp_brightness", 0, 8, 2)
|
|
|
|
panel:AddControl("ComboBox", {
|
|
Label = "#WireLampTool_Const",
|
|
Options = {
|
|
["Rope"] = { wire_lamp_const = "rope" },
|
|
["Weld"] = { wire_lamp_const = "weld" },
|
|
["None"] = { wire_lamp_const = "none" },
|
|
}
|
|
})
|
|
|
|
panel:AddControl("Color", {
|
|
Label = "#WireLampTool_Color",
|
|
Red = "wire_lamp_r",
|
|
Green = "wire_lamp_g",
|
|
Blue = "wire_lamp_b",
|
|
ShowAlpha = "0",
|
|
ShowHSV = "1",
|
|
ShowRGB = "1",
|
|
Multiplier = "255"
|
|
})
|
|
|
|
local MatSelect = panel:MatSelect( "wire_lamp_texture", nil, true, 0.33, 0.33 )
|
|
for k, v in pairs( list.Get( "LampTextures" ) ) do
|
|
MatSelect:AddMaterial( v.Name or k, k )
|
|
end
|
|
end
|