Added setup_cache and setup_rects methods to the TiledWallData.

This commit is contained in:
Relintai 2021-08-17 13:10:37 +02:00
parent 72e25437bd
commit e0c9ff44e9
2 changed files with 58 additions and 1 deletions

View File

@ -57,6 +57,8 @@ SOFTWARE.
arr_into.push_back(e); \ arr_into.push_back(e); \
} }
#include "../material_cache/prop_material_cache.h"
const String TiledWallData::BINDING_STRING_TILED_WALL_TILING_TYPE = "None,Horizontal,Vertical,Both"; const String TiledWallData::BINDING_STRING_TILED_WALL_TILING_TYPE = "None,Horizontal,Vertical,Both";
TiledWallData::TiledWallTilingType TiledWallData::get_tiling_type() const { TiledWallData::TiledWallTilingType TiledWallData::get_tiling_type() const {
@ -214,6 +216,43 @@ void TiledWallData::add_textures_into(Ref<TexturePacker> texture_packer) {
} }
#endif #endif
void TiledWallData::setup_cache(Ref<PropMaterialCache> cache) {
call("_setup_cache", cache);
}
void TiledWallData::_setup_cache(Ref<PropMaterialCache> cache) {
if (cache->material_get_num() == 0) {
for (int i = 0; i < _materials.size(); ++i) {
const Ref<Material> &m = _materials[i];
if (m.is_valid()) {
cache->material_add(m);
}
}
}
for (int i = 0; i < _textures.size(); ++i) {
const Ref<Texture> &t = _textures[i];
if (t.is_valid()) {
cache->texture_add(t);
}
}
for (int i = 0; i < _flavour_textures.size(); ++i) {
const Ref<Texture> &t = _flavour_textures[i];
if (t.is_valid()) {
cache->texture_add(t);
}
}
}
void TiledWallData::setup_rects(Ref<PropMaterialCache> cache) {
call("_setup_rects", cache);
}
void TiledWallData::_setup_rects(Ref<PropMaterialCache> cache) {
}
void TiledWallData::copy_from(const Ref<TiledWallData> &tiled_wall_data) { void TiledWallData::copy_from(const Ref<TiledWallData> &tiled_wall_data) {
ERR_FAIL_COND(!tiled_wall_data.is_valid()); ERR_FAIL_COND(!tiled_wall_data.is_valid());
@ -287,6 +326,16 @@ void TiledWallData::_bind_methods() {
ClassDB::bind_method(D_METHOD("add_textures_into", "texture_packer"), &TiledWallData::add_textures_into); ClassDB::bind_method(D_METHOD("add_textures_into", "texture_packer"), &TiledWallData::add_textures_into);
#endif #endif
BIND_VMETHOD(MethodInfo("_setup_cache", PropertyInfo(Variant::OBJECT, "cache", PROPERTY_HINT_RESOURCE_TYPE, "PropMaterialCache")));
ClassDB::bind_method(D_METHOD("setup_cache", "cache"), &TiledWallData::setup_cache);
ClassDB::bind_method(D_METHOD("_setup_cache", "cache"), &TiledWallData::_setup_cache);
BIND_VMETHOD(MethodInfo("_setup_rects", PropertyInfo(Variant::OBJECT, "cache", PROPERTY_HINT_RESOURCE_TYPE, "PropMaterialCache")));
ClassDB::bind_method(D_METHOD("setup_rects", "cache"), &TiledWallData::setup_rects);
ClassDB::bind_method(D_METHOD("_setup_rects", "cache"), &TiledWallData::_setup_rects);
ClassDB::bind_method(D_METHOD("copy_from", "prop_data"), &TiledWallData::copy_from); ClassDB::bind_method(D_METHOD("copy_from", "prop_data"), &TiledWallData::copy_from);
BIND_ENUM_CONSTANT(TILED_WALL_TILING_TYPE_NONE); BIND_ENUM_CONSTANT(TILED_WALL_TILING_TYPE_NONE);

View File

@ -40,13 +40,15 @@ SOFTWARE.
#include "core/version.h" #include "core/version.h"
#include "scene/resources/texture.h"
#include "scene/resources/material.h" #include "scene/resources/material.h"
#include "scene/resources/texture.h"
#if TEXTURE_PACKER_PRESENT #if TEXTURE_PACKER_PRESENT
#include "../../texture_packer/texture_packer.h" #include "../../texture_packer/texture_packer.h"
#endif #endif
class PropMaterialCache;
class TiledWallData : public Resource { class TiledWallData : public Resource {
GDCLASS(TiledWallData, Resource); GDCLASS(TiledWallData, Resource);
@ -100,6 +102,12 @@ public:
void add_textures_into(Ref<TexturePacker> texture_packer); void add_textures_into(Ref<TexturePacker> texture_packer);
#endif #endif
void setup_cache(Ref<PropMaterialCache> cache);
void _setup_cache(Ref<PropMaterialCache> cache);
void setup_rects(Ref<PropMaterialCache> cache);
void _setup_rects(Ref<PropMaterialCache> cache);
void copy_from(const Ref<TiledWallData> &tiled_wall_data); void copy_from(const Ref<TiledWallData> &tiled_wall_data);
TiledWallData(); TiledWallData();