diff options
author | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-04-11 06:50:02 +0400 |
---|---|---|
committer | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-04-11 06:50:02 +0400 |
commit | ae9233a5b05ebfc925fd542afbdb3bb9220ed65c (patch) | |
tree | 46ed278ee54325ca98540163edf9ea5dd4a88c7f /source/gameengine/Ketsji | |
parent | d3e88eae711e2fd5d678ed555268647e28a9fc18 (diff) |
1. Check material names passed to the physics engine (for collision sensors.)
Consider:
gameobj->getClientInfo()->m_auxilary_info = (matname ? (void*)(matname+2) : NULL);
It works if matname is "MAblah", but not if matname is "".
2. Added constructor for struct RAS_CameraData.
3. Added initializers to the struct KX_ClientObjectInfo constructor
4. Collision sensors won't detect near sensors.
5. A stack of minor tweaks, adjusting whitespace, using ++it for stl stuff.
Diffstat (limited to 'source/gameengine/Ketsji')
-rw-r--r-- | source/gameengine/Ketsji/KX_ClientObjectInfo.h | 10 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp | 18 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_GameObject.cpp | 3 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_GameObject.h | 22 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_NearSensor.cpp | 11 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_TouchSensor.cpp | 23 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_TouchSensor.h | 12 |
7 files changed, 51 insertions, 48 deletions
diff --git a/source/gameengine/Ketsji/KX_ClientObjectInfo.h b/source/gameengine/Ketsji/KX_ClientObjectInfo.h index 51cb19e8935..0ef1a1b86fe 100644 --- a/source/gameengine/Ketsji/KX_ClientObjectInfo.h +++ b/source/gameengine/Ketsji/KX_ClientObjectInfo.h @@ -37,7 +37,7 @@ */ struct KX_ClientObjectInfo { - enum { + enum clienttype { STATIC, ACTOR, RESERVED1, @@ -47,9 +47,13 @@ struct KX_ClientObjectInfo void* m_clientobject; void* m_auxilary_info; public: - KX_ClientObjectInfo(void *clientobject) : - m_clientobject(clientobject) + KX_ClientObjectInfo(void *clientobject, clienttype type = STATIC, void *auxilary_info = NULL) : + m_type(type), + m_clientobject(clientobject), + m_auxilary_info(auxilary_info) {} + + bool isActor() { return m_type <= ACTOR; } }; #endif //__KX_CLIENTOBJECT_INFO_H diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp index 96716214edc..488584b0567 100644 --- a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp +++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp @@ -80,7 +80,7 @@ GEN_Map<GEN_HashedPtr,DT_ShapeHandle> map_gamemesh_to_sumoshape; // forward declarations -void BL_RegisterSumoObject(KX_GameObject* gameobj,class SM_Scene* sumoScene,DT_SceneHandle solidscene,class SM_Object* sumoObj,const char* matname,bool isDynamic,bool isActor); +void BL_RegisterSumoObject(KX_GameObject* gameobj,class SM_Scene* sumoScene,DT_SceneHandle solidscene,class SM_Object* sumoObj,const STR_String& matname,bool isDynamic,bool isActor); DT_ShapeHandle CreateShapeFromMesh(RAS_MeshObject* meshobj); @@ -158,7 +158,7 @@ void KX_ConvertSumoObject( KX_GameObject* gameobj, sumoObj->setRigidBody(objprop->m_angular_rigidbody?true:false); objprop->m_isactor = objprop->m_dyna = true; - BL_RegisterSumoObject(gameobj,sceneptr,sumoEnv->GetSolidScene(),sumoObj,NULL,true, true); + BL_RegisterSumoObject(gameobj,sceneptr,sumoEnv->GetSolidScene(),sumoObj,"",true, true); } else { @@ -229,7 +229,7 @@ void KX_ConvertSumoObject( KX_GameObject* gameobj, BL_RegisterSumoObject(gameobj,sceneptr, sumoEnv->GetSolidScene(),sumoObj, - matname.ReadPtr(), + matname, objprop->m_dyna, objprop->m_isactor); } @@ -251,7 +251,15 @@ void KX_ConvertSumoObject( KX_GameObject* gameobj, -void BL_RegisterSumoObject(KX_GameObject* gameobj,class SM_Scene* sumoScene,DT_SceneHandle solidscene,class SM_Object* sumoObj,const char* matname,bool isDynamic,bool isActor) { +void BL_RegisterSumoObject( + KX_GameObject* gameobj, + class SM_Scene* sumoScene, + DT_SceneHandle solidscene, + class SM_Object* sumoObj, + const STR_String& matname, + bool isDynamic, + bool isActor) +{ @@ -274,7 +282,7 @@ void BL_RegisterSumoObject(KX_GameObject* gameobj,class SM_Scene* sumoScene,DT_S //gameobj->GetClientInfo()->m_clientobject = gameobj; // store materialname in auxinfo, needed for touchsensors - gameobj->getClientInfo()->m_auxilary_info = (matname? (void*)(matname+2) : NULL); + gameobj->getClientInfo()->m_auxilary_info = (matname.Length() ? (void*)(matname.ReadPtr()+2) : NULL); physicscontroller->SetObject(gameobj->GetSGNode()); diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp index f49090acc0d..91ff9e62459 100644 --- a/source/gameengine/Ketsji/KX_GameObject.cpp +++ b/source/gameengine/Ketsji/KX_GameObject.cpp @@ -73,8 +73,7 @@ KX_GameObject::KX_GameObject( m_pPhysicsController1(NULL) { m_ignore_activity_culling = false; - m_pClient_info = new KX_ClientObjectInfo(this); - m_pClient_info->m_type = KX_ClientObjectInfo::ACTOR; + m_pClient_info = new KX_ClientObjectInfo(this, KX_ClientObjectInfo::ACTOR); m_pSGNode = new SG_Node(this,sgReplicationInfo,callbacks); // define the relationship between this node and it's parent. diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h index 9fb11f1f31d..84ce0778fbb 100644 --- a/source/gameengine/Ketsji/KX_GameObject.h +++ b/source/gameengine/Ketsji/KX_GameObject.h @@ -63,25 +63,25 @@ class KX_GameObject : public SCA_IObject { Py_Header; - bool m_bDyna; - KX_ClientObjectInfo* m_pClient_info; - STR_String m_name; - STR_String m_text; + bool m_bDyna; + KX_ClientObjectInfo* m_pClient_info; + STR_String m_name; + STR_String m_text; std::vector<RAS_MeshObject*> m_meshes; - bool m_bSuspendDynamics; - bool m_bUseObjectColor; - MT_Vector4 m_objectColor; + bool m_bSuspendDynamics; + bool m_bUseObjectColor; + MT_Vector4 m_objectColor; // Is this object set to be visible? Only useful for the // visibility subsystem right now. - bool m_bVisible; + bool m_bVisible; - KX_IPhysicsController* m_pPhysicsController1; - SG_Node* m_pSGNode; + KX_IPhysicsController* m_pPhysicsController1; + SG_Node* m_pSGNode; protected: - MT_CmMatrix4x4 m_OpenGL_4x4Matrix; + MT_CmMatrix4x4 m_OpenGL_4x4Matrix; public: virtual void /* This function should be virtual - derived classed override it */ diff --git a/source/gameengine/Ketsji/KX_NearSensor.cpp b/source/gameengine/Ketsji/KX_NearSensor.cpp index 0b32c748646..880d0d61c16 100644 --- a/source/gameengine/Ketsji/KX_NearSensor.cpp +++ b/source/gameengine/Ketsji/KX_NearSensor.cpp @@ -62,8 +62,7 @@ KX_NearSensor::KX_NearSensor(SCA_EventManager* eventmgr, m_ResetMargin(resetmargin) { - m_client_info = new KX_ClientObjectInfo(gameobj); - m_client_info->m_type = KX_ClientObjectInfo::NEAR; + m_client_info = new KX_ClientObjectInfo(gameobj, KX_ClientObjectInfo::NEAR); DT_ShapeHandle shape = (DT_ShapeHandle) vshape; m_sumoObj = new SM_Object(shape,NULL,NULL,NULL); @@ -91,9 +90,7 @@ KX_NearSensor::KX_NearSensor(SCA_EventManager* eventmgr, m_ResetMargin(resetmargin) { - m_client_info = new KX_ClientObjectInfo(gameobj); - m_client_info->m_type = KX_ClientObjectInfo::NEAR; - m_client_info->m_auxilary_info = NULL; + m_client_info = new KX_ClientObjectInfo(gameobj, KX_ClientObjectInfo::NEAR); m_sumoObj = new SM_Object(DT_NewSphere(0.0),NULL,NULL,NULL); m_sumoObj->setMargin(m_Margin); @@ -118,9 +115,7 @@ CValue* KX_NearSensor::GetReplica() // this will copy properties and so on... CValue::AddDataToReplica(replica); - replica->m_client_info = new KX_ClientObjectInfo(m_client_info->m_clientobject); - replica->m_client_info->m_type = KX_ClientObjectInfo::NEAR; - replica->m_client_info->m_auxilary_info = NULL; + replica->m_client_info = new KX_ClientObjectInfo(m_client_info->m_clientobject, KX_ClientObjectInfo::NEAR); replica->m_sumoObj = new SM_Object(DT_NewSphere(0.0),NULL,NULL,NULL); replica->m_sumoObj->setMargin(m_Margin); diff --git a/source/gameengine/Ketsji/KX_TouchSensor.cpp b/source/gameengine/Ketsji/KX_TouchSensor.cpp index 6ae670a842c..29d9109c272 100644 --- a/source/gameengine/Ketsji/KX_TouchSensor.cpp +++ b/source/gameengine/Ketsji/KX_TouchSensor.cpp @@ -119,6 +119,19 @@ KX_TouchSensor::~KX_TouchSensor() m_colliders->Release(); } +CValue* KX_TouchSensor::GetReplica() +{ + KX_TouchSensor* replica = new KX_TouchSensor(*this); + replica->m_colliders = new CListValue(); + replica->m_bCollision = false; + replica->m_bTriggered= false; + replica->m_hitObject = NULL; + replica->m_bLastTriggered = false; + // this will copy properties and so on... + CValue::AddDataToReplica(replica); + return replica; +} + void KX_TouchSensor::ReParent(SCA_IObject* parent) { KX_GameObject *gameobj = static_cast<KX_GameObject *>(parent); @@ -159,7 +172,7 @@ DT_Bool KX_TouchSensor::HandleCollision(void* obj1,void* obj2,const DT_CollDa (KX_GameObject*)client_info->m_clientobject : NULL); - if (gameobj && (gameobj != parent)) + if (gameobj && (gameobj != parent) && client_info->isActor()) { if (!m_colliders->SearchValue(gameobj)) m_colliders->Add(gameobj->AddRef()); @@ -171,14 +184,8 @@ DT_Bool KX_TouchSensor::HandleCollision(void* obj1,void* obj2,const DT_CollDa { if (client_info->m_auxilary_info) { - found = (m_touchedpropname == ((char*)client_info->m_auxilary_info)); + found = (m_touchedpropname == STR_String((char*)client_info->m_auxilary_info)); } - - if (found) - { - int i=0; - } - } else { found = (gameobj->GetProperty(m_touchedpropname) != NULL); diff --git a/source/gameengine/Ketsji/KX_TouchSensor.h b/source/gameengine/Ketsji/KX_TouchSensor.h index 50338827694..4f2ac2d99fa 100644 --- a/source/gameengine/Ketsji/KX_TouchSensor.h +++ b/source/gameengine/Ketsji/KX_TouchSensor.h @@ -77,17 +77,7 @@ public: PyTypeObject* T=&Type) ; virtual ~KX_TouchSensor(); - virtual CValue* GetReplica() { - KX_TouchSensor* replica = new KX_TouchSensor(*this); - replica->m_colliders = new CListValue(); - replica->m_bCollision = false; - replica->m_bTriggered= false; - replica->m_hitObject = NULL; - replica->m_bLastTriggered = false; - // this will copy properties and so on... - CValue::AddDataToReplica(replica); - return replica; - }; + virtual CValue* GetReplica(); virtual void SynchronizeTransform(); virtual bool Evaluate(CValue* event); virtual void ReParent(SCA_IObject* parent); |