mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
176 lines
3.7 KiB
Lua
176 lines
3.7 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
|
|
function ToolObj:UpdateData()
|
|
|
|
self:SetStage( self:NumObjects() )
|
|
|
|
end
|
|
|
|
function ToolObj:SetStage( i )
|
|
|
|
if ( SERVER ) then
|
|
self:GetWeapon():SetNWInt( "Stage", i )
|
|
end
|
|
|
|
end
|
|
|
|
function ToolObj:GetStage()
|
|
return self:GetWeapon():GetNWInt( "Stage", 0 )
|
|
end
|
|
|
|
function ToolObj:SetOperation( i )
|
|
|
|
if ( SERVER ) then
|
|
self:GetWeapon():SetNWInt( "Op", i )
|
|
end
|
|
|
|
end
|
|
|
|
function ToolObj:GetOperation()
|
|
return self:GetWeapon():GetNWInt( "Op", 0 )
|
|
end
|
|
|
|
|
|
-- Clear the selected objects
|
|
function ToolObj:ClearObjects()
|
|
|
|
self:ReleaseGhostEntity()
|
|
self.Objects = {}
|
|
self:SetStage( 0 )
|
|
self:SetOperation( 0 )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Since we're going to be expanding this a lot I've tried
|
|
to add accessors for all of this crap to make it harder
|
|
for us to mess everything up.
|
|
-----------------------------------------------------------]]
|
|
function ToolObj:GetEnt( i )
|
|
|
|
if ( !self.Objects[i] ) then return NULL end
|
|
|
|
return self.Objects[i].Ent
|
|
end
|
|
|
|
|
|
--[[---------------------------------------------------------
|
|
Returns the world position of the numbered object hit
|
|
We store it as a local vector then convert it to world
|
|
That way even if the object moves it's still valid
|
|
-----------------------------------------------------------]]
|
|
function ToolObj:GetPos( i )
|
|
|
|
if ( self.Objects[i].Ent:EntIndex() == 0 ) then
|
|
return self.Objects[i].Pos
|
|
else
|
|
if ( IsValid( self.Objects[i].Phys ) ) then
|
|
return self.Objects[i].Phys:LocalToWorld( self.Objects[i].Pos )
|
|
else
|
|
return self.Objects[i].Ent:LocalToWorld( self.Objects[i].Pos )
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
-- Returns the local position of the numbered hit
|
|
function ToolObj:GetLocalPos( i )
|
|
return self.Objects[i].Pos
|
|
end
|
|
|
|
-- Returns the physics bone number of the hit (ragdolls)
|
|
function ToolObj:GetBone( i )
|
|
return self.Objects[i].Bone
|
|
end
|
|
|
|
function ToolObj:GetNormal( i )
|
|
if ( self.Objects[i].Ent:EntIndex() == 0 ) then
|
|
return self.Objects[i].Normal
|
|
else
|
|
local norm
|
|
if ( IsValid( self.Objects[i].Phys ) ) then
|
|
norm = self.Objects[i].Phys:LocalToWorld( self.Objects[i].Normal )
|
|
else
|
|
norm = self.Objects[i].Ent:LocalToWorld( self.Objects[i].Normal )
|
|
end
|
|
|
|
return norm - self:GetPos( i )
|
|
end
|
|
end
|
|
|
|
-- Returns the physics object for the numbered hit
|
|
function ToolObj:GetPhys( i )
|
|
|
|
if ( self.Objects[i].Phys == nil ) then
|
|
return self:GetEnt( i ):GetPhysicsObject()
|
|
end
|
|
|
|
return self.Objects[i].Phys
|
|
end
|
|
|
|
|
|
-- Sets a selected object
|
|
function ToolObj:SetObject( i, ent, pos, phys, bone, norm )
|
|
|
|
self.Objects[i] = {}
|
|
self.Objects[i].Ent = ent
|
|
self.Objects[i].Phys = phys
|
|
self.Objects[i].Bone = bone
|
|
self.Objects[i].Normal = norm
|
|
|
|
-- Worldspawn is a special case
|
|
if ( ent:EntIndex() == 0 ) then
|
|
|
|
self.Objects[i].Phys = nil
|
|
self.Objects[i].Pos = pos
|
|
|
|
else
|
|
|
|
norm = norm + pos
|
|
|
|
-- Convert the position to a local position - so it's still valid when the object moves
|
|
if ( IsValid( phys ) ) then
|
|
self.Objects[i].Normal = self.Objects[i].Phys:WorldToLocal( norm )
|
|
self.Objects[i].Pos = self.Objects[i].Phys:WorldToLocal( pos )
|
|
else
|
|
self.Objects[i].Normal = self.Objects[i].Ent:WorldToLocal( norm )
|
|
self.Objects[i].Pos = self.Objects[i].Ent:WorldToLocal( pos )
|
|
end
|
|
|
|
end
|
|
|
|
-- TODO: Make sure the client got the same info
|
|
|
|
end
|
|
|
|
|
|
-- Returns the number of objects in the list
|
|
function ToolObj:NumObjects()
|
|
|
|
if ( CLIENT ) then
|
|
|
|
return self:GetStage()
|
|
|
|
end
|
|
|
|
return #self.Objects
|
|
|
|
end
|
|
|
|
|
|
-- Returns the number of objects in the list
|
|
function ToolObj:GetHelpText()
|
|
|
|
return "#tool." .. GetConVarString( "gmod_toolmode" ) .. "." .. self:GetStage()
|
|
|
|
end
|