Reverted incorrect merge (missing files)
[blender.git] / source / gameengine / Physics / Sumo / Fuzzics / include / SM_MotionState.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 #ifndef SM_MOTIONSTATE_H
30 #define SM_MOTIONSTATE_H
31
32 #include "MT_Transform.h"
33
34 class SM_MotionState {
35 public:
36         SM_MotionState() :
37                 m_time(0.0),
38                 m_pos(0.0, 0.0, 0.0),
39                 m_orn(0.0, 0.0, 0.0, 1.0),
40                 m_lin_vel(0.0, 0.0, 0.0),
41                 m_ang_vel(0.0, 0.0, 0.0)
42                 {}
43
44         void setPosition(const MT_Point3& pos)             { m_pos = pos; }
45         void setOrientation(const MT_Quaternion& orn)      { m_orn = orn; }
46         void setLinearVelocity(const MT_Vector3& lin_vel)  { m_lin_vel = lin_vel; }
47         void setAngularVelocity(const MT_Vector3& ang_vel) { m_ang_vel = ang_vel; }
48         void setTime(MT_Scalar time)                       { m_time = time; }
49         
50         const MT_Point3&     getPosition()        const { return m_pos; }
51         const MT_Quaternion& getOrientation()     const { return m_orn; }
52         const MT_Vector3&    getLinearVelocity()  const { return m_lin_vel; }
53         const MT_Vector3&    getAngularVelocity() const { return m_ang_vel;     }
54         
55         MT_Scalar            getTime()            const { return m_time; }
56         
57         void integrateMidpoint(MT_Scalar timeStep, const SM_MotionState &prev_state, const MT_Vector3 &velocity, const MT_Quaternion& ang_vel);
58         void integrateBackward(MT_Scalar timeStep, const MT_Vector3 &velocity, const MT_Quaternion& ang_vel);
59         void integrateForward(MT_Scalar timeStep, const SM_MotionState &prev_state);
60         
61         void lerp(const SM_MotionState &prev, const SM_MotionState &next);
62         void lerp(MT_Scalar t, const SM_MotionState &other);
63         
64         virtual MT_Transform getTransform() const {
65                 return MT_Transform(m_pos, m_orn);
66         }
67
68 protected:
69         MT_Scalar         m_time;
70         MT_Point3         m_pos;
71         MT_Quaternion     m_orn;
72         MT_Vector3        m_lin_vel;
73         MT_Vector3        m_ang_vel;
74 };
75         
76 #endif
77