94 lines
2.8 KiB
Lua
94 lines
2.8 KiB
Lua
WireToolSetup.setCategory( "Detection/Beacon" )
|
|
WireToolSetup.open( "waypoint", "Waypoint", "gmod_wire_waypoint", nil, "Waypoints" )
|
|
|
|
if ( CLIENT ) then
|
|
language.Add( "Tool.wire_waypoint.name", "Waypoint Beacon Tool (Wire)" )
|
|
language.Add( "Tool.wire_waypoint.desc", "Spawns a waypoint beacon for use with the wire system." )
|
|
language.Add( "WireWaypointTool_range", "Range:" )
|
|
language.Add( "WireWaypointTool_alink", "Auto-link previous" )
|
|
TOOL.Information = {
|
|
{ name = "left_0", stage = 0, text = "Create/Update " .. TOOL.Name },
|
|
{ name = "right_0", stage = 0, text = "Link to next waypoint" },
|
|
{ name = "reload_0", stage = 0, text = "Remove link to next waypoint" },
|
|
{ name = "left_1", stage = 1, text = "Select waypoint to go to after this one" },
|
|
}
|
|
end
|
|
WireToolSetup.BaseLang()
|
|
WireToolSetup.SetupMax( 30 )
|
|
|
|
TOOL.ClientConVar = {
|
|
model = "models/props_lab/powerbox02d.mdl",
|
|
range = 150,
|
|
alink = 0,
|
|
createflat = 1,
|
|
}
|
|
|
|
if SERVER then
|
|
function TOOL:GetConVars()
|
|
return self:GetClientNumber("range")
|
|
end
|
|
end
|
|
|
|
function TOOL:LeftClick(trace)
|
|
if (!trace.HitPos) then return false end
|
|
if (trace.Entity:IsPlayer()) then return false end
|
|
if ( CLIENT ) then return true end
|
|
if not util.IsValidPhysicsObject( trace.Entity, trace.PhysicsBone ) then return false end
|
|
|
|
local ply = self:GetOwner()
|
|
|
|
if (self:GetStage() == 1) then
|
|
self:SetStage(0)
|
|
|
|
if (trace.Entity:IsValid()) and (trace.Entity:GetClass() == "gmod_wire_waypoint") and (self.SrcWaypoint) and (self.SrcWaypoint:IsValid()) then
|
|
self.SrcWaypoint:SetNextWaypoint(trace.Entity)
|
|
self.SrcWaypoint = nil
|
|
|
|
return true
|
|
end
|
|
|
|
self.SrcWaypoint = nil
|
|
|
|
return
|
|
end
|
|
|
|
local ent = self:LeftClick_Make( trace, ply )
|
|
if isbool(ent) then return ent end
|
|
local ret = self:LeftClick_PostMake( ent, ply, trace )
|
|
|
|
// Auto-link (itsbth)
|
|
if ( self.OldWaypoint && self.OldWaypoint:IsValid() and self:GetClientNumber("alink") == 1 ) then
|
|
self.OldWaypoint:SetNextWaypoint(ent)
|
|
end
|
|
self.OldWaypoint = ent
|
|
|
|
return ret
|
|
end
|
|
|
|
function TOOL:RightClick(trace)
|
|
if (self:GetStage() == 0) and (trace.Entity:IsValid()) and (trace.Entity:GetClass() == "gmod_wire_waypoint") then
|
|
self.SrcWaypoint = trace.Entity
|
|
self:SetStage(1)
|
|
|
|
return true
|
|
end
|
|
|
|
return self:LeftClick(trace)
|
|
end
|
|
|
|
function TOOL:Reload(trace)
|
|
if self:GetStage() ~= 0 then return false end
|
|
|
|
if (trace.Entity:IsValid()) and (trace.Entity:GetClass() == "gmod_wire_waypoint") then
|
|
trace.Entity:SetNextWaypoint(NULL)
|
|
|
|
return true
|
|
end
|
|
end
|
|
|
|
function TOOL.BuildCPanel(panel)
|
|
ModelPlug_AddToCPanel(panel, "Misc_Tools", "wire_waypoint")
|
|
panel:NumSlider("#WireWaypointTool_range","wire_waypoint_range",1,2000,2)
|
|
panel:CheckBox("#WireWaypointTool_alink","wire_waypoint_alink")
|
|
panel:CheckBox("#Create Flat to Surface", "wire_waypoint_createflat")
|
|
end
|