[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19876] trunk/blender/source/gameengine/ Ketsji: BGE: some more cleanup, implement proper GetReplica/ ProcessReplica workflow for touch/near/radar sensor.
Benoit Bolsee
benoit.bolsee at online.be
Wed Apr 22 20:20:41 CEST 2009
Revision: 19876
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19876
Author: ben2610
Date: 2009-04-22 20:20:41 +0200 (Wed, 22 Apr 2009)
Log Message:
-----------
BGE: some more cleanup, implement proper GetReplica/ProcessReplica workflow for touch/near/radar sensor. Remove duplicated code.
Modified Paths:
--------------
trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp
trunk/blender/source/gameengine/Ketsji/KX_NearSensor.h
trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp
trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.h
trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp
trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.h
Modified: trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp 2009-04-22 17:35:37 UTC (rev 19875)
+++ trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp 2009-04-22 18:20:41 UTC (rev 19876)
@@ -109,52 +109,36 @@
CValue* KX_NearSensor::GetReplica()
{
KX_NearSensor* replica = new KX_NearSensor(*this);
- replica->m_colliders = new CListValue();
- replica->Init();
replica->ProcessReplica();
+ return replica;
+}
+
+void KX_NearSensor::ProcessReplica()
+{
+ KX_TouchSensor::ProcessReplica();
- replica->m_client_info = new KX_ClientObjectInfo(m_client_info->m_gameobject, KX_ClientObjectInfo::NEAR);
+ m_client_info = new KX_ClientObjectInfo(m_client_info->m_gameobject, KX_ClientObjectInfo::NEAR);
- if (replica->m_physCtrl)
+ if (m_physCtrl)
{
- replica->m_physCtrl = replica->m_physCtrl->GetReplica();
- if (replica->m_physCtrl)
+ m_physCtrl = m_physCtrl->GetReplica();
+ if (m_physCtrl)
{
//static_cast<KX_TouchEventManager*>(m_eventmgr)->GetPhysicsEnvironment()->addSensor(replica->m_physCtrl);
- replica->m_physCtrl->SetMargin(m_Margin);
- replica->m_physCtrl->setNewClientInfo(replica->m_client_info);
+ m_physCtrl->SetMargin(m_Margin);
+ m_physCtrl->setNewClientInfo(m_client_info);
}
}
- //Wrong: the parent object could be a child, this code works only if it is a root parent.
- //Anyway, at this stage, the parent object is already synchronized, nothing to do.
- //bool parentUpdated = false;
- //((KX_GameObject*)replica->GetParent())->GetSGNode()->ComputeWorldTransforms(NULL, parentUpdated);
- replica->SynchronizeTransform();
-
- return replica;
}
-
-
void KX_NearSensor::ReParent(SCA_IObject* parent)
{
m_client_info->m_gameobject = static_cast<KX_GameObject*>(parent);
m_client_info->m_sensors.push_back(this);
-
-
-/* KX_ClientObjectInfo *client_info = gameobj->getClientInfo();
- client_info->m_gameobject = gameobj;
- client_info->m_auxilary_info = NULL;
-
- client_info->m_sensors.push_back(this);
+ //Synchronize here with the actual parent.
+ SynchronizeTransform();
SCA_ISensor::ReParent(parent);
-*/
- //Not needed, was done in GetReplica() already
- //bool parentUpdated = false;
- //((KX_GameObject*)GetParent())->GetSGNode()->ComputeWorldTransforms(NULL,parentUpdated);
- //SynchronizeTransform();
- SCA_ISensor::ReParent(parent);
}
Modified: trunk/blender/source/gameengine/Ketsji/KX_NearSensor.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_NearSensor.h 2009-04-22 17:35:37 UTC (rev 19875)
+++ trunk/blender/source/gameengine/Ketsji/KX_NearSensor.h 2009-04-22 18:20:41 UTC (rev 19876)
@@ -70,6 +70,7 @@
virtual ~KX_NearSensor();
virtual void SynchronizeTransform();
virtual CValue* GetReplica();
+ virtual void ProcessReplica();
virtual bool Evaluate(CValue* event);
virtual void ReParent(SCA_IObject* parent);
Modified: trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp 2009-04-22 17:35:37 UTC (rev 19875)
+++ trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp 2009-04-22 18:20:41 UTC (rev 19876)
@@ -80,33 +80,15 @@
CValue* KX_RadarSensor::GetReplica()
{
KX_RadarSensor* replica = new KX_RadarSensor(*this);
- replica->m_colliders = new CListValue();
- replica->Init();
replica->ProcessReplica();
-
- replica->m_client_info = new KX_ClientObjectInfo(m_client_info->m_gameobject, KX_ClientObjectInfo::RADAR);
-
- if (replica->m_physCtrl)
- {
- replica->m_physCtrl = replica->m_physCtrl->GetReplica();
- if (replica->m_physCtrl)
- {
- replica->m_physCtrl->setNewClientInfo(replica->m_client_info);
- }
- }
-
- //todo: make sure replication works fine!
- //>m_sumoObj = new SM_Object(DT_NewCone(m_coneradius, m_coneheight),NULL,NULL,NULL);
- //replica->m_sumoObj->setMargin(m_Margin);
- //replica->m_sumoObj->setClientObject(replica->m_client_info);
- //Wrong: see KX_TouchSensor
- //bool parentUpdated = false;
- //((KX_GameObject*)replica->GetParent())->GetSGNode()->ComputeWorldTransforms(NULL,parentUpdated);
- replica->SynchronizeTransform();
-
return replica;
}
+void KX_RadarSensor::ProcessReplica()
+{
+ KX_NearSensor::ProcessReplica();
+ m_client_info->m_type = KX_ClientObjectInfo::RADAR;
+}
/**
* Transforms the collision object. A cone is not correctly centered
Modified: trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.h 2009-04-22 17:35:37 UTC (rev 19875)
+++ trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.h 2009-04-22 18:20:41 UTC (rev 19876)
@@ -76,6 +76,7 @@
virtual ~KX_RadarSensor();
virtual void SynchronizeTransform();
virtual CValue* GetReplica();
+ virtual void ProcessReplica();
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
Modified: trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp 2009-04-22 17:35:37 UTC (rev 19875)
+++ trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp 2009-04-22 18:20:41 UTC (rev 19876)
@@ -142,12 +142,17 @@
CValue* KX_TouchSensor::GetReplica()
{
KX_TouchSensor* replica = new KX_TouchSensor(*this);
- replica->m_colliders = new CListValue();
- replica->Init();
replica->ProcessReplica();
return replica;
}
+void KX_TouchSensor::ProcessReplica()
+{
+ SCA_ISensor::ProcessReplica();
+ m_colliders = new CListValue();
+ Init();
+}
+
void KX_TouchSensor::ReParent(SCA_IObject* parent)
{
KX_GameObject *gameobj = static_cast<KX_GameObject *>(parent);
Modified: trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.h 2009-04-22 17:35:37 UTC (rev 19875)
+++ trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.h 2009-04-22 18:20:41 UTC (rev 19876)
@@ -84,6 +84,7 @@
virtual ~KX_TouchSensor();
virtual CValue* GetReplica();
+ virtual void ProcessReplica();
virtual void SynchronizeTransform();
virtual bool Evaluate(CValue* event);
virtual void Init();
More information about the Bf-blender-cvs
mailing list