99 lines
3.1 KiB
Lua
99 lines
3.1 KiB
Lua
-- Wire Trigger created by mitterdoo
|
|
AddCSLuaFile()
|
|
DEFINE_BASECLASS( "base_wire_entity" )
|
|
ENT.PrintName = "Wire Trigger"
|
|
ENT.RenderGroup = RENDERGROUP_BOTH
|
|
ENT.WireDebugName = "Trigger"
|
|
|
|
function ENT:SetupDataTables()
|
|
self:NetworkVar( "Vector", 0, "TriggerSize" )
|
|
self:NetworkVar( "Vector", 1, "TriggerOffset" )
|
|
self:NetworkVar( "Entity", 0, "TriggerEntity" )
|
|
self:NetworkVar( "Int", 0, "Filter" )
|
|
self:NetworkVar( "Bool", 0, "OwnerOnly" )
|
|
end
|
|
|
|
if CLIENT then
|
|
function ENT:GetOverlayData()
|
|
local size = self:GetTriggerSize()
|
|
local offset = self:GetTriggerOffset()
|
|
|
|
local txt = "Size: " .. string.format( "(%.2f,%.2f,%.2f)", size.x, size.y, size.z ) .. "\n"
|
|
txt = txt .. "Offset: " .. string.format( "(%.2f,%.2f,%.2f)", offset.x, offset.y, offset.z ) .. "\n"
|
|
txt = txt .. "Triggered by: " .. (
|
|
self:GetFilter() == 0 and "All Entities" or
|
|
self:GetFilter() == 1 and "Only Players" or
|
|
self:GetFilter() == 2 and "Only Props"
|
|
)
|
|
|
|
return {txt=txt}
|
|
end
|
|
|
|
return -- No more client
|
|
end
|
|
|
|
function ENT:Initialize()
|
|
self:PhysicsInit( SOLID_VPHYSICS )
|
|
self:SetMoveType( MOVETYPE_VPHYSICS )
|
|
self:SetSolid( SOLID_VPHYSICS )
|
|
local phys = self:GetPhysicsObject() if (phys:IsValid()) then phys:Wake() end
|
|
|
|
self.Outputs = WireLib.CreateOutputs(self, { "EntCount", "Entities [ARRAY]" })
|
|
end
|
|
|
|
function ENT:Setup( model, filter, owneronly, sizex, sizey, sizez, offsetx, offsety, offsetz )
|
|
|
|
filter = math.Clamp( filter, 0, 2 )
|
|
sizex = math.Clamp( sizex, -1000, 1000 )
|
|
sizey = math.Clamp( sizey, -1000, 1000 )
|
|
sizez = math.Clamp( sizez, -1000, 1000 )
|
|
offsetx = math.Clamp( offsetx, -1000, 1000 )
|
|
offsety = math.Clamp( offsety, -1000, 1000 )
|
|
offsetz = math.Clamp( offsetz, -1000, 1000 )
|
|
self.model = model
|
|
self.filter = filter
|
|
self.owneronly = owneronly
|
|
self.sizex = sizex
|
|
self.sizey = sizey
|
|
self.sizez = sizez
|
|
self.offsetx = offsetx
|
|
self.offsety = offsety
|
|
self.offsetz = offsetz
|
|
|
|
self:SetOwnerOnly( tobool( owneronly ) )
|
|
self:SetModel( model )
|
|
self:SetFilter( filter )
|
|
self:SetTriggerSize( Vector( sizex, sizey, sizez ) )
|
|
self:SetTriggerOffset( Vector( offsetx, offsety, offsetz ) )
|
|
|
|
|
|
local mins = self:GetTriggerSize() / -2
|
|
local maxs = self:GetTriggerSize() / 2
|
|
|
|
local oldtrig = self:GetTriggerEntity()
|
|
if IsValid( oldtrig ) then
|
|
oldtrig:SetCollisionBounds( mins, maxs )
|
|
oldtrig:SetPos( self:LocalToWorld( self:GetTriggerOffset() ) )
|
|
oldtrig:Reset()
|
|
else
|
|
local trig = ents.Create( "gmod_wire_trigger_entity" )
|
|
trig:SetPos( self:LocalToWorld( self:GetTriggerOffset() ) )
|
|
trig:SetAngles( self:GetAngles() )
|
|
trig:PhysicsInit( SOLID_BBOX )
|
|
trig:SetMoveType( MOVETYPE_VPHYSICS )
|
|
trig:SetSolid( SOLID_BBOX )
|
|
trig:SetModel( "models/hunter/blocks/cube025x025x025.mdl" )
|
|
trig:SetParent( self )
|
|
trig:Spawn()
|
|
|
|
trig:SetCollisionBounds( mins, maxs )
|
|
trig:SetCollisionGroup( COLLISION_GROUP_IN_VEHICLE )
|
|
trig:SetNoDraw( true )
|
|
trig:SetTrigger( true )
|
|
self:SetTriggerEntity( trig )
|
|
trig:SetTriggerEntity( self )
|
|
self:DeleteOnRemove( trig )
|
|
end
|
|
end
|
|
|
|
duplicator.RegisterEntityClass("gmod_wire_trigger", WireLib.MakeWireEnt, "Data", "model", "filter", "owneronly", "sizex", "sizey", "sizez", "offsetx", "offsety", "offsetz" )
|