merging trunk 15964 -> 16116
[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         /// Apply the velocity locally 
65         bool m_localFlag;
66         
67         SCA_IObject*    m_lastCreatedObject;
68         
69 public:
70
71         /** 
72          * This class also has the default constructors
73          * available. Use with care!
74          */
75
76         KX_SCA_AddObjectActuator(
77                 SCA_IObject *gameobj,
78                 SCA_IObject *original,
79                 int time,
80                 SCA_IScene* scene,
81                 const MT_Vector3& linvel,
82                 bool local,
83                 PyTypeObject* T=&Type
84         );
85
86         ~KX_SCA_AddObjectActuator(void);
87
88                 CValue* 
89         GetReplica(
90         ) ;
91
92         virtual void 
93         ProcessReplica();
94
95         virtual bool 
96         UnlinkObject(SCA_IObject* clientobj);
97
98         virtual void 
99         Relink(GEN_Map<GEN_HashedPtr, void*> *obj_map);
100
101         virtual bool 
102         Update();
103
104         virtual PyObject*  
105         _getattr(
106                 const STR_String& attr
107         );
108
109                 SCA_IObject*    
110         GetLastCreatedObject(
111         ) const ;
112
113         void    InstantAddObject();
114
115         /* 1. setObject */
116         KX_PYMETHOD_DOC_O(KX_SCA_AddObjectActuator,SetObject);
117         /* 2. setTime */
118         KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,SetTime);
119         /* 3. getTime */
120         KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,GetTime);
121         /* 4. getObject */
122         KX_PYMETHOD_DOC_VARARGS(KX_SCA_AddObjectActuator,GetObject);
123         /* 5. getLinearVelocity */
124         KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,GetLinearVelocity);
125         /* 6. setLinearVelocity */
126         KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,SetLinearVelocity);
127         /* 7. getLastCreatedObject */
128         KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,GetLastCreatedObject);
129         /* 8. instantAddObject*/
130         KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,InstantAddObject);
131
132         
133 }; /* end of class KX_SCA_AddObjectActuator : public KX_EditObjectActuator */
134
135 #endif
136