rename and negate DISABLE_PYTHON --> WITH_PYTHON
[blender.git] / source / gameengine / Ketsji / KX_SceneActuator.h
1  
2 //
3 // Add object to the game world on action of this actuator
4 //
5 // $Id$
6 //
7 // ***** BEGIN GPL LICENSE BLOCK *****
8 //
9 // This program is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU General Public License
11 // as published by the Free Software Foundation; either version 2
12 // of the License, or (at your option) any later version.
13 //
14 // This program is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 // GNU General Public License for more details.
18 //
19 // You should have received a copy of the GNU General Public License
20 // along with this program; if not, write to the Free Software Foundation,
21 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 //
23 // The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24 // All rights reserved.
25 //
26 // The Original Code is: all of this file.
27 //
28 // Contributor(s): none yet.
29 //
30 // ***** END GPL LICENSE BLOCK *****
31 //
32
33 #ifndef __KX_SCENEACTUATOR
34 #define __KX_SCENEACTUATOR
35
36 #include "SCA_IActuator.h"
37 #include "SCA_IScene.h" /* Replace_IScene only */
38 #include "KX_Scene.h" /* Replace_IScene only */
39
40 class KX_SceneActuator : public SCA_IActuator
41 {
42         Py_Header;
43         
44         int                                                     m_mode;
45         // (restart) has become a toggle internally... not in the interface though
46         bool                                            m_restart;
47         // (set Scene) Scene
48         /** The current scene. */
49         class   KX_Scene*                       m_scene;
50         class   KX_KetsjiEngine*        m_KetsjiEngine;
51         /** The scene to switch to. */
52         STR_String                                      m_nextSceneName;
53         
54         // (Set Camera) Object
55         class KX_Camera*                        m_camera;
56
57         /** Is this a valid scene? */
58         class KX_Scene* FindScene(char* sceneName);
59         /** Is this a valid camera? */
60         class KX_Camera* FindCamera(char* cameraName);
61         
62  public:
63         enum SCA_SceneActuatorMode
64         {
65                 KX_SCENE_NODEF = 0,
66                 KX_SCENE_RESTART,
67                 KX_SCENE_SET_SCENE,
68                 KX_SCENE_SET_CAMERA,
69                 KX_SCENE_ADD_FRONT_SCENE,
70                 KX_SCENE_ADD_BACK_SCENE,
71                 KX_SCENE_REMOVE_SCENE,
72                 KX_SCENE_SUSPEND,
73                 KX_SCENE_RESUME,
74                 KX_SCENE_MAX
75         };
76         
77         KX_SceneActuator(SCA_IObject* gameobj,
78                                          int mode,
79                                          KX_Scene* scene,
80                                          KX_KetsjiEngine* ketsjiEngine,
81                                          const STR_String& nextSceneName,
82                                          KX_Camera* camera);
83         virtual ~KX_SceneActuator();
84
85         virtual CValue* GetReplica();
86         virtual void ProcessReplica();
87         virtual bool UnlinkObject(SCA_IObject* clientobj);
88         virtual void Relink(GEN_Map<GEN_HashedPtr, void*> *obj_map);
89
90         virtual bool Update();
91         
92 #ifdef WITH_PYTHON
93
94         virtual void Replace_IScene(SCA_IScene *val)
95         {
96                 m_scene= static_cast<KX_Scene *>(val);
97         };
98
99         /* --------------------------------------------------------------------- */
100         /* Python interface ---------------------------------------------------- */
101         /* --------------------------------------------------------------------- */
102         
103         static PyObject* pyattr_get_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
104         static int pyattr_set_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
105
106 #endif // WITH_PYTHON
107
108 }; /* end of class KXSceneActuator */
109
110 #endif
111