From 076d1910f58661926393cca2a6f06d7091a5bce5 Mon Sep 17 00:00:00 2001 From: Benoit Bolsee Date: Wed, 22 Apr 2009 16:26:22 +0000 Subject: [PATCH] BGE: some more cleanup in GetReplica/ProcessReplica of deformers: make them consistent with the other classes. --- .../Converter/BL_DeformableGameObject.cpp | 2 +- source/gameengine/Converter/BL_MeshDeformer.h | 3 +- .../Converter/BL_ModifierDeformer.cpp | 2 +- .../Converter/BL_ModifierDeformer.h | 2 +- .../gameengine/Converter/BL_ShapeDeformer.cpp | 7 +---- .../gameengine/Converter/BL_ShapeDeformer.h | 3 +- .../gameengine/Converter/BL_SkinDeformer.cpp | 11 ++----- source/gameengine/Converter/BL_SkinDeformer.h | 3 +- .../Ketsji/KX_ConvertPhysicsObjects.cpp | 31 +++++++++++++------ source/gameengine/Rasterizer/RAS_Deformer.h | 3 +- 10 files changed, 34 insertions(+), 33 deletions(-) diff --git a/source/gameengine/Converter/BL_DeformableGameObject.cpp b/source/gameengine/Converter/BL_DeformableGameObject.cpp index 241ff8d2aaf..a9d5b643fd4 100644 --- a/source/gameengine/Converter/BL_DeformableGameObject.cpp +++ b/source/gameengine/Converter/BL_DeformableGameObject.cpp @@ -46,7 +46,7 @@ void BL_DeformableGameObject::ProcessReplica() KX_GameObject::ProcessReplica(); if (m_pDeformer) - m_pDeformer= (BL_MeshDeformer*)m_pDeformer->GetReplica(this); + m_pDeformer= (BL_MeshDeformer*)m_pDeformer->GetReplica(); } CValue* BL_DeformableGameObject::GetReplica() diff --git a/source/gameengine/Converter/BL_MeshDeformer.h b/source/gameengine/Converter/BL_MeshDeformer.h index 8de59c1cdf3..34944421b28 100644 --- a/source/gameengine/Converter/BL_MeshDeformer.h +++ b/source/gameengine/Converter/BL_MeshDeformer.h @@ -64,7 +64,8 @@ public: virtual void SetSimulatedTime(double time){}; virtual bool Apply(class RAS_IPolyMaterial *mat); virtual bool Update(void){ return false; }; - virtual RAS_Deformer* GetReplica(class KX_GameObject* replica){return NULL;}; + virtual RAS_Deformer* GetReplica(){return NULL;}; + virtual void ProcessReplica() { }; struct Mesh* GetMesh() { return m_bmesh; }; // virtual void InitDeform(double time){}; diff --git a/source/gameengine/Converter/BL_ModifierDeformer.cpp b/source/gameengine/Converter/BL_ModifierDeformer.cpp index 79ee6be47f0..09dbe966d0b 100644 --- a/source/gameengine/Converter/BL_ModifierDeformer.cpp +++ b/source/gameengine/Converter/BL_ModifierDeformer.cpp @@ -76,7 +76,7 @@ BL_ModifierDeformer::~BL_ModifierDeformer() } }; -RAS_Deformer *BL_ModifierDeformer::GetReplica(class KX_GameObject* replica) +RAS_Deformer *BL_ModifierDeformer::GetReplica() { BL_ModifierDeformer *result; diff --git a/source/gameengine/Converter/BL_ModifierDeformer.h b/source/gameengine/Converter/BL_ModifierDeformer.h index 0caaabf8055..465c287a88b 100644 --- a/source/gameengine/Converter/BL_ModifierDeformer.h +++ b/source/gameengine/Converter/BL_ModifierDeformer.h @@ -73,7 +73,7 @@ public: }; virtual void ProcessReplica(); - virtual RAS_Deformer *GetReplica(class KX_GameObject* replica); + virtual RAS_Deformer *GetReplica(); virtual ~BL_ModifierDeformer(); virtual bool UseVertexArray() { diff --git a/source/gameengine/Converter/BL_ShapeDeformer.cpp b/source/gameengine/Converter/BL_ShapeDeformer.cpp index 499732c7f70..bf5eb5cbcb3 100644 --- a/source/gameengine/Converter/BL_ShapeDeformer.cpp +++ b/source/gameengine/Converter/BL_ShapeDeformer.cpp @@ -68,7 +68,7 @@ BL_ShapeDeformer::~BL_ShapeDeformer() { }; -RAS_Deformer *BL_ShapeDeformer::GetReplica(class KX_GameObject* replica) +RAS_Deformer *BL_ShapeDeformer::GetReplica() { BL_ShapeDeformer *result; @@ -77,11 +77,6 @@ RAS_Deformer *BL_ShapeDeformer::GetReplica(class KX_GameObject* replica) return result; } -void BL_ShapeDeformer::ProcessReplica() -{ - BL_SkinDeformer::ProcessReplica(); -} - bool BL_ShapeDeformer::LoadShapeDrivers(Object* arma) { IpoCurve *icu; diff --git a/source/gameengine/Converter/BL_ShapeDeformer.h b/source/gameengine/Converter/BL_ShapeDeformer.h index 901a1d82295..1ec7bfdf74a 100644 --- a/source/gameengine/Converter/BL_ShapeDeformer.h +++ b/source/gameengine/Converter/BL_ShapeDeformer.h @@ -66,8 +66,7 @@ public: { }; - virtual void ProcessReplica(); - virtual RAS_Deformer *GetReplica(class KX_GameObject* replica); + virtual RAS_Deformer *GetReplica(); virtual ~BL_ShapeDeformer(); bool Update (void); diff --git a/source/gameengine/Converter/BL_SkinDeformer.cpp b/source/gameengine/Converter/BL_SkinDeformer.cpp index 3267dbce410..d40776a645d 100644 --- a/source/gameengine/Converter/BL_SkinDeformer.cpp +++ b/source/gameengine/Converter/BL_SkinDeformer.cpp @@ -108,7 +108,7 @@ void BL_SkinDeformer::Relink(GEN_Map*map) void **h_obj = (*map)[m_armobj]; if (h_obj) - SetArmature( (BL_ArmatureObject*)(*h_obj) ); + m_armobj = (BL_ArmatureObject*)(*h_obj); else m_armobj=NULL; } @@ -151,21 +151,16 @@ bool BL_SkinDeformer::Apply(RAS_IPolyMaterial *mat) return true; } -RAS_Deformer *BL_SkinDeformer::GetReplica(class KX_GameObject* replica) +RAS_Deformer *BL_SkinDeformer::GetReplica() { BL_SkinDeformer *result; result = new BL_SkinDeformer(*this); - /* Not inherited from PyObjectPlus so this isnt needed */ - /* Just call a dummy function below, will be optimized out */ + /* there is m_armobj that must be fixed but we cannot do it now, it will be done in Relink */ result->ProcessReplica(); return result; } -void BL_SkinDeformer::ProcessReplica() -{ -} - //void where_is_pose (Object *ob); //void armature_deform_verts(Object *armOb, Object *target, float (*vertexCos)[3], int numVerts, int deformflag); bool BL_SkinDeformer::Update(void) diff --git a/source/gameengine/Converter/BL_SkinDeformer.h b/source/gameengine/Converter/BL_SkinDeformer.h index c93188b0c5a..ee240588851 100644 --- a/source/gameengine/Converter/BL_SkinDeformer.h +++ b/source/gameengine/Converter/BL_SkinDeformer.h @@ -67,8 +67,7 @@ public: bool recalc_normal, BL_ArmatureObject* arma = NULL); - virtual void ProcessReplica(); - virtual RAS_Deformer *GetReplica(class KX_GameObject* replica); + virtual RAS_Deformer *GetReplica(); virtual ~BL_SkinDeformer(); bool Update (void); bool Apply (class RAS_IPolyMaterial *polymat); diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp index 08e2ea30414..f4f8ec9f91b 100644 --- a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp +++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp @@ -34,7 +34,7 @@ // defines USE_ODE to choose physics engine #include "KX_ConvertPhysicsObject.h" -#include "KX_GameObject.h" +#include "BL_DeformableGameObject.h" #include "RAS_MeshObject.h" #include "KX_Scene.h" #include "SYS_System.h" @@ -670,11 +670,11 @@ void KX_ConvertODEEngineObject(KX_GameObject* gameobj, class KX_SoftBodyDeformer : public RAS_Deformer { - class RAS_MeshObject* m_pMeshObject; - class KX_GameObject* m_gameobj; + class RAS_MeshObject* m_pMeshObject; + class BL_DeformableGameObject* m_gameobj; public: - KX_SoftBodyDeformer(RAS_MeshObject* pMeshObject,KX_GameObject* gameobj) + KX_SoftBodyDeformer(RAS_MeshObject* pMeshObject,BL_DeformableGameObject* gameobj) :m_pMeshObject(pMeshObject), m_gameobj(gameobj) { @@ -687,7 +687,15 @@ void KX_ConvertODEEngineObject(KX_GameObject* gameobj, }; virtual void Relink(GEN_Map*map) { - //printf("relink\n"); + void **h_obj = (*map)[m_gameobj]; + + if (h_obj) { + m_gameobj = (BL_DeformableGameObject*)(*h_obj); + m_pMeshObject = m_gameobj->GetMesh(0); + } else { + m_gameobj = NULL; + m_pMeshObject = NULL; + } } virtual bool Apply(class RAS_IPolyMaterial *polymat) { @@ -751,12 +759,16 @@ void KX_ConvertODEEngineObject(KX_GameObject* gameobj, //printf("update\n"); return true;//?? } - virtual RAS_Deformer *GetReplica(class KX_GameObject* replica) + virtual RAS_Deformer *GetReplica() { - KX_SoftBodyDeformer* deformer = new KX_SoftBodyDeformer(replica->GetMesh(0),replica); + KX_SoftBodyDeformer* deformer = new KX_SoftBodyDeformer(*this); + deformer->ProcessReplica(); return deformer; } - + virtual void ProcessReplica() + { + // we have two pointers to deal with but we cannot do it now, will be done in Relink + } virtual bool SkipVertexTransform() { return true; @@ -1187,9 +1199,8 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj, if (softBody && gameobj->GetMesh(0))//only the first mesh, if any { //should be a mesh then, so add a soft body deformer - KX_SoftBodyDeformer* softbodyDeformer = new KX_SoftBodyDeformer( gameobj->GetMesh(0),gameobj); + KX_SoftBodyDeformer* softbodyDeformer = new KX_SoftBodyDeformer( gameobj->GetMesh(0),(BL_DeformableGameObject*)gameobj); gameobj->SetDeformer(softbodyDeformer); - } } diff --git a/source/gameengine/Rasterizer/RAS_Deformer.h b/source/gameengine/Rasterizer/RAS_Deformer.h index dc5a49a0f99..5a6bab4c82d 100644 --- a/source/gameengine/Rasterizer/RAS_Deformer.h +++ b/source/gameengine/Rasterizer/RAS_Deformer.h @@ -44,7 +44,8 @@ public: virtual void Relink(GEN_Map*map)=0; virtual bool Apply(class RAS_IPolyMaterial *polymat)=0; virtual bool Update(void)=0; - virtual RAS_Deformer *GetReplica(class KX_GameObject* replica)=0; + virtual RAS_Deformer *GetReplica()=0; + virtual void ProcessReplica()=0; virtual bool SkipVertexTransform() { return false;