Skip to content

Commit

Permalink
Only generate chunks once.
Browse files Browse the repository at this point in the history
  • Loading branch information
Relintai committed Feb 10, 2025
1 parent 2361477 commit b0177a2
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 4 deletions.
12 changes: 12 additions & 0 deletions modules/terraman/world/terrain_chunk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,13 @@ void TerrainChunk::set_is_immediate_build(const bool value) {
_is_immediate_build = value;
}

bool TerrainChunk::get_is_terrain_generated() const {
return _is_terrain_generated;
}
void TerrainChunk::set_is_terrain_generated(const bool value) {
_is_terrain_generated = value;
}

bool TerrainChunk::is_build_aborted() const {
return _abort_build;
}
Expand Down Expand Up @@ -1156,6 +1163,7 @@ TerrainChunk::TerrainChunk() {

_is_generating = false;
_is_immediate_build = false;
_is_terrain_generated = false;
_dirty = false;
_state = TERRAIN_CHUNK_STATE_OK;

Expand Down Expand Up @@ -1436,6 +1444,10 @@ void TerrainChunk::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_is_immediate_build", "value"), &TerrainChunk::set_is_immediate_build);
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "is_immediate_build", PROPERTY_HINT_NONE, "", 0), "set_is_immediate_build", "get_is_immediate_build");

ClassDB::bind_method(D_METHOD("get_is_terrain_generated"), &TerrainChunk::get_is_terrain_generated);
ClassDB::bind_method(D_METHOD("set_is_terrain_generated", "value"), &TerrainChunk::set_is_terrain_generated);
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "is_terrain_generated"), "set_is_terrain_generated", "get_is_terrain_generated");

ClassDB::bind_method(D_METHOD("is_build_aborted"), &TerrainChunk::is_build_aborted);

ClassDB::bind_method(D_METHOD("get_dirty"), &TerrainChunk::get_dirty);
Expand Down
4 changes: 4 additions & 0 deletions modules/terraman/world/terrain_chunk.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@ class TerrainChunk : public Resource {
bool get_is_immediate_build() const;
void set_is_immediate_build(const bool value);

bool get_is_terrain_generated() const;
void set_is_terrain_generated(const bool value);

bool is_build_aborted() const;

bool is_in_tree() const;
Expand Down Expand Up @@ -369,6 +372,7 @@ class TerrainChunk : public Resource {

bool _is_generating;
bool _is_immediate_build;
bool _is_terrain_generated;
bool _dirty;
int _state;

Expand Down
11 changes: 7 additions & 4 deletions modules/terraman/world/terrain_world.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -457,11 +457,14 @@ Ref<TerrainChunk> TerrainWorld::_create_chunk(const int x, const int z, Ref<Terr
void TerrainWorld::chunk_generate(Ref<TerrainChunk> chunk) {
ERR_FAIL_COND(!chunk.is_valid());

if (has_method("_prepare_chunk_for_generation")) {
call("_prepare_chunk_for_generation", chunk);
}
if (!chunk->get_is_terrain_generated()) {
if (has_method("_prepare_chunk_for_generation")) {
call("_prepare_chunk_for_generation", chunk);
}

call("_generate_chunk", chunk);
call("_generate_chunk", chunk);
chunk->set_is_terrain_generated(true);
}

chunk->build();
}
Expand Down

0 comments on commit b0177a2

Please sign in to comment.