use const for readonly strings and set some functions to static
[blender.git] / source / gameengine / Ketsji / KX_CameraActuator.h
1 /*
2  * KX_CameraActuator.h
3  *
4  *
5  * ***** BEGIN GPL LICENSE BLOCK *****
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
22  * All rights reserved.
23  *
24  * The Original Code is: all of this file.
25  *
26  * Contributor(s): none yet.
27  *
28  * ***** END GPL LICENSE BLOCK *****
29  */
30
31 /** \file KX_CameraActuator.h
32  *  \ingroup ketsji
33  */
34
35 #ifndef __KX_CAMERAACTUATOR
36 #define __KX_CAMERAACTUATOR
37
38 #include "SCA_IActuator.h"
39 #include "MT_Scalar.h"
40 #include "SCA_LogicManager.h"
41
42 /**
43  * The camera actuator does a Robbie Muller prespective for you. This is a 
44  * weird set of rules that positions the camera sort of behind the object,
45  * tracking, while avoiding any objects between the 'ideal' position and the
46  * actor being tracked.
47  */
48
49
50 class KX_CameraActuator : public SCA_IActuator
51 {
52         Py_Header;
53 private :
54         /** Object that will be tracked. */
55         SCA_IObject *m_ob;
56
57         /** height (float), */
58         //const MT_Scalar m_height;
59         /** min (float), */
60         //const MT_Scalar m_minHeight;
61         /** max (float), */
62         //const MT_Scalar m_maxHeight;
63         
64         /** height (float), */
65         float m_height;
66         
67         /** min (float), */
68         float m_minHeight;
69         
70         /** max (float), */
71         float m_maxHeight;
72         
73         /** xy toggle (pick one): true == x, false == y */
74         bool m_x;
75         
76         /** damping (float), */
77         float m_damping;
78
79         /* get the KX_IGameObject with this name */
80         CValue *findObject(const char *obName);
81
82         /* parse x or y to a toggle pick */
83         bool string2axischoice(const char *axisString);
84         
85  public:
86         static STR_String X_AXIS_STRING;
87         static STR_String Y_AXIS_STRING;
88         
89         /**
90          * Set the bool toggle to true to use x lock, false for y lock
91          */
92         KX_CameraActuator(
93
94                 SCA_IObject *gameobj,
95                 //const CValue *ob,
96                 SCA_IObject *ob,
97                 float hght,
98                 float minhght,
99                 float maxhght,
100                 bool xytog,
101                 float damping
102         );
103
104
105         ~KX_CameraActuator();
106
107
108
109         /** Methods Inherited from  CValue */
110         CValue* GetReplica();
111         virtual void ProcessReplica();
112         
113
114         /** Methods inherited from SCA_IActuator */
115         virtual bool Update(
116                 double curtime,
117                 bool frame
118         );
119         virtual bool    UnlinkObject(SCA_IObject* clientobj);
120
121         /** Methods inherited from SCA_ILogicBrick */
122         virtual void    Relink(CTR_Map<CTR_HashedPtr, void*> *obj_map);
123
124 #ifdef WITH_PYTHON
125
126         /* --------------------------------------------------------------------- */
127         /* Python interface ---------------------------------------------------- */
128         /* --------------------------------------------------------------------- */
129
130         /* set object to look at */
131         static PyObject*        pyattr_get_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
132         static int                      pyattr_set_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
133
134 #endif // WITH_PYTHON
135
136 };
137
138 #endif //__KX_CAMERAACTUATOR
139