added 3dengfx into the repo, probably not the correct version for this
[summerhack] / src / 3dengfx / src / sim / rigid.hpp
1 /*
2 This file is part of the simulation module of 3dengfx.
3
4 Copyright (c) 2005 John Tsiombikas <nuclear@siggraph.org>
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (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
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21 #ifndef RIGID_HPP_
22 #define RIGID_HPP_
23
24 #include <list>
25 #include <ode/ode.h>
26 #include "sim.hpp"
27 #include "3dengfx/object.hpp"
28
29 class RigidBody : Object {
30 private:
31         dBodyID body;
32         dMass mass;
33         
34 public:
35         RigidBody(dWorldID world);
36         ~RigidBody();
37
38         void enable();
39         void disable();
40
41         virtual void set_position(const Vector3 &pos, unsigned long time = XFORM_LOCAL_PRS);
42         virtual void set_rotation(const Quaternion &rot, unsigned long time = XFORM_LOCAL_PRS);
43         virtual void set_rotation(const Vector3 &euler, unsigned long time = XFORM_LOCAL_PRS);
44
45         virtual void translate(const Vector3 &trans, unsigned long time = XFORM_LOCAL_PRS);
46         virtual void rotate(const Quaternion &rot, unsigned long time = XFORM_LOCAL_PRS);
47         virtual void rotate(const Vector3 &euler, unsigned long time = XFORM_LOCAL_PRS);
48         virtual void rotate(const Matrix3x3 &rmat, unsigned long time = XFORM_LOCAL_PRS);
49 }
50
51 class RigidSim : public Simulation {
52 protected:
53         dWorldID world;
54         std::list<Object*> obj_list;
55         
56         virtual void run(unsigned long msec);
57
58 public:
59         RigidSim();
60         virtual ~RigidSim();
61
62         void set_gravity(const Vector3 &gvec);
63         void add_object(Object *obj);
64 };
65
66 #endif  // RIGID_HPP_