Did all of the .h's in source
[blender.git] / source / gameengine / Ketsji / KX_SG_NodeRelationships.h
1 /**
2  * @mainpage KX_SG_NodeRelationships   
3
4  * @section 
5  *
6  * This file provides common concrete implementations of 
7  * SG_ParentRelation used by the game engine. These are
8  * KX_SlowParentRelation a slow parent relationship.
9  * KX_NormalParentRelation a normal parent relationship where 
10  * orientation and position are inherited from the parent by
11  * the child.
12  * KX_VertexParentRelation only location information is 
13  * inherited by the child. 
14  *
15  * @see SG_ParentRelation for more information about this 
16  * interface      
17  *
18  * $Id$
19  *
20  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
21  *
22  * This program is free software; you can redistribute it and/or
23  * modify it under the terms of the GNU General Public License
24  * as published by the Free Software Foundation; either version 2
25  * of the License, or (at your option) any later version. The Blender
26  * Foundation also sells licenses for use in proprietary software under
27  * the Blender License.  See http://www.blender.org/BL/ for information
28  * about this.
29  *
30  * This program is distributed in the hope that it will be useful,
31  * but WITHOUT ANY WARRANTY; without even the implied warranty of
32  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
33  * GNU General Public License for more details.
34  *
35  * You should have received a copy of the GNU General Public License
36  * along with this program; if not, write to the Free Software Foundation,
37  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
38  *
39  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
40  * All rights reserved.
41  *
42  * The Original Code is: all of this file.
43  *
44  * Contributor(s): none yet.
45  *
46  * ***** END GPL/BL DUAL LICENSE BLOCK *****
47  * 
48  */
49
50 #include "SG_Spatial.h"
51 #include "SG_ParentRelation.h"
52
53 #ifdef HAVE_CONFIG_H
54 #include <config.h>
55 #endif
56
57 class KX_NormalParentRelation : public SG_ParentRelation
58 {
59
60 public :
61
62         /**
63          * Allocate and construct a new KX_NormalParentRelation
64          * on the heap.
65          */
66
67         static 
68                 KX_NormalParentRelation *
69         New(
70         );              
71
72         /** 
73          * Method inherited from KX_ParentRelation
74          */
75
76                 void
77         UpdateChildCoordinates(
78                 SG_Spatial * child,
79                 const SG_Spatial * parent
80         );
81
82         /** 
83          * Method inherited from KX_ParentRelation
84          */
85         
86                 SG_ParentRelation *
87         NewCopy(
88         );
89
90         ~KX_NormalParentRelation(
91         );
92
93 private :
94
95         KX_NormalParentRelation(
96         );
97
98 };
99
100
101 class KX_VertexParentRelation : public SG_ParentRelation
102 {
103
104 public :
105
106         /**
107          * Allocate and construct a new KX_VertexParentRelation
108          * on the heap.
109          */
110
111         static 
112                 KX_VertexParentRelation *
113         New(
114         );              
115
116         /** 
117          * Method inherited from KX_ParentRelation
118          */
119
120                 void
121         UpdateChildCoordinates(
122                 SG_Spatial * child,
123                 const SG_Spatial * parent
124         );
125
126         /** 
127          * Method inherited from KX_ParentRelation
128          */
129         
130                 SG_ParentRelation *
131         NewCopy(
132         );
133
134         ~KX_VertexParentRelation(
135         );
136
137 private :
138
139         KX_VertexParentRelation(
140         );
141
142 };
143
144
145 class KX_SlowParentRelation : public SG_ParentRelation
146 {
147
148 public :
149
150         /**
151          * Allocate and construct a new KX_VertexParentRelation
152          * on the heap.
153          */
154
155         static 
156                 KX_SlowParentRelation *
157         New(
158                 MT_Scalar relaxation
159         );              
160
161         /** 
162          * Method inherited from KX_ParentRelation
163          */
164
165                 void
166         UpdateChildCoordinates(
167                 SG_Spatial * child,
168                 const SG_Spatial * parent
169         );
170
171         /** 
172          * Method inherited from KX_ParentRelation
173          */
174         
175                 SG_ParentRelation *
176         NewCopy(
177         );
178
179         ~KX_SlowParentRelation(
180         );
181
182 private :
183
184         KX_SlowParentRelation(
185                 MT_Scalar relaxation
186         );
187
188         // the relaxation coefficient.
189
190         MT_Scalar m_relax;
191
192         /**
193          * Looks like a hack flag to me.
194          * We need to compute valid world coordinates the first
195          * time we update spatial data of the child. This is done
196          * by just doing a normal parent relation the first time
197          * UpdateChildCoordinates is called and then doing the
198          * slow parent relation 
199          */
200
201         bool m_initialized;
202
203 };
204