diff options
| author | Juan Linietsky | 2015-05-21 15:02:49 -0300 |
|---|---|---|
| committer | Juan Linietsky | 2015-05-21 15:02:49 -0300 |
| commit | bb5d46bb113bca3204db7678eb69900f159e8087 (patch) | |
| tree | cd34e10d67a196d217559ab8d4973b8f5bc4ccde /core | |
| parent | 4b8745ad63409cf14b02735981ee35d2f794421c (diff) | |
| parent | 6049479a99f66b620d59498a76ed9f2c3891f4c8 (diff) | |
| download | godot-bb5d46bb113bca3204db7678eb69900f159e8087.tar.gz godot-bb5d46bb113bca3204db7678eb69900f159e8087.tar.zst godot-bb5d46bb113bca3204db7678eb69900f159e8087.zip | |
Merge branch 'master' of https://github.com/okamstudio/godot
Diffstat (limited to 'core')
| -rw-r--r-- | core/bind/core_bind.cpp | 30 | ||||
| -rw-r--r-- | core/bind/core_bind.h | 5 | ||||
| -rw-r--r-- | core/input_map.cpp | 20 | ||||
| -rw-r--r-- | core/input_map.h | 2 | ||||
| -rw-r--r-- | core/io/config_file.cpp | 2 | ||||
| -rw-r--r-- | core/io/resource_format_binary.cpp | 4 | ||||
| -rw-r--r-- | core/io/resource_format_xml.cpp | 6 | ||||
| -rw-r--r-- | core/method_bind.h | 2 | ||||
| -rw-r--r-- | core/object.cpp | 8 | ||||
| -rw-r--r-- | core/os/dir_access.cpp | 11 | ||||
| -rw-r--r-- | core/os/dir_access.h | 1 | ||||
| -rw-r--r-- | core/undo_redo.cpp | 8 | ||||
| -rw-r--r-- | core/variant_op.cpp | 10 |
13 files changed, 92 insertions, 17 deletions
diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index cde328bc6..128bc9498 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -5,7 +5,7 @@ #include "io/base64.h" #include "core/globals.h" #include "io/file_access_encrypted.h" - +#include "os/keyboard.h" _ResourceLoader *_ResourceLoader::singleton=NULL; Ref<ResourceInteractiveLoader> _ResourceLoader::load_interactive(const String& p_path,const String& p_type_hint) { @@ -694,6 +694,20 @@ String _OS::get_custom_level() const { return OS::get_singleton()->get_custom_level(); } + +String _OS::get_scancode_string(uint32_t p_code) const { + + return keycode_get_string(p_code); +} +bool _OS::is_scancode_unicode(uint32_t p_unicode) const { + + return keycode_has_unicode(p_unicode); +} +int _OS::find_scancode_from_string(const String& p_code) const { + + return find_keycode(p_code); +} + _OS *_OS::singleton=NULL; void _OS::_bind_methods() { @@ -810,6 +824,9 @@ void _OS::_bind_methods() { ObjectTypeDB::bind_method(_MD("native_video_stop"),&_OS::native_video_stop); ObjectTypeDB::bind_method(_MD("native_video_pause"),&_OS::native_video_pause); + ObjectTypeDB::bind_method(_MD("get_scancode_string","code"),&_OS::get_scancode_string); + ObjectTypeDB::bind_method(_MD("is_scancode_unicode","code"),&_OS::is_scancode_unicode); + ObjectTypeDB::bind_method(_MD("find_scancode_from_string","string"),&_OS::find_scancode_from_string); ObjectTypeDB::bind_method(_MD("set_use_file_access_save_and_swap","enabled"),&_OS::set_use_file_access_save_and_swap); @@ -1740,7 +1757,9 @@ _Mutex::~_Mutex(){ void _Thread::_start_func(void *ud) { - _Thread *t=(_Thread*)ud; + Ref<_Thread>* tud=(Ref<_Thread>*)ud; + Ref<_Thread> t=*tud; + memdelete(tud); Variant::CallError ce; const Variant* arg[1]={&t->userdata}; t->ret=t->target_instance->call(t->target_method,arg,1,ce); @@ -1787,9 +1806,11 @@ Error _Thread::start(Object *p_instance,const StringName& p_method,const Variant userdata=p_userdata; active=true; + Ref<_Thread> *ud = memnew( Ref<_Thread>(this) ); + Thread::Settings s; s.priority=(Thread::Priority)p_priority; - thread = Thread::create(_start_func,this,s); + thread = Thread::create(_start_func,ud,s); if (!thread) { active=false; target_method=StringName(); @@ -1850,5 +1871,8 @@ _Thread::_Thread() { _Thread::~_Thread() { + if (active) { + ERR_EXPLAIN("Reference to a Thread object object was lost while the thread is still running.."); + } ERR_FAIL_COND(active==true); } diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index ea8ca9af9..05f54dd64 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -178,6 +178,11 @@ public: String get_unique_ID() const; + String get_scancode_string(uint32_t p_code) const; + bool is_scancode_unicode(uint32_t p_unicode) const; + int find_scancode_from_string(const String& p_code) const; + + /* struct Date { diff --git a/core/input_map.cpp b/core/input_map.cpp index 83b1e757d..24151c59c 100644 --- a/core/input_map.cpp +++ b/core/input_map.cpp @@ -42,7 +42,7 @@ void InputMap::_bind_methods() { ObjectTypeDB::bind_method(_MD("action_add_event","action","event"),&InputMap::action_add_event); ObjectTypeDB::bind_method(_MD("action_has_event","action","event"),&InputMap::action_has_event); ObjectTypeDB::bind_method(_MD("action_erase_event","action","event"),&InputMap::action_erase_event); - ObjectTypeDB::bind_method(_MD("get_action_list","action"),&InputMap::get_action_list); + ObjectTypeDB::bind_method(_MD("get_action_list","action"),&InputMap::_get_action_list); ObjectTypeDB::bind_method(_MD("event_is_action","event","action"),&InputMap::event_is_action); ObjectTypeDB::bind_method(_MD("load_from_globals"),&InputMap::load_from_globals); @@ -162,6 +162,22 @@ void InputMap::action_erase_event(const StringName& p_action,const InputEvent& p } + +Array InputMap::_get_action_list(const StringName& p_action) { + + Array ret; + const List<InputEvent> *al = get_action_list(p_action); + if (al) { + for(const List<InputEvent>::Element *E=al->front();E;E=E->next()) { + + ret.push_back(E->get());; + } + } + + return ret; + +} + const List<InputEvent> *InputMap::get_action_list(const StringName& p_action) { const Map<StringName, Action>::Element *E=input_map.find(p_action); @@ -176,7 +192,7 @@ bool InputMap::event_is_action(const InputEvent& p_event, const StringName& p_ac Map<StringName,Action >::Element *E=input_map.find(p_action); if(!E) { - ERR_EXPLAIN("Request for unexisting InputMap action: "+String(p_action)); + ERR_EXPLAIN("Request for nonexistent InputMap action: "+String(p_action)); ERR_FAIL_COND_V(!E,false); } diff --git a/core/input_map.h b/core/input_map.h index 875a39555..c5b21b145 100644 --- a/core/input_map.h +++ b/core/input_map.h @@ -46,6 +46,8 @@ class InputMap : public Object { List<InputEvent>::Element *_find_event(List<InputEvent> &p_list,const InputEvent& p_event) const; + Array _get_action_list(const StringName& p_action); + protected: static void _bind_methods(); diff --git a/core/io/config_file.cpp b/core/io/config_file.cpp index 95ae31f3d..75388f514 100644 --- a/core/io/config_file.cpp +++ b/core/io/config_file.cpp @@ -357,6 +357,7 @@ if (res!=-1 && res < min_pos) {\ } break; case MIN_OPEN: { int level=1; + end++; while(end<close_pos) { if (str[end]=='[') @@ -373,6 +374,7 @@ if (res!=-1 && res < min_pos) {\ } break; case MIN_CURLY_OPEN: { int level=1; + end++; while(end<close_pos) { if (str[end]=='{') diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp index 3d7d2f236..9fb17bcff 100644 --- a/core/io/resource_format_binary.cpp +++ b/core/io/resource_format_binary.cpp @@ -861,7 +861,7 @@ void ResourceInteractiveLoaderBinary::open(FileAccess *p_f) { print_bl("minor: "+itos(ver_minor)); print_bl("format: "+itos(ver_format)); - if (ver_format<FORMAT_VERSION || ver_major>VERSION_MAJOR || (ver_major==VERSION_MAJOR && ver_minor>VERSION_MINOR)) { + if (ver_format<FORMAT_VERSION || ver_major>VERSION_MAJOR) { f->close(); ERR_EXPLAIN("File Format '"+itos(FORMAT_VERSION)+"."+itos(ver_major)+"."+itos(ver_minor)+"' is too new! Please upgrade to a a new engine version: "+local_path); @@ -968,7 +968,7 @@ String ResourceInteractiveLoaderBinary::recognize(FileAccess *p_f) { uint32_t ver_minor=f->get_32(); uint32_t ver_format=f->get_32(); - if (ver_format<FORMAT_VERSION || ver_major>VERSION_MAJOR || (ver_major==VERSION_MAJOR && ver_minor>VERSION_MINOR)) { + if (ver_format<FORMAT_VERSION || ver_major>VERSION_MAJOR) { f->close(); return ""; diff --git a/core/io/resource_format_xml.cpp b/core/io/resource_format_xml.cpp index 3e625ba6f..3c100d375 100644 --- a/core/io/resource_format_xml.cpp +++ b/core/io/resource_format_xml.cpp @@ -1374,7 +1374,7 @@ Error ResourceInteractiveLoaderXML::poll() { if (res.is_null()) { if (ResourceLoader::get_abort_on_missing_resources()) { - ERR_EXPLAIN(local_path+":"+itos(get_current_line())+": editor exported unexisting resource at: "+path); + ERR_EXPLAIN(local_path+":"+itos(get_current_line())+": editor exported nonexistent resource at: "+path); ERR_FAIL_V(error); } else { ResourceLoader::notify_load_error("Resource Not Found: "+path); @@ -1433,7 +1433,7 @@ Error ResourceInteractiveLoaderXML::poll() { if (res.is_null()) { if (ResourceLoader::get_abort_on_missing_resources()) { - ERR_EXPLAIN(local_path+":"+itos(get_current_line())+": <ext_resource> referenced unexisting resource at: "+path); + ERR_EXPLAIN(local_path+":"+itos(get_current_line())+": <ext_resource> referenced nonexistent resource at: "+path); ERR_FAIL_V(error); } else { ResourceLoader::notify_load_error("Resource Not Found: "+path); @@ -1671,7 +1671,7 @@ void ResourceInteractiveLoaderXML::open(FileAccess *p_f) { int major = version.get_slice(".",0).to_int(); int minor = version.get_slice(".",1).to_int(); - if (major>VERSION_MAJOR || (major==VERSION_MAJOR && minor>VERSION_MINOR)) { + if (major>VERSION_MAJOR) { error=ERR_FILE_UNRECOGNIZED; ResourceLoader::notify_load_error(local_path+": File Format '"+version+"' is too new. Please upgrade to a newer engine version."); diff --git a/core/method_bind.h b/core/method_bind.h index 49c64bd11..85c1084f8 100644 --- a/core/method_bind.h +++ b/core/method_bind.h @@ -298,7 +298,7 @@ MethodBind* create_native_method_bind( Variant (T::*p_method)(const Variant**,in // tale of an amazing hack.. // -// if you declare an unexisting class.. +// if you declare an nonexistent class.. class __UnexistingClass; diff --git a/core/object.cpp b/core/object.cpp index c1904d05d..1a51e79a9 100644 --- a/core/object.cpp +++ b/core/object.cpp @@ -1319,7 +1319,7 @@ Error Object::connect(const StringName& p_signal, Object *p_to_object, const Str if (!s) { bool signal_is_valid = ObjectTypeDB::has_signal(get_type_name(),p_signal); if (!signal_is_valid) { - ERR_EXPLAIN("Attempt to connect to unexisting signal: "+p_signal); + ERR_EXPLAIN("Attempt to connect to nonexistent signal: "+p_signal); ERR_FAIL_COND_V(!signal_is_valid,ERR_INVALID_PARAMETER); } signal_map[p_signal]=Signal(); @@ -1356,7 +1356,7 @@ bool Object::is_connected(const StringName& p_signal, Object *p_to_object, const bool signal_is_valid = ObjectTypeDB::has_signal(get_type_name(),p_signal); if (signal_is_valid) return false; - ERR_EXPLAIN("Unexisting signal: "+p_signal); + ERR_EXPLAIN("Nonexistent signal: "+p_signal); ERR_FAIL_COND_V(!s,false); } @@ -1373,7 +1373,7 @@ void Object::disconnect(const StringName& p_signal, Object *p_to_object, const S ERR_FAIL_NULL(p_to_object); Signal *s = signal_map.getptr(p_signal); if (!s) { - ERR_EXPLAIN("Unexisting signal: "+p_signal); + ERR_EXPLAIN("Nonexistent signal: "+p_signal); ERR_FAIL_COND(!s); } if (s->lock>0) { @@ -1384,7 +1384,7 @@ void Object::disconnect(const StringName& p_signal, Object *p_to_object, const S Signal::Target target(p_to_object->get_instance_ID(),p_to_method); if (!s->slot_map.has(target)) { - ERR_EXPLAIN("Disconnecting unexisting signal '"+p_signal+"', slot: "+itos(target._id)+":"+target.method); + ERR_EXPLAIN("Disconnecting nonexistent signal '"+p_signal+"', slot: "+itos(target._id)+":"+target.method); ERR_FAIL(); } int prev = p_to_object->connections.size(); diff --git a/core/os/dir_access.cpp b/core/os/dir_access.cpp index a1031cf5f..d0baae587 100644 --- a/core/os/dir_access.cpp +++ b/core/os/dir_access.cpp @@ -56,6 +56,17 @@ String DirAccess::_get_root_string() const { return ""; } +int DirAccess::get_current_drive() { + + String path = get_current_dir().to_lower(); + for(int i=0;i<get_drive_count();i++) { + String d = get_drive(i).to_lower(); + if (path.begins_with(d)) + return i; + } + + return 0; +} static Error _erase_recursive(DirAccess *da) { diff --git a/core/os/dir_access.h b/core/os/dir_access.h index 3df9bca45..8bacc96c6 100644 --- a/core/os/dir_access.h +++ b/core/os/dir_access.h @@ -84,6 +84,7 @@ public: virtual int get_drive_count()=0; virtual String get_drive(int p_drive)=0; + virtual int get_current_drive(); virtual Error change_dir(String p_dir)=0; ///< can be relative or absolute, return false on success virtual String get_current_dir()=0; ///< return current dir location diff --git a/core/undo_redo.cpp b/core/undo_redo.cpp index f26659577..5e7df3be7 100644 --- a/core/undo_redo.cpp +++ b/core/undo_redo.cpp @@ -234,11 +234,17 @@ void UndoRedo::_process_operation_list(List<Operation>::Element *E) { ERR_FAIL_COND(!obj); } + switch(op.type) { case Operation::TYPE_METHOD: { - obj->call(op.name,VARIANT_ARGS_FROM_ARRAY(op.args)); + obj->call(op.name,VARIANT_ARGS_FROM_ARRAY(op.args)); +#ifdef TOOLS_ENABLED + Resource* res = obj->cast_to<Resource>(); + if (res) + res->set_edited(true); +#endif } break; case Operation::TYPE_PROPERTY: { diff --git a/core/variant_op.cpp b/core/variant_op.cpp index f68652b8c..1cdf6d731 100644 --- a/core/variant_op.cpp +++ b/core/variant_op.cpp @@ -3388,7 +3388,15 @@ Variant Variant::iter_get(const Variant& r_iter,bool &r_valid) const { void Variant::interpolate(const Variant& a, const Variant& b, float c,Variant &r_dst) { if (a.type!=b.type) { - r_dst=a; + if (a.is_num() && b.is_num()) { + //not as efficient but.. + real_t va=a; + real_t vb=b; + r_dst=(1.0-c) * va + vb * c; + + } else { + r_dst=a; + } return; } |
