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:
authorBenoit Bolsee <benoit.bolsee@online.be>2009-11-25 01:44:29 +0300
committerBenoit Bolsee <benoit.bolsee@online.be>2009-11-25 01:44:29 +0300
commit5b722b1e8755c2d3b0c981087f3016f16a2b891a (patch)
treeece1d250a7e8cb72b9f393d394a1edb684dbf577 /source/gameengine/Converter/KX_SoftBodyDeformer.h
parent6c55047b4019a3491934bae38bbf229e6b0e6a48 (diff)
BGE: replace mesh works for Soft Body (including reinstantiation of physics soft body mesh).
Even a static mesh can be used as replacement: the mesh will be instantiated with the soft body settings of the object. The position and orientation of the soft body is preserved after the replacement. Known limitation: the velocity of the soft body is reset aftet the replacement. This is because soft body don't have a well defined velocity.
Diffstat (limited to 'source/gameengine/Converter/KX_SoftBodyDeformer.h')
-rw-r--r--source/gameengine/Converter/KX_SoftBodyDeformer.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/source/gameengine/Converter/KX_SoftBodyDeformer.h b/source/gameengine/Converter/KX_SoftBodyDeformer.h
new file mode 100644
index 00000000000..b55b2a745c0
--- /dev/null
+++ b/source/gameengine/Converter/KX_SoftBodyDeformer.h
@@ -0,0 +1,102 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef KX_SOFTBODYDEFORMER
+#define KX_SOFTBODYDEFORMER
+
+#ifdef WIN32
+#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
+#endif //WIN32
+
+#include "RAS_Deformer.h"
+#include "BL_DeformableGameObject.h"
+#include <vector>
+
+
+class KX_SoftBodyDeformer : public RAS_Deformer
+{
+ class RAS_MeshObject* m_pMeshObject;
+ class BL_DeformableGameObject* m_gameobj;
+
+public:
+ KX_SoftBodyDeformer(RAS_MeshObject* pMeshObject,BL_DeformableGameObject* gameobj)
+ :m_pMeshObject(pMeshObject),
+ m_gameobj(gameobj)
+ {
+ //printf("KX_SoftBodyDeformer\n");
+ };
+
+ virtual ~KX_SoftBodyDeformer()
+ {
+ //printf("~KX_SoftBodyDeformer\n");
+ };
+ virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map);
+ virtual bool Apply(class RAS_IPolyMaterial *polymat);
+ virtual bool Update(void)
+ {
+ //printf("update\n");
+ m_bDynamic = true;
+ return true;//??
+ }
+ virtual bool UpdateBuckets(void)
+ {
+ // this is to update the mesh slots outside the rasterizer,
+ // no need to do it for this deformer, it's done in any case in Apply()
+ return false;
+ }
+
+ virtual RAS_Deformer *GetReplica()
+ {
+ 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
+ m_bDynamic = false;
+ }
+ virtual bool SkipVertexTransform()
+ {
+ return true;
+ }
+
+protected:
+ //class RAS_MeshObject *m_pMesh;
+
+#ifdef WITH_CXX_GUARDEDALLOC
+public:
+ void *operator new( unsigned int num_bytes) { return MEM_mallocN(num_bytes, "GE:BL_ShapeDeformer"); }
+ void operator delete( void *mem ) { MEM_freeN(mem); }
+#endif
+};
+
+
+#endif
+