BGE modifier: generate correct physic shape, share static derived mesh, share display...
[blender-staging.git] / source / gameengine / Converter / BL_ModifierDeformer.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 #ifndef BL_MODIFIERDEFORMER
31 #define BL_MODIFIERDEFORMER
32
33 #ifdef WIN32
34 #pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
35 #endif //WIN32
36
37 #include "BL_ShapeDeformer.h"
38 #include "BL_DeformableGameObject.h"
39 #include <vector>
40
41 struct DerivedMesh;
42 struct Object;
43
44 class BL_ModifierDeformer : public BL_ShapeDeformer  
45 {
46 public:
47         static bool HasCompatibleDeformer(Object *ob);
48
49
50         BL_ModifierDeformer(BL_DeformableGameObject *gameobj,
51                                                 Object *bmeshobj,
52                                                 BL_SkinMeshObject *mesh)
53                                                 :       
54                                                 BL_ShapeDeformer(gameobj,bmeshobj, mesh),
55                                                 m_lastModifierUpdate(-1),
56                                                 m_dm(NULL)
57         {
58                 m_recalcNormal = false;
59         };
60
61         /* this second constructor is needed for making a mesh deformable on the fly. */
62         BL_ModifierDeformer(BL_DeformableGameObject *gameobj,
63                                                 struct Object *bmeshobj_old,
64                                                 struct Object *bmeshobj_new,
65                                                 class BL_SkinMeshObject *mesh,
66                                                 bool release_object,
67                                                 BL_ArmatureObject* arma = NULL)
68                                                 :
69                                                 BL_ShapeDeformer(gameobj, bmeshobj_old, bmeshobj_new, mesh, release_object, false, arma),
70                                                 m_lastModifierUpdate(-1),
71                                                 m_dm(NULL)
72         {
73         };
74
75         virtual void ProcessReplica();
76         virtual RAS_Deformer *GetReplica();
77         virtual ~BL_ModifierDeformer();
78         virtual bool UseVertexArray()
79         {
80                 return false;
81         }
82
83         bool Update (void);
84         bool Apply(RAS_IPolyMaterial *mat);
85         void ForceUpdate()
86         {
87                 m_lastModifierUpdate = -1.0;
88         };
89         virtual struct DerivedMesh* GetFinalMesh()
90         {
91                 return m_dm;
92         }
93
94
95 protected:
96         double                                   m_lastModifierUpdate;
97         DerivedMesh                             *m_dm;
98
99 };
100
101 #endif
102