#pragma once #include "core/templates/vector.h" #include "scene/3d/mesh_instance_3d.h" class TerrainMeshGenerator; class TerrainChunk : public MeshInstance3D { GDCLASS(TerrainChunk, MeshInstance3D); enum MeshStatusFlag { MESH_DIRTY, MESH_DISPATCHED, MESH_LOADED }; struct MeshStatus { Ref mesh; MeshStatusFlag flag; }; static void _bind_methods(); void generate_lod(size_t lod); void ready(); void on_terrain_changed(); void lod_generated(size_t lod); void process_lod(); protected: void _notification(int what); public: void set_size(float size); float get_size() const; void set_lod0_detail(int detail); int get_lod0_detail() const; private: Node *collisions{ nullptr }; size_t lod_count{ 3 }; Vector meshes{}; int lod0_detail{ 200 }; float max_lod_distance{ 6 }; float size{ 200 }; TerrainMeshGenerator *generator{ nullptr }; };