Improve resource load cache

-Added a new method in Resource: reset_state , used for reloading the same resource from disk
-Added a new cache mode "replace" in ResourceLoader, which reuses existing loaded sub-resources but resets their data from disk (or replaces them if they chaged type)
-Because the correct sub-resource paths are always loaded now, this fixes bugs with subresource folding or subresource ordering when saving.
This commit is contained in:
reduz
2021-02-11 14:18:45 -03:00
parent 1891d0f88e
commit 9a402f0232
6 changed files with 40 additions and 0 deletions

View File

@@ -1506,6 +1506,19 @@ VisualScriptNodeInstance *VisualScriptExpression::instance(VisualScriptInstance
return instance; return instance;
} }
void VisualScriptExpression::reset_state() {
if (nodes) {
memdelete(nodes);
nodes = nullptr;
root = nullptr;
}
error_str = String();
error_set = false;
str_ofs = 0;
inputs.clear();
}
VisualScriptExpression::VisualScriptExpression() { VisualScriptExpression::VisualScriptExpression() {
} }

View File

@@ -256,6 +256,8 @@ protected:
void _get_property_list(List<PropertyInfo> *p_list) const; void _get_property_list(List<PropertyInfo> *p_list) const;
public: public:
virtual void reset_state() override;
virtual int get_output_sequence_port_count() const override; virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override; virtual bool has_input_sequence_port() const override;

View File

@@ -677,6 +677,10 @@ void VisualScriptSwitch::_get_property_list(List<PropertyInfo> *p_list) const {
} }
} }
void VisualScriptSwitch::reset_state() {
case_values.clear();
}
void VisualScriptSwitch::_bind_methods() { void VisualScriptSwitch::_bind_methods() {
} }

View File

@@ -202,6 +202,8 @@ protected:
static void _bind_methods(); static void _bind_methods();
public: public:
virtual void reset_state() override;
virtual int get_output_sequence_port_count() const override; virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override; virtual bool has_input_sequence_port() const override;

View File

@@ -303,6 +303,14 @@ VisualScriptNodeInstance *VisualScriptFunction::instance(VisualScriptInstance *p
return instance; return instance;
} }
void VisualScriptFunction::reset_state() {
arguments.clear();
stack_size = 256;
stack_less = false;
sequenced = true;
rpc_mode = MultiplayerAPI::RPC_MODE_DISABLED;
}
VisualScriptFunction::VisualScriptFunction() { VisualScriptFunction::VisualScriptFunction() {
stack_size = 256; stack_size = 256;
stack_less = false; stack_less = false;
@@ -687,6 +695,13 @@ bool VisualScriptLists::is_sequenced() const {
return sequenced; return sequenced;
} }
void VisualScriptLists::reset_state() {
inputports.clear();
outputports.clear();
sequenced = false;
flags = 0;
}
VisualScriptLists::VisualScriptLists() { VisualScriptLists::VisualScriptLists() {
// initialize // initialize
sequenced = false; sequenced = false;

View File

@@ -99,6 +99,8 @@ public:
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance) override; virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance) override;
virtual void reset_state() override;
VisualScriptFunction(); VisualScriptFunction();
}; };
@@ -134,6 +136,8 @@ protected:
static void _bind_methods(); static void _bind_methods();
public: public:
virtual void reset_state() override;
virtual bool is_output_port_editable() const; virtual bool is_output_port_editable() const;
virtual bool is_output_port_name_editable() const; virtual bool is_output_port_name_editable() const;
virtual bool is_output_port_type_editable() const; virtual bool is_output_port_type_editable() const;