mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Fix for Issue #96 for DAE updating crash
This commit is contained in:
parent
9ed0f467d8
commit
89ad23a925
|
|
@ -42,6 +42,8 @@ class PhysicsWorld
|
|||
{
|
||||
protected:
|
||||
|
||||
Signal<void()> mStaticChangedSignal;
|
||||
|
||||
Signal<void()> mUpdateSignal;
|
||||
|
||||
/// The current gravity force.
|
||||
|
|
@ -58,6 +60,9 @@ public:
|
|||
///
|
||||
Signal<void()>& getUpdateSignal() { return mUpdateSignal; }
|
||||
|
||||
// Called when a static body in the scene has been removed.
|
||||
Signal<void()>& getStaticChangedSignal() { return mStaticChangedSignal; }
|
||||
|
||||
/// Overloaded to do debug drawing.
|
||||
///
|
||||
/// It is assumed the GFX state is setup prior to this call for
|
||||
|
|
|
|||
|
|
@ -53,7 +53,8 @@ void PxPlayer::_releaseController()
|
|||
if ( mController )
|
||||
{
|
||||
mController->getActor()->userData = NULL;
|
||||
mWorld->releaseController( *mController );
|
||||
mWorld->getStaticChangedSignal().remove( this, &PxPlayer::_onStaticChanged );
|
||||
mWorld->releaseController( *mController );
|
||||
mController = NULL;
|
||||
}
|
||||
}
|
||||
|
|
@ -99,6 +100,8 @@ void PxPlayer::init( const char *type,
|
|||
//mOriginOffset = 1.0f;
|
||||
}
|
||||
|
||||
mWorld->getStaticChangedSignal().notify( this, &PxPlayer::_onStaticChanged );
|
||||
|
||||
// Put the kinematic actor on group 29.
|
||||
NxActor *kineActor = mController->getActor();
|
||||
kineActor->setGroup( 29 );
|
||||
|
|
@ -110,6 +113,11 @@ void PxPlayer::init( const char *type,
|
|||
kineActor->userData = &mUserData;
|
||||
}
|
||||
|
||||
void PxPlayer::_onStaticChanged()
|
||||
{
|
||||
mController->reportSceneChanged();
|
||||
}
|
||||
|
||||
void PxPlayer::_onPhysicsReset( PhysicsResetEvent reset )
|
||||
{
|
||||
// The PhysX controller will crash out if it doesn't clear its
|
||||
|
|
|
|||
|
|
@ -71,6 +71,8 @@ protected:
|
|||
|
||||
void _onPhysicsReset( PhysicsResetEvent reset );
|
||||
|
||||
void _onStaticChanged();
|
||||
|
||||
public:
|
||||
|
||||
PxPlayer();
|
||||
|
|
|
|||
|
|
@ -569,9 +569,11 @@ void PxWorld::_releaseQueues()
|
|||
mReleaseJointQueue.clear();
|
||||
|
||||
// Now release any actors still pending in the queue.
|
||||
bool staticChanged = false;
|
||||
for ( S32 i = 0; i < mReleaseActorQueue.size(); i++ )
|
||||
{
|
||||
NxActor *currActor = mReleaseActorQueue[i];
|
||||
NxActor *currActor = mReleaseActorQueue[i];
|
||||
staticChanged |= !currActor->isDynamic();
|
||||
mScene->releaseActor( *currActor );
|
||||
}
|
||||
|
||||
|
|
@ -618,6 +620,9 @@ void PxWorld::_releaseQueues()
|
|||
mScene->releaseFluid( *currFluid );
|
||||
}
|
||||
mReleaseFluidQueue.clear();
|
||||
|
||||
if ( staticChanged )
|
||||
mStaticChangedSignal.trigger();
|
||||
}
|
||||
|
||||
void PxWorld::setEnabled( bool enabled )
|
||||
|
|
|
|||
Loading…
Reference in a new issue