/*========================================================================== * (C) 2006 Universidad Jaime I de Castellón *========================================================================== * PROYECT: GAME TOOLS *==========================================================================*/ /* CONTENT: * * * @file GeoLodManager.h *==========================================================================*/ #ifndef _GEOLODMANAGER #define _GEOLODMANAGER #include "GeoVector3.h" #include "GeoLodObject.h" namespace Geometry { class NodeContainer; class lodobj_node_t; class LodManager { public: LodManager(Real near, Real far, const Geometry::Vector3 &campos, int numslots=10); ~LodManager(void); void AddLodObj(const std::string &name, LodObject*, const Geometry::Vector3 &); void UpdateLOD(uint32 currFPS, uint32 targetFPS=30); void UpdateCamera(const Geometry::Vector3 &); void UpdateLODObjectPos(LodObject*,const Geometry::Vector3 &); bool always_calculate_lod; // if true, there is no instant LOD changing bool force_highest_lod; // if set to true, all objects will be set to their highest level of detail private: NodeContainer *lodobj_container; uint32 lasttime; bool camera_changed, node_added; float near_range, far_range; float SelectRandomDistance(void) const; void ChangeLOD(lodobj_node_t*,Real); void ReallyGoToLOD(lodobj_node_t*,Real); lodobj_node_t * FindMostSimilarRealLOD(const std::string &, Real desired_lod); void MakeDiscipleOf(lodobj_node_t *master, lodobj_node_t *disciple); void MakeIndependent(lodobj_node_t*); void RemoveDiscipleFrom(LodObject *master, LodObject *disciple); void UpdateDisciples(lodobj_node_t *master); void DeleteMeFromMyMastersDiscipleList(lodobj_node_t *); void ChangeMaster(lodobj_node_t *orig, lodobj_node_t *newmaster); }; } #endif