#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; };