- assigning vectors in the BGE wasn't updating the vector from the callback
[blender.git] / source / gameengine / Ketsji / KX_SG_BoneParentNodeRelationship.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  * interface      
16  *
17  * $Id$
18  *
19  * ***** BEGIN GPL LICENSE BLOCK *****
20  *
21  * This program is free software; you can redistribute it and/or
22  * modify it under the terms of the GNU General Public License
23  * as published by the Free Software Foundation; either version 2
24  * of the License, or (at your option) any later version.
25  *
26  * This program is distributed in the hope that it will be useful,
27  * but WITHOUT ANY WARRANTY; without even the implied warranty of
28  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
29  * GNU General Public License for more details.
30  *
31  * You should have received a copy of the GNU General Public License
32  * along with this program; if not, write to the Free Software Foundation,
33  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
34  *
35  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
36  * All rights reserved.
37  *
38  * The Original Code is: all of this file.
39  *
40  * Contributor(s): none yet.
41  *
42  * ***** END GPL LICENSE BLOCK *****
43  * 
44  */
45
46 #ifndef __KX_SG_BONEPARENTRELATION_H__
47 #define __KX_SG_BONEPARENTRELATION_H__
48  
49 #include "SG_Spatial.h"
50 #include "SG_ParentRelation.h"
51
52 struct Bone;
53
54 /**
55  *  Bone parent relationship parents a child SG_Spatial frame to a 
56  *  bone in an armature object.
57  */
58 class KX_BoneParentRelation : public SG_ParentRelation
59 {
60
61 public :
62         /**
63          * Allocate and construct a new KX_SG_BoneParentRelation
64          * on the heap.
65          *
66          * bone is the bone id to use.  Currently it is a pointer
67          * to a Blender struct Bone - this should be fixed if
68          */
69
70         static 
71                 KX_BoneParentRelation *
72         New(Bone* bone
73         );              
74
75         /**
76          *  Updates the childs world coordinates relative to the parent's
77          *  world coordinates.
78          *
79          *  Parent should be a BL_ArmatureObject.
80          */
81                 bool
82         UpdateChildCoordinates(
83                 SG_Spatial * child,
84                 const SG_Spatial * parent,
85                 bool& parentUpdated
86         );
87
88         /**
89          *  Create a copy of this relationship
90          */
91                 SG_ParentRelation *
92         NewCopy(
93         );
94
95         ~KX_BoneParentRelation(
96         );
97
98 private :
99         Bone* m_bone;
100         KX_BoneParentRelation(Bone* bone
101         );
102
103
104 #ifdef WITH_CXX_GUARDEDALLOC
105 public:
106         void *operator new( unsigned int num_bytes) { return MEM_mallocN(num_bytes, "GE:KX_BoneParentRelation"); }
107         void operator delete( void *mem ) { MEM_freeN(mem); }
108 #endif
109 };
110
111 #endif