#ifndef WORLD_TERRAIN_LOD_H #define WORLD_TERRAIN_LOD_H #include #include #include #include #include #include #include "world_chunk.h" #include "terrain_object.h" #include "new_point.h" #include "direct_lod_multimesh.h" class LodMultiMesh3D; class WorldChunk; class WorldTerrainLod { public: List meshes; private: HashMap mesh_h; int min_dist, max_dist; Ref gworld; float density_range = 3.0f; public: void set_world(Ref world); void init_lod(int mind, int maxd, float density_range); void create_chunk(const WorldChunk *chunk, const List &obj_list); void update(); inline bool has(const Vector3i *loc) const { return mesh_h.has(*loc); } void cleanup(const Transform &vxform); bool valid_org(const Transform &vxform, const Vector3 &org, float margin) const; void update_visibility(const Transform &vxform); inline float get_density_range() const { return density_range; } inline bool in_range(float d) const { if (d >= (float)min_dist && d < (float)max_dist) return true; return false; } inline void erase(const Vector3i &key) { if (mesh_h.has(key)) { LodMultiMesh3D *v = mesh_h[key]; v->hide(); v->set_world(NULL); memfree(v); meshes.erase(v); mesh_h.erase(key); } } }; #endif