Lephisto/src/dynamic_body.h
Rtch90 73547ec32e [Change] Initial ode-less dynamic body work.
[Remove] Removed ODE dep.
[Missing] No collisions yet.
2018-04-08 17:01:03 +01:00

56 lines
1.7 KiB
C++

#pragma once
#include "body.h"
#include "model_body.h"
#include "vector3.h"
#include "matrix4x4.h"
class DynamicBody : public ModelBody {
public:
OBJDEF(DynamicBody, ModelBody, DYNAMICBODY);
DynamicBody(void);
virtual ~DynamicBody(void);
virtual void SetRotMatrix(const matrix4x4d& r);
virtual void GetRotMatrix(matrix4x4d& m);
virtual void SetVelocity(vector3d v);
virtual void SetPosition(vector3d p);
virtual vector3d GetPosition(void) const;
virtual vector3d GetVelocity(void);
vector3d GetAngVelocity(void);
void SetAngVelocity(vector3d v);
void SetMesh(ObjMesh* m);
virtual bool OnCollision(Body* b, Uint32 flags) { return true; }
vector3d GetAngularMomentum(void);
void SetMassDistributionFromCollMesh(const CollMesh* m);
void DisableBodyOnly(void) { m_enabled = false; }
bool IsEnabled(void) { return m_enabled; }
virtual void Disable(void);
virtual void Enable(void);
virtual double GetMass(void) const { return m_mass; }
virtual void TimeStepUpdate(const float timeStep);
void SetMass(double);
void AddForceAtPos(const vector3d force, const vector3d pos);
void AddForce(const vector3d);
void SetForce(const vector3d);
void SetTorque(const vector3d);
/* body-relative forces. */
void AddRelForce(const vector3d);
void AddRelTorque(const vector3d);
protected:
virtual void Save(void);
virtual void Load(void);
private:
/* New odeless stuff. */
matrix4x4d m_orient; /* Contains pos. */
vector3d m_force;
vector3d m_torque;
vector3d m_vel;
vector3d m_angVel;
double m_mass;
double m_massRadius; /* Set in a silly fashion from the collision mesh and used to calculate m_angInertia. */
double m_angInertia; /* Always spehere mass distribution. */
bool m_enabled;
};