Fixed some transforms, move to 3d and quaternion math in progress...
[ne.git] / src / phys / object.h
blobe12c0650d6100b0a745d16d37610ff5236fc349a
1 /************************************************************************
2 This file is part of NE.
4 NE is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 NE is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with NE. If not, see <http://www.gnu.org/licenses/>.
16 ************************************************************************/
18 #ifndef OBJECT_H_
19 #define OBJECT_H_
21 #include <ode/ode.h>
22 #include <ode/odecpp.h>
23 #include <ode/odecpp_collision.h>
24 #include <string>
25 #include "base/vec.h"
27 class Object
29 public:
30 Object();
31 virtual ~Object();
33 void setCollide(int (*func)(Object*,Object*)) { m_colfunc = func; }
34 virtual int collide(Object* o);
36 virtual void update() {}
38 virtual void draw() = 0;
40 dBody *getBody() { return m_body; }
41 dGeom *getGeom() { return m_geom; }
42 float getMass() { return m_mass.mass; }
44 inline const Vec3f getUp()
46 const dReal *r = getRotation();
48 return Vec3f(r[1], r[5], r[9]);
51 inline const Vec3f getForward()
53 const dReal *r = getRotation();
55 return Vec3f(r[2], r[6], r[10]);
58 void setPosition(dReal x, dReal y, dReal z);
59 const dReal *getPosition();
60 inline const Vec3f getPositionV()
62 const dReal *v = getPosition();
63 return Vec3f(v[0], v[1], v[2]);
66 void setRotation(const dMatrix3 r);
67 const dReal *getRotation();
69 void setQuaternion(const dQuaternion q);
70 const dReal *getQuaternion();
72 bool isStatic() { return m_static; }
73 void setStatic(bool is_static);
75 virtual std::string &serialize();
76 virtual void unserialize(std::string &s);
78 // returns true when the gravity applied is the strongest
79 virtual bool applyGravity(const Vec3f &force);
81 inline void clearGravity()
83 m_gravity_mag = 0;
86 protected:
87 void apply_matrix();
88 void init_geom();
90 long int m_framestamp;
91 Vec3f m_gravity;
92 float m_gravity_mag;
94 dMass m_mass;
95 dBody *m_body;
96 dGeom *m_geom;
98 private:
99 bool m_static;
100 int (*m_colfunc)(Object*,Object*);
102 float m_spring, m_damp;
105 #endif