fix BGE bug #8094: Collision sensor on child object makes the object rotate or move very fast. Collision sensor can now be set on child object without side effect.

This commit is contained in:
Benoit Bolsee 2008-04-19 21:09:40 +00:00
parent eb7edc4cba
commit b0049e6088
3 changed files with 18 additions and 12 deletions

@ -75,6 +75,21 @@ KX_NearSensor::KX_NearSensor(SCA_EventManager* eventmgr,
SynchronizeTransform();
}
void KX_NearSensor::SynchronizeTransform()
{
// The near and radar sensors are using a different physical object which is
// not linked to the parent object, must synchronize it.
if (m_physCtrl)
{
KX_GameObject* parent = ((KX_GameObject*)GetParent());
MT_Vector3 pos = parent->NodeGetWorldPosition();
MT_Quaternion orn = parent->NodeGetWorldOrientation().getRotation();
m_physCtrl->setPosition(pos.x(),pos.y(),pos.z());
m_physCtrl->setOrientation(orn.x(),orn.y(),orn.z(),orn.w());
m_physCtrl->calcXform();
}
}
void KX_NearSensor::RegisterSumo(KX_TouchEventManager *touchman)
{
if (m_physCtrl)

@ -68,6 +68,7 @@ public:
PyTypeObject* T=&Type);
*/
virtual ~KX_NearSensor();
virtual void SynchronizeTransform();
virtual CValue* GetReplica();
virtual bool Evaluate(CValue* event);

@ -48,18 +48,8 @@
void KX_TouchSensor::SynchronizeTransform()
{
if (m_physCtrl)
{
KX_GameObject* parent = ((KX_GameObject*)GetParent());
MT_Vector3 pos = parent->NodeGetWorldPosition();
MT_Quaternion orn = parent->NodeGetWorldOrientation().getRotation();
m_physCtrl->setPosition(pos.x(),pos.y(),pos.z());
m_physCtrl->setOrientation(orn.x(),orn.y(),orn.z(),orn.w());
m_physCtrl->calcXform();
}
// the touch sensor does not require any synchronization: it uses
// the same physical object which is already synchronized by Blender
}