Initial revision
[blender.git] / source / gameengine / Ketsji / KX_IpoActuator.h
1 /**
2  * Do an object ipo
3  *
4  * $Id$
5  *
6  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version. The Blender
12  * Foundation also sells licenses for use in proprietary software under
13  * the Blender License.  See http://www.blender.org/BL/ for information
14  * about this.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  *
25  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
26  * All rights reserved.
27  *
28  * The Original Code is: all of this file.
29  *
30  * Contributor(s): none yet.
31  *
32  * ***** END GPL/BL DUAL LICENSE BLOCK *****
33  */
34
35 #ifndef __KX_IPOACTUATOR
36 #define __KX_IPOACTUATOR
37
38 #include "SCA_IActuator.h"
39
40 class KX_IpoActuator : public SCA_IActuator
41 {
42         Py_Header;
43
44         bool    m_bNegativeEvent;
45
46         /** Begin frame of the ipo. */
47         float   m_starttime;
48         
49         /** End frame of the ipo. */
50         float   m_endtime;
51
52         /** Include children in the transforms? */
53         bool    m_recurse;
54
55         /** Current active frame of the ipo. */
56         float   m_localtime;
57
58         /** play backwards or forwards? (positive means forward). */
59         float   m_direction;
60
61         /** Name of the property (only used in from_prop mode). */
62         STR_String      m_propname;
63
64         /** Interpret the ipo as a force? */
65         bool    m_ipo_as_force;
66         
67         /** Apply a force-ipo locally? */
68         bool    m_force_ipo_local;
69
70 public:
71         enum IpoActType
72         {
73                 KX_ACT_IPO_NODEF = 0,
74                 KX_ACT_IPO_PLAY,
75                 KX_ACT_IPO_PINGPONG,
76                 KX_ACT_IPO_FLIPPER,
77                 KX_ACT_IPO_LOOPSTOP,
78                 KX_ACT_IPO_LOOPEND,
79                 KX_ACT_IPO_KEY2KEY,
80                 KX_ACT_IPO_FROM_PROP,
81                 KX_ACT_IPO_MAX
82         };
83
84         static STR_String S_KX_ACT_IPO_PLAY_STRING;
85         static STR_String S_KX_ACT_IPO_PINGPONG_STRING;
86         static STR_String S_KX_ACT_IPO_FLIPPER_STRING;
87         static STR_String S_KX_ACT_IPO_LOOPSTOP_STRING;
88         static STR_String S_KX_ACT_IPO_LOOPEND_STRING;
89         static STR_String S_KX_ACT_IPO_KEY2KEY_STRING;
90         static STR_String S_KX_ACT_IPO_FROM_PROP_STRING;
91
92         IpoActType string2mode(char* modename);
93         
94         IpoActType      m_type;
95
96         KX_IpoActuator(SCA_IObject* gameobj,
97                                    const STR_String& propname,
98                                    float starttime,
99                                    float endtime,
100                                    bool recurse,
101                                    int acttype,
102                                    bool ipo_as_force, 
103                                    bool force_ipo_local, 
104                                    PyTypeObject* T=&Type);
105         virtual ~KX_IpoActuator() {};
106
107         virtual CValue* GetReplica() {
108                 KX_IpoActuator* replica = new KX_IpoActuator(*this);//m_float,GetName());
109                 replica->ProcessReplica();
110                 // this will copy properties and so on...
111                 CValue::AddDataToReplica(replica);
112                 return replica;
113         };
114
115         void            SetStart(float starttime);
116         void            SetEnd(float endtime);
117         virtual         bool Update(double curtime,double deltatime);
118
119         /* --------------------------------------------------------------------- */
120         /* Python interface ---------------------------------------------------- */
121         /* --------------------------------------------------------------------- */
122
123         virtual PyObject*  _getattr(char *attr);
124         //KX_PYMETHOD_DOC
125         KX_PYMETHOD_DOC(KX_IpoActuator,Set);
126         KX_PYMETHOD_DOC(KX_IpoActuator,SetProperty);
127 /*      KX_PYMETHOD_DOC(KX_IpoActuator,SetKey2Key); */
128         KX_PYMETHOD_DOC(KX_IpoActuator,SetStart);
129         KX_PYMETHOD_DOC(KX_IpoActuator,GetStart);
130         KX_PYMETHOD_DOC(KX_IpoActuator,SetEnd);
131         KX_PYMETHOD_DOC(KX_IpoActuator,GetEnd);
132         KX_PYMETHOD_DOC(KX_IpoActuator,SetIpoAsForce);
133         KX_PYMETHOD_DOC(KX_IpoActuator,GetIpoAsForce);
134         KX_PYMETHOD_DOC(KX_IpoActuator,SetType);
135         KX_PYMETHOD_DOC(KX_IpoActuator,GetType);
136         KX_PYMETHOD_DOC(KX_IpoActuator,SetForceIpoActsLocal);
137         KX_PYMETHOD_DOC(KX_IpoActuator,GetForceIpoActsLocal);
138         
139 };
140
141 #endif //__KX_IPOACTUATOR