summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/resource.cpp28
-rw-r--r--core/resource.h2
-rw-r--r--core/script_language.h1
-rw-r--r--scene/resources/packed_scene.h1
-rw-r--r--scene/resources/sample.cpp2
-rw-r--r--scene/resources/sample.h1
-rw-r--r--scene/resources/texture.cpp4
-rw-r--r--scene/resources/texture.h1
-rw-r--r--tools/editor/editor_node.cpp6
9 files changed, 35 insertions, 11 deletions
diff --git a/core/resource.cpp b/core/resource.cpp
index 97dee3e1d7..b80ec7012d 100644
--- a/core/resource.cpp
+++ b/core/resource.cpp
@@ -30,7 +30,7 @@
#include "core_string_names.h"
#include <stdio.h>
#include "os/file_access.h"
-
+#include "io/resource_loader.h"
void ResourceImportMetadata::set_editor(const String& p_editor) {
@@ -218,14 +218,36 @@ String Resource::get_name() const {
return name;
}
-bool Resource::can_reload_from_file() {
+bool Resource::editor_can_reload_from_file() {
- return false;
+ return true; //by default yes
}
void Resource::reload_from_file() {
+ String path=get_path();
+ if (!path.is_resource_file())
+ return;
+
+ Ref<Resource> s = ResourceLoader::load(path,get_type(),true);
+
+ if (!s.is_valid())
+ return;
+
+ List<PropertyInfo> pi;
+ s->get_property_list(&pi);
+
+ for (List<PropertyInfo>::Element *E=pi.front();E;E=E->next()) {
+
+ if (!(E->get().usage&PROPERTY_USAGE_STORAGE))
+ continue;
+ if (E->get().name=="resource/path")
+ continue; //do not change path
+
+ set(E->get().name,s->get(E->get().name));
+
+ }
}
diff --git a/core/resource.h b/core/resource.h
index 958414f62b..0673a4e89d 100644
--- a/core/resource.h
+++ b/core/resource.h
@@ -121,7 +121,7 @@ protected:
void _take_over_path(const String& p_path);
public:
- virtual bool can_reload_from_file();
+ virtual bool editor_can_reload_from_file();
virtual void reload_from_file();
void register_owner(Object *p_owner);
diff --git a/core/script_language.h b/core/script_language.h
index 51fb351fde..6d75b83aaf 100644
--- a/core/script_language.h
+++ b/core/script_language.h
@@ -78,6 +78,7 @@ class Script : public Resource {
protected:
+ virtual bool editor_can_reload_from_file() { return false; } // this is handled by editor better
void _notification( int p_what);
static void _bind_methods();
diff --git a/scene/resources/packed_scene.h b/scene/resources/packed_scene.h
index 6bde508d72..3b6c0898e0 100644
--- a/scene/resources/packed_scene.h
+++ b/scene/resources/packed_scene.h
@@ -196,6 +196,7 @@ class PackedScene : public Resource {
protected:
+ virtual bool editor_can_reload_from_file() { return false; } // this is handled by editor better
static void _bind_methods();
public:
diff --git a/scene/resources/sample.cpp b/scene/resources/sample.cpp
index 87fcfc425d..aae4e85a27 100644
--- a/scene/resources/sample.cpp
+++ b/scene/resources/sample.cpp
@@ -187,6 +187,8 @@ RID Sample::get_rid() const {
return sample;
}
+
+
void Sample::_bind_methods(){
diff --git a/scene/resources/sample.h b/scene/resources/sample.h
index 0a88167233..18672e41c0 100644
--- a/scene/resources/sample.h
+++ b/scene/resources/sample.h
@@ -75,6 +75,7 @@ protected:
public:
+
void create(Format p_format, bool p_stereo, int p_length);
Format get_format() const;
diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp
index 2fa00c7da7..726b1938c4 100644
--- a/scene/resources/texture.cpp
+++ b/scene/resources/texture.cpp
@@ -98,10 +98,6 @@ Texture::Texture() {
-bool ImageTexture::can_reload_from_file() {
-
- return true;
-}
void ImageTexture::reload_from_file() {
diff --git a/scene/resources/texture.h b/scene/resources/texture.h
index 103b425cd8..05ea833978 100644
--- a/scene/resources/texture.h
+++ b/scene/resources/texture.h
@@ -103,7 +103,6 @@ private:
float lossy_storage_quality;
protected:
- virtual bool can_reload_from_file();
virtual void reload_from_file();
bool _set(const StringName& p_name, const Variant& p_value);
diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp
index 3ba9f3b799..35b41a8bb9 100644
--- a/tools/editor/editor_node.cpp
+++ b/tools/editor/editor_node.cpp
@@ -2804,10 +2804,12 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
List<Ref<Resource> > cached;
ResourceCache::get_cached_resources(&cached);
-
+ //this should probably be done in a thread..
for(List<Ref<Resource> >::Element *E=cached.front();E;E=E->next()) {
- if (!E->get()->can_reload_from_file())
+ if (!E->get()->editor_can_reload_from_file())
+ continue;
+ if (!E->get()->get_path().is_resource_file() && !E->get()->get_path().is_abs_path())
continue;
if (!FileAccess::exists(E->get()->get_path()))
continue;