Initial revision
[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
54 class KX_NormalParentRelation : public SG_ParentRelation
55 {
56
57 public :
58
59         /**
60          * Allocate and construct a new KX_NormalParentRelation
61          * on the heap.
62          */
63
64         static 
65                 KX_NormalParentRelation *
66         New(
67         );              
68
69         /** 
70          * Method inherited from KX_ParentRelation
71          */
72
73                 void
74         UpdateChildCoordinates(
75                 SG_Spatial * child,
76                 const SG_Spatial * parent
77         );
78
79         /** 
80          * Method inherited from KX_ParentRelation
81          */
82         
83                 SG_ParentRelation *
84         NewCopy(
85         );
86
87         ~KX_NormalParentRelation(
88         );
89
90 private :
91
92         KX_NormalParentRelation(
93         );
94
95 };
96
97
98 class KX_VertexParentRelation : public SG_ParentRelation
99 {
100
101 public :
102
103         /**
104          * Allocate and construct a new KX_VertexParentRelation
105          * on the heap.
106          */
107
108         static 
109                 KX_VertexParentRelation *
110         New(
111         );              
112
113         /** 
114          * Method inherited from KX_ParentRelation
115          */
116
117                 void
118         UpdateChildCoordinates(
119                 SG_Spatial * child,
120                 const SG_Spatial * parent
121         );
122
123         /** 
124          * Method inherited from KX_ParentRelation
125          */
126         
127                 SG_ParentRelation *
128         NewCopy(
129         );
130
131         ~KX_VertexParentRelation(
132         );
133
134 private :
135
136         KX_VertexParentRelation(
137         );
138
139 };
140
141
142 class KX_SlowParentRelation : public SG_ParentRelation
143 {
144
145 public :
146
147         /**
148          * Allocate and construct a new KX_VertexParentRelation
149          * on the heap.
150          */
151
152         static 
153                 KX_SlowParentRelation *
154         New(
155                 MT_Scalar relaxation
156         );              
157
158         /** 
159          * Method inherited from KX_ParentRelation
160          */
161
162                 void
163         UpdateChildCoordinates(
164                 SG_Spatial * child,
165                 const SG_Spatial * parent
166         );
167
168         /** 
169          * Method inherited from KX_ParentRelation
170          */
171         
172                 SG_ParentRelation *
173         NewCopy(
174         );
175
176         ~KX_SlowParentRelation(
177         );
178
179 private :
180
181         KX_SlowParentRelation(
182                 MT_Scalar relaxation
183         );
184
185         // the relaxation coefficient.
186
187         MT_Scalar m_relax;
188
189         /**
190          * Looks like a hack flag to me.
191          * We need to compute valid world coordinates the first
192          * time we update spatial data of the child. This is done
193          * by just doing a normal parent relation the first time
194          * UpdateChildCoordinates is called and then doing the
195          * slow parent relation 
196          */
197
198         bool m_initialized;
199
200 };
201
202
203
204
205
206
207
208
209
210
211
212
213
214