diff options
author | Benoit Bolsee <benoit.bolsee@online.be> | 2009-11-25 01:44:29 +0300 |
---|---|---|
committer | Benoit Bolsee <benoit.bolsee@online.be> | 2009-11-25 01:44:29 +0300 |
commit | 5b722b1e8755c2d3b0c981087f3016f16a2b891a (patch) | |
tree | ece1d250a7e8cb72b9f393d394a1edb684dbf577 /source/gameengine/Converter/KX_SoftBodyDeformer.h | |
parent | 6c55047b4019a3491934bae38bbf229e6b0e6a48 (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.h | 102 |
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 + |