Implemented the surface related methods in TerraMaterialCache.

This commit is contained in:
Relintai 2021-08-02 23:44:05 +02:00
parent 74c5200ec5
commit 2a627b0dd2

View File

@ -83,21 +83,47 @@ void TerraMaterialCache::materials_set(const Vector<Variant> &materials) {
//Surfaces //Surfaces
Ref<TerraSurface> TerraMaterialCache::voxel_surface_get(const int index) { Ref<TerraSurface> TerraMaterialCache::voxel_surface_get(const int index) {
return Ref<TerraSurface>(); ERR_FAIL_INDEX_V(index, _surfaces.size(), Ref<TerraSurface>());
return _surfaces[index];
} }
Ref<TerraSurface> TerraMaterialCache::voxel_surface_id_get(const int id) { Ref<TerraSurface> TerraMaterialCache::voxel_surface_id_get(const int id) {
return Ref<TerraSurface>(); Ref<TerraSurface> surface;
for (int i = 0; i < _surfaces.size(); ++i) {
surface = _surfaces[i];
if (surface.is_valid()) {
if (surface->get_id() == id) {
break;
}
}
}
return surface;
} }
void TerraMaterialCache::voxel_surface_add(Ref<TerraSurface> value) { void TerraMaterialCache::voxel_surface_add(Ref<TerraSurface> value) {
ERR_FAIL_COND(!value.is_valid());
_surfaces.push_back(value);
} }
void TerraMaterialCache::voxel_surface_set(int index, Ref<TerraSurface> value) { void TerraMaterialCache::voxel_surface_set(int index, Ref<TerraSurface> value) {
ERR_FAIL_COND(index < 0);
if (_surfaces.size() < index) {
_surfaces.resize(index + 1);
}
_surfaces.set(index, value);
} }
void TerraMaterialCache::voxel_surface_remove(const int index) { void TerraMaterialCache::voxel_surface_remove(const int index) {
_surfaces.remove(index);
} }
int TerraMaterialCache::voxel_surface_get_num() const { int TerraMaterialCache::voxel_surface_get_num() const {
return 0; return _surfaces.size();
} }
void TerraMaterialCache::voxel_surfaces_clear() { void TerraMaterialCache::voxel_surfaces_clear() {
_surfaces.clear();
} }
void TerraMaterialCache::refresh_rects() { void TerraMaterialCache::refresh_rects() {