Get rid of c++ in blenkernel and modifiers
[blender.git] / source / gameengine / Converter / BL_ShapeActionActuator.h
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 /** \file BL_ShapeActionActuator.h
31  *  \ingroup bgeconv
32  */
33
34 #ifndef BL_SHAPEACTIONACTUATOR
35 #define BL_SHAPEACTIONACTUATOR
36
37 #include "CTR_HashedPtr.h"
38 #include "SCA_IActuator.h"
39 #include "BL_ActionActuator.h"
40 #include "MT_Point3.h"
41 #include <vector>
42
43 struct Key;
44 class BL_ShapeActionActuator : public SCA_IActuator  
45 {
46 public:
47         Py_Header;
48         BL_ShapeActionActuator(SCA_IObject* gameobj,
49                                                 const STR_String& propname,
50                                                 const STR_String& framepropname,
51                                                 float starttime,
52                                                 float endtime,
53                                                 struct bAction *action,
54                                                 short   playtype,
55                                                 short   blendin,
56                                                 short   priority,
57                                                 float   stride);
58         virtual ~BL_ShapeActionActuator();
59         virtual bool Update(double curtime, bool frame);
60         virtual CValue* GetReplica();
61         virtual void ProcessReplica();
62         
63         void SetBlendTime (float newtime);
64         void BlendShape(struct Key* key, float weigth);
65         
66         bAction*        GetAction() { return m_action; }
67         void            SetAction(bAction* act) { m_action= act; }
68
69 #ifdef WITH_PYTHON
70
71         static PyObject*        pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
72         static int                      pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
73
74         static int CheckBlendTime(void *self, const PyAttributeDef*)
75         {
76                 BL_ShapeActionActuator* act = reinterpret_cast<BL_ShapeActionActuator*>(self);
77
78                 if (act->m_blendframe > act->m_blendin)
79                         act->m_blendframe = act->m_blendin;
80
81                 return 0;
82         }
83         static int CheckFrame(void *self, const PyAttributeDef*)
84         {
85                 BL_ShapeActionActuator* act = reinterpret_cast<BL_ShapeActionActuator*>(self);
86
87                 if (act->m_localtime < act->m_startframe)
88                         act->m_localtime = act->m_startframe;
89                 else if (act->m_localtime > act->m_endframe)
90                         act->m_localtime = act->m_endframe;
91
92                 return 0;
93         }
94         static int CheckType(void *self, const PyAttributeDef*)
95         {
96                 BL_ShapeActionActuator* act = reinterpret_cast<BL_ShapeActionActuator*>(self);
97
98                 switch (act->m_playtype) {
99                         case ACT_ACTION_PLAY:
100                         case ACT_ACTION_PINGPONG:
101                         case ACT_ACTION_FLIPPER:
102                         case ACT_ACTION_LOOP_STOP:
103                         case ACT_ACTION_LOOP_END:
104                         case ACT_ACTION_FROM_PROP:
105                                 return 0;
106                         default:
107                                 PyErr_SetString(PyExc_ValueError, "Shape Action Actuator, invalid play type supplied");
108                                 return 1;
109                 }
110
111         }
112
113 #endif // WITH_PYTHON
114
115 protected:
116
117         void SetStartTime(float curtime);
118         void SetLocalTime(float curtime);
119         bool ClampLocalTime();
120
121         MT_Point3       m_lastpos;
122         float   m_blendframe;
123         int             m_flag;
124         /** The frame this action starts */
125         float   m_startframe;
126         /** The frame this action ends */
127         float   m_endframe;
128         /** The time this action started */
129         float   m_starttime;
130         /** The current time of the action */
131         float   m_localtime;
132         
133         float   m_lastUpdate;
134         float   m_blendin;
135         float   m_blendstart;
136         float   m_stridelength;
137         short   m_playtype;
138         short   m_priority;
139         struct bAction *m_action;
140         STR_String      m_framepropname;
141         STR_String      m_propname;
142         vector<float> m_blendshape;
143         struct PointerRNA *m_idptr;
144 };
145
146 #endif
147