Switch fixed time system. Logic updates should now happen at 30Hz, physics at 60Hz...
[blender.git] / source / gameengine / Ketsji / KX_CameraActuator.h
1 /**
2  * KX_CameraActuator.h
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_CAMERAACTUATOR
36 #define __KX_CAMERAACTUATOR
37
38 #include "SCA_IActuator.h"
39 #include "MT_Scalar.h"
40
41 /**
42  * The camera actuator does a Robbie Muller prespective for you. This is a 
43  * weird set of rules that positions the camera sort of behind the object,
44  * tracking, while avoiding any objects between the 'ideal' position and the
45  * actor being tracked.
46  */
47
48
49 class KX_CameraActuator : public SCA_IActuator
50 {
51         Py_Header;
52 private :
53         /** Object that will be tracked. */
54         const CValue *m_ob;
55
56         /** height (float), */
57         const MT_Scalar m_height;
58         
59         /** min (float), */
60         const MT_Scalar m_minHeight;
61         
62         /** max (float), */
63         const MT_Scalar m_maxHeight;
64         
65         /** xy toggle (pick one): true == x, false == y */
66         bool m_x;
67
68         /* get the KX_IGameObject with this name */
69         CValue *findObject(char *obName);
70
71         /* parse x or y to a toggle pick */
72         bool string2axischoice(const char *axisString);
73         
74  public:
75         static STR_String X_AXIS_STRING;
76         static STR_String Y_AXIS_STRING;
77         
78         /**
79          * Set the bool toggle to true to use x lock, false for y lock
80          */
81         KX_CameraActuator(
82
83                 SCA_IObject *gameobj,
84                 const CValue *ob,
85                 MT_Scalar hght,
86                 MT_Scalar minhght,
87                 MT_Scalar maxhght,
88                 bool xytog,
89                 PyTypeObject* T=&Type
90
91         );
92
93
94         ~KX_CameraActuator();
95
96
97
98         /** Methods Inherited from  CValue */
99         CValue* GetReplica();
100         
101
102         /** Methods inherited from SCA_IActuator */
103         virtual bool Update(
104                 double curtime,
105                 bool frame
106         );
107
108
109         /* --------------------------------------------------------------------- */
110         /* Python interface ---------------------------------------------------- */
111         /* --------------------------------------------------------------------- */
112
113         virtual PyObject* _getattr(const STR_String& attr);
114
115         
116
117 };
118
119 #endif //__KX_CAMERAACTUATOR
120