Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-04-11 06:50:02 +0400
committerKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-04-11 06:50:02 +0400
commitae9233a5b05ebfc925fd542afbdb3bb9220ed65c (patch)
tree46ed278ee54325ca98540163edf9ea5dd4a88c7f /source/gameengine/Ketsji
parentd3e88eae711e2fd5d678ed555268647e28a9fc18 (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.h10
-rw-r--r--source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp18
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.cpp3
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.h22
-rw-r--r--source/gameengine/Ketsji/KX_NearSensor.cpp11
-rw-r--r--source/gameengine/Ketsji/KX_TouchSensor.cpp23
-rw-r--r--source/gameengine/Ketsji/KX_TouchSensor.h12
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);