diff --git a/library/terra_material_cache.cpp b/library/terra_material_cache.cpp index c26bc22..a2ca852 100644 --- a/library/terra_material_cache.cpp +++ b/library/terra_material_cache.cpp @@ -146,6 +146,42 @@ void TerraMaterialCache::surfaces_clear() { _surfaces.clear(); } +void TerraMaterialCache::additional_texture_add(const Ref &tex) { + _additional_textures.push_back(tex); +} +void TerraMaterialCache::additional_texture_remove(const Ref &tex) { + for (int i = 0; i < _additional_textures.size(); ++i) { + if (_additional_textures[i] == tex) { + _additional_textures.remove(i); + return; + } + } +} +void TerraMaterialCache::additional_texture_remove_index(const int index) { + ERR_FAIL_INDEX(index, _additional_textures.size()); + + _additional_textures.remove(index); +} +void TerraMaterialCache::additional_textures_clear() { + _additional_textures.clear(); +} +int TerraMaterialCache::additional_texture_count() { + return _additional_textures.size(); +} +Ref TerraMaterialCache::additional_texture_get(const int index) { + ERR_FAIL_INDEX_V(index, _additional_textures.size(), Ref()); + + return _additional_textures[index]; +} +Ref TerraMaterialCache::additional_texture_get_atlas(const int index) { + ERR_FAIL_INDEX_V(index, _additional_textures.size(), Ref()); + + return Ref(); +} +Rect2 TerraMaterialCache::additional_texture_get_uv_rect(const Ref &tex) { + return Rect2(0, 0, 1, 1); +} + void TerraMaterialCache::refresh_rects() { _initialized = true; } @@ -199,6 +235,15 @@ void TerraMaterialCache::_bind_methods() { ClassDB::bind_method(D_METHOD("surface_get_num"), &TerraMaterialCache::surface_get_num); ClassDB::bind_method(D_METHOD("surfaces_clear"), &TerraMaterialCache::surfaces_clear); + ClassDB::bind_method(D_METHOD("additional_texture_add", "tex"), &TerraMaterialCache::additional_texture_add); + ClassDB::bind_method(D_METHOD("additional_texture_remove", "tex"), &TerraMaterialCache::additional_texture_remove); + ClassDB::bind_method(D_METHOD("additional_texture_remove_index", "index"), &TerraMaterialCache::additional_texture_remove_index); + ClassDB::bind_method(D_METHOD("additional_textures_clear"), &TerraMaterialCache::additional_textures_clear); + ClassDB::bind_method(D_METHOD("additional_texture_count"), &TerraMaterialCache::additional_texture_count); + ClassDB::bind_method(D_METHOD("additional_texture_get", "index"), &TerraMaterialCache::additional_texture_get); + ClassDB::bind_method(D_METHOD("additional_texture_get_atlas", "index"), &TerraMaterialCache::additional_texture_get_atlas); + ClassDB::bind_method(D_METHOD("additional_texture_get_uv_rect", "tex"), &TerraMaterialCache::additional_texture_get_uv_rect); + ClassDB::bind_method(D_METHOD("refresh_rects"), &TerraMaterialCache::refresh_rects); ClassDB::bind_method(D_METHOD("setup_material_albedo", "texture"), &TerraMaterialCache::setup_material_albedo); diff --git a/library/terra_material_cache.h b/library/terra_material_cache.h index a668c01..cc55970 100644 --- a/library/terra_material_cache.h +++ b/library/terra_material_cache.h @@ -75,6 +75,15 @@ public: virtual int surface_get_num() const; virtual void surfaces_clear(); + virtual void additional_texture_add(const Ref &tex); + virtual void additional_texture_remove(const Ref &tex); + virtual void additional_texture_remove_index(const int index); + virtual void additional_textures_clear(); + virtual int additional_texture_count(); + virtual Ref additional_texture_get(const int index); + virtual Ref additional_texture_get_atlas(const int index); + virtual Rect2 additional_texture_get_uv_rect(const Ref &tex); + virtual void refresh_rects(); void setup_material_albedo(Ref texture); @@ -89,6 +98,7 @@ protected: Vector> _surfaces; Vector> _materials; + Vector> _additional_textures; int _ref_count; };