Fix properties being lost when reloading placeholder GDScript instance
During reloading in `GDScriptLanguage::reload_all_scripts` a placeholder instance that must remain so is replaced with a new placeholder instance. The state is then restored by calling `ScriptInstance::set` for each property. This does not work if the script is missing the properties due to build/parse failing. The fix for such cases is to call `placeholder_set_fallback` instead of `set` on the script instance. I took this chance to move the `build_failed` flag from `PlaceHolderScriptInstance` to `Script`. That improves the code a lot. I also renamed it to `placeholder_fallback_enabled` which is a much better name (`build_failed` could lead to misunderstandings).
This commit is contained in:
parent
9a8569d434
commit
ea85ff0dc2
6 changed files with 51 additions and 40 deletions
|
|
@ -146,6 +146,8 @@ public:
|
|||
virtual void get_constants(Map<StringName, Variant> *p_constants) {}
|
||||
virtual void get_members(Set<StringName> *p_constants) {}
|
||||
|
||||
virtual bool is_placeholder_fallback_enabled() const { return false; }
|
||||
|
||||
Script() {}
|
||||
};
|
||||
|
||||
|
|
@ -334,8 +336,6 @@ class PlaceHolderScriptInstance : public ScriptInstance {
|
|||
ScriptLanguage *language;
|
||||
Ref<Script> script;
|
||||
|
||||
bool build_failed;
|
||||
|
||||
public:
|
||||
virtual bool set(const StringName &p_name, const Variant &p_value);
|
||||
virtual bool get(const StringName &p_name, Variant &r_ret) const;
|
||||
|
|
@ -361,13 +361,10 @@ public:
|
|||
|
||||
void update(const List<PropertyInfo> &p_properties, const Map<StringName, Variant> &p_values); //likely changed in editor
|
||||
|
||||
void set_build_failed(bool p_build_failed) { build_failed = p_build_failed; }
|
||||
bool get_build_failed() const { return build_failed; }
|
||||
|
||||
virtual bool is_placeholder() const { return true; }
|
||||
|
||||
virtual void property_set_fallback(const StringName &p_name, const Variant &p_value, bool *r_valid);
|
||||
virtual Variant property_get_fallback(const StringName &p_name, bool *r_valid);
|
||||
virtual void property_set_fallback(const StringName &p_name, const Variant &p_value, bool *r_valid = NULL);
|
||||
virtual Variant property_get_fallback(const StringName &p_name, bool *r_valid = NULL);
|
||||
|
||||
virtual MultiplayerAPI::RPCMode get_rpc_mode(const StringName &p_method) const { return MultiplayerAPI::RPC_MODE_DISABLED; }
|
||||
virtual MultiplayerAPI::RPCMode get_rset_mode(const StringName &p_variable) const { return MultiplayerAPI::RPC_MODE_DISABLED; }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue