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

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