mirror of
https://github.com/Relintai/props.git
synced 2024-11-14 10:17:30 +01:00
Implement material loading.
This commit is contained in:
parent
4bde4a4638
commit
cbad187673
@ -147,7 +147,19 @@ void PropCache::materials_clear() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PropCache::materials_load() {
|
void PropCache::materials_load() {
|
||||||
|
_materials.clear();
|
||||||
|
|
||||||
|
for (int i = 0; i < _material_paths.size(); ++i) {
|
||||||
|
StringName path = _material_paths[i];
|
||||||
|
|
||||||
|
ERR_CONTINUE(path == "");
|
||||||
|
|
||||||
|
Ref<Material> d = load_resource(path, "Material");
|
||||||
|
|
||||||
|
ERR_CONTINUE(!d.is_valid());
|
||||||
|
|
||||||
|
_materials.push_back(d);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<Variant> PropCache::materials_get() {
|
Vector<Variant> PropCache::materials_get() {
|
||||||
@ -235,6 +247,22 @@ void PropCache::material_cache_custom_key_unref(const uint64_t key) {
|
|||||||
_custom_keyed_material_cache_mutex.unlock();
|
_custom_keyed_material_cache_mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ref<Resource> PropCache::load_resource(const String &path, const String &type_hint) {
|
||||||
|
_ResourceLoader *rl = _ResourceLoader::get_singleton();
|
||||||
|
|
||||||
|
#if VERSION_MAJOR < 4
|
||||||
|
Ref<ResourceInteractiveLoader> resl = rl->load_interactive(path, type_hint);
|
||||||
|
|
||||||
|
ERR_FAIL_COND_V(!resl.is_valid(), Ref<Resource>());
|
||||||
|
|
||||||
|
resl->wait();
|
||||||
|
|
||||||
|
return resl->get_resource();
|
||||||
|
#else
|
||||||
|
return rl->load(path, type_hint);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
PropCache::PropCache() {
|
PropCache::PropCache() {
|
||||||
_instance = this;
|
_instance = this;
|
||||||
|
|
||||||
@ -305,4 +333,6 @@ void PropCache::_bind_methods() {
|
|||||||
ClassDB::bind_method(D_METHOD("materials_get"), &PropCache::materials_get);
|
ClassDB::bind_method(D_METHOD("materials_get"), &PropCache::materials_get);
|
||||||
ClassDB::bind_method(D_METHOD("materials_set"), &PropCache::materials_set);
|
ClassDB::bind_method(D_METHOD("materials_set"), &PropCache::materials_set);
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "materials", PROPERTY_HINT_NONE, "17/17:Material", PROPERTY_USAGE_DEFAULT, "Material"), "materials_set", "materials_get");
|
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "materials", PROPERTY_HINT_NONE, "17/17:Material", PROPERTY_USAGE_DEFAULT, "Material"), "materials_set", "materials_get");
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("load_resource", "path", "type_hint"), &PropCache::load_resource, "");
|
||||||
}
|
}
|
||||||
|
@ -31,12 +31,14 @@ SOFTWARE.
|
|||||||
#include "core/object/reference.h"
|
#include "core/object/reference.h"
|
||||||
#include "core/templates/hash_map.h"
|
#include "core/templates/hash_map.h"
|
||||||
#include "core/templates/vector.h"
|
#include "core/templates/vector.h"
|
||||||
|
#include "core/core_bind.h"
|
||||||
#else
|
#else
|
||||||
#include "core/hash_map.h"
|
#include "core/hash_map.h"
|
||||||
#include "core/color.h"
|
#include "core/color.h"
|
||||||
#include "core/object.h"
|
#include "core/object.h"
|
||||||
#include "core/reference.h"
|
#include "core/reference.h"
|
||||||
#include "core/vector.h"
|
#include "core/vector.h"
|
||||||
|
#include "core/bind/core_bind.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "scene/resources/material.h"
|
#include "scene/resources/material.h"
|
||||||
@ -92,6 +94,8 @@ public:
|
|||||||
Ref<PropMaterialCache> material_cache_custom_key_get(const uint64_t key);
|
Ref<PropMaterialCache> material_cache_custom_key_get(const uint64_t key);
|
||||||
void material_cache_custom_key_unref(const uint64_t key);
|
void material_cache_custom_key_unref(const uint64_t key);
|
||||||
|
|
||||||
|
Ref<Resource> load_resource(const String &path, const String &type_hint = "");
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static PropCache *_instance;
|
static PropCache *_instance;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user