Merging r48257 through r48263 from trunk into soc-2011-tomato
[blender.git] / source / gameengine / SceneGraph / SG_Controller.h
1 /*
2  * Implementationclass to derive controllers from
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 SG_Controller.h
32  *  \ingroup bgesg
33  */
34  
35 #ifndef __SG_CONTROLLER_H__
36 #define __SG_CONTROLLER_H__
37
38 #include "SG_IObject.h"
39
40 /**
41  * A scenegraph controller
42  */
43 class SG_Controller 
44 {
45 public:
46         SG_Controller(
47         ) :
48                 m_pObject(NULL) {
49         }
50
51         virtual 
52         ~SG_Controller(
53         ) {};
54
55         virtual 
56                 bool    
57         Update(
58                 double time
59         )=0;
60
61         virtual 
62                 void 
63         SetObject (
64                 SG_IObject* object
65         );
66
67                 void
68         ClearObject(
69         );
70
71         virtual 
72                 void    
73         SetSimulatedTime(
74                 double time
75         )=0;
76
77         virtual 
78                 SG_Controller*  
79         GetReplica(
80                 class SG_Node* destnode
81         )=0;
82
83         /**
84          * Hacky way of passing options to specific controllers
85          * \param option An integer identifying the option.
86          * \param value  The value of this option.
87          * \attention This has been placed here to give sca-elements 
88          * \attention some control over the controllers. This is 
89          * \attention necessary because the identity of the controller
90          * \attention is lost on the way here.
91          */
92         virtual
93                 void
94         SetOption(
95                 int option,
96                 int value
97         )=0;
98
99         /**
100          * Option-identifiers: SG_CONTR_<controller-type>_<option>. 
101          * Options only apply to a specific controller type. The 
102          * semantics are defined by whoever uses the setting.
103          */
104         enum SG_Controller_option {
105                 SG_CONTR_NODEF = 0,
106                 SG_CONTR_IPO_IPO_AS_FORCE,
107                 SG_CONTR_IPO_IPO_ADD,
108                 SG_CONTR_IPO_LOCAL,
109                 SG_CONTR_IPO_RESET,
110                 SG_CONTR_CAMIPO_LENS,
111                 SG_CONTR_CAMIPO_CLIPEND,
112                 SG_CONTR_CAMIPO_CLIPSTART,
113                 SG_CONTR_MAX
114         };
115
116 protected:
117         SG_IObject*             m_pObject;
118
119 #ifdef WITH_CXX_GUARDEDALLOC
120         MEM_CXX_CLASS_ALLOC_FUNCS("GE:SG_Controller")
121 #endif
122 };
123
124 #endif //__SG_CONTROLLER_H__
125