4 * ***** BEGIN GPL LICENSE BLOCK *****
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.
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.
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21 * All rights reserved.
23 * The Original Code is: all of this file.
25 * Contributor(s): none yet.
27 * ***** END GPL LICENSE BLOCK *****
30 /** \file KX_BlenderSceneConverter.h
34 #ifndef __KX_BLENDERSCENECONVERTER_H
35 #define __KX_BLENDERSCENECONVERTER_H
37 #include "KX_HashedPtr.h"
41 #include "KX_ISceneConverter.h"
42 #include "KX_IpoConvert.h"
46 class SCA_IController;
48 class RAS_IPolyMaterial;
49 class BL_InterpolatorList;
54 class KX_BlenderSceneConverter : public KX_ISceneConverter
56 // Use vector of pairs to allow removal of entities between scene switch
57 vector<pair<KX_Scene*,KX_WorldInfo*> > m_worldinfos;
58 vector<pair<KX_Scene*,RAS_IPolyMaterial*> > m_polymaterials;
59 vector<pair<KX_Scene*,RAS_MeshObject*> > m_meshobjects;
60 vector<pair<KX_Scene*,BL_Material *> > m_materials;
61 // Should also have a list of collision shapes.
62 // For the time being this is held in KX_Scene::m_shapes
64 CTR_Map<CHashedPtr,KX_GameObject*> m_map_blender_to_gameobject; /* cleared after conversion */
65 CTR_Map<CHashedPtr,RAS_MeshObject*> m_map_mesh_to_gamemesh; /* cleared after conversion */
66 CTR_Map<CHashedPtr,SCA_IActuator*> m_map_blender_to_gameactuator; /* cleared after conversion */
67 CTR_Map<CHashedPtr,SCA_IController*>m_map_blender_to_gamecontroller; /* cleared after conversion */
69 CTR_Map<CHashedPtr,BL_InterpolatorList*> m_map_blender_to_gameAdtList;
72 vector<struct Main*> m_DynamicMaggie;
74 STR_String m_newfilename;
75 class KX_KetsjiEngine* m_ketsjiEngine;
76 class KX_Scene* m_currentScene; // Scene being converted
77 bool m_alwaysUseExpandFraming;
82 KX_BlenderSceneConverter(
84 class KX_KetsjiEngine* engine
87 virtual ~KX_BlenderSceneConverter();
89 /* Scenename: name of the scene to be converted.
90 * destinationscene: pass an empty scene, everything goes into this
91 * dictobj: python dictionary (for pythoncontrollers)
93 virtual void ConvertScene(
94 class KX_Scene* destinationscene,
95 class RAS_IRenderTools* rendertools,
96 class RAS_ICanvas* canvas
98 virtual void RemoveScene(class KX_Scene *scene);
100 void SetNewFileName(const STR_String& filename);
101 bool TryAndLoadNewFile();
103 void SetAlwaysUseExpandFraming(bool to_what);
105 void RegisterGameObject(KX_GameObject *gameobject, struct Object *for_blenderobject);
106 void UnregisterGameObject(KX_GameObject *gameobject);
107 KX_GameObject *FindGameObject(struct Object *for_blenderobject);
109 void RegisterGameMesh(RAS_MeshObject *gamemesh, struct Mesh *for_blendermesh);
110 RAS_MeshObject *FindGameMesh(struct Mesh *for_blendermesh/*, unsigned int onlayer*/);
112 void RegisterPolyMaterial(RAS_IPolyMaterial *polymat);
114 void RegisterBlenderMaterial(BL_Material *mat);
116 void RegisterInterpolatorList(BL_InterpolatorList *actList, struct bAction *for_act);
117 BL_InterpolatorList *FindInterpolatorList(struct bAction *for_act);
119 void RegisterGameActuator(SCA_IActuator *act, struct bActuator *for_actuator);
120 SCA_IActuator *FindGameActuator(struct bActuator *for_actuator);
122 void RegisterGameController(SCA_IController *cont, struct bController *for_controller);
123 SCA_IController *FindGameController(struct bController *for_controller);
125 void RegisterWorldInfo(KX_WorldInfo *worldinfo);
127 virtual void ResetPhysicsObjectsAnimationIpo(bool clearIpo);
129 ///this is for reseting the position,rotation and scale of the gameobjet that is not dynamic
130 virtual void resetNoneDynamicObjectToIpo();
132 ///this generates ipo curves for position, rotation, allowing to use game physics in animation
133 virtual void WritePhysicsObjectToAnimationIpo(int frameNumber);
134 virtual void TestHandlesPhysicsObjectToAnimationIpo();
136 // use blender materials
137 virtual void SetMaterials(bool val);
138 virtual bool GetMaterials();
140 // use blender glsl materials
141 virtual void SetGLSLMaterials(bool val);
142 virtual bool GetGLSLMaterials();
144 struct Scene* GetBlenderSceneForName(const STR_String& name);
146 // struct Main* GetMain() { return m_maggie; };
147 struct Main* GetMainDynamicPath(const char *path);
148 vector<struct Main*> &GetMainDynamic();
150 bool LinkBlendFileMemory(void *data, int length, const char *path, char *group, KX_Scene *scene_merge, char **err_str, short options);
151 bool LinkBlendFilePath(const char *path, char *group, KX_Scene *scene_merge, char **err_str, short options);
152 bool LinkBlendFile(struct BlendHandle *bpy_openlib, const char *path, char *group, KX_Scene *scene_merge, char **err_str, short options);
153 bool MergeScene(KX_Scene *to, KX_Scene *from);
154 RAS_MeshObject *ConvertMeshSpecial(KX_Scene* kx_scene, Main *maggie, const char *name);
155 bool FreeBlendFile(struct Main *maggie);
156 bool FreeBlendFile(const char *path);
159 printf("BGE STATS!\n");
161 printf("\nAssets...\n");
162 printf("\t m_worldinfos: %d\n", (int)m_worldinfos.size());
163 printf("\t m_polymaterials: %d\n", (int)m_polymaterials.size());
164 printf("\t m_meshobjects: %d\n", (int)m_meshobjects.size());
165 printf("\t m_materials: %d\n", (int)m_materials.size());
167 printf("\nMappings...\n");
168 printf("\t m_map_blender_to_gameobject: %d\n", (int)m_map_blender_to_gameobject.size());
169 printf("\t m_map_mesh_to_gamemesh: %d\n", (int)m_map_mesh_to_gamemesh.size());
170 printf("\t m_map_blender_to_gameactuator: %d\n", (int)m_map_blender_to_gameactuator.size());
171 printf("\t m_map_blender_to_gamecontroller: %d\n", (int)m_map_blender_to_gamecontroller.size());
172 printf("\t m_map_blender_to_gameAdtList: %d\n", (int)m_map_blender_to_gameAdtList.size());
174 #ifdef WITH_CXX_GUARDEDALLOC
175 MEM_printmemlist_pydict();
177 // /printf("\t m_ketsjiEngine->m_scenes: %d\n", m_ketsjiEngine->CurrentScenes()->size());
180 /* LibLoad Options */
183 LIB_LOAD_LOAD_ACTIONS = 1,
184 LIB_LOAD_VERBOSE = 2,
190 PyObject *GetPyNamespace();
193 #ifdef WITH_CXX_GUARDEDALLOC
195 void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, "GE:KX_BlenderSceneConverter"); }
196 void operator delete( void *mem ) { MEM_freeN(mem); }
200 #endif //__KX_BLENDERSCENECONVERTER_H