ActionActuator in the game engine working again to display deformed meshes with the...
[blender-staging.git] / source / gameengine / Converter / BL_ArmatureObject.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 #ifndef BL_ARMATUREOBJECT
31 #define BL_ARMATUREOBJECT
32
33 #include "KX_GameObject.h"
34
35 #include "SG_IObject.h"
36
37 struct bArmature;
38 struct Bone;
39 class BL_ActionActuator;
40 class MT_Matrix4x4;
41 struct Object;
42
43 class BL_ArmatureObject : public KX_GameObject  
44 {
45 public:
46         double GetLastFrame ();
47         short GetActivePriority();
48         virtual void ProcessReplica();
49         class BL_ActionActuator * GetActiveAction();
50         
51         BL_ArmatureObject(
52                 void* sgReplicationInfo,
53                 SG_Callbacks callbacks,
54                 Object *armature,
55                 Scene *scene
56         );
57         virtual ~BL_ArmatureObject();
58
59         virtual CValue* GetReplica();
60         void GetMRDPose(struct bPose **pose);
61         void GetPose(struct bPose **pose);
62         void SetPose (struct bPose *pose);
63
64         void ApplyPose();
65         void RestorePose();
66
67         bool SetActiveAction(class BL_ActionActuator *act, short priority, double curtime);
68         
69         struct bArmature * GetArmature() { return m_armature; }
70         const struct bArmature * GetArmature() const { return m_armature; }
71         const struct Scene * GetScene() const { return m_scene; }
72         
73         Object* GetArmatureObject() {return m_objArma;}
74
75         /// Retrieve the pose matrix for the specified bone.
76         /// Returns true on success.
77         bool GetBoneMatrix(Bone* bone, MT_Matrix4x4& matrix);
78         
79         /// Returns the bone length.  The end of the bone is in the local y direction.
80         float GetBoneLength(Bone* bone) const;
81
82         virtual int GetGameObjectType() { return OBJ_ARMATURE; }
83 protected:
84         Object                          *m_objArma;
85         struct bArmature        *m_armature;
86         struct bPose            *m_pose;
87         struct bPose            *m_armpose;
88         struct bPose            *m_framePose;
89         struct Scene            *m_scene; // need for where_is_pose 
90         double  m_lastframe;
91         class BL_ActionActuator *m_activeAct;
92         short   m_activePriority;
93
94         double                  m_lastapplyframe;
95 };
96
97 #endif
98