86de3395d1e5a0ed11b6534f1e3cdbf6268f8d64
[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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, 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
38 class KX_SceneActuator : public SCA_IActuator
39 {
40         Py_Header;
41         
42         int                                                     m_mode;
43         // (restart) has become a toggle internally... not in the interface though
44         bool                                            m_restart;
45         // (set Scene) Scene
46         /** The current scene. */
47         class   KX_Scene*                       m_scene;
48         class   KX_KetsjiEngine*        m_KetsjiEngine;
49         /** The scene to switch to. */
50         STR_String                                      m_nextSceneName;
51         
52         // (Set Camera) Object
53         class KX_Camera*                        m_camera;
54
55         /** Is this a valid scene? */
56         class KX_Scene* FindScene(char* sceneName);
57         /** Is this a valid camera? */
58         class KX_Camera* FindCamera(char* cameraName);
59         
60  public:
61         enum SCA_SceneActuatorMode
62         {
63                 KX_SCENE_NODEF = 0,
64                 KX_SCENE_RESTART,
65                 KX_SCENE_SET_SCENE,
66                 KX_SCENE_SET_CAMERA,
67                 KX_SCENE_ADD_FRONT_SCENE,
68                 KX_SCENE_ADD_BACK_SCENE,
69                 KX_SCENE_REMOVE_SCENE,
70                 KX_SCENE_SUSPEND,
71                 KX_SCENE_RESUME,
72                 KX_SCENE_MAX
73         };
74         
75         KX_SceneActuator(SCA_IObject* gameobj,
76                                          int mode,
77                                          KX_Scene* scene,
78                                          KX_KetsjiEngine* ketsjiEngine,
79                                          const STR_String& nextSceneName,
80                                          KX_Camera* camera);
81         virtual ~KX_SceneActuator();
82
83         virtual CValue* GetReplica();
84         virtual void ProcessReplica();
85         virtual bool UnlinkObject(SCA_IObject* clientobj);
86         virtual void Relink(GEN_Map<GEN_HashedPtr, void*> *obj_map);
87
88         virtual bool Update();
89         
90         /* --------------------------------------------------------------------- */
91         /* Python interface ---------------------------------------------------- */
92         /* --------------------------------------------------------------------- */
93
94         /* 1. set                                                                */
95         /* Removed */
96           
97         /* 2. setUseRestart:                                                     */
98         KX_PYMETHOD_DOC_VARARGS(KX_SceneActuator,SetUseRestart);
99         /* 3. getUseRestart:                                                     */
100         KX_PYMETHOD_DOC_NOARGS(KX_SceneActuator,GetUseRestart);
101         /* 4. setScene:                                                          */
102         KX_PYMETHOD_DOC_VARARGS(KX_SceneActuator,SetScene);
103         /* 5. getScene:                                                          */
104         KX_PYMETHOD_DOC_NOARGS(KX_SceneActuator,GetScene);
105         /* 6. setCamera:                                                          */
106         KX_PYMETHOD_DOC_O(KX_SceneActuator,SetCamera);
107         /* 7. getCamera:                                                          */
108         KX_PYMETHOD_DOC_NOARGS(KX_SceneActuator,GetCamera);
109         
110         static PyObject* pyattr_get_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
111         static int pyattr_set_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
112
113 }; /* end of class KXSceneActuator */
114
115 #endif
116