diff --git a/mp/src/game/server/props.cpp b/mp/src/game/server/props.cpp index 9ba6c11bb..0481b69eb 100644 --- a/mp/src/game/server/props.cpp +++ b/mp/src/game/server/props.cpp @@ -5429,29 +5429,38 @@ void CPropDoorRotating::InputSetRotationDistance( inputdata_t &inputdata ) CalculateDoorVolume( GetLocalAngles(), m_angRotationOpenBack, &m_vecBackBoundsMin, &m_vecBackBoundsMax ); } -// Debug sphere class CPhysSphere : public CPhysicsProp { DECLARE_CLASS( CPhysSphere, CPhysicsProp ); + DECLARE_DATADESC(); public: - virtual bool OverridePropdata() { return true; } + + float m_fRadius; + bool CreateVPhysics() { SetSolid( SOLID_BBOX ); - SetCollisionBounds( -Vector(12,12,12), Vector(12,12,12) ); + SetCollisionBounds( -Vector(m_fRadius), Vector(m_fRadius) ); objectparams_t params = g_PhysDefaultObjectParams; params.pGameData = static_cast(this); - IPhysicsObject *pPhysicsObject = physenv->CreateSphereObject( 12, 0, GetAbsOrigin(), GetAbsAngles(), ¶ms, false ); + IPhysicsObject *pPhysicsObject = physenv->CreateSphereObject( m_fRadius, GetModelPtr()->GetRenderHdr()->textureindex, GetAbsOrigin(), GetAbsAngles(), ¶ms, false ); + if ( pPhysicsObject ) { VPhysicsSetObject( pPhysicsObject ); SetMoveType( MOVETYPE_VPHYSICS ); pPhysicsObject->Wake(); } - + return true; } }; + +LINK_ENTITY_TO_CLASS( prop_sphere, CPhysSphere ); + +BEGIN_DATADESC( CPhysSphere ) + DEFINE_KEYFIELD( m_fRadius, FIELD_FLOAT, "radius"), +END_DATADESC() void CPropDoorRotating::InputSetSpeed(inputdata_t &inputdata) { diff --git a/sp/game/sdk2013CE/sdk2013ce.fgd b/sp/game/sdk2013CE/sdk2013ce.fgd index aeda6c2f4..43397dcb2 100644 --- a/sp/game/sdk2013CE/sdk2013ce.fgd +++ b/sp/game/sdk2013CE/sdk2013ce.fgd @@ -168,3 +168,8 @@ output Output15(void) : "Fire output 15." output Output16(void) : "Fire output 16." ] + +@PointClass base(BasePropPhysics, RenderFields) studioprop() sphere(radius) = prop_sphere : "Creates a perfect sphere." +[ + radius(float) : "Radius" : 12 : "" +] diff --git a/sp/src/game/server/props.cpp b/sp/src/game/server/props.cpp index c2ee37797..140f1f6e5 100644 --- a/sp/src/game/server/props.cpp +++ b/sp/src/game/server/props.cpp @@ -5426,29 +5426,38 @@ void CPropDoorRotating::InputSetRotationDistance( inputdata_t &inputdata ) CalculateDoorVolume( GetLocalAngles(), m_angRotationOpenBack, &m_vecBackBoundsMin, &m_vecBackBoundsMax ); } -// Debug sphere class CPhysSphere : public CPhysicsProp { DECLARE_CLASS( CPhysSphere, CPhysicsProp ); + DECLARE_DATADESC(); public: - virtual bool OverridePropdata() { return true; } + + float m_fRadius; + bool CreateVPhysics() { SetSolid( SOLID_BBOX ); - SetCollisionBounds( -Vector(12,12,12), Vector(12,12,12) ); + SetCollisionBounds( -Vector(m_fRadius), Vector(m_fRadius) ); objectparams_t params = g_PhysDefaultObjectParams; params.pGameData = static_cast(this); - IPhysicsObject *pPhysicsObject = physenv->CreateSphereObject( 12, 0, GetAbsOrigin(), GetAbsAngles(), ¶ms, false ); + IPhysicsObject *pPhysicsObject = physenv->CreateSphereObject( m_fRadius, GetModelPtr()->GetRenderHdr()->textureindex, GetAbsOrigin(), GetAbsAngles(), ¶ms, false ); + if ( pPhysicsObject ) { VPhysicsSetObject( pPhysicsObject ); SetMoveType( MOVETYPE_VPHYSICS ); pPhysicsObject->Wake(); } - + return true; } }; + +LINK_ENTITY_TO_CLASS( prop_sphere, CPhysSphere ); + +BEGIN_DATADESC( CPhysSphere ) + DEFINE_KEYFIELD( m_fRadius, FIELD_FLOAT, "radius"), +END_DATADESC() void CPropDoorRotating::InputSetSpeed(inputdata_t &inputdata) {