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

103 lines
3.1 KiB
Lua

WireToolSetup.setCategory( "Physics/Constraints" )
WireToolSetup.open( "latch", "Weld/Constraint Latch", "gmod_wire_latch", nil, "Constraint Latches" )
TOOL.ClientConVar[ "model" ] = "models/jaanus/wiretool/wiretool_siren.mdl"
if CLIENT then
language.Add( "Tool.wire_latch.name", "Latch Tool (Wire)" )
language.Add( "Tool.wire_latch.desc", "Makes a controllable latch" )
TOOL.Information = {
{ name = "left_0", stage = 0, text = "Choose the first entity to be latched" },
{ name = "left_1", stage = 1, text = "Choose the second entity to be latched" },
{ name = "reload_1", stage = 1, text = "Cancel" },
{ name = "left_2", stage = 2, text = "Place the controller" },
{ name = "reload_2", stage = 2, text = "Cancel" },
}
end
WireToolSetup.BaseLang()
WireToolSetup.SetupMax( 15 )
function TOOL:LeftClick( trace )
if trace.Entity:IsValid() and trace.Entity:IsPlayer() then return end
// If there's no physics object then we can't constraint it!
if SERVER and !util.IsValidPhysicsObject( trace.Entity, trace.PhysicsBone ) then return false end
local iNum = self:NumObjects()
local Phys = trace.Entity:GetPhysicsObjectNum( trace.PhysicsBone )
self:SetObject( iNum + 1, trace.Entity, trace.HitPos, Phys, trace.PhysicsBone, trace.HitNormal )
if ( iNum > 1 ) then
if CLIENT then
self:ClearObjects()
return true
end
local ply = self:GetOwner()
local Ent1, Ent2, Ent3 = self:GetEnt(1), self:GetEnt(2), trace.Entity
local const = self.Constraint
local controller = self:LeftClick_Make( trace, ply )
if isbool(controller) then return controller end
if !IsValid(controller) then
WireLib.AddNotify( self:GetOwner(), "Weld latch controller placement failed!", NOTIFY_GENERIC, 7 )
self.Constraint = nil
self:ClearObjects()
self:SetStage(0)
return false
end
self:LeftClick_PostMake( controller, ply, trace )
// Send entity and constraint info over to the controller
controller:SendVars( self.Ent1, self.Ent2, self.Bone1, self.Bone2, self.Constraint )
// Initialize controller inputs/outputs
controller:TriggerInput( "Activate", 1 )
Wire_TriggerOutput( controller, "Welded", 1 )
self.Constraint = nil
self:ClearObjects()
self:SetStage(0)
elseif ( iNum == 1 ) then
if CLIENT then
return true
end
// Get information we're about to use
self.Ent1, self.Ent2 = self:GetEnt(1), self:GetEnt(2)
self.Bone1, self.Bone2 = self:GetBone(1), self:GetBone(2)
self.Constraint = MakeWireLatch( self.Ent1, self.Ent2, self.Bone1, self.Bone2 )
if IsValid(self.Constraint) then
self:SetStage(2)
else
WireLib.AddNotify( self:GetOwner(), "Weld latch invalid!", NOTIFY_GENERIC, 7 )
self:ClearObjects()
self:SetStage(0)
end
else
self:SetStage( iNum+1 )
end
return true
end
function TOOL:Reload( trace )
if IsValid(self.Constraint) then
self.Constraint:Remove()
end
self.Constraint = nil
self:ClearObjects()
self:SetStage(0)
end
function TOOL.BuildCPanel( panel )
panel:AddControl( "Header", { Text = "#Tool.wire_latch.name", Description = "#Tool.wire_latch.desc" } )
WireDermaExts.ModelSelect(panel, "wire_latch_model", list.Get( "Wire_Misc_Tools_Models" ), 1)
end