/*========================================================================== * (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" #include namespace Geometry { class lodobj_dist_node_t { public: lodobj_dist_node_t(LodObject *o):dist2cam(0.0f),lodobj(o),must_recalculate_distance(true){} lodobj_dist_node_t(const lodobj_dist_node_t &c):dist2cam(c.dist2cam),lodobj(c.lodobj),must_recalculate_distance(c.must_recalculate_distance){} lodobj_dist_node_t(void):dist2cam(0.0f),lodobj(NULL),must_recalculate_distance(true){} float dist2cam; LodObject *lodobj; bool operator < (const lodobj_dist_node_t &o) const { return (dist2cam < o.dist2cam); } bool must_recalculate_distance; }; class lodobj_idpos_node_t; class LodManager { public: LodManager(float near, float far, const Geometry::Vector3 &campos); void AddLodObj(LodObject*, const Geometry::Vector3 &); void UpdateLOD(void); void UpdateCamera(const Geometry::Vector3 &); void UpdateLODObjectPos(LodObject*,const Geometry::Vector3 &); private: std::map lodobj_dists; // key: dist2cam for efficient distance finding std::map lodobj_pos; // map key: LodObject UniqueID for efficient ID-based finding unsigned int targetFPS; Vector3 camera_pos; bool camera_changed; float near_range, far_range; float CalculateDistToCamera(const Geometry::Vector3 &) const; float SelectRandomDistance(void) const; }; }; #endif