56 lines
1.7 KiB
C++
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;
|
|
};
|