Skip to content

Commit

Permalink
Make most resources (save for packedscenes and scripts) reload if the…
Browse files Browse the repository at this point in the history
…y change on disk. Closes #4059.
  • Loading branch information
reduz committed Jun 27, 2016
1 parent 88e28af commit efdcf20
Show file tree
Hide file tree
Showing 9 changed files with 35 additions and 11 deletions.
28 changes: 25 additions & 3 deletions core/resource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {

Expand Down Expand Up @@ -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));

}
}


Expand Down
2 changes: 1 addition & 1 deletion core/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ friend class ResourceCache;
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);
Expand Down
1 change: 1 addition & 0 deletions core/script_language.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
1 change: 1 addition & 0 deletions scene/resources/packed_scene.h
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand Down
2 changes: 2 additions & 0 deletions scene/resources/sample.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,8 @@ RID Sample::get_rid() const {
return sample;
}



void Sample::_bind_methods(){


Expand Down
1 change: 1 addition & 0 deletions scene/resources/sample.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ class Sample : public Resource {

public:


void create(Format p_format, bool p_stereo, int p_length);

Format get_format() const;
Expand Down
4 changes: 0 additions & 4 deletions scene/resources/texture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,10 +98,6 @@ Texture::Texture() {



bool ImageTexture::can_reload_from_file() {

return true;
}

void ImageTexture::reload_from_file() {

Expand Down
1 change: 0 additions & 1 deletion scene/resources/texture.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ class ImageTexture : public Texture {
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);
Expand Down
6 changes: 4 additions & 2 deletions tools/editor/editor_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit efdcf20

Please sign in to comment.