diff --git a/modules/terraman/chunk_data_managers/terrain_world_chunk_data_manager.cpp b/modules/terraman/chunk_data_managers/terrain_world_chunk_data_manager.cpp index d1a7e1c5a..5129e6e25 100644 --- a/modules/terraman/chunk_data_managers/terrain_world_chunk_data_manager.cpp +++ b/modules/terraman/chunk_data_managers/terrain_world_chunk_data_manager.cpp @@ -93,6 +93,25 @@ Vector TerrainWorldChunkDataManager::_get_available_chunk_list() { return Vector(); } +// Save +void TerrainWorldChunkDataManager::save_chunk(const Ref &p_chunk) { + call("_delete_chunk_data_at", p_chunk); +} +void TerrainWorldChunkDataManager::_save_chunk(const Ref &p_chunk) { +} + +void TerrainWorldChunkDataManager::save_all_chunks(TerrainWorld *p_world) { + ERR_FAIL_COND(!p_world || !ObjectDB::instance_validate(p_world)); + + for (int i = 0; i < p_world->chunk_get_count(); ++i) { + save_chunk(p_world->chunk_get_index(i)); + } +} +void TerrainWorldChunkDataManager::save_all_chunks_bind(Node *p_world) { + save_all_chunks(Object::cast_to(p_world)); +} + +// Delete void TerrainWorldChunkDataManager::delete_chunk_data_at(const Vector2i &p_chunk_position) { call("_delete_chunk_data_at", p_chunk_position); } @@ -142,6 +161,8 @@ void TerrainWorldChunkDataManager::_bind_methods() { PropertyInfo(Variant::VECTOR2I, "chunk_position"))); BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::POOL_VECTOR2I_ARRAY, "chunks"), "_get_available_chunk_list")); + BIND_VMETHOD(MethodInfo("_save_chunk", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "TerrainChunk"))); + BIND_VMETHOD(MethodInfo("_delete_chunk_data_at", PropertyInfo(Variant::VECTOR2I, "chunk_position"))); BIND_VMETHOD(MethodInfo("_delete_chunk_data", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "TerrainChunk"))); BIND_VMETHOD(MethodInfo("_delete_all_chunk_data")); @@ -159,6 +180,12 @@ void TerrainWorldChunkDataManager::_bind_methods() { ClassDB::bind_method(D_METHOD("get_available_chunk_list"), &TerrainWorldChunkDataManager::get_available_chunk_list); ClassDB::bind_method(D_METHOD("_get_available_chunk_list"), &TerrainWorldChunkDataManager::_get_available_chunk_list); + // Save + ClassDB::bind_method(D_METHOD("save_chunk", "chunk"), &TerrainWorldChunkDataManager::save_chunk); + ClassDB::bind_method(D_METHOD("_save_chunk", "chunk"), &TerrainWorldChunkDataManager::_save_chunk); + + ClassDB::bind_method(D_METHOD("save_all_chunks", "world"), &TerrainWorldChunkDataManager::save_all_chunks_bind); + // Delete ClassDB::bind_method(D_METHOD("delete_chunk_data_at", "chunk_position"), &TerrainWorldChunkDataManager::delete_chunk_data_at); ClassDB::bind_method(D_METHOD("_delete_chunk_data_at", "chunk_position"), &TerrainWorldChunkDataManager::_delete_chunk_data_at); diff --git a/modules/terraman/chunk_data_managers/terrain_world_chunk_data_manager.h b/modules/terraman/chunk_data_managers/terrain_world_chunk_data_manager.h index 1d90970d9..0bce2869f 100644 --- a/modules/terraman/chunk_data_managers/terrain_world_chunk_data_manager.h +++ b/modules/terraman/chunk_data_managers/terrain_world_chunk_data_manager.h @@ -41,6 +41,7 @@ class TerrainWorldChunkDataManager : public Resource { GDCLASS(TerrainWorldChunkDataManager, Resource); public: + // Load Ref load_chunk(const Vector2i &p_chunk_position); virtual Ref _load_chunk(const Vector2i &p_chunk_position); @@ -52,6 +53,13 @@ public: Vector get_available_chunk_list(); virtual Vector _get_available_chunk_list(); + // Save + void save_chunk(const Ref &p_chunk); + virtual void _save_chunk(const Ref &p_chunk); + + void save_all_chunks(TerrainWorld *p_world); + void save_all_chunks_bind(Node *p_world); + // Delete void delete_chunk_data_at(const Vector2i &p_chunk_position); virtual void _delete_chunk_data_at(const Vector2i &p_chunk_position);