123 lines
2.5 KiB
Lua
123 lines
2.5 KiB
Lua
AddCSLuaFile()
|
|
|
|
ENT.Type = "anim"
|
|
|
|
ENT.Spawnable = false
|
|
ENT.AdminSpawnable = false
|
|
ENT.DoNotDuplicate = true
|
|
|
|
ENT._lvsNoPhysgunInteraction = true
|
|
|
|
function ENT:SetupDataTables()
|
|
self:NetworkVar( "Entity",0, "Base" )
|
|
self:NetworkVar( "Float",0, "fxRadius" )
|
|
end
|
|
|
|
if SERVER then
|
|
function ENT:Initialize()
|
|
self:SetModel( "models/props_vehicles/tire001c_car.mdl" )
|
|
self:PhysicsInit( SOLID_VPHYSICS )
|
|
self:SetMoveType( MOVETYPE_VPHYSICS )
|
|
self:SetSolid( SOLID_VPHYSICS )
|
|
self:DrawShadow( false )
|
|
|
|
self:AddEFlags( EFL_NO_PHYSCANNON_INTERACTION )
|
|
|
|
-- this is so vj npcs can still see us
|
|
self:AddEFlags( EFL_DONTBLOCKLOS )
|
|
|
|
self:SetCollisionGroup( COLLISION_GROUP_PASSABLE_DOOR )
|
|
end
|
|
|
|
function ENT:Define( data )
|
|
self:SetfxRadius( data.radius )
|
|
self:PhysicsInitSphere( data.radius, "gmod_silent" )
|
|
|
|
local VectorNull = Vector(0,0,0)
|
|
|
|
self:SetCollisionBounds( VectorNull, VectorNull )
|
|
|
|
local PhysObj = self:GetPhysicsObject()
|
|
|
|
if IsValid( PhysObj ) then
|
|
PhysObj:EnableDrag( false )
|
|
PhysObj:EnableMotion( false )
|
|
PhysObj:SetMass( data.mass )
|
|
PhysObj:SetBuoyancyRatio( data.buoyancyratio )
|
|
end
|
|
end
|
|
|
|
function ENT:SetPhysics( enable )
|
|
if enable then
|
|
if self.PhysicsEnabled then return end
|
|
|
|
self:GetPhysicsObject():SetMaterial("jeeptire")
|
|
self.PhysicsEnabled = true
|
|
else
|
|
if self.PhysicsEnabled == false then return end
|
|
|
|
self:GetPhysicsObject():SetMaterial("friction_00")
|
|
self.PhysicsEnabled = false
|
|
end
|
|
end
|
|
|
|
function ENT:CheckPhysics()
|
|
local base = self:GetBase()
|
|
|
|
if not IsValid( base ) then return end
|
|
|
|
if not base:GetEngineActive() then
|
|
self:SetPhysics( true )
|
|
|
|
self:NextThink( CurTime() + 0.25 )
|
|
|
|
return
|
|
end
|
|
|
|
self:NextThink( CurTime() + 0.1 )
|
|
|
|
local Ang = base:GetAngles()
|
|
local steer = math.abs( base:WorldToLocalAngles( Angle(Ang.p,base:GetSteerTo(),Ang.r) ).y )
|
|
local move = base:GetMove()
|
|
local speed = base:GetVelocity():LengthSqr()
|
|
|
|
local enable = (math.abs( move.x ) + math.abs( move.y )) < 0.001 and steer < 3 and speed < 600
|
|
|
|
self:SetPhysics( enable )
|
|
end
|
|
|
|
function ENT:Think()
|
|
self:CheckPhysics()
|
|
|
|
return true
|
|
end
|
|
|
|
function ENT:OnTakeDamage( dmginfo )
|
|
if dmginfo:IsDamageType( DMG_BLAST ) then return end
|
|
|
|
local base = self:GetBase()
|
|
|
|
if not IsValid( base ) then return end
|
|
|
|
base:TakeDamageInfo( dmginfo )
|
|
end
|
|
|
|
function ENT:UpdateTransmitState()
|
|
return TRANSMIT_NEVER
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
function ENT:Initialize()
|
|
end
|
|
|
|
function ENT:Think()
|
|
end
|
|
|
|
function ENT:Draw()
|
|
end
|
|
|
|
function ENT:OnRemove()
|
|
end
|