Merge from trunk
[blender.git] / source / gameengine / Ketsji / KX_SCA_AddObjectActuator.h
1 //
2 // Add object to the game world on action of this actuator. A copy is made
3 // of a referenced object. The copy inherits some properties from the owner
4 // of this actuator.
5 //
6 // $Id$
7 //
8 // ***** BEGIN GPL LICENSE BLOCK *****
9 //
10 // This program is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU General Public License
12 // as published by the Free Software Foundation; either version 2
13 // of the License, or (at your option) any later version.
14 //
15 // This program is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 // GNU General Public License for more details.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with this program; if not, write to the Free Software Foundation,
22 // Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23 //
24 // The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
25 // All rights reserved.
26 //
27 // The Original Code is: all of this file.
28 //
29 // Contributor(s): none yet.
30 //
31 // ***** END GPL LICENSE BLOCK *****
32 //
33 // Previously existed as:
34 // \source\gameengine\GameLogic\SCA_AddObjectActuator.h
35 // Please look here for revision history.
36
37 #ifndef __KX_SCA_AddObjectActuator
38 #define __KX_SCA_AddObjectActuator
39
40 /* Actuator tree */
41 #include "SCA_IActuator.h"
42 #include "SCA_LogicManager.h"
43
44 #include "MT_Vector3.h"
45
46 class SCA_IScene;
47
48 class KX_SCA_AddObjectActuator : public SCA_IActuator
49 {
50         Py_Header;
51
52         /// Time field: lifetime of the new object
53         int     m_timeProp;
54
55         /// Original object reference (object to replicate)     
56         SCA_IObject*    m_OriginalObject;
57
58         /// Object will be added to the following scene
59         SCA_IScene*     m_scene;
60
61         /// Linear velocity upon creation of the object. 
62         MT_Vector3  m_linear_velocity;
63         
64         /// Angular velocity upon creation of the object. 
65         MT_Vector3  m_angular_velocity;
66
67         /// Apply the velocity locally 
68         bool m_localLinvFlag;
69         bool m_localAngvFlag;
70         
71         SCA_IObject*    m_lastCreatedObject;
72         
73 public:
74
75         /** 
76          * This class also has the default constructors
77          * available. Use with care!
78          */
79
80         KX_SCA_AddObjectActuator(
81                 SCA_IObject *gameobj,
82                 SCA_IObject *original,
83                 int time,
84                 SCA_IScene* scene,
85                 const MT_Vector3& linvel,
86                 bool linv_local,
87                 const MT_Vector3& angvel,
88                 bool angv_local,
89                 PyTypeObject* T=&Type
90         );
91
92         ~KX_SCA_AddObjectActuator(void);
93
94                 CValue* 
95         GetReplica(
96         ) ;
97
98         virtual void 
99         ProcessReplica();
100
101         virtual bool 
102         UnlinkObject(SCA_IObject* clientobj);
103
104         virtual void 
105         Relink(GEN_Map<GEN_HashedPtr, void*> *obj_map);
106
107         virtual bool 
108         Update();
109
110         virtual PyObject*  
111         _getattr(
112                 const STR_String& attr
113         );
114
115                 SCA_IObject*    
116         GetLastCreatedObject(
117         ) const ;
118
119         void    InstantAddObject();
120
121         /* 1. setObject */
122         KX_PYMETHOD_DOC_O(KX_SCA_AddObjectActuator,SetObject);
123         /* 2. setTime */
124         KX_PYMETHOD_DOC_O(KX_SCA_AddObjectActuator,SetTime);
125         /* 3. getTime */
126         KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,GetTime);
127         /* 4. getObject */
128         KX_PYMETHOD_DOC_VARARGS(KX_SCA_AddObjectActuator,GetObject);
129         /* 5. getLinearVelocity */
130         KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,GetLinearVelocity);
131         /* 6. setLinearVelocity */
132         KX_PYMETHOD_DOC_VARARGS(KX_SCA_AddObjectActuator,SetLinearVelocity);
133         /* 7. getAngularVelocity */
134         KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,GetAngularVelocity);
135         /* 8. setAngularVelocity */
136         KX_PYMETHOD_DOC_VARARGS(KX_SCA_AddObjectActuator,SetAngularVelocity);
137         /* 9. getLastCreatedObject */
138         KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,GetLastCreatedObject);
139         /* 10. instantAddObject*/
140         KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,InstantAddObject);
141
142         
143 }; /* end of class KX_SCA_AddObjectActuator : public KX_EditObjectActuator */
144
145 #endif
146