Hi all,

I’ve been working on a problem with creating and spawning a spherical 
vphysics object for the last 4 days, and can’t get it to work.

The basic idea is that I have a simple logical map entity linked to the 
class “CBall_Spawn”. This has a function that, when called will create 
an entity of the type “CBall” at the origin of “CBall_Spawn” with a 
specified initial velocity.

Now, with the code I have, the ball will spawn, but will fall through 
the floor as if it isn’t there. I have tried all sorts of different 
combinations for initialising the ball and its physical properties, but 
none of them have worked. I would be extremely grateful if you would 
take a look at the code and see if I’m doing something obvious wrong, 
because to be honest, I have run out of ideas.

Thanks in advance,

Phil

-----------------------------------------------------------------------------------------------------------------------
This is the relevant code from CBall_Spawn.
-----------------------------------------------------------------------------------------------------------------------
void CBall_Spawn::Spawn()
{
m_vAbsPosition = this->GetAbsOrigin();
m_vStartingVelocity = Vector (m_fXVelocity, m_fYVelocity, m_fZVelocity); 
//these values are taken from fields in the Hammer entity

Spawn_Ball();
}
-----------------------------------------------------------------------------------------------------------------------
void CBall_Spawn::Spawn_Ball()
{
//Spawn ball at absolute origin with starting velocity as set by map entity
CBall* p_Ball = CBall::Create(m_vAbsPosition, m_angStartingAngle, 
m_vStartingVelocity, NULL);
}
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
And this is the code for CBall. The model I am using is one I have 
created, but I have tried it with others and it makes no difference.
-----------------------------------------------------------------------------------------------------------------------
CBall* CBall::Create( const Vector &vecOrigin, const QAngle &vecAngles, 
const Vector &vecVelocity, edict_t *pentOwner = NULL)
{
CBall *pBall = (CBall *) CBaseEntity::CreateNoSpawn( "graviball", 
vecOrigin, vecAngles, CBaseEntity::Instance( pentOwner ) );
pBall->SetOwnerEntity (Instance(pentOwner));
pBall->Spawn();
pBall->ApplyAbsVelocityImpulse( vecVelocity );
return pBall;
}
-----------------------------------------------------------------------------------------------------------------------
void CBall::Spawn(void)
{
Precache();
SetModel( ENTITY_MODEL);
if (!CreatePhysics())
{
Warning("Could not create physics for %s\n", GetDebugName());
}
} // End CBall Spawn function
-----------------------------------------------------------------------------------------------------------------------
void CBall::Precache(void)
{
PrecacheModel( ENTITY_MODEL );
BaseClass::Precache();
} // End CBall Precache function
-----------------------------------------------------------------------------------------------------------------------
bool CBall::CreatePhysics()
{
solid_t tmpSolid;

tmpSolid.params = g_PhysDefaultObjectParams;
tmpSolid.params.mass = 20.0f;
tmpSolid.params.inertia = 0.05f;
tmpSolid.params.rotdamping = 1.0;
tmpSolid.params.damping = 0.85;
tmpSolid.params.dragCoefficient = 0.1;
tmpSolid.params.pGameData = this;

IPhysicsObject *pPhysics = VPhysicsGetObject();
if(pPhysics)
VPhysicsDestroyObject();

pPhysics = NULL;

pPhysics = physenv->CreateSphereObject( 16.0f,
physprops->GetSurfaceIndex( tmpSolid.surfaceprop ), GetAbsOrigin(), 
GetAbsAngles(), &tmpSolid.params, false );

if (!pPhysics)
{
DevMsg("graviball: couldn't create sphere object..\n");
return false;
}

SetMoveType(MOVETYPE_VPHYSICS);
SetSolid(SOLID_VPHYSICS);
VPhysicsSetObject(pPhysics);

pPhysics->EnableCollisions(true); //start without collisions
pPhysics->EnableMotion( true );
pPhysics->Wake(); //Tony; start asleep

return true;

}



_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please 
visit:
http://list.valvesoftware.com/mailman/listinfo/hlcoders

Reply via email to