43 lines
893 B
C++
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 };
|
|
};
|