Lephisto/src/model_body.h

52 lines
1.3 KiB
C++

#pragma once
#include <vector>
#include "body.h"
#include "vector3.h"
#include "matrix4x4.h"
#include "sbre/sbre.h"
class ObjMesh;
class CollMeshSet;
class ModelBody: public Body {
public:
OBJDEF(ModelBody, Body, MODELBODY);
ModelBody(void);
virtual ~ModelBody(void);
void SetPosition(vector3d p);
virtual void SetRotMatrix(const matrix4x4d& r);
/* Not valid to SetVelocity on these. If you want them to move, use a DynamicBody. */
vector3d GetPosition(void) const;
virtual double GetRadius(void) const;
void TransformToModelCoords(const Frame* camFrame);
void GetRotMatrix(matrix4x4d& m) const;
virtual void SetFrame(Frame* f);
void GeomsSetBody(dBodyID body);
/* To remove from simulation for a period. */
virtual void Disable(void);
virtual void Enable(void);
void GetAabb(Aabb& aabb);
void TriMeshUpdateLastPos(void);
void SetModel(int sbreModel);
void RenderSbreModel(const Frame* camFrame, int model, ObjParams* params);
class Geom : public Object {
public:
OBJDEF(Geom, Object, GEOM);
Body* parent;
int flags;
};
protected:
virtual void Save(void);
virtual void Load(void);
std::vector<Geom> geomColl;
private:
CollMeshSet* m_collMeshSet;
std::vector<dGeomID> geoms;
dReal m_triMeshTrans[32];
int m_triMeshLastMatrixIndex;
};