Filling in branch from trunk
[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 #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         CValue *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         MT_Scalar m_height;
66         
67         /** min (float), */
68         MT_Scalar m_minHeight;
69         
70         /** max (float), */
71         MT_Scalar m_maxHeight;
72         
73         /** xy toggle (pick one): true == x, false == y */
74         bool m_x;
75
76         /* get the KX_IGameObject with this name */
77         CValue *findObject(char *obName);
78
79         /* parse x or y to a toggle pick */
80         bool string2axischoice(const char *axisString);
81         
82  public:
83         static STR_String X_AXIS_STRING;
84         static STR_String Y_AXIS_STRING;
85         
86         /**
87          * Set the bool toggle to true to use x lock, false for y lock
88          */
89         KX_CameraActuator(
90
91                 SCA_IObject *gameobj,
92                 //const CValue *ob,
93                 CValue *ob,
94                 MT_Scalar hght,
95                 MT_Scalar minhght,
96                 MT_Scalar maxhght,
97                 bool xytog,
98                 PyTypeObject* T=&Type
99
100         );
101
102
103         ~KX_CameraActuator();
104
105
106
107         /** Methods Inherited from  CValue */
108         CValue* GetReplica();
109         
110
111         /** Methods inherited from SCA_IActuator */
112         virtual bool Update(
113                 double curtime,
114                 bool frame
115         );
116
117
118         /* --------------------------------------------------------------------- */
119         /* Python interface ---------------------------------------------------- */
120         /* --------------------------------------------------------------------- */
121
122         virtual PyObject* _getattr(const STR_String& attr);
123         
124         /* set object to look at */
125         KX_PYMETHOD_DOC(KX_CameraActuator,SetObject);
126         /* get current object  */
127         KX_PYMETHOD_DOC(KX_CameraActuator,GetObject);
128         KX_PYMETHOD_DOC(KX_CameraActuator,SetMin);
129         KX_PYMETHOD_DOC(KX_CameraActuator,GetMin);
130         KX_PYMETHOD_DOC(KX_CameraActuator,SetMax);
131         KX_PYMETHOD_DOC(KX_CameraActuator,GetMax);
132         KX_PYMETHOD_DOC(KX_CameraActuator,SetHeight);
133         KX_PYMETHOD_DOC(KX_CameraActuator,GetHeight);
134         KX_PYMETHOD_DOC(KX_CameraActuator,SetXY);
135         KX_PYMETHOD_DOC(KX_CameraActuator,GetXY);
136
137 };
138
139 #endif //__KX_CAMERAACTUATOR
140