#pragma once #include #include "body.h" #include "vector3.h" #include "matrix4x4.h" #include "sbre/sbre.h" class ObjMesh; class ModelBody: public Body { public: 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); virtual double GetRadius(void) const; void TransformToModelCoords(const Frame* camFrame); void GetRotMatrix(matrix4x4d& m); 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 TriMeshUpdateLastPos(void); void SetModel(int sbreModel); void RenderSbreModel(const Frame* camFrame, int model, ObjParams* params); class Geom : public Object { public: virtual Type GetType(void) { return Object::GEOM; } Body* parent; int flags; }; protected: std::vector geomColl; private: std::vector geoms; dReal triMeshTrans[32]; int triMeshLastMatrixIndex; };