terrain-editor/modules/terrain_editor/terrain_chunk.h

43 lines
893 B
C++

#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<ArrayMesh> 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<MeshStatus> meshes{};
int lod0_detail{ 200 };
float max_lod_distance{ 6 };
float size{ 200 };
TerrainMeshGenerator *generator{ nullptr };
};