-make sure instance placeholder works with duplicate(), fixes #3378
This commit is contained in:
parent
84d7a559e5
commit
b30839fb08
|
@ -14,11 +14,24 @@ bool InstancePlaceholder::_set(const StringName& p_name, const Variant& p_value)
|
||||||
|
|
||||||
bool InstancePlaceholder::_get(const StringName& p_name,Variant &r_ret) const{
|
bool InstancePlaceholder::_get(const StringName& p_name,Variant &r_ret) const{
|
||||||
|
|
||||||
|
for (const List<PropSet>::Element *E=stored_values.front();E;E=E->next()) {
|
||||||
|
if (E->get().name==p_name) {
|
||||||
|
r_ret=E->get().value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
void InstancePlaceholder::_get_property_list( List<PropertyInfo> *p_list) const{
|
void InstancePlaceholder::_get_property_list( List<PropertyInfo> *p_list) const{
|
||||||
|
|
||||||
|
for (const List<PropSet>::Element *E=stored_values.front();E;E=E->next()) {
|
||||||
|
PropertyInfo pi;
|
||||||
|
pi.name=E->get().name;
|
||||||
|
pi.type=E->get().value.get_type();
|
||||||
|
pi.usage=PROPERTY_USAGE_STORAGE;
|
||||||
|
|
||||||
|
p_list->push_back(pi);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "scene/resources/packed_scene.h"
|
#include "scene/resources/packed_scene.h"
|
||||||
#include "io/resource_loader.h"
|
#include "io/resource_loader.h"
|
||||||
#include "viewport.h"
|
#include "viewport.h"
|
||||||
|
#include "instance_placeholder.h"
|
||||||
|
|
||||||
VARIANT_ENUM_CAST(Node::PauseMode);
|
VARIANT_ENUM_CAST(Node::PauseMode);
|
||||||
|
|
||||||
|
@ -1471,7 +1472,14 @@ Node *Node::duplicate(bool p_use_instancing) const {
|
||||||
|
|
||||||
bool instanced=false;
|
bool instanced=false;
|
||||||
|
|
||||||
if (p_use_instancing && get_filename()!=String()) {
|
if (cast_to<InstancePlaceholder>()) {
|
||||||
|
|
||||||
|
const InstancePlaceholder *ip = cast_to<const InstancePlaceholder>();
|
||||||
|
InstancePlaceholder *nip = memnew( InstancePlaceholder );
|
||||||
|
nip->set_instance_path( ip->get_instance_path() );
|
||||||
|
node=nip;
|
||||||
|
|
||||||
|
} else if (p_use_instancing && get_filename()!=String()) {
|
||||||
|
|
||||||
Ref<PackedScene> res = ResourceLoader::load(get_filename());
|
Ref<PackedScene> res = ResourceLoader::load(get_filename());
|
||||||
ERR_FAIL_COND_V(res.is_null(),NULL);
|
ERR_FAIL_COND_V(res.is_null(),NULL);
|
||||||
|
|
Loading…
Reference in New Issue