diff options
603 files changed, 131877 insertions, 19338 deletions
diff --git a/bin/tests/test_gdscript.cpp b/bin/tests/test_gdscript.cpp index 4457d70b38..43d65f782b 100644 --- a/bin/tests/test_gdscript.cpp +++ b/bin/tests/test_gdscript.cpp @@ -222,6 +222,7 @@ static String _parser_expr(const GDParser::Node *p_expr) { case GDParser::OperatorNode::OP_BIT_AND: { txt=_parser_expr(c_node->arguments[0])+"&"+_parser_expr(c_node->arguments[1]); } break;; case GDParser::OperatorNode::OP_BIT_OR: { txt=_parser_expr(c_node->arguments[0])+"|"+_parser_expr(c_node->arguments[1]); } break; case GDParser::OperatorNode::OP_BIT_XOR: { txt=_parser_expr(c_node->arguments[0])+"^"+_parser_expr(c_node->arguments[1]); } break; + default: {} } diff --git a/bin/tests/test_math.cpp b/bin/tests/test_math.cpp index 8e08969fa4..4b686e8af8 100644 --- a/bin/tests/test_math.cpp +++ b/bin/tests/test_math.cpp @@ -113,6 +113,7 @@ uint32_t ihash3( uint32_t a) MainLoop* test() { + print_line(itos(Math::step_decimals( 0.0001 ))); return NULL; { diff --git a/bin/tests/test_misc.cpp b/bin/tests/test_misc.cpp index 68564c62b0..9d7adc3573 100644 --- a/bin/tests/test_misc.cpp +++ b/bin/tests/test_misc.cpp @@ -431,7 +431,7 @@ public: RID lightaux = vs->light_create( VisualServer::LIGHT_DIRECTIONAL ); //vs->light_set_color( lightaux, VisualServer::LIGHT_COLOR_AMBIENT, Color(0.0,0.0,0.0) ); //vs->light_set_shadow( lightaux, true ); - RID light = vs->instance_create2( lightaux,scenario ); + vs->instance_create2( lightaux,scenario ); //rot_a=Transform(Matrix3(Vector3(1,0,0),Math_PI/2.0),Vector3()); rot_b=Transform(Matrix3(),Vector3(2,0,0)); diff --git a/bin/tests/test_physics.cpp b/bin/tests/test_physics.cpp index ecd90a13d4..f202d0dda1 100644 --- a/bin/tests/test_physics.cpp +++ b/bin/tests/test_physics.cpp @@ -609,7 +609,7 @@ public: //t.basis.rotate(Vector3(-1,0,0),Math_PI/4*i); - RID b = create_body(type,PhysicsServer::BODY_MODE_RIGID,t); + create_body(type,PhysicsServer::BODY_MODE_RIGID,t); //RID b = create_body(type,i==0?PhysicsServer::BODY_MODE_STATIC:PhysicsServer::BODY_MODE_RIGID,t); } diff --git a/bin/tests/test_physics_2d.cpp b/bin/tests/test_physics_2d.cpp index c5fb734999..845e20b6c3 100644 --- a/bin/tests/test_physics_2d.cpp +++ b/bin/tests/test_physics_2d.cpp @@ -410,7 +410,7 @@ public: Physics2DServer::ShapeType type = types[i%4]; // type=Physics2DServer::SHAPE_SEGMENT; - RID b = _add_body(type,Matrix32(i*0.8,Point2(152+i*40,100-40*i))); + _add_body(type,Matrix32(i*0.8,Point2(152+i*40,100-40*i))); //if (i==0) // ps->body_set_mode(b,Physics2DServer::BODY_MODE_STATIC); } diff --git a/core/array.cpp b/core/array.cpp index bb8e527304..23792f90fc 100644 --- a/core/array.cpp +++ b/core/array.cpp @@ -200,6 +200,10 @@ int Array::count(const Variant& p_value) const { return amount; } +bool Array::has(const Variant& p_value) const { + return _p->array.find(p_value, 0) != -1; +} + void Array::remove(int p_pos) { _p->array.remove(p_pos); diff --git a/core/array.h b/core/array.h index 096660653e..dfc902525c 100644 --- a/core/array.h +++ b/core/array.h @@ -75,6 +75,7 @@ public: int rfind(const Variant& p_value, int p_from=-1) const; int find_last(const Variant& p_value) const; int count(const Variant& p_value) const; + bool has(const Variant& p_value) const; void erase(const Variant& p_value); diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index 3e2f8ff263..4e815d044d 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -1936,6 +1936,13 @@ Error _Directory::make_dir(String p_dir){ Error _Directory::make_dir_recursive(String p_dir){ ERR_FAIL_COND_V(!d,ERR_UNCONFIGURED); + if (!p_dir.is_rel_path()) { + DirAccess *d = DirAccess::create_for_path(p_dir); + Error err = d->make_dir_recursive(p_dir); + memdelete(d); + return err; + + } return d->make_dir_recursive(p_dir); } diff --git a/core/dictionary.cpp b/core/dictionary.cpp index 6204a87054..6770b798f1 100644 --- a/core/dictionary.cpp +++ b/core/dictionary.cpp @@ -232,6 +232,20 @@ Error Dictionary::parse_json(const String& p_json) { return OK; } +Dictionary Dictionary::copy() const { + + Dictionary n(is_shared()); + + List<Variant> keys; + get_key_list(&keys); + + for(List<Variant>::Element *E=keys.front();E;E=E->next()) { + n[E->get()]=operator[](E->get()); + } + + return n; +} + String Dictionary::to_json() const { return JSON::print(*this); diff --git a/core/dictionary.h b/core/dictionary.h index ae79fab9c3..6a5f4e20e6 100644 --- a/core/dictionary.h +++ b/core/dictionary.h @@ -83,6 +83,8 @@ public: Array keys() const; Array values() const; + Dictionary copy() const; + Dictionary(const Dictionary& p_from); Dictionary(bool p_shared=false); ~Dictionary(); diff --git a/core/func_ref.cpp b/core/func_ref.cpp index 29b06ae9a0..ca890111be 100644 --- a/core/func_ref.cpp +++ b/core/func_ref.cpp @@ -61,11 +61,7 @@ void FuncRef::_bind_methods() { MethodInfo mi; mi.name="call_func"; Vector<Variant> defargs; - for(int i=0;i<10;i++) { - mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i))); - defargs.push_back(Variant()); - } - ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"call_func",&FuncRef::call_func,mi,defargs); + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"call_func:Variant",&FuncRef::call_func,mi,defargs); } diff --git a/core/globals.cpp b/core/globals.cpp index e760bc00d4..b822f52f15 100644 --- a/core/globals.cpp +++ b/core/globals.cpp @@ -1332,17 +1332,18 @@ Variant _GLOBAL_DEF( const String& p_var, const Variant& p_default) { void Globals::add_singleton(const Singleton &p_singleton) { singletons.push_back(p_singleton); + singleton_ptrs[p_singleton.name]=p_singleton.ptr; } Object* Globals::get_singleton_object(const String& p_name) const { - for(const List<Singleton>::Element *E=singletons.front();E;E=E->next()) { - if (E->get().name == p_name) { - return E->get().ptr; - }; - }; - return NULL; + const Map<StringName,Object*>::Element *E=singleton_ptrs.find(p_name); + if (!E) + return NULL; + else + return E->get(); + }; bool Globals::has_singleton(const String& p_name) const { @@ -1375,6 +1376,25 @@ Vector<String> Globals::get_optimizer_presets() const { } +void Globals::_add_property_info_bind(const Dictionary& p_info) { + + ERR_FAIL_COND(!p_info.has("name")); + ERR_FAIL_COND(!p_info.has("type")); + + PropertyInfo pinfo; + pinfo.name = p_info["name"]; + ERR_FAIL_COND(!props.has(pinfo.name)); + pinfo.type = Variant::Type(p_info["type"].operator int()); + ERR_FAIL_INDEX(pinfo.type, Variant::VARIANT_MAX); + + if (p_info.has("hint")) + pinfo.hint = PropertyHint(p_info["hint"].operator int()); + if (p_info.has("hint_string")) + pinfo.hint_string = p_info["hint_string"]; + + set_custom_property_info(pinfo.name, pinfo); +} + void Globals::set_custom_property_info(const String& p_prop,const PropertyInfo& p_info) { ERR_FAIL_COND(!props.has(p_prop)); @@ -1399,6 +1419,7 @@ void Globals::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_order","name"),&Globals::get_order); ObjectTypeDB::bind_method(_MD("set_persisting","name","enable"),&Globals::set_persisting); ObjectTypeDB::bind_method(_MD("is_persisting","name"),&Globals::is_persisting); + ObjectTypeDB::bind_method(_MD("add_property_info", "hint"),&Globals::_add_property_info_bind); ObjectTypeDB::bind_method(_MD("clear","name"),&Globals::clear); ObjectTypeDB::bind_method(_MD("localize_path","path"),&Globals::localize_path); ObjectTypeDB::bind_method(_MD("globalize_path","path"),&Globals::globalize_path); diff --git a/core/globals.h b/core/globals.h index 68bb859ace..5e0bdb0e54 100644 --- a/core/globals.h +++ b/core/globals.h @@ -91,11 +91,14 @@ protected: Error _save_settings_binary(const String& p_file,const Map<String,List<String> > &props,const CustomMap& p_custom=CustomMap()); List<Singleton> singletons; + Map<StringName,Object*> singleton_ptrs; Error _save_custom_bnd(const String& p_file); bool _load_resource_pack(const String& p_pack); + void _add_property_info_bind(const Dictionary& p_info); + protected: static void _bind_methods(); diff --git a/core/image.cpp b/core/image.cpp index d6ac3f28ea..90051d7d0d 100644 --- a/core/image.cpp +++ b/core/image.cpp @@ -2052,6 +2052,7 @@ Error Image::_decompress_bc() { ht/=2; } break; + default: {} } } diff --git a/core/input_map.cpp b/core/input_map.cpp index 08ee8138a3..3a0f9596f5 100644 --- a/core/input_map.cpp +++ b/core/input_map.cpp @@ -290,6 +290,10 @@ bool InputMap::event_is_joy_motion_action_pressed(const InputEvent& p_event) con } +const Map<StringName, InputMap::Action>& InputMap::get_action_map() const { + return input_map; +} + void InputMap::load_from_globals() { input_map.clear();; diff --git a/core/input_map.h b/core/input_map.h index dc5a911963..a224765d8c 100644 --- a/core/input_map.h +++ b/core/input_map.h @@ -35,12 +35,14 @@ class InputMap : public Object { OBJ_TYPE( InputMap, Object ); - static InputMap *singleton; - +public: struct Action { int id; List<InputEvent> inputs; }; +private: + static InputMap *singleton; + mutable Map<StringName, Action> input_map; mutable Map<int,StringName> input_id_map; @@ -72,7 +74,7 @@ public: bool event_is_action(const InputEvent& p_event, const StringName& p_action) const; bool event_is_joy_motion_action_pressed(const InputEvent& p_event) const; - + const Map<StringName, Action>& get_action_map() const; void load_from_globals(); void load_default(); diff --git a/core/io/compression.cpp b/core/io/compression.cpp index a17e358cbb..ca44d24911 100644 --- a/core/io/compression.cpp +++ b/core/io/compression.cpp @@ -60,6 +60,10 @@ int Compression::compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size,M strm.avail_in=p_src_size; int aout = deflateBound(&strm,p_src_size);; + /*if (aout>p_src_size) { + deflateEnd(&strm); + return -1; + }*/ strm.avail_out=aout; strm.next_in=(Bytef*)p_src; strm.next_out=p_dst; @@ -107,19 +111,21 @@ int Compression::get_max_compressed_buffer_size(int p_src_size,Mode p_mode){ -void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size,Mode p_mode){ +int Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size,Mode p_mode){ switch(p_mode) { case MODE_FASTLZ: { + int ret_size=0; + if (p_dst_max_size<16) { uint8_t dst[16]; - fastlz_decompress(p_src,p_src_size,dst,16); + ret_size = fastlz_decompress(p_src,p_src_size,dst,16); copymem(p_dst,dst,p_dst_max_size); } else { - fastlz_decompress(p_src,p_src_size,p_dst,p_dst_max_size); + ret_size = fastlz_decompress(p_src,p_src_size,p_dst,p_dst_max_size); } - return; + return ret_size; } break; case MODE_DEFLATE: { @@ -130,7 +136,7 @@ void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t * strm.avail_in= 0; strm.next_in=Z_NULL; int err = inflateInit(&strm); - ERR_FAIL_COND(err!=Z_OK); + ERR_FAIL_COND_V(err!=Z_OK,-1); strm.avail_in=p_src_size; strm.avail_out=p_dst_max_size; @@ -138,11 +144,12 @@ void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t * strm.next_out=p_dst; err = inflate(&strm,Z_FINISH); + int total = strm.total_out; inflateEnd(&strm); - ERR_FAIL_COND(err!=Z_STREAM_END); - return; + ERR_FAIL_COND_V(err!=Z_STREAM_END,-1); + return total; } break; } - ERR_FAIL(); + ERR_FAIL_V(-1); } diff --git a/core/io/compression.h b/core/io/compression.h index 07a293c940..e0a4d31a51 100644 --- a/core/io/compression.h +++ b/core/io/compression.h @@ -43,7 +43,7 @@ public: static int compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size,Mode p_mode=MODE_FASTLZ); static int get_max_compressed_buffer_size(int p_src_size,Mode p_mode=MODE_FASTLZ); - static void decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size,Mode p_mode=MODE_FASTLZ); + static int decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size,Mode p_mode=MODE_FASTLZ); Compression(); }; diff --git a/core/io/file_access_pack.cpp b/core/io/file_access_pack.cpp index 5c8c741f28..1632b841c6 100644 --- a/core/io/file_access_pack.cpp +++ b/core/io/file_access_pack.cpp @@ -409,6 +409,8 @@ Error DirAccessPack::change_dir(String p_dir) { nd=nd.simplify_path(); + if (nd == "") nd = "."; + if (nd.begins_with("/")) { nd=nd.replace_first("/","") ; absolute=true; diff --git a/core/io/image_loader.cpp b/core/io/image_loader.cpp index 05bad97e90..ac6c00dc61 100644 --- a/core/io/image_loader.cpp +++ b/core/io/image_loader.cpp @@ -51,7 +51,7 @@ Error ImageLoader::load_image(String p_file,Image *p_image, FileAccess *p_custom Error err; f=FileAccess::open(p_file,FileAccess::READ,&err); if (!f) { - print_line("ERROR OPENING FILE: "+p_file); + ERR_PRINTS("Error opening file: "+p_file); return err; } } @@ -76,7 +76,6 @@ Error ImageLoader::load_image(String p_file,Image *p_image, FileAccess *p_custom } - print_line("NO LOADER?"); if (!p_custom) memdelete(f); diff --git a/core/io/networked_multiplayer_peer.cpp b/core/io/networked_multiplayer_peer.cpp new file mode 100644 index 0000000000..47e5f3729c --- /dev/null +++ b/core/io/networked_multiplayer_peer.cpp @@ -0,0 +1,41 @@ +#include "networked_multiplayer_peer.h" + + +void NetworkedMultiplayerPeer::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_transfer_mode","mode"), &NetworkedMultiplayerPeer::set_transfer_mode ); + ObjectTypeDB::bind_method(_MD("set_target_peer","id"), &NetworkedMultiplayerPeer::set_target_peer ); + + ObjectTypeDB::bind_method(_MD("get_packet_peer"), &NetworkedMultiplayerPeer::get_packet_peer ); + + ObjectTypeDB::bind_method(_MD("poll"), &NetworkedMultiplayerPeer::poll ); + + ObjectTypeDB::bind_method(_MD("get_connection_status"), &NetworkedMultiplayerPeer::get_connection_status ); + ObjectTypeDB::bind_method(_MD("get_unique_id"), &NetworkedMultiplayerPeer::get_unique_id ); + + ObjectTypeDB::bind_method(_MD("set_refuse_new_connections","enable"), &NetworkedMultiplayerPeer::set_refuse_new_connections ); + ObjectTypeDB::bind_method(_MD("is_refusing_new_connections"), &NetworkedMultiplayerPeer::is_refusing_new_connections ); + + BIND_CONSTANT( TRANSFER_MODE_UNRELIABLE ); + BIND_CONSTANT( TRANSFER_MODE_UNRELIABLE_ORDERED ); + BIND_CONSTANT( TRANSFER_MODE_RELIABLE ); + + BIND_CONSTANT( CONNECTION_DISCONNECTED ); + BIND_CONSTANT( CONNECTION_CONNECTING ); + BIND_CONSTANT( CONNECTION_CONNECTED ); + + BIND_CONSTANT( TARGET_PEER_BROADCAST ); + BIND_CONSTANT( TARGET_PEER_SERVER ); + + + ADD_SIGNAL( MethodInfo("peer_connected",PropertyInfo(Variant::INT,"id"))); + ADD_SIGNAL( MethodInfo("peer_disconnected",PropertyInfo(Variant::INT,"id"))); + ADD_SIGNAL( MethodInfo("server_disconnected")); + ADD_SIGNAL( MethodInfo("connection_succeeded") ); + ADD_SIGNAL( MethodInfo("connection_failed") ); +} + +NetworkedMultiplayerPeer::NetworkedMultiplayerPeer() { + + +} diff --git a/core/io/networked_multiplayer_peer.h b/core/io/networked_multiplayer_peer.h new file mode 100644 index 0000000000..485200a9a9 --- /dev/null +++ b/core/io/networked_multiplayer_peer.h @@ -0,0 +1,54 @@ +#ifndef NETWORKED_MULTIPLAYER_PEER_H +#define NETWORKED_MULTIPLAYER_PEER_H + +#include "io/packet_peer.h" + +class NetworkedMultiplayerPeer : public PacketPeer { + + OBJ_TYPE(NetworkedMultiplayerPeer,PacketPeer); + +protected: + static void _bind_methods(); +public: + + enum { + TARGET_PEER_BROADCAST=0, + TARGET_PEER_SERVER=1 + }; + enum TransferMode { + TRANSFER_MODE_UNRELIABLE, + TRANSFER_MODE_UNRELIABLE_ORDERED, + TRANSFER_MODE_RELIABLE, + }; + + enum ConnectionStatus { + CONNECTION_DISCONNECTED, + CONNECTION_CONNECTING, + CONNECTION_CONNECTED, + }; + + + virtual void set_transfer_mode(TransferMode p_mode)=0; + virtual void set_target_peer(int p_peer_id)=0; + + virtual int get_packet_peer() const=0; + + virtual bool is_server() const=0; + + virtual void poll()=0; + + virtual int get_unique_id() const=0; + + virtual void set_refuse_new_connections(bool p_enable)=0; + virtual bool is_refusing_new_connections() const=0; + + + virtual ConnectionStatus get_connection_status() const=0; + + NetworkedMultiplayerPeer(); +}; + +VARIANT_ENUM_CAST( NetworkedMultiplayerPeer::TransferMode ) +VARIANT_ENUM_CAST( NetworkedMultiplayerPeer::ConnectionStatus ) + +#endif // NetworkedMultiplayerPeer_H diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp index 343a54e0d7..0544fd6ba8 100644 --- a/core/io/resource_format_binary.cpp +++ b/core/io/resource_format_binary.cpp @@ -447,13 +447,17 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant& r_v) { } break; case VARIANT_INPUT_EVENT: { + InputEvent ev; + ev.type=f->get_32(); //will only work for null though. + r_v=ev; + } break; case VARIANT_DICTIONARY: { - uint32_t len=f->get_32(); - Dictionary d(len&0x80000000); //last bit means shared - len&=0x7FFFFFFF; - for(uint32_t i=0;i<len;i++) { + uint32_t len=f->get_32(); + Dictionary d(len&0x80000000); //last bit means shared + len&=0x7FFFFFFF; + for(uint32_t i=0;i<len;i++) { Variant key; Error err = parse_variant(key); ERR_FAIL_COND_V(err,ERR_FILE_CORRUPT); @@ -466,11 +470,11 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant& r_v) { } break; case VARIANT_ARRAY: { - uint32_t len=f->get_32(); - Array a(len&0x80000000); //last bit means shared - len&=0x7FFFFFFF; + uint32_t len=f->get_32(); + Array a(len&0x80000000); //last bit means shared + len&=0x7FFFFFFF; a.resize(len); - for(uint32_t i=0;i<len;i++) { + for(uint32_t i=0;i<len;i++) { Variant val; Error err = parse_variant(val); ERR_FAIL_COND_V(err,ERR_FILE_CORRUPT); @@ -1725,7 +1729,9 @@ void ResourceFormatSaverBinaryInstance::write_variant(const Variant& p_property, case Variant::INPUT_EVENT: { f->store_32(VARIANT_INPUT_EVENT); - WARN_PRINT("Can't save InputEvent (maybe it could..)"); + InputEvent event=p_property; + f->store_32(0); //event type none, nothing else suported for now. + } break; case Variant::DICTIONARY: { @@ -2169,6 +2175,9 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path,const RES& p_ if (takeover_paths) { r->set_path(p_path+"::"+itos(r->get_subindex()),true); } +#ifdef TOOLS_ENABLED + r->set_edited(false); +#endif } else { save_unicode_string(r->get_path()); //actual external } diff --git a/core/io/resource_format_xml.cpp b/core/io/resource_format_xml.cpp index 0d545b16f5..44fbaf02ac 100644 --- a/core/io/resource_format_xml.cpp +++ b/core/io/resource_format_xml.cpp @@ -2800,6 +2800,10 @@ Error ResourceFormatSaverXMLInstance::save(const String &p_path,const RES& p_res if (takeover_paths) { res->set_path(p_path+"::"+itos(idx),true); } +#ifdef TOOLS_ENABLED + res->set_edited(false); +#endif + } write_string("\n",false); diff --git a/core/io/stream_peer.cpp b/core/io/stream_peer.cpp index 306e7d8c9d..baaeacaf18 100644 --- a/core/io/stream_peer.cpp +++ b/core/io/stream_peer.cpp @@ -222,6 +222,7 @@ void StreamPeer::put_double(double p_val){ void StreamPeer::put_utf8_string(const String& p_string) { CharString cs=p_string.utf8(); + put_u32(p_string.length()); put_data((const uint8_t*)cs.get_data(),cs.length()); } @@ -348,8 +349,10 @@ String StreamPeer::get_string(int p_bytes){ ERR_FAIL_COND_V(p_bytes<0,String()); Vector<char> buf; - buf.resize(p_bytes+1); - get_data((uint8_t*)&buf[0],p_bytes); + Error err = buf.resize(p_bytes+1); + ERR_FAIL_COND_V(err!=OK,String()); + err = get_data((uint8_t*)&buf[0],p_bytes); + ERR_FAIL_COND_V(err!=OK,String()); buf[p_bytes]=0; return buf.ptr(); @@ -359,8 +362,10 @@ String StreamPeer::get_utf8_string(int p_bytes){ ERR_FAIL_COND_V(p_bytes<0,String()); Vector<uint8_t> buf; - buf.resize(p_bytes); - get_data(buf.ptr(),p_bytes); + Error err = buf.resize(p_bytes); + ERR_FAIL_COND_V(err!=OK,String()); + err = get_data(buf.ptr(),p_bytes); + ERR_FAIL_COND_V(err!=OK,String()); String ret; ret.parse_utf8((const char*)buf.ptr(),buf.size()); @@ -371,8 +376,10 @@ Variant StreamPeer::get_var(){ int len = get_32(); Vector<uint8_t> var; - var.resize(len); - get_data(var.ptr(),len); + Error err = var.resize(len); + ERR_FAIL_COND_V(err!=OK,Variant()); + err = get_data(var.ptr(),len); + ERR_FAIL_COND_V(err!=OK,Variant()); Variant ret; decode_variant(ret,var.ptr(),len); @@ -420,3 +427,128 @@ void StreamPeer::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_utf8_string","bytes"),&StreamPeer::get_utf8_string); ObjectTypeDB::bind_method(_MD("get_var:Variant"),&StreamPeer::get_var); } +//////////////////////////////// + + +void StreamPeerBuffer::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("seek","pos"),&StreamPeerBuffer::seek); + ObjectTypeDB::bind_method(_MD("get_size"),&StreamPeerBuffer::get_size); + ObjectTypeDB::bind_method(_MD("get_pos"),&StreamPeerBuffer::get_pos); + ObjectTypeDB::bind_method(_MD("resize","size"),&StreamPeerBuffer::resize); + ObjectTypeDB::bind_method(_MD("set_data_array","data"),&StreamPeerBuffer::set_data_array); + ObjectTypeDB::bind_method(_MD("get_data_array"),&StreamPeerBuffer::get_data_array); + ObjectTypeDB::bind_method(_MD("clear"),&StreamPeerBuffer::clear); + ObjectTypeDB::bind_method(_MD("duplicate:StreamPeerBuffer"),&StreamPeerBuffer::duplicate); + +} + + +Error StreamPeerBuffer::put_data(const uint8_t* p_data,int p_bytes) { + + if (p_bytes<=0) + return OK; + + if (pointer+p_bytes > data.size()) { + data.resize(pointer+p_bytes); + + } + + DVector<uint8_t>::Write w = data.write(); + copymem(&w[pointer],p_data,p_bytes); + + pointer+=p_bytes; + return OK; +} + +Error StreamPeerBuffer::put_partial_data(const uint8_t* p_data,int p_bytes, int &r_sent){ + + r_sent=p_bytes; + return put_data(p_data,p_bytes); +} + +Error StreamPeerBuffer::get_data(uint8_t* p_buffer, int p_bytes){ + + int recv; + get_partial_data(p_buffer,p_bytes,recv); + if (recv!=p_bytes) + return ERR_INVALID_PARAMETER; + + return OK; + +} +Error StreamPeerBuffer::get_partial_data(uint8_t* p_buffer, int p_bytes,int &r_received){ + + + if (pointer+p_bytes > data.size()) { + r_received=data.size()-pointer; + if (r_received<=0) { + r_received=0; + return OK; //you got 0 + } + } else { + r_received=p_bytes; + } + + DVector<uint8_t>::Read r = data.read(); + copymem(p_buffer,r.ptr(),r_received); +} + +int StreamPeerBuffer::get_available_bytes() const { + + return data.size()-pointer; +} + +void StreamPeerBuffer::seek(int p_pos){ + + ERR_FAIL_COND(p_pos < 0); + ERR_FAIL_COND(p_pos > data.size()); + pointer=p_pos; +} +int StreamPeerBuffer::get_size() const{ + + return data.size(); +} + +int StreamPeerBuffer::get_pos() const { + + return pointer; +} + +void StreamPeerBuffer::resize(int p_size){ + + data.resize(p_size); +} + +void StreamPeerBuffer::set_data_array(const DVector<uint8_t> & p_data){ + + data=p_data; + pointer=0; +} + +DVector<uint8_t> StreamPeerBuffer::get_data_array() const{ + + return data; +} + + +void StreamPeerBuffer::clear() { + + data.resize(0); + pointer=0; +} + + +Ref<StreamPeerBuffer> StreamPeerBuffer::duplicate() const { + + Ref<StreamPeerBuffer> spb; + spb.instance(); + spb->data=data; + return spb; +} + + +StreamPeerBuffer::StreamPeerBuffer() { + + pointer=0; +} diff --git a/core/io/stream_peer.h b/core/io/stream_peer.h index 970e6695a5..f28e6f594d 100644 --- a/core/io/stream_peer.h +++ b/core/io/stream_peer.h @@ -91,4 +91,40 @@ public: StreamPeer() { big_endian=false; } }; + +class StreamPeerBuffer : public StreamPeer { + + OBJ_TYPE(StreamPeerBuffer,StreamPeer); + + DVector<uint8_t> data; + int pointer; +protected: + + static void _bind_methods(); +public: + Error put_data(const uint8_t* p_data,int p_bytes); + Error put_partial_data(const uint8_t* p_data,int p_bytes, int &r_sent); + + Error get_data(uint8_t* p_buffer, int p_bytes); + Error get_partial_data(uint8_t* p_buffer, int p_bytes,int &r_received); + + virtual int get_available_bytes() const; + + void seek(int p_pos); + int get_size() const; + int get_pos() const; + void resize(int p_size); + + + void set_data_array(const DVector<uint8_t> & p_data); + DVector<uint8_t> get_data_array() const; + + void clear(); + + Ref<StreamPeerBuffer> duplicate() const; + + StreamPeerBuffer(); +}; + + #endif // STREAM_PEER_H diff --git a/core/make_binders.py b/core/make_binders.py index c14f07ac83..7584722965 100644 --- a/core/make_binders.py +++ b/core/make_binders.py @@ -62,6 +62,8 @@ public: #else set_argument_count($argc$); #endif + + $ifret _set_returns(true); $ }; }; @@ -140,6 +142,9 @@ public: #else set_argument_count($argc$); #endif + $ifret _set_returns(true); $ + + }; }; diff --git a/core/math/geometry.cpp b/core/math/geometry.cpp index 5b767212f5..790903eff5 100644 --- a/core/math/geometry.cpp +++ b/core/math/geometry.cpp @@ -629,7 +629,7 @@ DVector< Face3 > Geometry::wrap_geometry( DVector< Face3 > p_array,float *p_erro // create and initialize cells to zero - print_line("Wrapper: Initializing Cells"); + //print_line("Wrapper: Initializing Cells"); uint8_t ***cell_status=memnew_arr(uint8_t**,div_x); for(int i=0;i<div_x;i++) { @@ -648,7 +648,7 @@ DVector< Face3 > Geometry::wrap_geometry( DVector< Face3 > p_array,float *p_erro } // plot faces into cells - print_line("Wrapper (1/6): Plotting Faces"); + //print_line("Wrapper (1/6): Plotting Faces"); for (int i=0;i<face_count;i++) { @@ -663,7 +663,7 @@ DVector< Face3 > Geometry::wrap_geometry( DVector< Face3 > p_array,float *p_erro // determine which cells connect to the outside by traversing the outside and recursively flood-fill marking - print_line("Wrapper (2/6) Flood Filling"); + //print_line("Wrapper (2/6): Flood Filling"); for (int i=0;i<div_x;i++) { @@ -694,7 +694,7 @@ DVector< Face3 > Geometry::wrap_geometry( DVector< Face3 > p_array,float *p_erro // build faces for the inside-outside cell divisors - print_line("Wrapper (3/6): Building Faces"); + //print_line("Wrapper (3/6): Building Faces"); DVector<Face3> wrapped_faces; @@ -709,7 +709,7 @@ DVector< Face3 > Geometry::wrap_geometry( DVector< Face3 > p_array,float *p_erro } } - print_line("Wrapper (4/6): Transforming Back Vertices"); + //print_line("Wrapper (4/6): Transforming Back Vertices"); // transform face vertices to global coords @@ -728,7 +728,7 @@ DVector< Face3 > Geometry::wrap_geometry( DVector< Face3 > p_array,float *p_erro } // clean up grid - print_line("Wrapper (5/6): Grid Cleanup"); + //print_line("Wrapper (5/6): Grid Cleanup"); for(int i=0;i<div_x;i++) { @@ -744,7 +744,7 @@ DVector< Face3 > Geometry::wrap_geometry( DVector< Face3 > p_array,float *p_erro if (p_error) *p_error=voxelsize.length(); - print_line("Wrapper (6/6): Finished."); + //print_line("Wrapper (6/6): Finished."); return wrapped_faces; } diff --git a/core/math/math_2d.h b/core/math/math_2d.h index ad4655b8f7..90aae9fe50 100644 --- a/core/math/math_2d.h +++ b/core/math/math_2d.h @@ -157,7 +157,7 @@ struct Vector2 { float get_aspect() const { return width/height; } - operator String() const { return String::num(x)+","+String::num(y); } + operator String() const { return String::num(x)+", "+String::num(y); } _FORCE_INLINE_ Vector2(float p_x,float p_y) { x=p_x; y=p_y; } _FORCE_INLINE_ Vector2() { x=0; y=0; } @@ -356,7 +356,7 @@ struct Rect2 { } - operator String() const { return String(pos)+","+String(size); } + operator String() const { return String(pos)+", "+String(size); } Rect2() {} Rect2( float p_x, float p_y, float p_width, float p_height) { pos=Point2(p_x,p_y); size=Size2( p_width, p_height ); } @@ -409,7 +409,7 @@ struct Point2i { float get_aspect() const { return width/(float)height; } - operator String() const { return String::num(x)+","+String::num(y); } + operator String() const { return String::num(x)+", "+String::num(y); } operator Vector2() const { return Vector2(x,y); } inline Point2i(const Vector2& p_vec2) { x=(int)p_vec2.x; y=(int)p_vec2.y; } @@ -540,7 +540,7 @@ struct Rect2i { } - operator String() const { return String(pos)+","+String(size); } + operator String() const { return String(pos)+", "+String(size); } operator Rect2() const { return Rect2(pos,size); } Rect2i(const Rect2& p_r2) { pos=p_r2.pos; size=p_r2.size; } @@ -618,6 +618,15 @@ struct Matrix32 { operator String() const; + Matrix32(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox, real_t oy) { + + elements[0][0] = xx; + elements[0][1] = xy; + elements[1][0] = yx; + elements[1][1] = yy; + elements[2][0] = ox; + elements[2][1] = oy; + } Matrix32(real_t p_rot, const Vector2& p_pos); Matrix32() { elements[0][0]=1.0; elements[1][1]=1.0; } diff --git a/core/math/math_funcs.cpp b/core/math/math_funcs.cpp index 0fbd031214..64615fe6b4 100644 --- a/core/math/math_funcs.cpp +++ b/core/math/math_funcs.cpp @@ -206,25 +206,29 @@ double Math::ceil(double p_x) { return ::ceil(p_x); } -int Math::decimals(double p_step) { - - int max=4; - double llimit = Math::pow(0.1,max); - double ulimit = 1.0-llimit; - int i=0; - while( max) { - - float d = absf(p_step) - Math::floor(absf(p_step)); +int Math::step_decimals(double p_step) { + + static const int maxn=9; + static const double sd[maxn]={ + 0.9999, // somehow compensate for floating point error + 0.09999, + 0.009999, + 0.0009999, + 0.00009999, + 0.000009999, + 0.0000009999, + 0.00000009999, + 0.000000009999 + }; - if (d<llimit || d>ulimit) - break; - p_step*=10.0; - max--; - i++; + double as=absf(p_step); + for(int i=0;i<maxn;i++) { + if (as>=sd[i]) { + return i; + } } - return i; - + return maxn; } double Math::ease(double p_x, double p_c) { diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h index 2e1b9c989e..fc76d96b2e 100644 --- a/core/math/math_funcs.h +++ b/core/math/math_funcs.h @@ -66,7 +66,7 @@ public: static double floor(double p_x); static double ceil(double p_x); static double ease(double p_x, double p_c); - static int decimals(double p_step); + static int step_decimals(double p_step); static double stepify(double p_value,double p_step); static void seed(uint32_t x=0); static void randomize(); diff --git a/core/math/quat.cpp b/core/math/quat.cpp index c6c12129b3..73124e5e8e 100644 --- a/core/math/quat.cpp +++ b/core/math/quat.cpp @@ -252,7 +252,7 @@ Quat Quat::cubic_slerp(const Quat& q, const Quat& prep, const Quat& postq,const Quat::operator String() const { - return String::num(x)+","+String::num(y)+","+ String::num(z)+","+ String::num(w); + return String::num(x)+", "+String::num(y)+", "+ String::num(z)+", "+ String::num(w); } Quat::Quat(const Vector3& axis, const real_t& angle) { diff --git a/core/math/triangulate.cpp b/core/math/triangulate.cpp index 27b7c86675..1f5d5ed6b3 100644 --- a/core/math/triangulate.cpp +++ b/core/math/triangulate.cpp @@ -157,7 +157,10 @@ bool Triangulate::triangulate(const Vector<Vector2> &contour,Vector<int> &result m++; /* remove v from remaining polygon */ - for(s=v,t=v+1;t<nv;s++,t++) V[s] = V[t]; nv--; + for(s=v,t=v+1;t<nv;s++,t++) + V[s] = V[t]; + + nv--; /* resest error detection counter */ count = 2*nv; diff --git a/core/math/vector3.cpp b/core/math/vector3.cpp index 8afd73f482..b4a13d8f6d 100644 --- a/core/math/vector3.cpp +++ b/core/math/vector3.cpp @@ -65,13 +65,9 @@ int Vector3::max_axis() const { void Vector3::snap(float p_val) { - x+=p_val/2.0; - x-=Math::fmod(x,p_val); - y+=p_val/2.0; - y-=Math::fmod(y,p_val); - z+=p_val/2.0; - z-=Math::fmod(z,p_val); - + x=Math::stepify(x,p_val); + y=Math::stepify(y,p_val); + z=Math::stepify(z,p_val); } Vector3 Vector3::snapped(float p_val) const { diff --git a/core/method_bind.cpp b/core/method_bind.cpp index b41fa33887..a99d0af636 100644 --- a/core/method_bind.cpp +++ b/core/method_bind.cpp @@ -64,6 +64,12 @@ void MethodBind::_set_const(bool p_const) { _const=p_const; } +void MethodBind::_set_returns(bool p_returns) { + + _returns=p_returns; +} + + StringName MethodBind::get_name() const { return name; } @@ -118,6 +124,7 @@ MethodBind::MethodBind() { argument_types=NULL; #endif _const=false; + _returns=false; } MethodBind::~MethodBind() { diff --git a/core/method_bind.h b/core/method_bind.h index 30a848270d..04ff5c22c6 100644 --- a/core/method_bind.h +++ b/core/method_bind.h @@ -52,6 +52,7 @@ enum MethodFlags { METHOD_FLAG_REVERSE=16, // used for events METHOD_FLAG_VIRTUAL=32, METHOD_FLAG_FROM_SCRIPT=64, + METHOD_FLAG_VARARG=128, METHOD_FLAGS_DEFAULT=METHOD_FLAG_NORMAL, }; @@ -154,6 +155,9 @@ VARIANT_ENUM_CAST( wchar_t ); VARIANT_ENUM_CAST( Margin ); VARIANT_ENUM_CAST( Orientation ); VARIANT_ENUM_CAST( HAlign ); +VARIANT_ENUM_CAST( Variant::Type ); +VARIANT_ENUM_CAST( Variant::Operator ); +VARIANT_ENUM_CAST( InputEvent::Type ); class MethodBind { @@ -170,11 +174,13 @@ class MethodBind { StringName ret_type; #endif bool _const; + bool _returns; protected: void _set_const(bool p_const); + void _set_returns(bool p_returns); #ifdef DEBUG_METHODS_ENABLED virtual Variant::Type _gen_argument_type(int p_arg) const=0; void _generate_argument_types(int p_count); @@ -224,7 +230,7 @@ public: Vector<StringName> get_argument_names() const; #endif void set_hint_flags(uint32_t p_hint) { hint_flags=p_hint; } - uint32_t get_hint_flags() const { return hint_flags|(is_const()?METHOD_FLAG_CONST:0); } + uint32_t get_hint_flags() const { return hint_flags|(is_const()?METHOD_FLAG_CONST:0)|(is_vararg()?METHOD_FLAG_VARARG:0); } virtual String get_instance_type() const=0; _FORCE_INLINE_ int get_argument_count() const { return argument_count; }; @@ -261,7 +267,8 @@ public: void set_name(const StringName& p_name); _FORCE_INLINE_ int get_method_id() const { return method_id; } _FORCE_INLINE_ bool is_const() const { return _const; } - + _FORCE_INLINE_ bool has_return() const { return _returns; } + virtual bool is_vararg() const { return false; } void set_default_arguments(const Vector<Variant>& p_defargs); @@ -271,7 +278,7 @@ public: template<class T> -class MethodBindNative : public MethodBind { +class MethodBindVarArg : public MethodBind { public: typedef Variant (T::*NativeCall)(const Variant**,int ,Variant::CallError &); protected: @@ -313,7 +320,9 @@ public: } #ifdef PTRCALL_ENABLED - virtual void ptrcall(Object* p_object,const void** p_args,void* r_ret) {} //todo + virtual void ptrcall(Object* p_object,const void** p_args,void* r_ret) { + ERR_FAIL(); //can't call + } //todo #endif @@ -321,14 +330,16 @@ public: virtual bool is_const() const { return false; } virtual String get_instance_type() const { return T::get_type_static(); } - MethodBindNative() { call_method=NULL; } + virtual bool is_vararg() const { return true; } + + MethodBindVarArg() { call_method=NULL; _set_returns(true);} }; template<class T > -MethodBind* create_native_method_bind( Variant (T::*p_method)(const Variant**,int ,Variant::CallError &), const MethodInfo& p_info ) { +MethodBind* create_vararg_method_bind( Variant (T::*p_method)(const Variant**,int ,Variant::CallError &), const MethodInfo& p_info ) { - MethodBindNative<T > * a = memnew( (MethodBindNative<T >) ); + MethodBindVarArg<T > * a = memnew( (MethodBindVarArg<T >) ); a->set_method(p_method); a->set_method_info(p_info); return a; diff --git a/core/object.cpp b/core/object.cpp index dc3d531927..8cd4e07097 100644 --- a/core/object.cpp +++ b/core/object.cpp @@ -59,30 +59,112 @@ struct _ObjectDebugLock { #endif + +PropertyInfo::operator Dictionary() const { + + Dictionary d; + d["name"]=name; + d["type"]=type; + d["hint"]=hint; + d["hint_string"]=hint_string; + d["usage"]=usage; + return d; + +} + +PropertyInfo PropertyInfo::from_dict(const Dictionary& p_dict) { + + PropertyInfo pi; + + if (p_dict.has("type")) + pi.type=Variant::Type(int(p_dict["type"])); + + if (p_dict.has("name")) + pi.name=p_dict["name"]; + + if (p_dict.has("hint")) + pi.hint=PropertyHint(int(p_dict["hint"])); + + if (p_dict.has("hint_string")) + + pi.hint_string=p_dict["hint_string"]; + + if (p_dict.has("usage")) + pi.usage=p_dict["usage"]; + + return pi; +} + + Array convert_property_list(const List<PropertyInfo> * p_list) { Array va; for (const List<PropertyInfo>::Element *E=p_list->front();E;E=E->next()) { - const PropertyInfo &pi = E->get(); - Dictionary d; - d["name"]=pi.name; - d["type"]=pi.type; - d["hint"]=pi.hint; - d["hint_string"]=pi.hint_string; - d["usage"]=pi.usage; - va.push_back(d); + + va.push_back(Dictionary(E->get())); } return va; } +MethodInfo::operator Dictionary() const { + + + Dictionary d; + d["name"]=name; + d["args"]=convert_property_list(&arguments); + Array da; + for(int i=0;i<default_arguments.size();i++) + da.push_back(default_arguments[i]); + d["default_args"]=da; + d["flags"]=flags; + d["id"]=id; + Dictionary r = return_val; + d["return"]=r; + return d; + +} + MethodInfo::MethodInfo() { id=0; flags=METHOD_FLAG_NORMAL; } +MethodInfo MethodInfo::from_dict(const Dictionary& p_dict) { + + MethodInfo mi; + + if (p_dict.has("name")) + mi.name=p_dict["name"]; + Array args; + if (p_dict.has("args")) { + args=p_dict["args"]; + } + + for(int i=0;i<args.size();i++) { + Dictionary d = args[i]; + mi.arguments.push_back(PropertyInfo::from_dict(d)); + } + Array defargs; + if (p_dict.has("default_args")) { + defargs=p_dict["default_args"]; + } + for(int i=0;i<defargs.size();i++) { + mi.default_arguments.push_back(defargs[i]); + } + + if (p_dict.has("return")) { + mi.return_val=PropertyInfo::from_dict(p_dict["return"]); + } + + if (p_dict.has("flags")) + mi.flags=p_dict["flags"]; + + return mi; +} + MethodInfo::MethodInfo(const String& p_name) { id=0; @@ -1012,25 +1094,6 @@ Array Object::_get_property_list_bind() const { } -static Dictionary _get_dict_from_method(const MethodInfo &mi) { - - Dictionary d; - d["name"]=mi.name; - d["args"]=convert_property_list(&mi.arguments); - Array da; - for(int i=0;i<mi.default_arguments.size();i++) - da.push_back(mi.default_arguments[i]); - d["default_args"]=da; - d["flags"]=mi.flags; - d["id"]=mi.id; - Dictionary r; - r["type"]=mi.return_val.type; - r["hint"]=mi.return_val.hint; - r["hint_string"]=mi.return_val.hint_string; - d["return_type"]=r; - return d; - -} Array Object::_get_method_list_bind() const { @@ -1040,7 +1103,7 @@ Array Object::_get_method_list_bind() const { for(List<MethodInfo>::Element *E=ml.front();E;E=E->next()) { - Dictionary d = _get_dict_from_method(E->get()); + Dictionary d = E->get(); //va.push_back(d); ret.push_back(d); } @@ -1305,7 +1368,7 @@ Array Object::_get_signal_list() const{ Array ret; for (List<MethodInfo>::Element *E=signal_list.front();E;E=E->next()) { - ret.push_back(_get_dict_from_method(E->get())); + ret.push_back(Dictionary(E->get())); } return ret; @@ -1581,6 +1644,7 @@ void Object::_clear_internal_resource_paths(const Variant &p_var) { _clear_internal_resource_paths(d[E->get()]); } } break; + default: {} } } @@ -1630,42 +1694,26 @@ void Object::_bind_methods() { MethodInfo mi; mi.name="emit_signal"; mi.arguments.push_back( PropertyInfo( Variant::STRING, "signal")); - Vector<Variant> defargs; - for(int i=0;i<VARIANT_ARG_MAX;i++) { - mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i))); - defargs.push_back(Variant()); - } - - ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"emit_signal",&Object::_emit_signal,mi,defargs); + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"emit_signal",&Object::_emit_signal,mi); } { MethodInfo mi; mi.name="call"; mi.arguments.push_back( PropertyInfo( Variant::STRING, "method")); - Vector<Variant> defargs; - for(int i=0;i<10;i++) { - mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i))); - defargs.push_back(Variant()); - } - ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"call",&Object::_call_bind,mi,defargs); + + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"call:Variant",&Object::_call_bind,mi); } { MethodInfo mi; mi.name="call_deferred"; mi.arguments.push_back( PropertyInfo( Variant::STRING, "method")); - Vector<Variant> defargs; - for(int i=0;i<VARIANT_ARG_MAX;i++) { - mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i))); - defargs.push_back(Variant()); - } - - ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"call_deferred",&Object::_call_deferred_bind,mi,defargs); + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"call_deferred",&Object::_call_deferred_bind,mi); } ObjectTypeDB::bind_method(_MD("callv:Variant","method","arg_array"),&Object::callv); diff --git a/core/object.h b/core/object.h index d7b0f09df9..ac3fc51b3e 100644 --- a/core/object.h +++ b/core/object.h @@ -68,6 +68,16 @@ enum PropertyHint { PROPERTY_HINT_IMAGE_COMPRESS_LOSSY, PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS, PROPERTY_HINT_OBJECT_ID, + PROPERTY_HINT_TYPE_STRING, ///< a type string, the hint is the base type to choose + PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE, ///< so something else can provide this (used in scripts) + PROPERTY_HINT_METHOD_OF_VARIANT_TYPE, ///< a method of a type + PROPERTY_HINT_METHOD_OF_BASE_TYPE, ///< a method of a base type + PROPERTY_HINT_METHOD_OF_INSTANCE, ///< a method of an instance + PROPERTY_HINT_METHOD_OF_SCRIPT, ///< a method of a script & base + PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE, ///< a property of a type + PROPERTY_HINT_PROPERTY_OF_BASE_TYPE, ///< a property of a base type + PROPERTY_HINT_PROPERTY_OF_INSTANCE, ///< a property of an instance + PROPERTY_HINT_PROPERTY_OF_SCRIPT, ///< a property of a script & base PROPERTY_HINT_MAX, }; @@ -116,6 +126,11 @@ struct PropertyInfo { _FORCE_INLINE_ PropertyInfo added_usage(int p_fl) const { PropertyInfo pi=*this; pi.usage|=p_fl; return pi; } + + operator Dictionary() const; + + static PropertyInfo from_dict(const Dictionary& p_dict); + PropertyInfo() { type=Variant::NIL; hint=PROPERTY_HINT_NONE; usage = PROPERTY_USAGE_DEFAULT; } PropertyInfo( Variant::Type p_type, const String p_name, PropertyHint p_hint=PROPERTY_HINT_NONE, const String& p_hint_string="",uint32_t p_usage=PROPERTY_USAGE_DEFAULT) { type=p_type; name=p_name; hint=p_hint; hint_string=p_hint_string; usage=p_usage; @@ -140,6 +155,9 @@ struct MethodInfo { inline bool operator<(const MethodInfo& p_method) const { return id==p_method.id?(name < p_method.name):(id<p_method.id); } + operator Dictionary() const; + + static MethodInfo from_dict(const Dictionary& p_dict); MethodInfo(); MethodInfo(const String& p_name); MethodInfo(const String& p_name, const PropertyInfo& p_param1); diff --git a/core/object_type_db.cpp b/core/object_type_db.cpp index 5f97df39a6..aa641923e6 100644 --- a/core/object_type_db.cpp +++ b/core/object_type_db.cpp @@ -549,6 +549,23 @@ bool ObjectTypeDB::has_signal(StringName p_type,StringName p_signal) { return false; } +bool ObjectTypeDB::get_signal(StringName p_type,StringName p_signal,MethodInfo *r_signal) { + + TypeInfo *type=types.getptr(p_type); + TypeInfo *check=type; + while(check) { + if (check->signal_map.has(p_signal)) { + if (r_signal) { + *r_signal=check->signal_map[p_signal]; + } + return true; + } + check=check->inherits_ptr; + } + + return false; +} + void ObjectTypeDB::add_property(StringName p_type,const PropertyInfo& p_pinfo, const StringName& p_setter, const StringName& p_getter, int p_index) { @@ -625,7 +642,7 @@ void ObjectTypeDB::get_property_list(StringName p_type, List<PropertyInfo> *p_li TypeInfo *check=type; while(check) { - for(List<PropertyInfo>::Element *E=type->property_list.front();E;E=E->next()) { + for(List<PropertyInfo>::Element *E=check->property_list.front();E;E=E->next()) { if (p_validator) { @@ -828,7 +845,7 @@ MethodBind* ObjectTypeDB::bind_methodfi(uint32_t p_flags, MethodBind *p_bind , c TypeInfo *type=types.getptr(instance_type); if (!type) { - print_line("couldn't bind method "+mdname+" for instance: "+instance_type); + ERR_PRINTS("Couldn't bind method '"+mdname+"' for instance: "+instance_type); memdelete(p_bind); ERR_FAIL_COND_V(!type,NULL); } @@ -849,21 +866,14 @@ MethodBind* ObjectTypeDB::bind_methodfi(uint32_t p_flags, MethodBind *p_bind , c Vector<Variant> defvals; -#define PARSE_DEFVAL(m_defval)\ -if (d##m_defval.used) defvals.insert(0,d##m_defval.val);\ -else goto set_defvals; - defvals.resize(p_defcount); for(int i=0;i<p_defcount;i++) { defvals[i]=*p_defs[p_defcount-i-1]; } - set_defvals: - p_bind->set_default_arguments(defvals); p_bind->set_hint_flags(p_flags); -#undef PARSE_DEFVAL return p_bind; } diff --git a/core/object_type_db.h b/core/object_type_db.h index 8313091acd..725b424c9a 100644 --- a/core/object_type_db.h +++ b/core/object_type_db.h @@ -415,14 +415,21 @@ public: #endif template<class M> - static MethodBind* bind_native_method(uint32_t p_flags, const StringName& p_name, M p_method,const MethodInfo& p_info=MethodInfo(),const Vector<Variant>& p_default_args=Vector<Variant>()) { + static MethodBind* bind_vararg_method(uint32_t p_flags, StringName p_name, M p_method,const MethodInfo& p_info=MethodInfo(),const Vector<Variant>& p_default_args=Vector<Variant>()) { GLOBAL_LOCK_FUNCTION; - MethodBind *bind = create_native_method_bind(p_method,p_info); + MethodBind *bind = create_vararg_method_bind(p_method,p_info); ERR_FAIL_COND_V(!bind,NULL); + + String rettype; + if (p_name.operator String().find(":")!=-1) { + rettype = p_name.operator String().get_slice(":",1); + p_name = p_name.operator String().get_slice(":",0); + } + bind->set_name(p_name); bind->set_default_arguments(p_default_args); @@ -442,6 +449,8 @@ public: } type->method_map[p_name]=bind; #ifdef DEBUG_METHODS_ENABLED + if (!rettype.empty()) + bind->set_return_type(rettype); type->method_order.push_back(p_name); #endif @@ -453,6 +462,7 @@ public: static void add_signal(StringName p_type,const MethodInfo& p_signal); static bool has_signal(StringName p_type,StringName p_signal); + static bool get_signal(StringName p_type,StringName p_signal,MethodInfo *r_signal); static void get_signal_list(StringName p_type,List<MethodInfo> *p_signals,bool p_no_inheritance=false); static void add_property(StringName p_type,const PropertyInfo& p_pinfo, const StringName& p_setter, const StringName& p_getter, int p_index=-1); diff --git a/core/os/input.cpp b/core/os/input.cpp index 531db73838..401ab7ffe2 100644 --- a/core/os/input.cpp +++ b/core/os/input.cpp @@ -53,6 +53,8 @@ void Input::_bind_methods() { ObjectTypeDB::bind_method(_MD("is_mouse_button_pressed","button"),&Input::is_mouse_button_pressed); ObjectTypeDB::bind_method(_MD("is_joy_button_pressed","device","button"),&Input::is_joy_button_pressed); ObjectTypeDB::bind_method(_MD("is_action_pressed","action"),&Input::is_action_pressed); + ObjectTypeDB::bind_method(_MD("is_action_just_pressed","action"),&Input::is_action_just_pressed); + ObjectTypeDB::bind_method(_MD("is_action_just_released","action"),&Input::is_action_just_released); ObjectTypeDB::bind_method(_MD("add_joy_mapping","mapping", "update_existing"),&Input::add_joy_mapping, DEFVAL(false)); ObjectTypeDB::bind_method(_MD("remove_joy_mapping","guid"),&Input::remove_joy_mapping); ObjectTypeDB::bind_method(_MD("is_joy_known","device"),&Input::is_joy_known); diff --git a/core/os/input.h b/core/os/input.h index 16bcc0ff9a..665fb4ad99 100644 --- a/core/os/input.h +++ b/core/os/input.h @@ -55,12 +55,14 @@ public: static Input *get_singleton(); - virtual bool is_key_pressed(int p_scancode)=0; - virtual bool is_mouse_button_pressed(int p_button)=0; - virtual bool is_joy_button_pressed(int p_device, int p_button)=0; - virtual bool is_action_pressed(const StringName& p_action)=0; - - virtual float get_joy_axis(int p_device,int p_axis)=0; + virtual bool is_key_pressed(int p_scancode) const=0; + virtual bool is_mouse_button_pressed(int p_button) const=0; + virtual bool is_joy_button_pressed(int p_device, int p_button) const=0; + virtual bool is_action_pressed(const StringName& p_action) const=0; + virtual bool is_action_just_pressed(const StringName& p_action) const=0; + virtual bool is_action_just_released(const StringName& p_action) const=0; + + virtual float get_joy_axis(int p_device,int p_axis) const=0; virtual String get_joy_name(int p_idx)=0; virtual Array get_connected_joysticks()=0; virtual void joy_connection_changed(int p_idx, bool p_connected, String p_name, String p_guid)=0; @@ -80,9 +82,9 @@ public: virtual void warp_mouse_pos(const Vector2& p_to)=0; - virtual Vector3 get_accelerometer()=0; - virtual Vector3 get_magnetometer()=0; - virtual Vector3 get_gyroscope()=0; + virtual Vector3 get_accelerometer() const=0; + virtual Vector3 get_magnetometer() const=0; + virtual Vector3 get_gyroscope() const=0; virtual void action_press(const StringName& p_action)=0; virtual void action_release(const StringName& p_action)=0; diff --git a/core/os/input_event.cpp b/core/os/input_event.cpp index 8c79657c64..9d920724e1 100644 --- a/core/os/input_event.cpp +++ b/core/os/input_event.cpp @@ -34,8 +34,56 @@ */ bool InputEvent::operator==(const InputEvent &p_event) const { + if (type != p_event.type){ + return false; + } - return true; + switch(type) { + case NONE: + return true; + case KEY: + return key.unicode == p_event.key.unicode + && key.scancode == p_event.key.scancode + && key.echo == p_event.key.echo + && key.pressed == p_event.key.pressed + && key.mod == p_event.key.mod; + case MOUSE_MOTION: + return mouse_motion.x == p_event.mouse_motion.x + && mouse_motion.y == p_event.mouse_motion.y + && mouse_motion.relative_x == p_event.mouse_motion.relative_y + && mouse_motion.button_mask == p_event.mouse_motion.button_mask + && key.mod == p_event.key.mod; + case MOUSE_BUTTON: + return mouse_button.pressed == p_event.mouse_button.pressed + && mouse_button.x == p_event.mouse_button.x + && mouse_button.y == p_event.mouse_button.y + && mouse_button.button_index == p_event.mouse_button.button_index + && mouse_button.button_mask == p_event.mouse_button.button_mask + && key.mod == p_event.key.mod; + case JOYSTICK_MOTION: + return joy_motion.axis == p_event.joy_motion.axis + && joy_motion.axis_value == p_event.joy_motion.axis_value; + case JOYSTICK_BUTTON: + return joy_button.pressed == p_event.joy_button.pressed + && joy_button.button_index == p_event.joy_button.button_index + && joy_button.pressure == p_event.joy_button.pressure; + case SCREEN_TOUCH: + return screen_touch.pressed == p_event.screen_touch.pressed + && screen_touch.index == p_event.screen_touch.index + && screen_touch.x == p_event.screen_touch.x + && screen_touch.y == p_event.screen_touch.y; + case SCREEN_DRAG: + return screen_drag.index == p_event.screen_drag.index + && screen_drag.x == p_event.screen_drag.x + && screen_drag.y == p_event.screen_drag.y; + case ACTION: + return action.action == p_event.action.action + && action.pressed == p_event.action.pressed; + default: + ERR_PRINT("No logic to compare InputEvents of this type, this shouldn't happen."); + } + + return false; } InputEvent::operator String() const { diff --git a/core/os/keyboard.cpp b/core/os/keyboard.cpp index 4c0a074a07..9710638234 100644 --- a/core/os/keyboard.cpp +++ b/core/os/keyboard.cpp @@ -429,6 +429,27 @@ static const _KeyCodeReplace _keycode_replace_neo[]={ {0,0} }; +int keycode_get_count() { + + const _KeyCodeText *kct =&_keycodes[0]; + + int count=0; + while(kct->text) { + + count++; + kct++; + } + return count; +} + +int keycode_get_value_by_index(int p_index) { + return _keycodes[p_index].code; +} + +const char* keycode_get_name_by_index(int p_index) { + return _keycodes[p_index].text; +} + int latin_keyboard_keycode_convert(int p_keycode) { diff --git a/core/os/keyboard.h b/core/os/keyboard.h index 80472acc09..fd52d331c8 100644 --- a/core/os/keyboard.h +++ b/core/os/keyboard.h @@ -328,6 +328,9 @@ enum KeyModifierMask { String keycode_get_string(uint32_t p_code); bool keycode_has_unicode(uint32_t p_unicode); int find_keycode(const String& p_code); +int keycode_get_count(); +int keycode_get_value_by_index(int p_index); +const char* keycode_get_name_by_index(int p_index); int latin_keyboard_keycode_convert(int p_keycode); #endif diff --git a/core/os/os.cpp b/core/os/os.cpp index 5f86962048..ee32476234 100644 --- a/core/os/os.cpp +++ b/core/os/os.cpp @@ -587,6 +587,9 @@ OS::OS() { _time_scale=1.0; _pixel_snap=false; _allow_hidpi=true; + _fixed_frames=0; + _idle_frames=0; + _in_fixed=false; Math::seed(1234567); } diff --git a/core/os/os.h b/core/os/os.h index 2521d67e29..8e9293b3c8 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -62,6 +62,10 @@ class OS { bool _pixel_snap; bool _allow_hidpi; + uint64_t _fixed_frames; + uint64_t _idle_frames; + bool _in_fixed; + char *last_error; public: @@ -282,6 +286,10 @@ public: uint64_t get_frames_drawn(); + uint64_t get_fixed_frames() const { return _fixed_frames; } + uint64_t get_idle_frames() const { return _idle_frames; } + bool is_in_fixed_frame() const { return _in_fixed; } + bool is_stdout_verbose() const; enum CursorShape { diff --git a/core/path_db.cpp b/core/path_db.cpp index d0feda5c82..132cc83a35 100644 --- a/core/path_db.cpp +++ b/core/path_db.cpp @@ -363,6 +363,7 @@ NodePath::NodePath(const String& p_path) { from=i+1; } + } path=path.substr(0,subpath_pos); @@ -380,6 +381,8 @@ NodePath::NodePath(const String& p_path) { last_is_slash=false; } + + } if (slices==0 && !absolute && !property) @@ -413,6 +416,7 @@ NodePath::NodePath(const String& p_path) { } else { last_is_slash=false; } + } diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp index 97bd5f2a32..3de26573f4 100644 --- a/core/register_core_types.cpp +++ b/core/register_core_types.cpp @@ -118,6 +118,7 @@ void register_core_types() { ObjectTypeDB::register_type<Resource>(); ObjectTypeDB::register_type<FuncRef>(); ObjectTypeDB::register_virtual_type<StreamPeer>(); + ObjectTypeDB::register_type<StreamPeerBuffer>(); ObjectTypeDB::register_create_type<StreamPeerTCP>(); ObjectTypeDB::register_create_type<TCP_Server>(); ObjectTypeDB::register_create_type<PacketPeerUDP>(); diff --git a/core/script_debugger_remote.cpp b/core/script_debugger_remote.cpp index 99d1e22c07..1ac0907967 100644 --- a/core/script_debugger_remote.cpp +++ b/core/script_debugger_remote.cpp @@ -219,7 +219,8 @@ void ScriptDebuggerRemote::debug(ScriptLanguage *p_script,bool p_can_continue) { if (F->get().get_type()==Variant::OBJECT) { packet_peer_stream->put_var("*"+E->get()); - packet_peer_stream->put_var(safe_get_instance_id(F->get())); + String pretty_print = F->get().operator String(); + packet_peer_stream->put_var(pretty_print.ascii().get_data()); } else { packet_peer_stream->put_var(E->get()); packet_peer_stream->put_var(F->get()); @@ -242,7 +243,8 @@ void ScriptDebuggerRemote::debug(ScriptLanguage *p_script,bool p_can_continue) { if (F->get().get_type()==Variant::OBJECT) { packet_peer_stream->put_var("*"+E->get()); - packet_peer_stream->put_var(safe_get_instance_id(F->get())); + String pretty_print = F->get().operator String(); + packet_peer_stream->put_var(pretty_print.ascii().get_data()); } else { packet_peer_stream->put_var(E->get()); packet_peer_stream->put_var(F->get()); diff --git a/core/script_language.cpp b/core/script_language.cpp index 75d8b6d285..fa1d01d3eb 100644 --- a/core/script_language.cpp +++ b/core/script_language.cpp @@ -33,6 +33,7 @@ int ScriptServer::_language_count=0; bool ScriptServer::scripting_enabled=true; bool ScriptServer::reload_scripts_on_save=false; +ScriptEditRequestFunction ScriptServer::edit_request_func=NULL; void Script::_notification( int p_what) { diff --git a/core/script_language.h b/core/script_language.h index 6d75b83aaf..1b037e908c 100644 --- a/core/script_language.h +++ b/core/script_language.h @@ -38,6 +38,8 @@ class ScriptLanguage; +typedef void (*ScriptEditRequestFunction)(const String& p_path); + class ScriptServer { enum { @@ -50,6 +52,8 @@ class ScriptServer { static bool reload_scripts_on_save; public: + static ScriptEditRequestFunction edit_request_func; + static void set_scripting_enabled(bool p_enabled); static bool is_scripting_enabled(); static int get_language_count(); @@ -88,6 +92,8 @@ public: virtual bool can_instance() const=0; + virtual Ref<Script> get_base_script() const=0; //for script inheritance + virtual StringName get_instance_base_type() const=0; // this may not work in all scripts, will return empty if so virtual ScriptInstance* instance_create(Object *p_this)=0; virtual bool instance_has(const Object *p_this) const=0; @@ -98,6 +104,9 @@ public: virtual void set_source_code(const String& p_code)=0; virtual Error reload(bool p_keep_state=false)=0; + virtual bool has_method(const StringName& p_method) const=0; + virtual MethodInfo get_method_info(const StringName& p_method) const=0; + virtual bool is_tool() const=0; virtual String get_node_type() const=0; @@ -110,6 +119,8 @@ public: virtual bool get_property_default_value(const StringName& p_property,Variant& r_value) const=0; virtual void update_exports() {} //editor tool + virtual void get_script_method_list(List<MethodInfo> *p_list) const=0; + virtual void get_script_property_list(List<PropertyInfo> *p_list) const=0; Script() {} @@ -117,6 +128,8 @@ public: class ScriptInstance { public: + + virtual bool set(const StringName& p_name, const Variant& p_value)=0; virtual bool get(const StringName& p_name, Variant &r_ret) const=0; virtual void get_property_list(List<PropertyInfo> *p_properties) const=0; @@ -144,6 +157,17 @@ public: virtual bool is_placeholder() const { return false; } + enum RPCMode { + RPC_MODE_DISABLED, + RPC_MODE_REMOTE, + RPC_MODE_SYNC, + RPC_MODE_MASTER, + RPC_MODE_SLAVE, + }; + + virtual RPCMode get_rpc_mode(const StringName& p_method) const=0; + virtual RPCMode get_rset_mode(const StringName& p_variable) const=0; + virtual ScriptLanguage *get_language()=0; virtual ~ScriptInstance(); }; @@ -177,7 +201,7 @@ public: virtual void get_reserved_words(List<String> *p_words) const=0; virtual void get_comment_delimiters(List<String> *p_delimiters) const=0; virtual void get_string_delimiters(List<String> *p_delimiters) const=0; - virtual String get_template(const String& p_class_name, const String& p_base_class_name) const=0; + virtual Ref<Script> get_template(const String& p_class_name, const String& p_base_class_name) const=0; virtual bool validate(const String& p_script, int &r_line_error,int &r_col_error,String& r_test_error, const String& p_path="",List<String> *r_functions=NULL) const=0; virtual Script *create_script() const=0; virtual bool has_named_classes() const=0; @@ -275,6 +299,9 @@ public: virtual bool is_placeholder() const { return true; } + virtual RPCMode get_rpc_mode(const StringName& p_method) const { return RPC_MODE_DISABLED; } + virtual RPCMode get_rset_mode(const StringName& p_variable) const { return RPC_MODE_DISABLED; } + PlaceHolderScriptInstance(ScriptLanguage *p_language, Ref<Script> p_script,Object *p_owner); ~PlaceHolderScriptInstance(); diff --git a/core/string_db.cpp b/core/string_db.cpp index 9a693f88e9..bf92c4eac4 100644 --- a/core/string_db.cpp +++ b/core/string_db.cpp @@ -183,7 +183,8 @@ StringName::StringName(const char *p_name) { ERR_FAIL_COND(!configured); - ERR_FAIL_COND( !p_name || !p_name[0]); + if (!p_name || p_name[0]==0) + return; //empty, ignore _global_lock(); @@ -288,6 +289,9 @@ StringName::StringName(const String& p_name) { ERR_FAIL_COND(!configured); + if (p_name==String()) + return; + _global_lock(); uint32_t hash = p_name.hash(); diff --git a/core/translation.cpp b/core/translation.cpp index 01789747ea..4592d00598 100644 --- a/core/translation.cpp +++ b/core/translation.cpp @@ -32,11 +32,23 @@ #include "os/os.h" static const char* locale_list[]={ +"aa", // Afar +"aa_DJ", // Afar (Djibouti) +"aa_ER", // Afar (Eritrea) +"aa_ET", // Afar (Ethiopia) +"af", // Afrikaans +"af_ZA", // Afrikaans (South Africa) +"agr_PE", // Aguaruna (Peru) +"ak_GH", // Akan (Ghana) +"am_ET", // Amharic (Ethiopia) +"an_ES", // Aragonese (Spain) +"anp_IN", // Angika (India) "ar", // Arabic "ar_AE", // Arabic (United Arab Emirates) "ar_BH", // Arabic (Bahrain) "ar_DZ", // Arabic (Algeria) "ar_EG", // Arabic (Egypt) +"ar_IN", // Arabic (India) "ar_IQ", // Arabic (Iraq) "ar_JO", // Arabic (Jordan) "ar_KW", // Arabic (Kuwait) @@ -47,48 +59,91 @@ static const char* locale_list[]={ "ar_QA", // Arabic (Qatar) "ar_SA", // Arabic (Saudi Arabia) "ar_SD", // Arabic (Sudan) +"ar_SS", // Arabic (South Soudan) "ar_SY", // Arabic (Syria) "ar_TN", // Arabic (Tunisia) "ar_YE", // Arabic (Yemen) +"as_IN", // Assamese (India) +"ast_ES", // Asturian (Spain) +"ayc_PE", // Southern Aymara (Peru) +"ay_PE", // Aymara (Peru) +"az_AZ", // Azerbaijani (Azerbaijan) "be", // Belarusian "be_BY", // Belarusian (Belarus) +"bem_ZM", // Bemba (Zambia) +"ber_DZ", // Berber languages (Algeria) +"ber_MA", // Berber languages (Morocco) "bg", // Bulgarian "bg_BG", // Bulgarian (Bulgaria) +"bhb_IN", // Bhili (India) +"bho_IN", // Bhojpuri (India) +"bi_TV", // Bislama (Tuvalu) "bn", // Bengali "bn_BD", // Bengali (Bangladesh) "bn_IN", // Bengali (India) +"bo", // Tibetan +"bo_CN", // Tibetan (China) +"bo_IN", // Tibetan (India) +"br_FR", // Breton (France) +"brx_IN", // Bodo (India) +"bs_BA", // Bosnian (Bosnia and Herzegovina) +"byn_ER", // Bilin (Eritrea) "ca", // Catalan +"ca_AD", // Catalan (Andorra) "ca_ES", // Catalan (Spain) +"ca_FR", // Catalan (France) +"ca_IT", // Catalan (Italy) +"ce_RU", // Chechen (Russia) +"chr_US", // Cherokee (United States) +"cmn_TW", // Mandarin Chinese (Taiwan) +"crh_UA", // Crimean Tatar (Ukraine) +"csb_PL", // Kashubian (Poland) "cs", // Czech "cs_CZ", // Czech (Czech Republic) +"cv_RU", // Chuvash (Russia) +"cy_GB", // Welsh (United Kingdom) "da", // Danish "da_DK", // Danish (Denmark) "de", // German "de_AT", // German (Austria) +"de_BE", // German (Belgium) "de_CH", // German (Switzerland) "de_DE", // German (Germany) +"de_IT", // German (Italy) "de_LU", // German (Luxembourg) +"doi_IN", // Dogri (India) +"dv_MV", // Dhivehi (Maldives) +"dz_BT", // Dzongkha (Bhutan) "el", // Greek "el_CY", // Greek (Cyprus) "el_GR", // Greek (Greece) "en", // English +"en_AG", // English (Antigua and Barbuda) "en_AU", // English (Australia) +"en_BW", // English (Botswana) "en_CA", // English (Canada) +"en_DK", // English (Denmark) "en_GB", // English (United Kingdom) +"en_HK", // English (Hong Kong) "en_IE", // English (Ireland) +"en_IL", // English (Israel) "en_IN", // English (India) -"en_MT", // English (Malta) +"en_NG", // English (Nigeria) "en_NZ", // English (New Zealand) "en_PH", // English (Philippines) "en_SG", // English (Singapore) "en_US", // English (United States) "en_ZA", // English (South Africa) +"en_ZM", // English (Zambia) +"en_ZW", // English (Zimbabwe) +"eo", // Esperanto "es", // Spanish "es_AR", // Spanish (Argentina) "es_BO", // Spanish (Bolivia) "es_CL", // Spanish (Chile) "es_CO", // Spanish (Colombia) "es_CR", // Spanish (Costa Rica) +"es_CU", // Spanish (Cuba) "es_DO", // Spanish (Dominican Republic) "es_EC", // Spanish (Ecuador) "es_ES", // Spanish (Spain) @@ -106,100 +161,252 @@ static const char* locale_list[]={ "es_VE", // Spanish (Venezuela) "et", // Estonian "et_EE", // Estonian (Estonia) +"eu", // Basque +"eu_ES", // Basque (Spain) +"fa", // Persian +"fa_IR", // Persian (Iran) +"ff_SN", // Fulah (Senegal) "fi", // Finnish "fi_FI", // Finnish (Finland) +"fil_PH", // Filipino (Philippines) +"fo_FO", // Faroese (Faroe Islands) "fr", // French "fr_BE", // French (Belgium) "fr_CA", // French (Canada) "fr_CH", // French (Switzerland) "fr_FR", // French (France) "fr_LU", // French (Luxembourg) +"fur_IT", // Friulian (Italy) +"fy_DE", // Western Frisian (Germany) +"fy_NL", // Western Frisian (Netherlands) "ga", // Irish "ga_IE", // Irish (Ireland) -"hi", // Hindi (India) +"gd_GB", // Scottish Gaelic (United Kingdom) +"gez_ER", // Geez (Eritrea) +"gez_ET", // Geez (Ethiopia) +"gl_ES", // Galician (Spain) +"gu_IN", // Gujarati (India) +"gv_GB", // Manx (United Kingdom) +"hak_TW", // Hakka Chinese (Taiwan) +"ha_NG", // Hausa (Nigeria) +"he", // Hebrew +"he_IL", // Hebrew (Israel) +"hi", // Hindi "hi_IN", // Hindi (India) +"hne_IN", // Chhattisgarhi (India) "hr", // Croatian "hr_HR", // Croatian (Croatia) +"hsb_DE", // Upper Sorbian (Germany) +"ht_HT", // Haitian (Haiti) "hu", // Hungarian "hu_HU", // Hungarian (Hungary) -"in", // Indonesian -"in_ID", // Indonesian (Indonesia) +"hus_MX", // Huastec (Mexico) +"hy_AM", // Armenian (Armenia) +"ia_FR", // Interlingua (France) +"id", // Indonesian +"id_ID", // Indonesian (Indonesia) +"ig_NG", // Igbo (Nigeria) +"ik_CA", // Inupiaq (Canada) "is", // Icelandic "is_IS", // Icelandic (Iceland) "it", // Italian "it_CH", // Italian (Switzerland) "it_IT", // Italian (Italy) -"iw", // Hebrew -"iw_IL", // Hebrew (Israel) +"iu_CA", // Inuktitut (Canada) "ja", // Japanese "ja_JP", // Japanese (Japan) -"ja_JP_JP", // Japanese (Japan,JP) +"kab_DZ", // Kabyle (Algeria) +"ka_GE", // Georgian (Georgia) +"kk_KZ", // Kazakh (Kazakhstan) +"kl_GL", // Kalaallisut (Greenland) +"km_KH", // Central Khmer (Cambodia) +"kn_IN", // Kannada (India) +"kok_IN", // Konkani (India) "ko", // Korean "ko_KR", // Korean (South Korea) +"ks_IN", // Kashmiri (India) +"ku", // Kurdish +"ku_TR", // Kurdish (Turkey) +"kw_GB", // Cornish (United Kingdom) +"ky_KG", // Kirghiz (Kyrgyzstan) +"lb_LU", // Luxembourgish (Luxembourg) +"lg_UG", // Ganda (Uganda) +"li_BE", // Limburgan (Belgium) +"li_NL", // Limburgan (Netherlands) +"lij_IT", // Ligurian (Italy) +"ln_CD", // Lingala (Congo) +"lo_LA", // Lao (Laos) "lt", // Lithuanian "lt_LT", // Lithuanian (Lithuania) "lv", // Latvian "lv_LV", // Latvian (Latvia) +"lzh_TW", // Literary Chinese (Taiwan) +"mag_IN", // Magahi (India) +"mai_IN", // Maithili (India) +"mg_MG", // Malagasy (Madagascar) +"mh_MH", // Marshallese (Marshall Islands) +"mhr_RU", // Eastern Mari (Russia) +"mi_NZ", // Maori (New Zealand) +"miq_NI", // Mískito (Nicaragua) "mk", // Macedonian "mk_MK", // Macedonian (Macedonia) +"ml_IN", // Malayalam (India) +"mni_IN", // Manipuri (India) +"mn_MN", // Mongolian (Mongolia) +"mr_IN", // Marathi (India) "ms", // Malay "ms_MY", // Malay (Malaysia) "mt", // Maltese "mt_MT", // Maltese (Malta) +"my_MM", // Burmese (Myanmar) +"myv_RU", // Erzya (Russia) +"nah_MX", // Nahuatl languages (Mexico) +"nan_TW", // Min Nan Chinese (Taiwan) +"nb", // Norwegian Bokmål +"nb_NO", // Norwegian Bokmål (Norway) +"nds_DE", // Low German (Germany) +"nds_NL", // Low German (Netherlands) +"ne_NP", // Nepali (Nepal) +"nhn_MX", // Central Nahuatl (Mexico) +"niu_NU", // Niuean (Niue) +"niu_NZ", // Niuean (New Zealand) "nl", // Dutch +"nl_AW", // Dutch (Aruba) "nl_BE", // Dutch (Belgium) "nl_NL", // Dutch (Netherlands) -"no", // Norwegian -"no_NO", // Norwegian (Norway) -"no_NO_NY", // Norwegian (Norway,Nynorsk) +"nn", // Norwegian Nynorsk +"nn_NO", // Norwegian Nynorsk (Norway) +"nr_ZA", // South Ndebele (South Africa) +"nso_ZA", // Pedi (South Africa) +"oc_FR", // Occitan (France) +"om", // Oromo +"om_ET", // Oromo (Ethiopia) +"om_KE", // Oromo (Kenya) +"or_IN", // Oriya (India) +"os_RU", // Ossetian (Russia) +"pa_IN", // Panjabi (India) +"pap", // Papiamento +"pap_AN", // Papiamento (Netherlands Antilles) +"pap_AW", // Papiamento (Aruba) +"pap_CW", // Papiamento (Curaçao) +"pa_PK", // Panjabi (Pakistan) "pl", // Polish "pl_PL", // Polish (Poland) +"ps_AF", // Pushto (Afghanistan) "pt", // Portuguese "pt_BR", // Portuguese (Brazil) "pt_PT", // Portuguese (Portugal) +"quy_PE", // Ayacucho Quechua (Peru) +"quz_PE", // Cusco Quechua (Peru) +"raj_IN", // Rajasthani (India) "ro", // Romanian "ro_RO", // Romanian (Romania) "ru", // Russian "ru_RU", // Russian (Russia) +"ru_UA", // Russian (Ukraine) +"rw_RW", // Kinyarwanda (Rwanda) +"sa_IN", // Sanskrit (India) +"sat_IN", // Santali (India) +"sc_IT", // Sardinian (Italy) +"sd_IN", // Sindhi (India) +"se_NO", // Northern Sami (Norway) +"sgs_LT", // Samogitian (Lithuania) +"shs_CA", // Shuswap (Canada) +"sid_ET", // Sidamo (Ethiopia) +"si_LK", // Sinhala (Sri Lanka) "sk", // Slovak "sk_SK", // Slovak (Slovakia) "sl", // Slovenian "sl_SI", // Slovenian (Slovenia) +"so", // Somali +"so_DJ", // Somali (Djibouti) +"so_ET", // Somali (Ethiopia) +"so_KE", // Somali (Kenya) +"so_SO", // Somali (Somalia) +"son_ML", // Songhai languages (Mali) "sq", // Albanian "sq_AL", // Albanian (Albania) +"sq_KV", // Albanian (Kosovo) +"sq_MK", // Albanian (Macedonia) "sr", // Serbian -"sr_BA", // Serbian (Bosnia and Herzegovina) -"sr_CS", // Serbian (Serbia and Montenegro) "sr_ME", // Serbian (Montenegro) "sr_RS", // Serbian (Serbia) +"ss_ZA", // Swati (South Africa) +"st_ZA", // Southern Sotho (South Africa) "sv", // Swedish +"sv_FI", // Swedish (Finland) "sv_SE", // Swedish (Sweden) +"sw_KE", // Swahili (Kenya) +"sw_TZ", // Swahili (Tanzania) +"szl_PL", // Silesian (Poland) +"ta", // Tamil +"ta_IN", // Tamil (India) +"ta_LK", // Tamil (Sri Lanka) +"tcy_IN", // Tulu (India) +"te_IN", // Telugu (India) +"tg_TJ", // Tajik (Tajikistan) +"the_NP", // Chitwania Tharu (Nepal) "th", // Thai "th_TH", // Thai (Thailand) -"th_TH_TH", // Thai (Thailand,TH) +"ti", // Tigrinya +"ti_ER", // Tigrinya (Eritrea) +"ti_ET", // Tigrinya (Ethiopia) +"tig_ER", // Tigre (Eritrea) +"tk_TM", // Turkmen (Turkmenistan) +"tl_PH", // Tagalog (Philippines) +"tn_ZA", // Tswana (South Africa) "tr", // Turkish +"tr_CY", // Turkish (Cyprus) "tr_TR", // Turkish (Turkey) +"ts_ZA", // Tsonga (South Africa) +"tt_RU", // Tatar (Russia) +"ug_CN", // Uighur (China) "uk", // Ukrainian "uk_UA", // Ukrainian (Ukraine) +"unm_US", // Unami (United States) "ur", // Urdu "ur_IN", // Urdu (India) "ur_PK", // Urdu (Pakistan) +"uz", // Uzbek +"uz_UZ", // Uzbek (Uzbekistan) +"ve_ZA", // Venda (South Africa) "vi", // Vietnamese "vi_VN", // Vietnamese (Vietnam) +"wa_BE", // Walloon (Belgium) +"wae_CH", // Walser (Switzerland) +"wal_ET", // Wolaytta (Ethiopia) +"wo_SN", // Wolof (Senegal) +"xh_ZA", // Xhosa (South Africa) +"yi_US", // Yiddish (United States) +"yo_NG", // Yoruba (Nigeria) +"yue_HK", // Yue Chinese (Hong Kong) "zh", // Chinese "zh_CN", // Chinese (China) "zh_HK", // Chinese (Hong Kong) "zh_SG", // Chinese (Singapore) "zh_TW", // Chinese (Taiwan) +"zu_ZA", // Zulu (South Africa) 0 }; static const char* locale_names[]={ +"Afar", +"Afar (Djibouti)", +"Afar (Eritrea)", +"Afar (Ethiopia)", +"Afrikaans", +"Afrikaans (South Africa)", +"Aguaruna (Peru)", +"Akan (Ghana)", +"Amharic (Ethiopia)", +"Aragonese (Spain)", +"Angika (India)", "Arabic", "Arabic (United Arab Emirates)", "Arabic (Bahrain)", "Arabic (Algeria)", "Arabic (Egypt)", +"Arabic (India)", "Arabic (Iraq)", "Arabic (Jordan)", "Arabic (Kuwait)", @@ -210,48 +417,91 @@ static const char* locale_names[]={ "Arabic (Qatar)", "Arabic (Saudi Arabia)", "Arabic (Sudan)", +"Arabic (South Soudan)", "Arabic (Syria)", "Arabic (Tunisia)", "Arabic (Yemen)", +"Assamese (India)", +"Asturian (Spain)", +"Southern Aymara (Peru)", +"Aymara (Peru)", +"Azerbaijani (Azerbaijan)", "Belarusian", "Belarusian (Belarus)", +"Bemba (Zambia)", +"Berber languages (Algeria)", +"Berber languages (Morocco)", "Bulgarian", "Bulgarian (Bulgaria)", +"Bhili (India)", +"Bhojpuri (India)", +"Bislama (Tuvalu)", "Bengali", "Bengali (Bangladesh)", "Bengali (India)", +"Tibetan", +"Tibetan (China)", +"Tibetan (India)", +"Breton (France)", +"Bodo (India)", +"Bosnian (Bosnia and Herzegovina)", +"Bilin (Eritrea)", "Catalan", +"Catalan (Andorra)", "Catalan (Spain)", +"Catalan (France)", +"Catalan (Italy)", +"Chechen (Russia)", +"Cherokee (United States)", +"Mandarin Chinese (Taiwan)", +"Crimean Tatar (Ukraine)", +"Kashubian (Poland)", "Czech", "Czech (Czech Republic)", +"Chuvash (Russia)", +"Welsh (United Kingdom)", "Danish", "Danish (Denmark)", "German", "German (Austria)", +"German (Belgium)", "German (Switzerland)", "German (Germany)", +"German (Italy)", "German (Luxembourg)", +"Dogri (India)", +"Dhivehi (Maldives)", +"Dzongkha (Bhutan)", "Greek", "Greek (Cyprus)", "Greek (Greece)", "English", +"English (Antigua and Barbuda)", "English (Australia)", +"English (Botswana)", "English (Canada)", +"English (Denmark)", "English (United Kingdom)", +"English (Hong Kong)", "English (Ireland)", +"English (Israel)", "English (India)", -"English (Malta)", +"English (Nigeria)", "English (New Zealand)", "English (Philippines)", "English (Singapore)", "English (United States)", "English (South Africa)", +"English (Zambia)", +"English (Zimbabwe)", +"Esperanto", "Spanish", "Spanish (Argentina)", "Spanish (Bolivia)", "Spanish (Chile)", "Spanish (Colombia)", "Spanish (Costa Rica)", +"Spanish (Cuba)", "Spanish (Dominican Republic)", "Spanish (Ecuador)", "Spanish (Spain)", @@ -269,91 +519,231 @@ static const char* locale_names[]={ "Spanish (Venezuela)", "Estonian", "Estonian (Estonia)", +"Basque", +"Basque (Spain)", +"Persian", +"Persian (Iran)", +"Fulah (Senegal)", "Finnish", "Finnish (Finland)", +"Filipino (Philippines)", +"Faroese (Faroe Islands)", "French", "French (Belgium)", "French (Canada)", "French (Switzerland)", "French (France)", "French (Luxembourg)", +"Friulian (Italy)", +"Western Frisian (Germany)", +"Western Frisian (Netherlands)", "Irish", "Irish (Ireland)", +"Scottish Gaelic (United Kingdom)", +"Geez (Eritrea)", +"Geez (Ethiopia)", +"Galician (Spain)", +"Gujarati (India)", +"Manx (United Kingdom)", +"Hakka Chinese (Taiwan)", +"Hausa (Nigeria)", +"Hebrew", +"Hebrew (Israel)", +"Hindi", "Hindi (India)", -"Hindi (India)", +"Chhattisgarhi (India)", "Croatian", "Croatian (Croatia)", +"Upper Sorbian (Germany)", +"Haitian (Haiti)", "Hungarian", "Hungarian (Hungary)", +"Huastec (Mexico)", +"Armenian (Armenia)", +"Interlingua (France)", "Indonesian", "Indonesian (Indonesia)", +"Igbo (Nigeria)", +"Inupiaq (Canada)", "Icelandic", "Icelandic (Iceland)", "Italian", "Italian (Switzerland)", "Italian (Italy)", -"Hebrew", -"Hebrew (Israel)", +"Inuktitut (Canada)", "Japanese", "Japanese (Japan)", -"Japanese (Japan JP)", +"Kabyle (Algeria)", +"Georgian (Georgia)", +"Kazakh (Kazakhstan)", +"Kalaallisut (Greenland)", +"Central Khmer (Cambodia)", +"Kannada (India)", +"Konkani (India)", "Korean", "Korean (South Korea)", +"Kashmiri (India)", +"Kurdish", +"Kurdish (Turkey)", +"Cornish (United Kingdom)", +"Kirghiz (Kyrgyzstan)", +"Luxembourgish (Luxembourg)", +"Ganda (Uganda)", +"Limburgan (Belgium)", +"Limburgan (Netherlands)", +"Ligurian (Italy)", +"Lingala (Congo)", +"Lao (Laos)", "Lithuanian", "Lithuanian (Lithuania)", "Latvian", "Latvian (Latvia)", +"Literary Chinese (Taiwan)", +"Magahi (India)", +"Maithili (India)", +"Malagasy (Madagascar)", +"Marshallese (Marshall Islands)", +"Eastern Mari (Russia)", +"Maori (New Zealand)", +"Mískito (Nicaragua)", "Macedonian", "Macedonian (Macedonia)", +"Malayalam (India)", +"Manipuri (India)", +"Mongolian (Mongolia)", +"Marathi (India)", "Malay", "Malay (Malaysia)", "Maltese", "Maltese (Malta)", +"Burmese (Myanmar)", +"Erzya (Russia)", +"Nahuatl languages (Mexico)", +"Min Nan Chinese (Taiwan)", +"Norwegian Bokmål", +"Norwegian Bokmål (Norway)", +"Low German (Germany)", +"Low German (Netherlands)", +"Nepali (Nepal)", +"Central Nahuatl (Mexico)", +"Niuean (Niue)", +"Niuean (New Zealand)", "Dutch", +"Dutch (Aruba)", "Dutch (Belgium)", "Dutch (Netherlands)", -"Norwegian", -"Norwegian (Norway)", -"Norwegian (Norway Nynorsk)", +"Norwegian Nynorsk", +"Norwegian Nynorsk (Norway)", +"South Ndebele (South Africa)", +"Pedi (South Africa)", +"Occitan (France)", +"Oromo", +"Oromo (Ethiopia)", +"Oromo (Kenya)", +"Oriya (India)", +"Ossetian (Russia)", +"Panjabi (India)", +"Papiamento", +"Papiamento (Netherlands Antilles)", +"Papiamento (Aruba)", +"Papiamento (Curaçao)", +"Panjabi (Pakistan)", "Polish", "Polish (Poland)", +"Pushto (Afghanistan)", "Portuguese", "Portuguese (Brazil)", "Portuguese (Portugal)", +"Ayacucho Quechua (Peru)", +"Cusco Quechua (Peru)", +"Rajasthani (India)", "Romanian", "Romanian (Romania)", "Russian", "Russian (Russia)", +"Russian (Ukraine)", +"Kinyarwanda (Rwanda)", +"Sanskrit (India)", +"Santali (India)", +"Sardinian (Italy)", +"Sindhi (India)", +"Northern Sami (Norway)", +"Samogitian (Lithuania)", +"Shuswap (Canada)", +"Sidamo (Ethiopia)", +"Sinhala (Sri Lanka)", "Slovak", "Slovak (Slovakia)", "Slovenian", "Slovenian (Slovenia)", +"Somali", +"Somali (Djibouti)", +"Somali (Ethiopia)", +"Somali (Kenya)", +"Somali (Somalia)", +"Songhai languages (Mali)", "Albanian", "Albanian (Albania)", +"Albanian (Kosovo)", +"Albanian (Macedonia)", "Serbian", -"Serbian (Bosnia and Herzegovina)", -"Serbian (Serbia and Montenegro)", "Serbian (Montenegro)", "Serbian (Serbia)", +"Swati (South Africa)", +"Southern Sotho (South Africa)", "Swedish", +"Swedish (Finland)", "Swedish (Sweden)", +"Swahili (Kenya)", +"Swahili (Tanzania)", +"Silesian (Poland)", +"Tamil", +"Tamil (India)", +"Tamil (Sri Lanka)", +"Tulu (India)", +"Telugu (India)", +"Tajik (Tajikistan)", +"Chitwania Tharu (Nepal)", "Thai", "Thai (Thailand)", -"Thai (Thailand TH)", +"Tigrinya", +"Tigrinya (Eritrea)", +"Tigrinya (Ethiopia)", +"Tigre (Eritrea)", +"Turkmen (Turkmenistan)", +"Tagalog (Philippines)", +"Tswana (South Africa)", "Turkish", +"Turkish (Cyprus)", "Turkish (Turkey)", +"Tsonga (South Africa)", +"Tatar (Russia)", +"Uighur (China)", "Ukrainian", "Ukrainian (Ukraine)", +"Unami (United States)", "Urdu", "Urdu (India)", "Urdu (Pakistan)", +"Uzbek", +"Uzbek (Uzbekistan)", +"Venda (South Africa)", "Vietnamese", "Vietnamese (Vietnam)", +"Walloon (Belgium)", +"Walser (Switzerland)", +"Wolaytta (Ethiopia)", +"Wolof (Senegal)", +"Xhosa (South Africa)", +"Yiddish (United States)", +"Yoruba (Nigeria)", +"Yue Chinese (Hong Kong)", "Chinese", "Chinese (China)", "Chinese (Hong Kong)", "Chinese (Singapore)", "Chinese (Taiwan)", +"Zulu (South Africa)", 0 }; diff --git a/core/undo_redo.cpp b/core/undo_redo.cpp index d6d32ccaef..e8a71d4991 100644 --- a/core/undo_redo.cpp +++ b/core/undo_redo.cpp @@ -52,26 +52,46 @@ void UndoRedo::_discard_redo() { } - -void UndoRedo::create_action(const String& p_name,bool p_mergeable) { +void UndoRedo::create_action(const String& p_name,MergeMode p_mode) { if (action_level==0) { _discard_redo(); - if (p_mergeable && actions.size() && actions[actions.size()-1].name==p_name) { - //old will replace new (it's mergeable after all) - // should check references though! + // Check if the merge operation is valid + if (p_mode!=MERGE_DISABLE && actions.size() && actions[actions.size()-1].name==p_name) { + current_action=actions.size()-2; - actions[current_action+1].do_ops.clear(); - //actions[current_action+1].undo_ops.clear(); - no, this is kept - merging=true; + + if (p_mode==MERGE_ENDS) { + + // Clear all do ops from last action, and delete all object references + List<Operation>::Element *E=actions[current_action+1].do_ops.front(); + + while (E) { + + if (E->get().type==Operation::TYPE_REFERENCE) { + + Object *obj=ObjectDB::get_instance(E->get().object); + + if (obj) + memdelete(obj); + } + + E=E->next(); + actions[current_action+1].do_ops.pop_front(); + } + } + + merge_mode=p_mode; } else { + Action new_action; new_action.name=p_name; actions.push_back(new_action); - merging=false; + + merge_mode=MERGE_DISABLE; } } @@ -102,8 +122,10 @@ void UndoRedo::add_undo_method(Object *p_object,const String& p_method,VARIANT_A VARIANT_ARGPTRS ERR_FAIL_COND(action_level<=0); ERR_FAIL_COND((current_action+1)>=actions.size()); - if (merging) - return; //- no undo if merging + + // No undo if the merge mode is MERGE_ENDS + if (merge_mode==MERGE_ENDS) + return; Operation undo_op; undo_op.object=p_object->get_instance_ID(); @@ -139,6 +161,10 @@ void UndoRedo::add_undo_property(Object *p_object,const String& p_property,const ERR_FAIL_COND(action_level<=0); ERR_FAIL_COND((current_action+1)>=actions.size()); + // No undo if the merge mode is MERGE_ENDS + if (merge_mode==MERGE_ENDS) + return; + Operation undo_op; undo_op.object=p_object->get_instance_ID(); if (p_object->cast_to<Resource>()) @@ -167,6 +193,11 @@ void UndoRedo::add_undo_reference(Object *p_object) { ERR_FAIL_COND(action_level<=0); ERR_FAIL_COND((current_action+1)>=actions.size()); + + // No undo if the merge mode is MERGE_ENDS + if (merge_mode==MERGE_ENDS) + return; + Operation undo_op; undo_op.object=p_object->get_instance_ID(); if (p_object->cast_to<Resource>()) @@ -352,7 +383,7 @@ UndoRedo::UndoRedo() { action_level=0; current_action=-1; max_steps=-1; - merging=true; + merge_mode=MERGE_DISABLE; callback=NULL; callback_ud=NULL; @@ -448,7 +479,7 @@ Variant UndoRedo::_add_undo_method(const Variant** p_args, int p_argcount, Varia void UndoRedo::_bind_methods() { - ObjectTypeDB::bind_method(_MD("create_action","name","mergeable"),&UndoRedo::create_action, DEFVAL(false) ); + ObjectTypeDB::bind_method(_MD("create_action","name","merge_mode"),&UndoRedo::create_action, DEFVAL(MERGE_DISABLE) ); ObjectTypeDB::bind_method(_MD("commit_action"),&UndoRedo::commit_action); //ObjectTypeDB::bind_method(_MD("add_do_method","p_object", "p_method", "VARIANT_ARG_LIST"),&UndoRedo::add_do_method); @@ -459,13 +490,9 @@ void UndoRedo::_bind_methods() { mi.name="add_do_method"; mi.arguments.push_back( PropertyInfo( Variant::OBJECT, "object")); mi.arguments.push_back( PropertyInfo( Variant::STRING, "method")); - Vector<Variant> defargs; - for(int i=0;i<VARIANT_ARG_MAX;++i) { - mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i))); - defargs.push_back(Variant()); - } - ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"add_do_method",&UndoRedo::_add_do_method,mi,defargs); + + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"add_do_method",&UndoRedo::_add_do_method,mi); } { @@ -473,13 +500,9 @@ void UndoRedo::_bind_methods() { mi.name="add_undo_method"; mi.arguments.push_back( PropertyInfo( Variant::OBJECT, "object")); mi.arguments.push_back( PropertyInfo( Variant::STRING, "method")); - Vector<Variant> defargs; - for(int i=0;i<VARIANT_ARG_MAX;++i) { - mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i))); - defargs.push_back(Variant()); - } - ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"add_undo_method",&UndoRedo::_add_undo_method,mi,defargs); + + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"add_undo_method",&UndoRedo::_add_undo_method,mi); } ObjectTypeDB::bind_method(_MD("add_do_property","object", "property", "value:Variant"),&UndoRedo::add_do_property); @@ -489,4 +512,8 @@ void UndoRedo::_bind_methods() { ObjectTypeDB::bind_method(_MD("clear_history"),&UndoRedo::clear_history); ObjectTypeDB::bind_method(_MD("get_current_action_name"),&UndoRedo::get_current_action_name); ObjectTypeDB::bind_method(_MD("get_version"),&UndoRedo::get_version); + + BIND_CONSTANT(MERGE_DISABLE); + BIND_CONSTANT(MERGE_ENDS); + BIND_CONSTANT(MERGE_ALL); } diff --git a/core/undo_redo.h b/core/undo_redo.h index 7f63ba9ed6..208eb6ed5e 100644 --- a/core/undo_redo.h +++ b/core/undo_redo.h @@ -41,6 +41,12 @@ class UndoRedo : public Object { OBJ_SAVE_TYPE( UndoRedo ); public: + enum MergeMode { + MERGE_DISABLE, + MERGE_ENDS, + MERGE_ALL + }; + typedef void (*CommitNotifyCallback)(void *p_ud,const String& p_name); Variant _add_do_method(const Variant** p_args, int p_argcount, Variant::CallError& r_error); Variant _add_undo_method(const Variant** p_args, int p_argcount, Variant::CallError& r_error); @@ -76,7 +82,7 @@ private: int current_action; int action_level; int max_steps; - bool merging; + MergeMode merge_mode; uint64_t version; void _pop_history_tail(); @@ -98,7 +104,7 @@ protected: public: - void create_action(const String& p_name="",bool p_mergeable=false); + void create_action(const String& p_name="",MergeMode p_mode=MERGE_DISABLE); void add_do_method(Object *p_object,const String& p_method,VARIANT_ARG_LIST); void add_undo_method(Object *p_object,const String& p_method,VARIANT_ARG_LIST); @@ -128,4 +134,6 @@ public: ~UndoRedo(); }; +VARIANT_ENUM_CAST( UndoRedo::MergeMode ); + #endif // UNDO_REDO_H diff --git a/core/ustring.cpp b/core/ustring.cpp index 6788ada1bb..0d887210c3 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -3491,7 +3491,7 @@ bool String::is_valid_integer() const { return false; int from=0; - if (operator[](0)=='+' || operator[](0)=='-') + if (len!=1 && (operator[](0)=='+' || operator[](0)=='-')) from++; for(int i=from;i<len;i++) { diff --git a/core/variant.cpp b/core/variant.cpp index 31321dc0f3..a78c07d819 100644 --- a/core/variant.cpp +++ b/core/variant.cpp @@ -1515,15 +1515,43 @@ Variant::operator String() const { case INT: return String::num(_data._int); case REAL: return String::num(_data._real); case STRING: return *reinterpret_cast<const String*>(_data._mem); - case VECTOR2: return operator Vector2(); - case RECT2: return operator Rect2(); - case MATRIX32: return operator Matrix32(); - case VECTOR3: return operator Vector3(); + case VECTOR2: return "("+operator Vector2()+")"; + case RECT2: return "("+operator Rect2()+")"; + case MATRIX32: { + + Matrix32 mat32 = operator Matrix32(); + return "("+Variant(mat32.elements[0]).operator String()+", "+Variant(mat32.elements[1]).operator String()+", "+Variant(mat32.elements[2]).operator String()+")"; + } break; + case VECTOR3: return "("+operator Vector3()+")"; case PLANE: return operator Plane(); //case QUAT: case _AABB: return operator AABB(); - case QUAT: return operator Quat(); - case MATRIX3: return operator Matrix3(); + case QUAT: return "("+operator Quat()+")"; + case MATRIX3: { + + Matrix3 mat3 = operator Matrix3(); + + String mtx("("); + for (int i=0;i<3;i++) { + + if (i!=0) + mtx+=", "; + + mtx+="("; + + for (int j=0;j<3;j++) { + + if (j!=0) + mtx+=", "; + + mtx+=Variant( mat3.elements[i][j] ).operator String(); + } + + mtx+=")"; + } + + return mtx+")"; + } break; case TRANSFORM: return operator Transform(); case NODE_PATH: return operator NodePath(); case INPUT_EVENT: return operator InputEvent(); diff --git a/core/variant.h b/core/variant.h index 87bf20f8ee..90be593bd9 100644 --- a/core/variant.h +++ b/core/variant.h @@ -395,6 +395,10 @@ public: void get_method_list(List<MethodInfo> *p_list) const; bool has_method(const StringName& p_method) const; + static Vector<Variant::Type> get_method_argument_types(Variant::Type p_type,const StringName& p_method); + static Vector<Variant> get_method_default_arguments(Variant::Type p_type,const StringName& p_method); + static Variant::Type get_method_return_type(Variant::Type p_type,const StringName& p_method,bool* r_has_return=NULL); + static Vector<StringName> get_method_argument_names(Variant::Type p_type,const StringName& p_method); void set_named(const StringName& p_index, const Variant& p_value, bool *r_valid=NULL); Variant get_named(const StringName& p_index, bool *r_valid=NULL) const; @@ -422,7 +426,7 @@ public: static void get_constructor_list(Variant::Type p_type, List<MethodInfo> *p_list); static void get_numeric_constants_for_type(Variant::Type p_type, List<StringName> *p_constants); static bool has_numeric_constant(Variant::Type p_type, const StringName& p_value); - static int get_numeric_constant_value(Variant::Type p_type, const StringName& p_value); + static int get_numeric_constant_value(Variant::Type p_type, const StringName& p_value,bool *r_valid=NULL); typedef String (*ObjectDeConstruct)(const Variant& p_object,void *ud); typedef void (*ObjectConstruct)(const String& p_text,void *ud,Variant& r_value); diff --git a/core/variant_call.cpp b/core/variant_call.cpp index 8c11007a53..8473fdcd19 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -54,10 +54,10 @@ struct _VariantCall { int arg_count; Vector<Variant> default_args; Vector<Variant::Type> arg_types; - -#ifdef DEBUG_ENABLED Vector<StringName> arg_names; Variant::Type return_type; + +#ifdef DEBUG_ENABLED bool returns; #endif VariantFunc func; @@ -474,6 +474,7 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var VCALL_LOCALMEM2R(Array,rfind); VCALL_LOCALMEM1R(Array,find_last); VCALL_LOCALMEM1R(Array,count); + VCALL_LOCALMEM1R(Array,has); VCALL_LOCALMEM1(Array,erase); VCALL_LOCALMEM0(Array,sort); VCALL_LOCALMEM2(Array,sort_custom); @@ -1173,6 +1174,56 @@ bool Variant::has_method(const StringName& p_method) const { } +Vector<Variant::Type> Variant::get_method_argument_types(Variant::Type p_type,const StringName& p_method) { + + const _VariantCall::TypeFunc &fd = _VariantCall::type_funcs[p_type]; + + const Map<StringName,_VariantCall::FuncData>::Element *E = fd.functions.find(p_method); + if (!E) + return Vector<Variant::Type>(); + + return E->get().arg_types; +} + +Vector<StringName> Variant::get_method_argument_names(Variant::Type p_type,const StringName& p_method) { + + + const _VariantCall::TypeFunc &fd = _VariantCall::type_funcs[p_type]; + + const Map<StringName,_VariantCall::FuncData>::Element *E = fd.functions.find(p_method); + if (!E) + return Vector<StringName>(); + + return E->get().arg_names; + +} + +Variant::Type Variant::get_method_return_type(Variant::Type p_type,const StringName& p_method,bool* r_has_return) { + + const _VariantCall::TypeFunc &fd = _VariantCall::type_funcs[p_type]; + + const Map<StringName,_VariantCall::FuncData>::Element *E = fd.functions.find(p_method); + if (!E) + return Variant::NIL; + + if (r_has_return) + *r_has_return=E->get().return_type; + + return E->get().return_type; +} + +Vector<Variant> Variant::get_method_default_arguments(Variant::Type p_type,const StringName& p_method) { + + const _VariantCall::TypeFunc &fd = _VariantCall::type_funcs[p_type]; + + const Map<StringName,_VariantCall::FuncData>::Element *E = fd.functions.find(p_method); + if (!E) + return Vector<Variant>(); + + return E->get().default_args; + +} + void Variant::get_method_list(List<MethodInfo> *p_list) const { @@ -1274,14 +1325,22 @@ bool Variant::has_numeric_constant(Variant::Type p_type, const StringName& p_val return cd.value.has(p_value); } -int Variant::get_numeric_constant_value(Variant::Type p_type, const StringName& p_value) { +int Variant::get_numeric_constant_value(Variant::Type p_type, const StringName& p_value, bool *r_valid) { + + if (r_valid) + *r_valid=false; ERR_FAIL_INDEX_V(p_type,Variant::VARIANT_MAX,0); _VariantCall::ConstantData& cd = _VariantCall::constant_data[p_type]; Map<StringName,int>::Element *E = cd.value.find(p_value); - ERR_FAIL_COND_V(!E,0); + if (!E) { + return -1; + } + if (r_valid) + *r_valid=true; + return E->get(); } @@ -1517,6 +1576,7 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl ADDFUNC2(ARRAY,INT,Array,rfind,NIL,"what",INT,"from",varray(-1)); ADDFUNC1(ARRAY,INT,Array,find_last,NIL,"value",varray()); ADDFUNC1(ARRAY,INT,Array,count,NIL,"value",varray()); + ADDFUNC1(ARRAY,BOOL,Array,has,NIL,"value",varray()); ADDFUNC0(ARRAY,NIL,Array,pop_back,varray()); ADDFUNC0(ARRAY,NIL,Array,pop_front,varray()); ADDFUNC0(ARRAY,NIL,Array,sort,varray()); diff --git a/core/variant_op.cpp b/core/variant_op.cpp index 9182dcde1a..fd64b58bd5 100644 --- a/core/variant_op.cpp +++ b/core/variant_op.cpp @@ -600,6 +600,7 @@ void Variant::evaluate(const Operator& p_op, const Variant& p_a, const Variant& case REAL: { _RETURN( *reinterpret_cast<const Quat*>(p_a._data._mem) * p_b._data._real); } break; + default: {} }; r_valid=false; return; @@ -618,6 +619,7 @@ void Variant::evaluate(const Operator& p_op, const Variant& p_a, const Variant& _RETURN( *p_a._data._matrix3 * *p_b._data._matrix3 ); }; + default: {} } ; r_valid=false; return; @@ -635,6 +637,7 @@ void Variant::evaluate(const Operator& p_op, const Variant& p_a, const Variant& _RETURN( *p_a._data._transform * *p_b._data._transform ); }; + default: {} } ; r_valid=false; return; @@ -999,7 +1002,7 @@ Variant Variant::get_named(const StringName& p_index, bool *r_valid) const { DEFAULT_OP_ARRAY_CMD(m_name, DVector<dv_type>, if(skip_cond) return;, arr->set(index, p_value);return) #define DEFAULT_OP_DVECTOR_GET(m_name, dv_type)\ - DEFAULT_OP_ARRAY_CMD(m_name, const DVector<dv_type>, 0, return arr->get(index)) + DEFAULT_OP_ARRAY_CMD(m_name, const DVector<dv_type>, ;, return arr->get(index)) void Variant::set(const Variant& p_index, const Variant& p_value, bool *r_valid) { @@ -2417,7 +2420,7 @@ Variant Variant::get(const Variant& p_index, bool *r_valid) const { return *res; } } break; // 20 - DEFAULT_OP_ARRAY_CMD(ARRAY, const Array, 0, return (*arr)[index]) + DEFAULT_OP_ARRAY_CMD(ARRAY, const Array, ;, return (*arr)[index]) DEFAULT_OP_DVECTOR_GET(RAW_ARRAY, uint8_t) DEFAULT_OP_DVECTOR_GET(INT_ARRAY, int) DEFAULT_OP_DVECTOR_GET(REAL_ARRAY, real_t) @@ -2994,6 +2997,7 @@ bool Variant::iter_init(Variant& r_iter,bool &valid) const { return true; } break; + default: {} } @@ -3042,7 +3046,7 @@ bool Variant::iter_next(Variant& r_iter,bool &valid) const { const String *str=reinterpret_cast<const String*>(_data._mem); int idx = r_iter; idx++; - if (idx >= str->size()) + if (idx >= str->length()) return false; r_iter = idx; return true; @@ -3137,6 +3141,7 @@ bool Variant::iter_next(Variant& r_iter,bool &valid) const { r_iter=idx; return true; } break; + default: {} } @@ -3279,6 +3284,7 @@ Variant Variant::iter_get(const Variant& r_iter,bool &r_valid) const { #endif return arr->get(idx); } break; + default: {} } diff --git a/core/variant_parser.cpp b/core/variant_parser.cpp index dce873a306..023605a952 100644 --- a/core/variant_parser.cpp +++ b/core/variant_parser.cpp @@ -1233,7 +1233,9 @@ Error VariantParser::parse_value(Token& token,Variant &value,Stream *p_stream,in } get_token(p_stream,token,line,r_err_str); - if (token.type!=TK_STRING) { + if (token.type==TK_PARENTHESIS_CLOSE) { + break; + } else if (token.type!=TK_STRING) { r_err_str="Expected string"; return ERR_PARSE_ERROR; } diff --git a/doc/base/classes.xml b/doc/base/classes.xml index 02e88d06a0..1ac08c788f 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" ?> -<doc version="2.1.beta.custom_build" name="Engine Types"> +<doc version="2.2.alpha.custom_build" name="Engine Types"> <class name="@GDScript" category="Core"> <brief_description> Built-in GDScript functions. @@ -653,14 +653,14 @@ </description> </method> <method name="yield"> - <return type="Nil"> + <return type="GDFunctionState"> </return> <argument index="0" name="object" type="Object"> </argument> <argument index="1" name="signal" type="String"> </argument> <description> - Stop the function execution and return the current state. Call resume on the state to resume execution. This makes the state invalid. + Stop the function execution and return the current state. Call [method GDFunctionState.resume] on the state to resume execution. This invalidates the state. Returns anything that was passed to the resume function call. If passed an object and a signal, the execution is resumed when the object's signal is emmited. </description> </method> @@ -1945,6 +1945,16 @@ </constant> </constants> </class> +<class name="@VisualScript" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> <class name="AABB" category="Built-In Types"> <brief_description> Axis-Aligned Bounding Box. @@ -4546,6 +4556,15 @@ Searches the array in reverse order for a value and returns its index or -1 if not found. </description> </method> + <method name="has"> + <return type="bool"> + </return> + <argument index="0" name="value" type="var"> + </argument> + <description> + Return true if the array contains given value. [code][ "inside", 7 ].has("inside") == true, [ "inside", 7 ].has("outside") == false, [ "inside", 7 ].has(7) == true, [ "inside", 7 ].has("7") == false[/code] + </description> + </method> <method name="hash"> <return type="int"> </return> @@ -5903,14 +5922,24 @@ </method> </methods> <signals> + <signal name="button_down"> + <description> + Emitted when the button starts being held down. + </description> + </signal> + <signal name="button_up"> + <description> + Emitted when the button stops being held down. + </description> + </signal> <signal name="pressed"> <description> - This signal is emitted every time the button is pressed or toggled. + This signal is emitted every time the button is toggled or pressed (i.e. activated, so on [code]button_down[/code] if "Click on press" is active and on [code]button_up[/code] otherwise). </description> </signal> <signal name="released"> <description> - This signal is emitted when the button was released. + Emitted when the button was released. This is only emitted by non-toggle buttons and if "Click on press" is active. </description> </signal> <signal name="toggled"> @@ -6007,7 +6036,7 @@ </argument> <argument index="2" name="rect" type="Rect2"> </argument> - <argument index="3" name="align" type="Vector2" default="Vector2(0,0)"> + <argument index="3" name="align" type="Vector2" default="Vector2(0, 0)"> </argument> <argument index="4" name="advance" type="float" default="-1"> </argument> @@ -6788,6 +6817,12 @@ <description> </description> </method> + <method name="is_limit_smoothing_enabled" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="is_rotating" qualifiers="const"> <return type="bool"> </return> @@ -6859,6 +6894,14 @@ Set the scrolling limit in pixels. </description> </method> + <method name="set_limit_smoothing_enabled"> + <argument index="0" name="limit_smoothing_enabled" type="bool"> + </argument> + <description> + Smooth camera when reaching camera limits. + This requires camera smoothing being enabled to have a noticeable effect. + </description> + </method> <method name="set_offset"> <argument index="0" name="offset" type="Vector2"> </argument> @@ -6965,8 +7008,10 @@ </argument> <argument index="3" name="width" type="float" default="1"> </argument> + <argument index="4" name="antialiased" type="bool" default="false"> + </argument> <description> - Draw a line from a 2D point to another, with a given color and width. + Draw a line from a 2D point to another, with a given color and width. It can be optionally antialiased. </description> </method> <method name="draw_polygon"> @@ -8029,7 +8074,7 @@ <method name="add_shape"> <argument index="0" name="shape" type="Shape2D"> </argument> - <argument index="1" name="transform" type="Matrix32" default="1,0, 0,1, 0,0"> + <argument index="1" name="transform" type="Matrix32" default="((1, 0), (0, 1), (0, 0))"> </argument> <description> Add a [Shape2D] to the collision body, with a given custom transform. @@ -9299,7 +9344,7 @@ <method name="get_cursor_shape" qualifiers="const"> <return type="int"> </return> - <argument index="0" name="pos" type="Vector2" default="Vector2(0,0)"> + <argument index="0" name="pos" type="Vector2" default="Vector2(0, 0)"> </argument> <description> Return the cursor shape at a certain position in the control. @@ -9498,7 +9543,7 @@ <method name="get_tooltip" qualifiers="const"> <return type="String"> </return> - <argument index="0" name="atpos" type="Vector2" default="Vector2(0,0)"> + <argument index="0" name="atpos" type="Vector2" default="Vector2(0, 0)"> </argument> <description> Return the tooltip, which will appear when the cursor is resting over this control. @@ -10142,9 +10187,9 @@ <method name="add_point"> <argument index="0" name="pos" type="Vector2"> </argument> - <argument index="1" name="in" type="Vector2" default="Vector2(0,0)"> + <argument index="1" name="in" type="Vector2" default="Vector2(0, 0)"> </argument> - <argument index="2" name="out" type="Vector2" default="Vector2(0,0)"> + <argument index="2" name="out" type="Vector2" default="Vector2(0, 0)"> </argument> <argument index="3" name="atpos" type="int" default="-1"> </argument> @@ -10826,7 +10871,7 @@ </return> <description> Initialise the stream used to list all files and directories using the [method get_next] function, closing the current opened stream if needed. Once the stream has been processed, it should typically be closed with [method list_dir_end]. - Return false if the stream could not be initialised. + Return true if the stream could not be initialised. </description> </method> <method name="list_dir_end"> @@ -10928,6 +10973,26 @@ <description> </description> </method> + <method name="get_spacing" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="type" type="int"> + </argument> + <description> + </description> + </method> + <method name="get_use_filter" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="get_use_mipmaps" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="remove_fallback"> <argument index="0" name="idx" type="int"> </argument> @@ -10954,8 +11019,36 @@ <description> </description> </method> + <method name="set_spacing"> + <argument index="0" name="type" type="int"> + </argument> + <argument index="1" name="value" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_use_filter"> + <argument index="0" name="enable" type="bool"> + </argument> + <description> + </description> + </method> + <method name="set_use_mipmaps"> + <argument index="0" name="enable" type="bool"> + </argument> + <description> + </description> + </method> </methods> <constants> + <constant name="SPACING_TOP" value="0"> + </constant> + <constant name="SPACING_BOTTOM" value="1"> + </constant> + <constant name="SPACING_CHAR" value="2"> + </constant> + <constant name="SPACING_SPACE" value="3"> + </constant> </constants> </class> <class name="DynamicFontData" inherits="Resource" category="Core"> @@ -11276,12 +11369,14 @@ </description> <methods> <method name="add_control_to_bottom_panel"> + <return type="ToolButton"> + </return> <argument index="0" name="control" type="Control"> </argument> <argument index="1" name="title" type="String"> </argument> <description> - Add a control to the bottom panel (together with Output, Debug, Animation, etc). If your plugin is being removed, also make sure to remove your control by calling [method remove_control_from_bottom_panel]. + Add a control to the bottom panel (together with Output, Debug, Animation, etc). Returns a reference to the button added. It's up to you to hide/show the button when needed. If your plugin is being removed, also make sure to remove your control by calling [method remove_control_from_bottom_panel]. </description> </method> <method name="add_control_to_container"> @@ -11436,6 +11531,13 @@ Get the undo/redo object. Most actions in the editor can be undoable, so use this object to make sure this happens when it's worth it. </description> </method> + <method name="get_window_layout" qualifiers="virtual"> + <argument index="0" name="layout" type="ConfigFile"> + </argument> + <description> + Get the GUI layout of the plugin. This is used to save the project's editor layout when the [method EditorPlugin.queue_save_layout] is called or the editor layout was changed(For example changing the position of a dock). + </description> + </method> <method name="handles" qualifiers="virtual"> <return type="bool"> </return> @@ -11460,6 +11562,11 @@ Remember that you have to manage the visibility of all your editor controls manually. </description> </method> + <method name="queue_save_layout" qualifiers="const"> + <description> + Queue save the project's editor layout. + </description> + </method> <method name="remove_control_from_bottom_panel"> <argument index="0" name="control" type="Control"> </argument> @@ -11495,6 +11602,11 @@ Remove the import plugin, don't forget to call this on exit. </description> </method> + <method name="save_external_data" qualifiers="virtual"> + <description> + This method is called after the editor save the project or when the it's closed. It asks the plugin to save edited external scenes/resources. + </description> + </method> <method name="set_state" qualifiers="virtual"> <argument index="0" name="state" type="Dictionary"> </argument> @@ -11502,6 +11614,13 @@ Restore the state saved by [method EditorPlugin.get_state]. </description> </method> + <method name="set_window_layout" qualifiers="virtual"> + <argument index="0" name="layout" type="ConfigFile"> + </argument> + <description> + Restore the plugin GUI layout saved by [method EditorPlugin.get_window_layout]. + </description> + </method> </methods> <constants> <constant name="CONTAINER_TOOLBAR" value="0"> @@ -11645,6 +11764,24 @@ [/codeblock] </description> <methods> + <method name="add_property_info"> + <argument index="0" name="info" type="Dictionary"> + </argument> + <description> + Add a custom property info to a property. The dictionary must contain: name:[String](the name of the property) and type:[int](see TYPE_* in [@Global Scope]), and optionally hint:[int](see PROPERTY_HINT_* in [@Global Scope]), hint_string:[String]. + Example:[codeblock] + editor_settings.set("category/property_name", 0) + + var property_info = { + "name": "category/property_name", + "type": TYPE_INT, + "hint": PROPERTY_HINT_ENUM, + "hint_string": "one,two,three" + } + + editor_settings.add_property_info(property_info)[/codeblock] + </description> + </method> <method name="erase"> <argument index="0" name="property" type="String"> </argument> @@ -12264,7 +12401,7 @@ file.open("user://save_game.dat", file.WRITE) file.store_string(content) file.close() - + func load(): var file = File.new() file.open("user://save_game.dat", file.READ) @@ -12648,6 +12785,12 @@ Get the current selected path (directory and file) of the file dialog (empty if none). </description> </method> + <method name="get_filters" qualifiers="const"> + <return type="StringArray"> + </return> + <description> + </description> + </method> <method name="get_mode" qualifiers="const"> <return type="int"> </return> @@ -12702,6 +12845,12 @@ Set the current selected file path of the file dialog. </description> </method> + <method name="set_filters"> + <argument index="0" name="filters" type="StringArray"> + </argument> + <description> + </description> + </method> <method name="set_mode"> <argument index="0" name="mode" type="int"> </argument> @@ -13033,11 +13182,16 @@ </class> <class name="FuncRef" inherits="Reference" category="Core"> <brief_description> + Reference to a function in an object. </brief_description> <description> + In GDScript, functions are not [i]first-class objects[/i]. This means it is impossible to store them directly as variables, return them from another function, or pass them as arguments. + However, by creating a [FuncRef] using the [method @GDScript.funcref] function, a reference to a function in a given object can be created, passed around and called. </description> <methods> <method name="call_func"> + <return type="Variant"> + </return> <argument index="0" name="arg0" type="Variant" default="NULL"> </argument> <argument index="1" name="arg1" type="Variant" default="NULL"> @@ -13059,18 +13213,21 @@ <argument index="9" name="arg9" type="Variant" default="NULL"> </argument> <description> + Call the referenced function with the given arguments. The argument count must correspond to the required number of arguments in the function. Returns the return value of the function call. </description> </method> <method name="set_function"> <argument index="0" name="name" type="String"> </argument> <description> + Set the name of the function to call on the object, without parentheses or any parameters. </description> </method> <method name="set_instance"> <argument index="0" name="instance" type="Object"> </argument> <description> + Set the object on which to call the referenced function. This object must be of a type actually inheriting from [Object], not a built-in type such as [int], [Vector2] or [Dictionary]. </description> </method> </methods> @@ -13079,15 +13236,17 @@ </class> <class name="GDFunctionState" inherits="Reference" category="Core"> <brief_description> + State of a function call after yielding. </brief_description> <description> + Calling [method @GDScript.yield] within a function will cause that function to yield and return its current state as an object of this type. The yielded function call can then be resumed later by calling [method resume] on this state object. </description> <methods> <method name="is_valid" qualifiers="const"> <return type="bool"> </return> <description> - Should put children to the top left corner instead of center of the container. + Check whether the function call may be resumed. This is not the case if the function state was already resumed. </description> </method> <method name="resume"> @@ -13096,6 +13255,9 @@ <argument index="0" name="arg" type="Variant" default="NULL"> </argument> <description> + Resume execution of the yielded function call. + If handed an argument, return the argument from the [method @GDScript.yield] call in the yielded function call. You can pass e.g. an [Array] to hand multiple arguments. + This function returns what the resumed function call returns, possibly another function state if yielded again. </description> </method> </methods> @@ -13129,6 +13291,8 @@ </description> </method> <method name="new"> + <return type="Object"> + </return> <description> </description> </method> @@ -13634,6 +13798,26 @@ Contains global variables accessible from everywhere. Use the normal [Object] API, such as "Globals.get(variable)", "Globals.set(variable,value)" or "Globals.has(variable)" to access them. Variables stored in engine.cfg are also loaded into globals, making this object very useful for reading custom game configuration options. </description> <methods> + <method name="add_property_info"> + <argument index="0" name="hint" type="Dictionary"> + </argument> + <description> + Add a custom property info to a property. The dictionary must contain: name:[String](the name of the property) and type:[int](see TYPE_* in [@Global Scope]), and optionally hint:[int](see PROPERTY_HINT_* in [@Global Scope]), hint_string:[String]. + Example: + [codeblock] + Globals.set("category/property_name", 0) + + var property_info = { + "name": "category/property_name", + "type": TYPE_INT, + "hint": PROPERTY_HINT_ENUM, + "hint_string": "one,two,three" + } + + Globals.add_property_info(property_info) + [/codeblock] + </description> + </method> <method name="clear"> <argument index="0" name="name" type="String"> </argument> @@ -13797,6 +13981,12 @@ Return the scroll offset. </description> </method> + <method name="get_snap" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> <method name="get_zoom" qualifiers="const"> <return type="float"> </return> @@ -13826,6 +14016,12 @@ Return true is the disconnection of connections is enable in the visual GraphEdit. False otherwise. </description> </method> + <method name="is_using_snap" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="set_right_disconnects"> <argument index="0" name="enable" type="bool"> </argument> @@ -13833,6 +14029,30 @@ Enable the disconnection of existing connections in the visual GraphEdit by left-clicking a connection and releasing into the void. </description> </method> + <method name="set_scroll_ofs"> + <argument index="0" name="ofs" type="Vector2"> + </argument> + <description> + </description> + </method> + <method name="set_selected"> + <argument index="0" name="node" type="Object"> + </argument> + <description> + </description> + </method> + <method name="set_snap"> + <argument index="0" name="pixels" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_use_snap"> + <argument index="0" name="enable" type="bool"> + </argument> + <description> + </description> + </method> <method name="set_zoom"> <argument index="0" name="p_zoom" type="float"> </argument> @@ -13865,6 +14085,16 @@ Signal sent to the GraphEdit when the connection between 'from_slot' slot of 'from' GraphNode and 'to_slot' slot of 'to' GraphNode is attempted to be created. </description> </signal> + <signal name="connection_to_empty"> + <argument index="0" name="from" type="String"> + </argument> + <argument index="1" name="from_slot" type="int"> + </argument> + <argument index="2" name="release_pos" type="Vector2"> + </argument> + <description> + </description> + </signal> <signal name="delete_nodes_request"> <description> Signal sent when a GraphNode is attempted to be removed from the GraphEdit. @@ -13888,6 +14118,12 @@ Signal sent when a GraphNode is attempted to be duplicated in the GraphEdit. </description> </signal> + <signal name="node_selected"> + <argument index="0" name="node" type="Object"> + </argument> + <description> + </description> + </signal> <signal name="popup_request"> <argument index="0" name="p_position" type="Vector2"> </argument> @@ -13895,18 +14131,34 @@ Signal sent when a popup is requested. Happens on right-clicking in the GraphEdit. 'p_position' is the position of the mouse pointer when the signal is sent. </description> </signal> + <signal name="scroll_offset_changed"> + <argument index="0" name="ofs" type="Vector2"> + </argument> + <description> + </description> + </signal> </signals> <constants> </constants> <theme_items> + <theme_item name="bezier_len_neg" type="int"> + </theme_item> + <theme_item name="bezier_len_pos" type="int"> + </theme_item> <theme_item name="bg" type="StyleBox"> </theme_item> + <theme_item name="grid_major" type="Color"> + </theme_item> + <theme_item name="grid_minor" type="Color"> + </theme_item> <theme_item name="minus" type="Texture"> </theme_item> <theme_item name="more" type="Texture"> </theme_item> <theme_item name="reset" type="Texture"> </theme_item> + <theme_item name="snap" type="Texture"> + </theme_item> </theme_items> </class> <class name="GraphNode" inherits="Container" category="Core"> @@ -13997,6 +14249,12 @@ Return the type of the output connection 'idx'. </description> </method> + <method name="get_modulate" qualifiers="const"> + <return type="Color"> + </return> + <description> + </description> + </method> <method name="get_offset" qualifiers="const"> <return type="Vector2"> </return> @@ -14004,6 +14262,12 @@ Return the offset of the GraphNode. </description> </method> + <method name="get_overlay" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> <method name="get_slot_color_left" qualifiers="const"> <return type="Color"> </return> @@ -14054,6 +14318,18 @@ Returns true if the close button is shown. False otherwise. </description> </method> + <method name="is_comment" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="is_resizeable" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="is_slot_enabled_left" qualifiers="const"> <return type="bool"> </return> @@ -14072,6 +14348,18 @@ Return true if right (output) slot 'idx' is enabled. False otherwise. </description> </method> + <method name="set_comment"> + <argument index="0" name="comment" type="bool"> + </argument> + <description> + </description> + </method> + <method name="set_modulate"> + <argument index="0" name="color" type="Color"> + </argument> + <description> + </description> + </method> <method name="set_offset"> <argument index="0" name="offset" type="Vector2"> </argument> @@ -14079,6 +14367,18 @@ Set the offset of the GraphNode. </description> </method> + <method name="set_overlay"> + <argument index="0" name="overlay" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_resizeable"> + <argument index="0" name="resizeable" type="bool"> + </argument> + <description> + </description> + </method> <method name="set_show_close_button"> <argument index="0" name="show" type="bool"> </argument> @@ -14101,8 +14401,11 @@ </argument> <argument index="6" name="color_right" type="Color"> </argument> + <argument index="7" name="custom_left" type="Object" default="NULL"> + </argument> + <argument index="8" name="custom_right" type="Object" default="NULL"> + </argument> <description> - Set the tuple of input/output slots defined by 'idx' ID. 'left' slots are input, 'right' are output. 'type' is an integer defining the type of the slot. Refer to description for the compatibility between slot types. </description> </method> <method name="set_title"> @@ -14138,14 +14441,32 @@ Signal sent when the GraphNode is requested to be displayed over other ones. Happens on focusing (clicking into) the GraphNode. </description> </signal> + <signal name="resize_request"> + <argument index="0" name="new_minsize" type="Vector2"> + </argument> + <description> + </description> + </signal> </signals> <constants> + <constant name="OVERLAY_DISABLED" value="0"> + </constant> + <constant name="OVERLAY_BREAKPOINT" value="1"> + </constant> + <constant name="OVERLAY_POSITION" value="2"> + </constant> </constants> <theme_items> + <theme_item name="breakpoint" type="StyleBox"> + </theme_item> <theme_item name="close" type="Texture"> </theme_item> <theme_item name="close_offset" type="int"> </theme_item> + <theme_item name="comment" type="StyleBox"> + </theme_item> + <theme_item name="commentfocus" type="StyleBox"> + </theme_item> <theme_item name="defaultfocus" type="StyleBox"> </theme_item> <theme_item name="defaultframe" type="StyleBox"> @@ -14156,6 +14477,10 @@ </theme_item> <theme_item name="port_offset" type="int"> </theme_item> + <theme_item name="position" type="StyleBox"> + </theme_item> + <theme_item name="resizer" type="Texture"> + </theme_item> <theme_item name="selectedframe" type="StyleBox"> </theme_item> <theme_item name="separation" type="int"> @@ -15688,14 +16013,10 @@ </class> <class name="ImmediateGeometry" inherits="GeometryInstance" category="Core"> <brief_description> - Node to draw simple geometry from code, ala OpenGL 1.x + Node to draw simple geometry from code, ala OpenGL 1.x </brief_description> <description> </description> - ImmediateGeometry is a node used for displaying simple geometry created from code, very similar to how glBegin() and glEnd() worked in old versions of OpenGL (1.x). - Simply call [method begin()], and add vertices. For custom vertex colors, uvs, normal, etc. call one of the set_ functions below before adding each vertex. When done, call [method end] - Calls to begin/end are accumulative and all geometry is added together. To clear all the geometry, call [method clear]. - If a material override is set, and this material contains a texture, it's possible to override the texture used in this material for every begin/end set of calls. <methods> <method name="add_sphere"> <argument index="0" name="lats" type="int"> @@ -15704,70 +16025,72 @@ </argument> <argument index="2" name="radius" type="float"> </argument> + <argument index="3" name="add_uv" type="bool" default="true"> + </argument> <description> - Simple helper to draw an uvsphere, with given latitudes, longitude and radius. + Simple helper to draw an uvsphere, with given latitudes, longitude and radius. </description> </method> <method name="add_vertex"> <argument index="0" name="pos" type="Vector3"> </argument> <description> - Add a vertex with the currently set color/uv/etc. + Add a vertex with the currently set color/uv/etc. </description> </method> <method name="begin"> <argument index="0" name="primitive" type="int"> </argument> - <argument index="1" name="texture" type="Texture"> + <argument index="1" name="texture" type="Texture" default="NULL"> </argument> <description> - Begin drawing (And optionally pass a texture override). When done call end(). For more information on how this works, search for glBegin() glEnd() references. + Begin drawing (And optionally pass a texture override). When done call end(). For more information on how this works, search for glBegin() glEnd() references. For the type of primitive, use the [Mesh].PRIMITIVE_* enumerations. </description> </method> <method name="clear"> <description> - Clear everything that was drawn using begin/end. + Clear everything that was drawn using begin/end. </description> </method> <method name="end"> <description> - Call this when done adding a batch of geometry, otherwise it can't be displayed. + Call this when done adding a batch of geometry, otherwise it can't be displayed. </description> </method> <method name="set_color"> <argument index="0" name="color" type="Color"> </argument> <description> - Set the color that the next vertex will use to be drawn. + Set the color that the next vertex will use to be drawn. </description> </method> <method name="set_normal"> <argument index="0" name="normal" type="Vector3"> </argument> <description> - Set the normal that the next vertex will use to be drawn. + Set the normal that the next vertex will use to be drawn. </description> </method> <method name="set_tangent"> <argument index="0" name="tangent" type="Plane"> </argument> <description> - Set the tangent (and binormal facing) that the next vertex will use to be drawn. + Set the tangent (and binormal facing) that the next vertex will use to be drawn. </description> </method> <method name="set_uv"> <argument index="0" name="uv" type="Vector2"> </argument> <description> - Set the UV that the next vertex will use to be drawn. + Set the UV that the next vertex will use to be drawn. </description> </method> <method name="set_uv2"> <argument index="0" name="uv" type="Vector2"> </argument> <description> - Set the second layer of UV that the next vertex will use to be drawn. + Set the second layer of UV that the next vertex will use to be drawn. </description> </method> </methods> @@ -15805,7 +16128,7 @@ Add a new mapping entry (in SDL2 format) to the mapping database. Optionally update already connected devices. </description> </method> - <method name="get_accelerometer"> + <method name="get_accelerometer" qualifiers="const"> <return type="Vector3"> </return> <description> @@ -15819,14 +16142,14 @@ Returns an [Array] containing the device IDs of all currently connected joysticks. </description> </method> - <method name="get_gyroscope"> + <method name="get_gyroscope" qualifiers="const"> <return type="Vector3"> </return> <description> If the device has a gyroscope, this will return the rate of rotation in rad/s around a device's x, y, and z axis. </description> </method> - <method name="get_joy_axis"> + <method name="get_joy_axis" qualifiers="const"> <return type="float"> </return> <argument index="0" name="device" type="int"> @@ -15873,7 +16196,7 @@ Returns the strength of the joystick vibration: x is the strength of the weak motor, and y is the strength of the strong motor. </description> </method> - <method name="get_magnetometer"> + <method name="get_magnetometer" qualifiers="const"> <return type="Vector3"> </return> <description> @@ -15901,7 +16224,23 @@ Returns the mouse speed for the last time the cursor was moved, and this until the next frame where the mouse moves. This means that even if the mouse is not moving, this function will still return the value of the last motion. </description> </method> - <method name="is_action_pressed"> + <method name="is_action_just_pressed" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="action" type="String"> + </argument> + <description> + </description> + </method> + <method name="is_action_just_released" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="action" type="String"> + </argument> + <description> + </description> + </method> + <method name="is_action_pressed" qualifiers="const"> <return type="bool"> </return> <argument index="0" name="action" type="String"> @@ -15910,7 +16249,7 @@ Returns true or false depending on whether the action event is pressed. Actions and their events can be set in the Project Settings / Input Map tab. Or be set with [InputMap]. </description> </method> - <method name="is_joy_button_pressed"> + <method name="is_joy_button_pressed" qualifiers="const"> <return type="bool"> </return> <argument index="0" name="device" type="int"> @@ -15930,7 +16269,7 @@ Returns if the specified device is known by the system. This means that it sets all button and axis indices exactly as defined in the JOY_* constants (see [@Global Scope]). Unknown joysticks are not expected to match these constants, but you can still retrieve events from them. </description> </method> - <method name="is_key_pressed"> + <method name="is_key_pressed" qualifiers="const"> <return type="bool"> </return> <argument index="0" name="scancode" type="int"> @@ -15939,7 +16278,7 @@ Returns true or false depending on whether the key is pressed or not. You can pass KEY_*, which are pre-defined constants listed in [@Global Scope]. </description> </method> - <method name="is_mouse_button_pressed"> + <method name="is_mouse_button_pressed" qualifiers="const"> <return type="bool"> </return> <argument index="0" name="button" type="int"> @@ -15958,7 +16297,7 @@ <method name="set_custom_mouse_cursor"> <argument index="0" name="image" type="Texture"> </argument> - <argument index="1" name="hotspot" type="Vector2" default="Vector2(0,0)"> + <argument index="1" name="hotspot" type="Vector2" default="Vector2(0, 0)"> </argument> <description> Set a custom mouse cursor image, which is only visible inside the game window. The hotspot can also be specified. @@ -17226,20 +17565,25 @@ </class> <class name="InstancePlaceholder" inherits="Node" category="Core"> <brief_description> + Placeholder for the root [Node] of a [PackedScene]. </brief_description> <description> + Turning on the option [b]Load As Placeholder[/b] for an instanced scene in the editor causes it to be replaced by an InstacePlaceholder when running the game. This makes it possible to delay actually loading the scene until calling [method replace_by_instance]. This is useful to avoid loading large scenes all at once by loading parts of it selectively. + The InstancePlaceholder does not have a transform. This causes any child nodes to be positioned relatively to the Viewport from point (0,0), rather than their parent as displayed in the editor. Replacing the placeholder with a scene with a transform will transform children relatively to their parent again. </description> <methods> <method name="get_instance_path" qualifiers="const"> <return type="String"> </return> <description> + Retrieve the path to the [PackedScene] resource file that is loaded by default when calling [method replace_by_instance]. </description> </method> <method name="replace_by_instance"> <argument index="0" name="custom_scene" type="PackedScene" default="NULL"> </argument> <description> + Replace this placeholder by the scene handed as an argument, or the original scene if no argument is given. As for all resources, the scene is loaded only if it's not loaded already. By manually loading the scene beforehand, delays caused by this function can be avoided. </description> </method> </methods> @@ -17458,8 +17802,13 @@ </class> <class name="ItemList" inherits="Control" category="Core"> <brief_description> + Control that provides a list of selectable items (and/or icons) in a single column, or optionally in multiple columns. </brief_description> <description> + This control provides a selectable list of items that may be in a single (or multiple columns) with option of text, icons, + or both text and icon. Tooltips are supported and may be different for every item in the list. Selectable items in the list + may be selected or deselected and multiple selection may be enabled. Selection with right mouse button may also be enabled + to allow use of popup context menus. Items may also be 'activated' with a double click (or Enter key). </description> <methods> <method name="add_icon_item"> @@ -17468,6 +17817,7 @@ <argument index="1" name="selectable" type="bool" default="true"> </argument> <description> + Adds an item to the item list with no text, only an icon. </description> </method> <method name="add_item"> @@ -17478,26 +17828,32 @@ <argument index="2" name="selectable" type="bool" default="true"> </argument> <description> + Adds an item to the item list with specified text. Specify an icon of null for a list item with no icon. + If selectable is true the list item will be selectable. </description> </method> <method name="clear"> <description> + Remove all items from the list. </description> </method> <method name="ensure_current_is_visible"> <description> + Ensure selection is visible, adjusting the scroll position as necessary. </description> </method> <method name="get_allow_rmb_select" qualifiers="const"> <return type="bool"> </return> <description> + Return whether or not items may be selected via right mouse clicking. </description> </method> <method name="get_fixed_column_width" qualifiers="const"> <return type="int"> </return> <description> + If column size has been fixed to a value, return that value. </description> </method> <method name="get_fixed_icon_size" qualifiers="const"> @@ -17526,12 +17882,14 @@ <argument index="1" name="exact" type="bool" default="false"> </argument> <description> + Given a position within the control return the item (if any) at that point. </description> </method> <method name="get_item_count" qualifiers="const"> <return type="int"> </return> <description> + Return count of items currently in the item list. </description> </method> <method name="get_item_custom_bg_color" qualifiers="const"> @@ -17570,6 +17928,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Return the text for specified item index. </description> </method> <method name="get_item_tooltip" qualifiers="const"> @@ -17578,18 +17937,30 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Return tooltip hint for specified item index. + </description> + </method> + <method name="is_item_tooltip_enabled" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="idx" type="int"> + </argument> + <description> + Returns whether the tooptip is enabled for specified item index. </description> </method> <method name="get_max_columns" qualifiers="const"> <return type="int"> </return> <description> + Return total number of columns in use by the list. </description> </method> <method name="get_max_text_lines" qualifiers="const"> <return type="int"> </return> <description> + Return total number of lines currently in use by the list. </description> </method> <method name="get_select_mode" qualifiers="const"> @@ -17602,7 +17973,14 @@ <return type="IntArray"> </return> <description> - Returns a list of selected indexes. + Returns the list of selected indexes. + </description> + </method> + <method name="get_v_scroll"> + <return type="VScrollBar"> + </return> + <description> + Returns the current vertical scroll bar for the List. </description> </method> <method name="is_item_disabled" qualifiers="const"> @@ -17611,6 +17989,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns whether or not the item at the specified index is disabled </description> </method> <method name="is_item_selectable" qualifiers="const"> @@ -17619,12 +17998,14 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns whether or not the item at the specified index is selectable. </description> </method> <method name="is_same_column_width" qualifiers="const"> <return type="int"> </return> <description> + Returns whether or not all columns of the list are of the same size. </description> </method> <method name="is_selected" qualifiers="const"> @@ -17633,12 +18014,14 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns whether or not item at the specified index is currently selected. </description> </method> <method name="remove_item"> <argument index="0" name="idx" type="int"> </argument> <description> + Remove item at specified index from the list. </description> </method> <method name="select"> @@ -17647,18 +18030,22 @@ <argument index="1" name="single" type="bool" default="true"> </argument> <description> + Select the item at the specified index. + Note: This method does not trigger the item selection signal. </description> </method> <method name="set_allow_rmb_select"> <argument index="0" name="allow" type="bool"> </argument> <description> + Allow (or disallow) selection of (selectable) items in the list using right mouse button. </description> </method> <method name="set_fixed_column_width"> <argument index="0" name="width" type="int"> </argument> <description> + Set the size (width) all columns in the list are to use. </description> </method> <method name="set_fixed_icon_size"> @@ -17693,6 +18080,8 @@ <argument index="1" name="disabled" type="bool"> </argument> <description> + Disable (or enable) item at specified index. + Disabled items are not be selectable and do not fire activation (Enter or double-click) signals. </description> </method> <method name="set_item_icon"> @@ -17701,6 +18090,7 @@ <argument index="1" name="icon" type="Texture"> </argument> <description> + Set (or replace) icon of the item at the specified index. </description> </method> <method name="set_item_icon_region"> @@ -17717,6 +18107,7 @@ <argument index="1" name="metadata" type="Variant"> </argument> <description> + Sets a value (of any type) to be stored with the item at the specified index. </description> </method> <method name="set_item_selectable"> @@ -17725,6 +18116,7 @@ <argument index="1" name="selectable" type="bool"> </argument> <description> + Allow or disallow selection of the item at the specified index. </description> </method> <method name="set_item_text"> @@ -17733,6 +18125,7 @@ <argument index="1" name="text" type="String"> </argument> <description> + Sets text of item at specified index. </description> </method> <method name="set_item_tooltip"> @@ -17741,24 +18134,37 @@ <argument index="1" name="tooltip" type="String"> </argument> <description> + Sets tooltip hint for item at specified index. + </description> + </method> + <method name="set_item_tooltip_enabled"> + <argument index="0" name="idx" type="int"> + </argument> + <argument index="1" name="enable" type="bool"> + </argument> + <description> + Sets whether the tooltip is enabled for specified item index. </description> </method> <method name="set_max_columns"> <argument index="0" name="amount" type="int"> </argument> <description> + Set maximum number of columns to use for the list. </description> </method> <method name="set_max_text_lines"> <argument index="0" name="lines" type="int"> </argument> <description> + Set maximum number of lines to use for the list. </description> </method> <method name="set_same_column_width"> <argument index="0" name="enable" type="bool"> </argument> <description> + Sets a fixed size (width) to use for all columns of the list. </description> </method> <method name="set_select_mode"> @@ -17769,12 +18175,14 @@ </method> <method name="sort_items_by_text"> <description> + Sorts items in the list by their text. </description> </method> <method name="unselect"> <argument index="0" name="idx" type="int"> </argument> <description> + Ensure item at specified index is not selected. </description> </method> </methods> @@ -17783,6 +18191,7 @@ <argument index="0" name="index" type="int"> </argument> <description> + Fired when specified list item is activated via double click or Enter. </description> </signal> <signal name="item_rmb_selected"> @@ -17791,12 +18200,16 @@ <argument index="1" name="atpos" type="Vector2"> </argument> <description> + Fired when specified list item has been selected via right mouse clicking. + The click position is also provided to allow appropriate popup of context menus + at the correct location. </description> </signal> <signal name="item_selected"> <argument index="0" name="index" type="int"> </argument> <description> + Fired when specified item has been selected. </description> </signal> <signal name="multi_selected"> @@ -17805,6 +18218,7 @@ <argument index="1" name="selected" type="bool"> </argument> <description> + Fired when a multiple selection is altered on a list allowing mutliple selection. </description> </signal> </signals> @@ -18183,6 +18597,12 @@ Return the point in space where the body is touching another. If there is no collision, this method will return (0,0), so collisions must be checked first with [method is_colliding]. </description> </method> + <method name="get_move_and_slide_colliders" qualifiers="const"> + <return type="Array"> + </return> + <description> + </description> + </method> <method name="get_travel" qualifiers="const"> <return type="Vector2"> </return> @@ -18197,6 +18617,24 @@ Return whether the body is colliding with another. </description> </method> + <method name="is_move_and_slide_on_ceiling" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="is_move_and_slide_on_floor" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="is_move_and_slide_on_wall" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="move"> <return type="Vector2"> </return> @@ -18206,6 +18644,20 @@ Move the body in the given direction, stopping if there is an obstacle. The returned vector is how much movement was remaining before being stopped. </description> </method> + <method name="move_and_slide"> + <return type="Vector2"> + </return> + <argument index="0" name="linear_velocity" type="Vector2"> + </argument> + <argument index="1" name="floor_normal" type="Vector2" default="Vector2(0, 0)"> + </argument> + <argument index="2" name="slope_stop_min_velocity" type="float" default="5"> + </argument> + <argument index="3" name="max_bounces" type="int" default="4"> + </argument> + <description> + </description> + </method> <method name="move_to"> <return type="Vector2"> </return> @@ -18230,10 +18682,12 @@ <method name="test_move"> <return type="bool"> </return> - <argument index="0" name="rel_vec" type="Vector2"> + <argument index="0" name="from" type="Matrix32"> + </argument> + <argument index="1" name="rel_vec" type="Vector2"> </argument> <description> - Return true if there would be a collision if the body moved in the given direction. + Return true if there would be a collision if the body moved from the given point in the given direction. </description> </method> </methods> @@ -19031,7 +19485,7 @@ </description> </method> <method name="cursor_set_blink_enabled"> - <argument index="0" name="enable" type="bool"> + <argument index="0" name="enabled" type="bool"> </argument> <description> Set the line edit caret to blink. @@ -19057,6 +19511,12 @@ Return the cursor position inside the [LineEdit]. </description> </method> + <method name="get_expand_to_text_length" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="get_max_length" qualifiers="const"> <return type="int"> </return> @@ -19142,6 +19602,12 @@ Set the [i]editable[/i] status of the [LineEdit]. When disabled, existing text can't be modified and new text can't be added. </description> </method> + <method name="set_expand_to_text_length"> + <argument index="0" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> <method name="set_max_length"> <argument index="0" name="chars" type="int"> </argument> @@ -21283,6 +21749,172 @@ <constants> </constants> </class> +<class name="NetworkedMultiplayerENet" inherits="NetworkedMultiplayerPeer" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="close_connection"> + <description> + </description> + </method> + <method name="create_client"> + <return type="int"> + </return> + <argument index="0" name="ip" type="String"> + </argument> + <argument index="1" name="port" type="int"> + </argument> + <argument index="2" name="in_bandwidth" type="int" default="0"> + </argument> + <argument index="3" name="out_bandwidth" type="int" default="0"> + </argument> + <description> + </description> + </method> + <method name="create_server"> + <return type="int"> + </return> + <argument index="0" name="port" type="int"> + </argument> + <argument index="1" name="max_clients" type="int" default="32"> + </argument> + <argument index="2" name="in_bandwidth" type="int" default="0"> + </argument> + <argument index="3" name="out_bandwidth" type="int" default="0"> + </argument> + <description> + </description> + </method> + <method name="get_compression_mode" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_bind_ip"> + <argument index="0" name="ip" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_compression_mode"> + <argument index="0" name="mode" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + <constant name="COMPRESS_NONE" value="0"> + </constant> + <constant name="COMPRESS_RANGE_CODER" value="1"> + </constant> + <constant name="COMPRESS_FASTLZ" value="2"> + </constant> + <constant name="COMPRESS_ZLIB" value="3"> + </constant> + </constants> +</class> +<class name="NetworkedMultiplayerPeer" inherits="PacketPeer" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_connection_status" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_packet_peer" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_unique_id" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="is_refusing_new_connections" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="poll"> + <description> + </description> + </method> + <method name="set_refuse_new_connections"> + <argument index="0" name="enable" type="bool"> + </argument> + <description> + </description> + </method> + <method name="set_target_peer"> + <argument index="0" name="id" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_transfer_mode"> + <argument index="0" name="mode" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <signals> + <signal name="connection_failed"> + <description> + </description> + </signal> + <signal name="connection_succeeded"> + <description> + </description> + </signal> + <signal name="peer_connected"> + <argument index="0" name="id" type="int"> + </argument> + <description> + </description> + </signal> + <signal name="peer_disconnected"> + <argument index="0" name="id" type="int"> + </argument> + <description> + </description> + </signal> + <signal name="server_disconnected"> + <description> + </description> + </signal> + </signals> + <constants> + <constant name="TRANSFER_MODE_UNRELIABLE" value="0"> + </constant> + <constant name="TRANSFER_MODE_UNRELIABLE_ORDERED" value="1"> + </constant> + <constant name="TRANSFER_MODE_RELIABLE" value="2"> + </constant> + <constant name="CONNECTION_DISCONNECTED" value="0"> + </constant> + <constant name="CONNECTION_CONNECTING" value="1"> + </constant> + <constant name="CONNECTION_CONNECTED" value="2"> + </constant> + <constant name="TARGET_PEER_BROADCAST" value="0"> + </constant> + <constant name="TARGET_PEER_SERVER" value="1"> + </constant> + </constants> +</class> <class name="Nil" category="Built-In Types"> <brief_description> </brief_description> @@ -21643,6 +22275,12 @@ Return the name of the node. This name is unique among the siblings (other child nodes from the same parent). </description> </method> + <method name="get_network_mode" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> <method name="get_node" qualifiers="const"> <return type="Node"> </return> @@ -21807,6 +22445,12 @@ <description> </description> </method> + <method name="is_network_master" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="is_processing" qualifiers="const"> <return type="bool"> </return> @@ -21896,6 +22540,86 @@ Replace a node in a scene by a given one. Subscriptions that pass through this node will be lost. </description> </method> + <method name="rpc"> + <argument index="0" name="method" type="String"> + </argument> + <description> + </description> + </method> + <method name="rpc_config"> + <argument index="0" name="method" type="String"> + </argument> + <argument index="1" name="mode" type="int"> + </argument> + <description> + </description> + </method> + <method name="rpc_id"> + <argument index="0" name="peer_" type="int"> + </argument> + <argument index="1" name="method" type="String"> + </argument> + <description> + </description> + </method> + <method name="rpc_unreliable"> + <argument index="0" name="method" type="String"> + </argument> + <description> + </description> + </method> + <method name="rpc_unreliable_id"> + <argument index="0" name="peer_" type="int"> + </argument> + <argument index="1" name="method" type="String"> + </argument> + <description> + </description> + </method> + <method name="rset"> + <argument index="0" name="property" type="String"> + </argument> + <argument index="1" name="value" type="Variant"> + </argument> + <description> + </description> + </method> + <method name="rset_config"> + <argument index="0" name="property" type="String"> + </argument> + <argument index="1" name="mode" type="int"> + </argument> + <description> + </description> + </method> + <method name="rset_id"> + <argument index="0" name="peer_id" type="int"> + </argument> + <argument index="1" name="property" type="String"> + </argument> + <argument index="2" name="value" type="Variant"> + </argument> + <description> + </description> + </method> + <method name="rset_unreliable"> + <argument index="0" name="property" type="String"> + </argument> + <argument index="1" name="value" type="Variant"> + </argument> + <description> + </description> + </method> + <method name="rset_unreliable_id"> + <argument index="0" name="peer_id" type="int"> + </argument> + <argument index="1" name="property" type="String"> + </argument> + <argument index="2" name="value" type="Variant"> + </argument> + <description> + </description> + </method> <method name="set_display_folded"> <argument index="0" name="fold" type="bool"> </argument> @@ -21923,6 +22647,12 @@ Set the name of the [Node]. Name must be unique within parent, and setting an already existing name will cause for the node to be automatically renamed. </description> </method> + <method name="set_network_mode"> + <argument index="0" name="mode" type="int"> + </argument> + <description> + </description> + </method> <method name="set_owner"> <argument index="0" name="owner" type="Node"> </argument> @@ -22015,6 +22745,24 @@ </constant> <constant name="NOTIFICATION_DRAG_END" value="22"> </constant> + <constant name="NOTIFICATION_PATH_CHANGED" value="23"> + </constant> + <constant name="NETWORK_MODE_INHERIT" value="0"> + </constant> + <constant name="NETWORK_MODE_MASTER" value="1"> + </constant> + <constant name="NETWORK_MODE_SLAVE" value="2"> + </constant> + <constant name="RPC_MODE_DISABLED" value="0"> + </constant> + <constant name="RPC_MODE_REMOTE" value="1"> + </constant> + <constant name="RPC_MODE_SYNC" value="2"> + </constant> + <constant name="RPC_MODE_MASTER" value="3"> + </constant> + <constant name="RPC_MODE_SLAVE" value="4"> + </constant> <constant name="PAUSE_MODE_INHERIT" value="0"> </constant> <constant name="PAUSE_MODE_STOP" value="1"> @@ -22054,6 +22802,27 @@ Return the global position of the 2D node. </description> </method> + <method name="get_global_rot" qualifiers="const"> + <return type="float"> + </return> + <description> + Return the global rotation in radians of the 2D node. + </description> + </method> + <method name="get_global_rotd" qualifiers="const"> + <return type="float"> + </return> + <description> + Return the global rotation in degrees of the 2D node. + </description> + </method> + <method name="get_global_scale" qualifiers="const"> + <return type="Vector2"> + </return> + <description> + Return the global scale of the 2D node. + </description> + </method> <method name="get_pos" qualifiers="const"> <return type="Vector2"> </return> @@ -22157,6 +22926,27 @@ Set the global position of the 2D node to 'pos'. </description> </method> + <method name="set_global_rot"> + <argument index="0" name="radians" type="float"> + </argument> + <description> + Set the global rotation in radians of the 2D node. + </description> + </method> + <method name="set_global_rotd"> + <argument index="0" name="degrees" type="float"> + </argument> + <description> + Set the global rotation in degrees of the 2D node. + </description> + </method> + <method name="set_global_scale"> + <argument index="0" name="scale" type="Vector2"> + </argument> + <description> + Set the global scale of the 2D node. + </description> + </method> <method name="set_global_transform"> <argument index="0" name="xform" type="Matrix32"> </argument> @@ -22314,6 +23104,7 @@ <argument index="1" name="title" type="String" default=""Alert!""> </argument> <description> + Displays a modal dialog box utilizing the host OS. </description> </method> <method name="can_draw" qualifiers="const"> @@ -22327,6 +23118,7 @@ <return type="bool"> </return> <description> + Returns if the current host platform is using multiple threads. </description> </method> <method name="delay_msec" qualifiers="const"> @@ -22347,12 +23139,17 @@ <argument index="0" name="file" type="String"> </argument> <description> + Dumps the memory allocation ringlist to a file (only works in debug). + Entry format per line: "Address - Size - Description" </description> </method> <method name="dump_resources_to_file"> <argument index="0" name="file" type="String"> </argument> <description> + Dumps all used resources to file (only works in debug). + Entry format per line: "Resource Type : Resource Location" + At the end of the file is a statistic of all used Resource Types. </description> </method> <method name="execute"> @@ -22376,12 +23173,14 @@ <argument index="0" name="string" type="String"> </argument> <description> + Returns the scancode of the given string (e.g. "Escape") </description> </method> <method name="get_borderless_window" qualifiers="const"> <return type="bool"> </return> <description> + Returns true if the current window is borderless. </description> </method> <method name="get_clipboard" qualifiers="const"> @@ -22409,6 +23208,7 @@ <return type="String"> </return> <description> + Returns the value of the commandline argument "-level". </description> </method> <method name="get_data_dir" qualifiers="const"> @@ -22457,6 +23257,14 @@ <return type="Dictionary"> </return> <description> + Returns the current engine version information in a Dictionary. + + "major" - Holds the major version number as a String + "minor" - Holds the minor version number as a String + "patch" - Holds the patch version number as a String + "status" - Holds the status (e.g. "beta", "rc1", "rc2", ... "stable") as a String + "revision" - Holds the revision (e.g. "custom-build") as a String + "string" - major + minor + patch + status + revision in a single String </description> </method> <method name="get_environment" qualifiers="const"> @@ -22509,6 +23317,8 @@ <return type="String"> </return> <description> + Returns the current latin keyboard variant as a String. + Possible return values are: "QWERTY", "AZERTY", "QZERTY", "DVORAK", "NEO" or "ERROR" </description> </method> <method name="get_locale" qualifiers="const"> @@ -22529,6 +23339,7 @@ <return type="String"> </return> <description> + Returns the model name of the current device. </description> </method> <method name="get_name" qualifiers="const"> @@ -22558,6 +23369,7 @@ <argument index="0" name="code" type="int"> </argument> <description> + Returns the given scancode as a string (e.g. Return values: "Escape", "Shift+Escape"). </description> </method> <method name="get_screen_count" qualifiers="const"> @@ -22907,7 +23719,7 @@ </method> <method name="request_attention"> <description> - Request the user attention to the window. It'll flash the taskbar button on Windows or bounce the dock icon on OSX. + Request the user attention to the window. It'll flash the taskbar button on Windows or bounce the dock icon on OSX. </description> </method> <method name="set_borderless_window"> @@ -23067,7 +23879,7 @@ </description> </method> <method name="show_virtual_keyboard"> - <argument index="0" name="existing_text" type="String"> + <argument index="0" name="existing_text" type="String" default=""""> </argument> <description> Shows the virtual keyboard if the platform has one. The [i]existing_text[/i] parameter is useful for implementing your own LineEdit, as it tells the virtual keyboard what text has already been typed (the virtual keyboard uses it for auto-correct and predictions). @@ -23210,6 +24022,8 @@ </description> </method> <method name="call"> + <return type="Variant"> + </return> <argument index="0" name="method" type="String"> </argument> <argument index="1" name="arg0" type="Variant" default="NULL"> @@ -25896,7 +26710,7 @@ </argument> <argument index="1" name="shape" type="RID"> </argument> - <argument index="2" name="transform" type="Matrix32" default="1,0, 0,1, 0,0"> + <argument index="2" name="transform" type="Matrix32" default="((1, 0), (0, 1), (0, 0))"> </argument> <description> Add a shape to the area, along with a transform matrix. Shapes are usually referenced by their index, so you should track which shape has a given index. @@ -26129,7 +26943,7 @@ </argument> <argument index="1" name="shape" type="RID"> </argument> - <argument index="2" name="transform" type="Matrix32" default="1,0, 0,1, 0,0"> + <argument index="2" name="transform" type="Matrix32" default="((1, 0), (0, 1), (0, 0))"> </argument> <description> Add a shape to the body, along with a transform matrix. Shapes are usually referenced by their index, so you should track which shape has a given index. @@ -26527,14 +27341,16 @@ </return> <argument index="0" name="body" type="RID"> </argument> - <argument index="1" name="motion" type="Vector2"> + <argument index="1" name="from" type="Matrix32"> </argument> - <argument index="2" name="margin" type="float" default="0.08"> + <argument index="2" name="motion" type="Vector2"> </argument> - <argument index="3" name="result" type="Physics2DTestMotionResult" default="NULL"> + <argument index="3" name="margin" type="float" default="0.08"> + </argument> + <argument index="4" name="result" type="Physics2DTestMotionResult" default="NULL"> </argument> <description> - Return whether a body can move in a given direction. Apart from the boolean return value, a [Physics2DTestMotionResult] can be passed to return additional information in. + Return whether a body can move from a given point in a given direction. Apart from the boolean return value, a [Physics2DTestMotionResult] can be passed to return additional information in. </description> </method> <method name="damped_spring_joint_create"> @@ -29431,14 +30247,14 @@ </description> </method> <method name="popup_centered"> - <argument index="0" name="size" type="Vector2" default="Vector2(0,0)"> + <argument index="0" name="size" type="Vector2" default="Vector2(0, 0)"> </argument> <description> Popup (show the control in modal form) in the center of the screen, at the current size, or at a size determined by "size". </description> </method> <method name="popup_centered_minsize"> - <argument index="0" name="minsize" type="Vector2" default="Vector2(0,0)"> + <argument index="0" name="minsize" type="Vector2" default="Vector2(0, 0)"> </argument> <description> Popup (show the control in modal form) in the center of the screen, ensuring the size is never smaller than [code]minsize[/code]. @@ -30271,8 +31087,10 @@ </class> <class name="RID" category="Built-In Types"> <brief_description> + Handle for a [Resource]'s unique ID. </brief_description> <description> + The RID type is used to access the unique integer ID of a resource. They are opaque, so they do not grant access to the associated resource by themselves. They are used by and with the low-level Server classes such as [VisualServer]. </description> <methods> <method name="RID"> @@ -30281,12 +31099,14 @@ <argument index="0" name="from" type="Object"> </argument> <description> + Create a new RID instance with the ID of a given resource. When not handed a valid resource, silently stores the unused ID 0. </description> </method> <method name="get_id"> <return type="int"> </return> <description> + Retrieve the ID of the referenced resource. </description> </method> </methods> @@ -30609,6 +31429,7 @@ <return type="Vector3"> </return> <description> + Returns collision point. This point is in [b]global[/b] coordinate system. </description> </method> <method name="get_layer_mask" qualifiers="const"> @@ -30651,6 +31472,7 @@ <argument index="0" name="local_point" type="Vector3"> </argument> <description> + Sets to which point ray should be casted. This point is in [b]local[/b] coordinate system. </description> </method> <method name="set_enabled"> @@ -30736,6 +31558,12 @@ Returns the collision point in which the ray intersects the closest object. </description> </method> + <method name="get_exclude_parent_body" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="get_layer_mask" qualifiers="const"> <return type="int"> </return> @@ -30790,6 +31618,12 @@ Enables the RayCast2D. Only enabled raycasts will be able to query the space and report collisions. </description> </method> + <method name="set_exclude_parent_body"> + <argument index="0" name="mask" type="bool"> + </argument> + <description> + </description> + </method> <method name="set_layer_mask"> <argument index="0" name="mask" type="int"> </argument> @@ -33836,6 +34670,14 @@ <description> </description> </method> + <method name="create_timer"> + <return type="SceneTreeTimer"> + </return> + <argument index="0" name="time_sec" type="float"> + </argument> + <description> + </description> + </method> <method name="get_current_scene" qualifiers="const"> <return type="Node"> </return> @@ -33854,6 +34696,12 @@ <description> </description> </method> + <method name="get_network_unique_id" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> <method name="get_node_count" qualifiers="const"> <return type="int"> </return> @@ -33900,12 +34748,24 @@ <description> </description> </method> + <method name="is_network_server" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="is_paused" qualifiers="const"> <return type="bool"> </return> <description> </description> </method> + <method name="is_refusing_new_network_connections" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="notify_group"> <argument index="0" name="call_flags" type="int"> </argument> @@ -33984,12 +34844,24 @@ <description> </description> </method> + <method name="set_network_peer"> + <argument index="0" name="peer" type="NetworkedMultiplayerPeer"> + </argument> + <description> + </description> + </method> <method name="set_pause"> <argument index="0" name="enable" type="bool"> </argument> <description> </description> </method> + <method name="set_refuse_new_network_connections"> + <argument index="0" name="refuse" type="bool"> + </argument> + <description> + </description> + </method> <method name="set_screen_stretch"> <argument index="0" name="mode" type="int"> </argument> @@ -34002,6 +34874,14 @@ </method> </methods> <signals> + <signal name="connected_to_server"> + <description> + </description> + </signal> + <signal name="connection_failed"> + <description> + </description> + </signal> <signal name="files_dropped"> <argument index="0" name="files" type="StringArray"> </argument> @@ -34018,6 +34898,18 @@ <description> </description> </signal> + <signal name="network_peer_connected"> + <argument index="0" name="id" type="int"> + </argument> + <description> + </description> + </signal> + <signal name="network_peer_disconnected"> + <argument index="0" name="id" type="int"> + </argument> + <description> + </description> + </signal> <signal name="node_configuration_warning_changed"> <argument index="0" name="node" type="Object"> </argument> @@ -34034,6 +34926,10 @@ <description> </description> </signal> + <signal name="server_disconnected"> + <description> + </description> + </signal> <signal name="tree_changed"> <description> </description> @@ -34064,6 +34960,34 @@ </constant> </constants> </class> +<class name="SceneTreeTimer" inherits="Reference" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_time_left" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> + <method name="set_time_left"> + <argument index="0" name="time" type="float"> + </argument> + <description> + </description> + </method> + </methods> + <signals> + <signal name="timeout"> + <description> + </description> + </signal> + </signals> + <constants> + </constants> +</class> <class name="Script" inherits="Resource" category="Core"> <brief_description> Base class for scripts. @@ -34150,7 +35074,7 @@ A helper node for displaying scrollable elements (e.g. lists). </brief_description> <description> - A ScrollContainer node with a [Control] child and scrollbar child ([HScrollbar], [VScrollBar], or both) will only draw the Control within the ScrollContainer area. Scrollbars will automatically be drawn at the right (for vertical) or bottom (for horizontal) and will enable dragging to move the viewable Control (and its children) within the ScrollContainer. Scrollbars will also automatically resize the grabber based on the minimum_size of the Control relative to the ScrollContainer. Works great with a [Panel] control. + A ScrollContainer node with a [Control] child and scrollbar child ([HScrollbar], [VScrollBar], or both) will only draw the Control within the ScrollContainer area. Scrollbars will automatically be drawn at the right (for vertical) or bottom (for horizontal) and will enable dragging to move the viewable Control (and its children) within the ScrollContainer. Scrollbars will also automatically resize the grabber based on the minimum_size of the Control relative to the ScrollContainer. Works great with a [Panel] control. You can set EXPAND on children size flags, so they will upscale to ScrollContainer size if ScrollContainer size is bigger (scroll is invisible for chosen dimension). </description> <methods> <method name="get_h_scroll" qualifiers="const"> @@ -37507,6 +38431,62 @@ <constants> </constants> </class> +<class name="StreamPeerBuffer" inherits="StreamPeer" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="clear"> + <description> + </description> + </method> + <method name="duplicate" qualifiers="const"> + <return type="StreamPeerBuffer"> + </return> + <description> + </description> + </method> + <method name="get_data_array" qualifiers="const"> + <return type="RawArray"> + </return> + <description> + </description> + </method> + <method name="get_pos" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_size" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="resize"> + <argument index="0" name="size" type="int"> + </argument> + <description> + </description> + </method> + <method name="seek"> + <argument index="0" name="pos" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_data_array"> + <argument index="0" name="data" type="RawArray"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> <class name="StreamPeerSSL" inherits="StreamPeer" category="Core"> <brief_description> SSL Stream peer. @@ -38691,6 +39671,12 @@ <description> </description> </method> + <method name="get_modulate" qualifiers="const"> + <return type="Color"> + </return> + <description> + </description> + </method> <method name="get_region_rect" qualifiers="const"> <return type="Rect2"> </return> @@ -38725,6 +39711,12 @@ <description> </description> </method> + <method name="set_modulate"> + <argument index="0" name="color" type="Color"> + </argument> + <description> + </description> + </method> <method name="set_region_rect"> <argument index="0" name="region" type="Rect2"> </argument> @@ -38767,6 +39759,12 @@ <description> </description> </method> + <method name="add_index"> + <argument index="0" name="index" type="int"> + </argument> + <description> + </description> + </method> <method name="add_normal"> <argument index="0" name="normal" type="Vector3"> </argument> @@ -41773,6 +42771,12 @@ <description> </description> </method> + <method name="is_delayed_text_editor_enabled" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="is_folding_hidden" qualifiers="const"> <return type="bool"> </return> @@ -41821,6 +42825,12 @@ <description> </description> </method> + <method name="set_delayed_text_editor"> + <argument index="0" name="enable" type="bool"> + </argument> + <description> + </description> + </method> <method name="set_drop_mode_flags"> <argument index="0" name="flags" type="int"> </argument> @@ -41889,6 +42899,10 @@ <description> </description> </signal> + <signal name="item_double_clicked"> + <description> + </description> + </signal> <signal name="item_edited"> <description> </description> @@ -42412,7 +43426,7 @@ Because it is easy to get it wrong, here is a quick usage example: [codeblock] var tween = get_node("Tween") - tween.interpolate_property(get_node("Node2D_to_move"), "transform/pos", Vector2(0,0), Vector2(100,100), Tween.TRANS_LINEAR, Tween.EASE_IN_OUT) + tween.interpolate_property(get_node("Node2D_to_move"), "transform/pos", Vector2(0,0), Vector2(100,100), 1, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT) tween.start() [/codeblock] Some of the methods of this class require a property name. You can get the property name by hovering over the property in the inspector of the editor. @@ -42961,10 +43975,11 @@ <method name="create_action"> <argument index="0" name="name" type="String"> </argument> - <argument index="1" name="mergeable" type="bool" default="false"> + <argument index="1" name="merge_mode" type="int" default="0"> </argument> <description> - Create a new action. After this is called, do all your calls to [method add_do_method], [method add_undo_method], [method add_do_property] and [method add_undo_property]. + Create a new action. After this is called, do all your calls to [method add_do_method], [method add_undo_method], [method add_do_property] and [method add_un +do_property]. </description> </method> <method name="get_current_action_name" qualifiers="const"> @@ -42984,6 +43999,12 @@ </method> </methods> <constants> + <constant name="MERGE_DISABLE" value="0"> + </constant> + <constant name="MERGE_ENDS" value="1"> + </constant> + <constant name="MERGE_ALL" value="2"> + </constant> </constants> </class> <class name="VBoxContainer" inherits="BoxContainer" category="Core"> @@ -44439,9 +45460,9 @@ <method name="set_size_override"> <argument index="0" name="enable" type="bool"> </argument> - <argument index="1" name="size" type="Vector2" default="Vector2(-1,-1)"> + <argument index="1" name="size" type="Vector2" default="Vector2(-1, -1)"> </argument> - <argument index="2" name="margin" type="Vector2" default="Vector2(0,0)"> + <argument index="2" name="margin" type="Vector2" default="Vector2(0, 0)"> </argument> <description> Set the size of the viewport. If the enable parameter is true, it would use the override, otherwise it would use the default size. If the size parameter is equal to [code](-1, -1)[/code], it won't update the size. @@ -44817,6 +45838,1838 @@ <constants> </constants> </class> +<class name="VisualScript" inherits="Script" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="add_custom_signal"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="add_function"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="add_node"> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="id" type="int"> + </argument> + <argument index="2" name="node" type="Object"> + </argument> + <argument index="3" name="pos" type="Vector2" default="Vector2(0, 0)"> + </argument> + <description> + </description> + </method> + <method name="add_variable"> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="default_value" type="Variant" default="NULL"> + </argument> + <argument index="2" name="export" type="bool" default="false"> + </argument> + <description> + </description> + </method> + <method name="custom_signal_add_argument"> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="type" type="int"> + </argument> + <argument index="2" name="argname" type="String"> + </argument> + <argument index="3" name="index" type="int" default="-1"> + </argument> + <description> + </description> + </method> + <method name="custom_signal_get_argument_count" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="custom_signal_get_argument_name" qualifiers="const"> + <return type="String"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="argidx" type="int"> + </argument> + <description> + </description> + </method> + <method name="custom_signal_get_argument_type" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="argidx" type="int"> + </argument> + <description> + </description> + </method> + <method name="custom_signal_remove_argument"> + <argument index="0" name="argidx" type="String"> + </argument> + <argument index="1" name="arg1" type="int"> + </argument> + <description> + </description> + </method> + <method name="custom_signal_set_argument_name"> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="argidx" type="int"> + </argument> + <argument index="2" name="argname" type="String"> + </argument> + <description> + </description> + </method> + <method name="custom_signal_set_argument_type"> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="argidx" type="int"> + </argument> + <argument index="2" name="type" type="int"> + </argument> + <description> + </description> + </method> + <method name="custom_signal_swap_argument"> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="argidx" type="int"> + </argument> + <argument index="2" name="withidx" type="int"> + </argument> + <description> + </description> + </method> + <method name="data_connect"> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="from_node" type="int"> + </argument> + <argument index="2" name="from_port" type="int"> + </argument> + <argument index="3" name="to_node" type="int"> + </argument> + <argument index="4" name="to_port" type="int"> + </argument> + <description> + </description> + </method> + <method name="data_disconnect"> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="from_node" type="int"> + </argument> + <argument index="2" name="from_port" type="int"> + </argument> + <argument index="3" name="to_node" type="int"> + </argument> + <argument index="4" name="to_port" type="int"> + </argument> + <description> + </description> + </method> + <method name="get_function_node_id" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="get_function_scroll" qualifiers="const"> + <return type="Vector2"> + </return> + <argument index="0" name="arg0" type="String"> + </argument> + <description> + </description> + </method> + <method name="get_node" qualifiers="const"> + <return type="Object"> + </return> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="id" type="int"> + </argument> + <description> + </description> + </method> + <method name="get_node_pos" qualifiers="const"> + <return type="Vector2"> + </return> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="id" type="int"> + </argument> + <description> + </description> + </method> + <method name="get_variable_default_value" qualifiers="const"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="get_variable_export" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="get_variable_info" qualifiers="const"> + <return type="Dictionary"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="has_custom_signal" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="has_data_connection" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="from_node" type="int"> + </argument> + <argument index="2" name="from_port" type="int"> + </argument> + <argument index="3" name="to_node" type="int"> + </argument> + <argument index="4" name="to_port" type="int"> + </argument> + <description> + </description> + </method> + <method name="has_function" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="has_node" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="id" type="int"> + </argument> + <description> + </description> + </method> + <method name="has_sequence_connection" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="from_node" type="int"> + </argument> + <argument index="2" name="from_output" type="int"> + </argument> + <argument index="3" name="to_node" type="int"> + </argument> + <description> + </description> + </method> + <method name="has_variable" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="remove_custom_signal"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="remove_function"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="remove_node"> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="id" type="int"> + </argument> + <description> + </description> + </method> + <method name="remove_variable"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="rename_custom_signal"> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="new_name" type="String"> + </argument> + <description> + </description> + </method> + <method name="rename_function"> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="new_name" type="String"> + </argument> + <description> + </description> + </method> + <method name="rename_variable"> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="new_name" type="String"> + </argument> + <description> + </description> + </method> + <method name="sequence_connect"> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="from_node" type="int"> + </argument> + <argument index="2" name="from_output" type="int"> + </argument> + <argument index="3" name="to_node" type="int"> + </argument> + <description> + </description> + </method> + <method name="sequence_disconnect"> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="from_node" type="int"> + </argument> + <argument index="2" name="from_output" type="int"> + </argument> + <argument index="3" name="to_node" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_function_scroll"> + <argument index="0" name="ofs" type="String"> + </argument> + <argument index="1" name="arg1" type="Vector2"> + </argument> + <description> + </description> + </method> + <method name="set_instance_base_type"> + <argument index="0" name="type" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_node_pos"> + <argument index="0" name="func" type="String"> + </argument> + <argument index="1" name="id" type="int"> + </argument> + <argument index="2" name="pos" type="Vector2"> + </argument> + <description> + </description> + </method> + <method name="set_variable_default_value"> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="value" type="Variant"> + </argument> + <description> + </description> + </method> + <method name="set_variable_export"> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="enable" type="bool"> + </argument> + <description> + </description> + </method> + <method name="set_variable_info"> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="value" type="Dictionary"> + </argument> + <description> + </description> + </method> + </methods> + <signals> + <signal name="node_ports_changed"> + <argument index="0" name="function" type="String"> + </argument> + <argument index="1" name="id" type="int"> + </argument> + <description> + </description> + </signal> + </signals> + <constants> + </constants> +</class> +<class name="VisualScriptBasicTypeConstant" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_basic_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_basic_type_constant" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_basic_type"> + <argument index="0" name="name" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_basic_type_constant"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptBuiltinFunc" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_func"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_func"> + <argument index="0" name="which" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptClassConstant" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_base_type"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_class_constant"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_base_type"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_class_constant"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptComment" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_description" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_size" qualifiers="const"> + <return type="Vector2"> + </return> + <description> + </description> + </method> + <method name="get_title" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_description"> + <argument index="0" name="description" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_size"> + <argument index="0" name="size" type="Vector2"> + </argument> + <description> + </description> + </method> + <method name="set_title"> + <argument index="0" name="title" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptCondition" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptConstant" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_constant_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_constant_value" qualifiers="const"> + <description> + </description> + </method> + <method name="set_constant_type"> + <argument index="0" name="type" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_constant_value"> + <argument index="0" name="value" type="Variant"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptConstructor" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_constructor" qualifiers="const"> + <return type="Dictionary"> + </return> + <description> + </description> + </method> + <method name="get_constructor_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_constructor"> + <argument index="0" name="constructor" type="Dictionary"> + </argument> + <description> + </description> + </method> + <method name="set_constructor_type"> + <argument index="0" name="type" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptCustomNode" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="_get_caption" qualifiers="virtual"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="_get_category" qualifiers="virtual"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="_get_input_value_port_count" qualifiers="virtual"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="_get_input_value_port_name" qualifiers="virtual"> + <return type="String"> + </return> + <argument index="0" name="idx" type="int"> + </argument> + <description> + </description> + </method> + <method name="_get_input_value_port_type" qualifiers="virtual"> + <return type="int"> + </return> + <argument index="0" name="idx" type="int"> + </argument> + <description> + </description> + </method> + <method name="_get_output_sequence_port_count" qualifiers="virtual"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="_get_output_sequence_port_text" qualifiers="virtual"> + <return type="String"> + </return> + <argument index="0" name="idx" type="int"> + </argument> + <description> + </description> + </method> + <method name="_get_output_value_port_count" qualifiers="virtual"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="_get_output_value_port_name" qualifiers="virtual"> + <return type="String"> + </return> + <argument index="0" name="idx" type="int"> + </argument> + <description> + </description> + </method> + <method name="_get_output_value_port_type" qualifiers="virtual"> + <return type="int"> + </return> + <argument index="0" name="idx" type="int"> + </argument> + <description> + </description> + </method> + <method name="_get_text" qualifiers="virtual"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="_get_working_memory_size" qualifiers="virtual"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="_has_input_sequence_port" qualifiers="virtual"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="_step" qualifiers="virtual"> + <return type="Variant"> + </return> + <argument index="0" name="inputs" type="Array"> + </argument> + <argument index="1" name="outputs" type="Array"> + </argument> + <argument index="2" name="start_mode" type="int"> + </argument> + <argument index="3" name="working_mem" type="Array"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + <constant name="START_MODE_BEGIN_SEQUENCE" value="0"> + </constant> + <constant name="START_MODE_CONTINUE_SEQUENCE" value="1"> + </constant> + <constant name="START_MODE_RESUME_YIELD" value="2"> + </constant> + <constant name="STEP_PUSH_STACK_BIT" value="16777216"> + </constant> + <constant name="STEP_GO_BACK_BIT" value="33554432"> + </constant> + <constant name="STEP_NO_ADVANCE_BIT" value="67108864"> + </constant> + <constant name="STEP_EXIT_FUNCTION_BIT" value="134217728"> + </constant> + <constant name="STEP_YIELD_BIT" value="268435456"> + </constant> + </constants> +</class> +<class name="VisualScriptDeconstruct" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_deconstruct_input_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_deconstruct_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_deconstruct_input_type"> + <argument index="0" name="input_type" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_deconstruct_type"> + <argument index="0" name="type" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptEmitSignal" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_signal" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_signal"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptEngineSingleton" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_singleton"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_singleton"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptExpression" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptFunction" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptFunctionCall" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_base_path" qualifiers="const"> + <return type="NodePath"> + </return> + <description> + </description> + </method> + <method name="get_base_script" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_base_type" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_basic_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_call_mode" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_function" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_rpc_call_mode" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_singleton" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_use_default_args" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_validate" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="set_base_path"> + <argument index="0" name="base_path" type="NodePath"> + </argument> + <description> + </description> + </method> + <method name="set_base_script"> + <argument index="0" name="base_script" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_base_type"> + <argument index="0" name="base_type" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_basic_type"> + <argument index="0" name="basic_type" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_call_mode"> + <argument index="0" name="mode" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_function"> + <argument index="0" name="function" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_rpc_call_mode"> + <argument index="0" name="mode" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_singleton"> + <argument index="0" name="singleton" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_use_default_args"> + <argument index="0" name="amount" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_validate"> + <argument index="0" name="enable" type="bool"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + <constant name="CALL_MODE_SELF" value="0"> + </constant> + <constant name="CALL_MODE_NODE_PATH" value="1"> + </constant> + <constant name="CALL_MODE_INSTANCE" value="2"> + </constant> + <constant name="CALL_MODE_BASIC_TYPE" value="3"> + </constant> + </constants> +</class> +<class name="VisualScriptFunctionState" inherits="Reference" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="connect_to_signal"> + <argument index="0" name="obj" type="Object"> + </argument> + <argument index="1" name="signals" type="String"> + </argument> + <argument index="2" name="args" type="Array"> + </argument> + <description> + </description> + </method> + <method name="is_valid" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="resume"> + <return type="Array"> + </return> + <argument index="0" name="args" type="Array" default="NULL"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptGlobalConstant" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_global_constant"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_global_constant"> + <argument index="0" name="index" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptIndexGet" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptIndexSet" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptInputAction" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_action_mode" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_action_name" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_action_mode"> + <argument index="0" name="mode" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_action_name"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptInputFilter" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptIterator" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptLocalVar" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_var_name" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_var_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_var_name"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_var_type"> + <argument index="0" name="type" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptLocalVarSet" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_var_name" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_var_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_var_name"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_var_type"> + <argument index="0" name="type" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptMathConstant" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_math_constant"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_math_constant"> + <argument index="0" name="which" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptNode" inherits="Resource" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_default_input_value" qualifiers="const"> + <return type="Variant"> + </return> + <argument index="0" name="port_idx" type="int"> + </argument> + <description> + </description> + </method> + <method name="get_visual_script" qualifiers="const"> + <return type="VisualScript"> + </return> + <description> + </description> + </method> + <method name="set_default_input_value"> + <argument index="0" name="port_idx" type="int"> + </argument> + <argument index="1" name="value" type="Variant"> + </argument> + <description> + </description> + </method> + </methods> + <signals> + <signal name="ports_changed"> + <description> + </description> + </signal> + </signals> + <constants> + </constants> +</class> +<class name="VisualScriptOperator" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_operator" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_typed" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_operator"> + <argument index="0" name="op" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_typed"> + <argument index="0" name="type" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptPreload" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_preload" qualifiers="const"> + <return type="Object"> + </return> + <description> + </description> + </method> + <method name="set_preload"> + <argument index="0" name="resource" type="Object"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptPropertyGet" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_base_path" qualifiers="const"> + <return type="NodePath"> + </return> + <description> + </description> + </method> + <method name="get_base_script" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_base_type" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_basic_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_call_mode" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_event_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_property" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_base_path"> + <argument index="0" name="base_path" type="NodePath"> + </argument> + <description> + </description> + </method> + <method name="set_base_script"> + <argument index="0" name="base_script" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_base_type"> + <argument index="0" name="base_type" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_basic_type"> + <argument index="0" name="basic_type" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_call_mode"> + <argument index="0" name="mode" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_event_type"> + <argument index="0" name="event_type" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_property"> + <argument index="0" name="property" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + <constant name="CALL_MODE_SELF" value="0"> + </constant> + <constant name="CALL_MODE_NODE_PATH" value="1"> + </constant> + <constant name="CALL_MODE_INSTANCE" value="2"> + </constant> + </constants> +</class> +<class name="VisualScriptPropertySet" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_base_path" qualifiers="const"> + <return type="NodePath"> + </return> + <description> + </description> + </method> + <method name="get_base_script" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_base_type" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_basic_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_call_mode" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_event_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_property" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_base_path"> + <argument index="0" name="base_path" type="NodePath"> + </argument> + <description> + </description> + </method> + <method name="set_base_script"> + <argument index="0" name="base_script" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_base_type"> + <argument index="0" name="base_type" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_basic_type"> + <argument index="0" name="basic_type" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_call_mode"> + <argument index="0" name="mode" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_event_type"> + <argument index="0" name="event_type" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_property"> + <argument index="0" name="property" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + <constant name="CALL_MODE_SELF" value="0"> + </constant> + <constant name="CALL_MODE_NODE_PATH" value="1"> + </constant> + <constant name="CALL_MODE_INSTANCE" value="2"> + </constant> + </constants> +</class> +<class name="VisualScriptResourcePath" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_resource_path"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_resource_path"> + <argument index="0" name="path" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptReturn" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_return_type" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="is_return_value_enabled" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="set_enable_return_value"> + <argument index="0" name="enable" type="bool"> + </argument> + <description> + </description> + </method> + <method name="set_return_type"> + <argument index="0" name="type" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptSceneNode" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_node_path"> + <return type="NodePath"> + </return> + <description> + </description> + </method> + <method name="set_node_path"> + <argument index="0" name="path" type="NodePath"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptSceneTree" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptSelf" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptSequence" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_steps" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_steps"> + <argument index="0" name="steps" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptSubCall" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="_subcall" qualifiers="virtual"> + <argument index="0" name="arguments" type="Variant"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptSwitch" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptTypeCast" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_base_script" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_base_type" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_base_script"> + <argument index="0" name="path" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_base_type"> + <argument index="0" name="type" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptVariableGet" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_variable" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_variable"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptVariableSet" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_variable" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_variable"> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptWhile" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + </methods> + <constants> + </constants> +</class> +<class name="VisualScriptYield" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_wait_time"> + <return type="float"> + </return> + <description> + </description> + </method> + <method name="get_yield_mode"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_wait_time"> + <argument index="0" name="sec" type="float"> + </argument> + <description> + </description> + </method> + <method name="set_yield_mode"> + <argument index="0" name="mode" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + <constant name="YIELD_FRAME" value="1"> + </constant> + <constant name="YIELD_FIXED_FRAME" value="2"> + </constant> + <constant name="YIELD_WAIT" value="3"> + </constant> + </constants> +</class> +<class name="VisualScriptYieldSignal" inherits="VisualScriptNode" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_base_path" qualifiers="const"> + <return type="NodePath"> + </return> + <description> + </description> + </method> + <method name="get_base_type" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="get_call_mode" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_signal" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> + <method name="set_base_path"> + <argument index="0" name="base_path" type="NodePath"> + </argument> + <description> + </description> + </method> + <method name="set_base_type"> + <argument index="0" name="base_type" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_call_mode"> + <argument index="0" name="mode" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_signal"> + <argument index="0" name="signal" type="String"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + <constant name="CALL_MODE_SELF" value="0"> + </constant> + <constant name="CALL_MODE_NODE_PATH" value="1"> + </constant> + <constant name="CALL_MODE_INSTANCE" value="2"> + </constant> + </constants> +</class> <class name="VisualServer" inherits="Object" category="Core"> <brief_description> Server for anything visible. @@ -44917,6 +47770,8 @@ </argument> <argument index="4" name="arg4" type="float" default="1"> </argument> + <argument index="5" name="arg5" type="bool" default="false"> + </argument> <description> </description> </method> @@ -46586,24 +49441,28 @@ <return type="RID"> </return> <description> + Retrieve the [RID] of this world's canvas resource. Used by the [VisualServer] for 2D drawing. </description> </method> <method name="get_direct_space_state"> <return type="Physics2DDirectSpaceState"> </return> <description> + Retrieve the state of this world's physics space. This allows arbitrary querying for collision. </description> </method> <method name="get_sound_space"> <return type="RID"> </return> <description> + Retrieve the [RID] of this world's sound space resource. Used by the [SpatialSound2DServer] for 2D spatial audio. </description> </method> <method name="get_space"> <return type="RID"> </return> <description> + Retrieve the [RID] of this world's physics space resource. Used by the [Physics2DServer] for 2D physics, treating it as both a space and an area. </description> </method> </methods> diff --git a/drivers/SCsub b/drivers/SCsub index 79cbe50685..8243483e17 100644 --- a/drivers/SCsub +++ b/drivers/SCsub @@ -17,6 +17,7 @@ SConscript('gl_context/SCsub'); SConscript('pnm/SCsub'); if (env['openssl']!='no'): + env.Append(CPPFLAGS=['-DOPENSSL_ENABLED']); env_drivers.Append(CPPFLAGS=['-DOPENSSL_ENABLED']); if (env['openssl']=="builtin"): env_drivers.Append(CPPPATH=['#drivers/builtin_openssl2']) diff --git a/drivers/builtin_openssl2/SCsub b/drivers/builtin_openssl2/SCsub index bd0f428cfc..a28bc2922c 100644 --- a/drivers/builtin_openssl2/SCsub +++ b/drivers/builtin_openssl2/SCsub @@ -642,6 +642,7 @@ openssl_sources = [ #env.drivers_sources+=openssl_sources +env.Append(CPPPATH=["#drivers/builtin_openssl2"]) env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/crypto"]) env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/openssl"]) env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/evp"]) @@ -650,6 +651,9 @@ env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/modes"]) #env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/store"]) env_drivers.Append(CPPFLAGS=["-DOPENSSL_NO_ASM","-DOPENSSL_THREADS","-DL_ENDIAN"]) +if "platform" in env and env["platform"] == "winrt": + openssl_sources += ['winrt.cpp'] + # Workaround for compilation error with GCC/Clang when -Werror is too greedy (GH-4517) import os if not (os.name=="nt" and os.getenv("VSINSTALLDIR")!=None): # not Windows and not MSVC diff --git a/drivers/builtin_openssl2/crypto/rand/rand_win.c b/drivers/builtin_openssl2/crypto/rand/rand_win.c index 06670ae017..70fd52a7aa 100644 --- a/drivers/builtin_openssl2/crypto/rand/rand_win.c +++ b/drivers/builtin_openssl2/crypto/rand/rand_win.c @@ -118,8 +118,10 @@ # ifndef _WIN32_WINNT # define _WIN32_WINNT 0x0400 # endif +#ifndef WINRT_ENABLED # include <wincrypt.h> # include <tlhelp32.h> +#endif /* * Limit the time spent walking through the heap, processes, threads and @@ -161,7 +163,7 @@ typedef struct tagCURSORINFO { # define CURSOR_SHOWING 0x00000001 # endif /* CURSOR_SHOWING */ -# if !defined(OPENSSL_SYS_WINCE) +# if !defined(OPENSSL_SYS_WINCE) && !defined(WINRT_ENABLED) typedef BOOL(WINAPI *CRYPTACQUIRECONTEXTW) (HCRYPTPROV *, LPCWSTR, LPCWSTR, DWORD, DWORD); typedef BOOL(WINAPI *CRYPTGENRANDOM) (HCRYPTPROV, DWORD, BYTE *); @@ -196,6 +198,7 @@ typedef NET_API_STATUS(NET_API_FUNCTION *NETFREE) (LPBYTE); # endif /* 1 */ # endif /* !OPENSSL_SYS_WINCE */ +#if !defined(WINRT_ENABLED) int RAND_poll(void) { MEMORYSTATUS m; @@ -580,6 +583,8 @@ int RAND_poll(void) return (1); } +#endif // WINRT_ENABLED + int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam) { double add_entropy = 0; @@ -682,7 +687,7 @@ static void readtimer(void) static void readscreen(void) { -# if !defined(OPENSSL_SYS_WINCE) && !defined(OPENSSL_SYS_WIN32_CYGWIN) +# if !defined(OPENSSL_SYS_WINCE) && !defined(OPENSSL_SYS_WIN32_CYGWIN) && !defined(WINRT_ENABLED) HDC hScrDC; /* screen DC */ HBITMAP hBitmap; /* handle for our bitmap */ BITMAP bm; /* bitmap properties */ diff --git a/drivers/builtin_openssl2/openssl/dtls1.h b/drivers/builtin_openssl2/openssl/dtls1.h index 64ad3c87d0..a58aca248d 100644 --- a/drivers/builtin_openssl2/openssl/dtls1.h +++ b/drivers/builtin_openssl2/openssl/dtls1.h @@ -81,6 +81,9 @@ # include <sys/time.h> # endif # endif +#ifdef WINRT_ENABLED +#include <winsock2.h> +#endif #ifdef __cplusplus extern "C" { diff --git a/drivers/builtin_openssl2/winrt.cpp b/drivers/builtin_openssl2/winrt.cpp new file mode 100644 index 0000000000..c3a6f8bfcc --- /dev/null +++ b/drivers/builtin_openssl2/winrt.cpp @@ -0,0 +1,155 @@ +/* Snippets extracted from https://github.com/Microsoft/openssl/blob/ec7e430e06e4e3ac87c183dee33cb216814cf980/ms/winrt.cpp + * Adapted for Godot definitions + */ +/* winrt.cpp + * Copyright 2014 Microsoft Corporation + * C++/CX Entropy/shims for Windows Phone/Windows Store platform + * written by Alejandro Jimenez Martinez + * (aljim@microsoft.com) for the OpenSSL project 2014. + */ + +#include <windows.h> +#if defined(WINAPI_FAMILY) +extern "C" +{ + unsigned entropyRT(BYTE *buffer, unsigned len); + void RAND_add(const void *buf,int num,double entropy); + int RAND_poll(void); +} +#endif + +unsigned entropyRT(BYTE *buffer, unsigned len) + { + using namespace Platform; + using namespace Windows::Foundation; + using namespace Windows::Foundation::Collections; + using namespace Windows::Security::Cryptography; + using namespace Windows::Storage::Streams; + IBuffer ^buf = CryptographicBuffer::GenerateRandom(len); + Array<unsigned char> ^arr; + CryptographicBuffer::CopyToByteArray(buf, &arr); + unsigned arrayLen = arr->Length; + + // Make sure not to overflow the copy + arrayLen = (arrayLen > len) ? len : arrayLen; + memcpy(buffer, arr->Data, arrayLen); + return arrayLen; + } + +int RAND_poll(void) + { + BYTE buf[60]; + unsigned collected = entropyRT(buf , sizeof(buf)); + RAND_add(buf, collected, collected); + return 1; + } + +#if defined(WINRT_ENABLED) +extern "C" +{ +#include<stdio.h> +#include<string.h> +#include<stdlib.h> + + void* GetModuleHandle( + _In_opt_ LPCTSTR lpModuleName + ) + { + return NULL; + } + //no log for phone + int RegisterEventSource( + _In_ LPCTSTR lpUNCServerName, + _In_ LPCTSTR lpSourceName + ) + { + return NULL; + } + + int ReportEvent( + _In_ HANDLE hEventLog, + _In_ WORD wType, + _In_ WORD wCategory, + _In_ DWORD dwEventID, + _In_ PSID lpUserSid, + _In_ WORD wNumStrings, + _In_ DWORD dwDataSize, + _In_ LPCTSTR *lpStrings, + _In_ LPVOID lpRawData + ) + { + return 0; + } + int MessageBox( + _In_opt_ HWND hWnd, + _In_opt_ LPCTSTR lpText, + _In_opt_ LPCTSTR lpCaption, + _In_ UINT uType + ) + { + return 0; + } + int __cdecl GetProcessWindowStation(void) + { + return NULL; + } + BOOL __cdecl GetUserObjectInformationW( + _In_ HANDLE hObj, + _In_ int nIndex, + _Out_opt_ PVOID pvInfo, + _In_ DWORD nLength, + _Out_opt_ LPDWORD lpnLengthNeeded + ) + { + return 0; + } + int __cdecl GetStdHandle( + _In_ DWORD nStdHandle + ) + { + return 0; + } + BOOL DeregisterEventSource( + _Inout_ HANDLE hEventLog + ) + { + return 0; + } + char *getenv( + const char *varname + ) + { + //hardcoded environmental variables used for the appx testing application for store/phone + if (!strcmp(varname, "OPENSSL_CONF")) + { + return "./openssl.cnf"; + } + return 0; + } + int setenv(const char *envname, const char *envval, int overwrite) + { + return -1; + } + int _getch(void) + { + return 0; + } + int _kbhit() + { + return 0; + } + BOOL __cdecl FlushConsoleInputBuffer( + _In_ HANDLE hConsoleInput + ) + { + return 0; + } + int winrt_GetTickCount(void) + { + LARGE_INTEGER t; + return(int) (QueryPerformanceCounter(&t) ? t.QuadPart : 0); + } + void *OPENSSL_UplinkTable [26]= {0}; +} //extern C + +#endif /*defined(WINRT_ENABLED)*/ diff --git a/drivers/builtin_openssl2/winrt_fix.patch b/drivers/builtin_openssl2/winrt_fix.patch new file mode 100644 index 0000000000..caf180a75b --- /dev/null +++ b/drivers/builtin_openssl2/winrt_fix.patch @@ -0,0 +1,64 @@ +diff --git a/drivers/builtin_openssl2/crypto/rand/rand_win.c b/drivers/builtin_openssl2/crypto/rand/rand_win.c +index 06670ae..70fd52a 100644 +--- a/drivers/builtin_openssl2/crypto/rand/rand_win.c ++++ b/drivers/builtin_openssl2/crypto/rand/rand_win.c +@@ -118,8 +118,10 @@ + # ifndef _WIN32_WINNT + # define _WIN32_WINNT 0x0400 + # endif ++#ifndef WINRT_ENABLED + # include <wincrypt.h> + # include <tlhelp32.h> ++#endif + + /* + * Limit the time spent walking through the heap, processes, threads and +@@ -161,7 +163,7 @@ typedef struct tagCURSORINFO { + # define CURSOR_SHOWING 0x00000001 + # endif /* CURSOR_SHOWING */ + +-# if !defined(OPENSSL_SYS_WINCE) ++# if !defined(OPENSSL_SYS_WINCE) && !defined(WINRT_ENABLED) + typedef BOOL(WINAPI *CRYPTACQUIRECONTEXTW) (HCRYPTPROV *, LPCWSTR, LPCWSTR, + DWORD, DWORD); + typedef BOOL(WINAPI *CRYPTGENRANDOM) (HCRYPTPROV, DWORD, BYTE *); +@@ -196,6 +198,7 @@ typedef NET_API_STATUS(NET_API_FUNCTION *NETFREE) (LPBYTE); + # endif /* 1 */ + # endif /* !OPENSSL_SYS_WINCE */ + ++#if !defined(WINRT_ENABLED) + int RAND_poll(void) + { + MEMORYSTATUS m; +@@ -580,6 +583,8 @@ int RAND_poll(void) + return (1); + } + ++#endif // WINRT_ENABLED ++ + int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam) + { + double add_entropy = 0; +@@ -682,7 +687,7 @@ static void readtimer(void) + + static void readscreen(void) + { +-# if !defined(OPENSSL_SYS_WINCE) && !defined(OPENSSL_SYS_WIN32_CYGWIN) ++# if !defined(OPENSSL_SYS_WINCE) && !defined(OPENSSL_SYS_WIN32_CYGWIN) && !defined(WINRT_ENABLED) + HDC hScrDC; /* screen DC */ + HBITMAP hBitmap; /* handle for our bitmap */ + BITMAP bm; /* bitmap properties */ +diff --git a/drivers/builtin_openssl2/openssl/dtls1.h b/drivers/builtin_openssl2/openssl/dtls1.h +index 64ad3c8..a58aca2 100644 +--- a/drivers/builtin_openssl2/openssl/dtls1.h ++++ b/drivers/builtin_openssl2/openssl/dtls1.h +@@ -81,6 +81,9 @@ + # include <sys/time.h> + # endif + # endif ++#ifdef WINRT_ENABLED ++#include <winsock2.h> ++#endif + + #ifdef __cplusplus + extern "C" { diff --git a/drivers/freetype/SCsub b/drivers/freetype/SCsub index 0c7ab91ba2..4ddc785088 100644 --- a/drivers/freetype/SCsub +++ b/drivers/freetype/SCsub @@ -48,6 +48,11 @@ ft_sources=[\ if (env["freetype"]=="builtin"): + + # Include header for WinRT to fix build issues + if "platform" in env and env["platform"] == "winrt": + env.Append(CCFLAGS=['/FI', '"drivers/freetype/winrtdef.h"']) + # fix for Windows' shell miserably failing on long lines, split in two libraries half1=[] half2=[] diff --git a/tools/ios_xcode_template/godot_ios/main.m b/drivers/freetype/winrtdef.h index 3e4ea5e129..69c6baf532 100644 --- a/tools/ios_xcode_template/godot_ios/main.m +++ b/drivers/freetype/winrtdef.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* main.m */ +/* winrtdef.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -27,13 +27,6 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#import <UIKit/UIKit.h> - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} +// "generic" is a reserved keyword in C++/CX code +// this avoids the errors in the variable name from Freetype code +#define generic freetype_generic diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp index 4cd97a7f6a..8350fb0674 100644 --- a/drivers/gles2/rasterizer_gles2.cpp +++ b/drivers/gles2/rasterizer_gles2.cpp @@ -5210,7 +5210,6 @@ bool RasterizerGLES2::_setup_material(const Geometry *p_geometry,const Material material_shader.set_conditional(MaterialShaderGLES2::USE_FOG,current_env && current_env->fx_enabled[VS::ENV_FX_FOG]); //glDepthMask( true ); - } @@ -6778,7 +6777,7 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans } } - if (e->instance->billboard || e->instance->depth_scale) { + if (e->instance->billboard || e->instance->billboard_y || e->instance->depth_scale) { Transform xf=e->instance->transform; if (e->instance->depth_scale) { @@ -6809,6 +6808,21 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans xf.basis.scale(scale); } + + if (e->instance->billboard_y) { + + Vector3 scale = xf.basis.get_scale(); + Vector3 look_at = p_view_transform.get_origin(); + look_at.y = 0.0; + Vector3 look_at_norm = look_at.normalized(); + + if (current_rt && current_rt_vflip) { + xf.set_look_at(xf.origin,xf.origin + look_at_norm, Vector3(0.0, -1.0, 0.0)); + } else { + xf.set_look_at(xf.origin,xf.origin + look_at_norm, Vector3(0.0, 1.0, 0.0)); + } + xf.basis.scale(scale); + } material_shader.set_uniform(MaterialShaderGLES2::WORLD_TRANSFORM, xf); } else { @@ -8196,7 +8210,7 @@ RasterizerGLES2::Texture* RasterizerGLES2::_bind_canvas_texture(const RID& p_tex return NULL; } -void RasterizerGLES2::canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width) { +void RasterizerGLES2::canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased) { _bind_canvas_texture(RID()); Color c=p_color; @@ -8208,8 +8222,18 @@ void RasterizerGLES2::canvas_draw_line(const Point2& p_from, const Point2& p_to, Vector3(p_to.x,p_to.y,0) }; +#ifdef GLEW_ENABLED + if (p_antialiased) + glEnable(GL_LINE_SMOOTH); +#endif glLineWidth(p_width); _draw_primitive(2,verts,0,0,0); + +#ifdef GLEW_ENABLED + if (p_antialiased) + glDisable(GL_LINE_SMOOTH); +#endif + _rinfo.ci_draw_commands++; } @@ -9135,7 +9159,7 @@ void RasterizerGLES2::_canvas_item_render_commands(CanvasItem *p_item,CanvasItem case CanvasItem::Command::TYPE_LINE: { CanvasItem::CommandLine* line = static_cast<CanvasItem::CommandLine*>(c); - canvas_draw_line(line->from,line->to,line->color,line->width); + canvas_draw_line(line->from,line->to,line->color,line->width,line->antialiased); } break; case CanvasItem::Command::TYPE_RECT: { @@ -10788,8 +10812,17 @@ void RasterizerGLES2::init() { if (OS::get_singleton()->is_stdout_verbose()) { print_line(String("GLES2: Using GLEW ") + (const char*) glewGetString(GLEW_VERSION)); } -#endif + // Check for GL 2.1 compatibility, if not bail out + if (!glewIsSupported("GL_VERSION_2_1")) { + ERR_PRINT("Your system's graphic drivers seem not to support OpenGL 2.1 / GLES 2.0, sorry :(\n" + "Try a drivers update, buy a new GPU or try software rendering on Linux; Godot will now crash with a segmentation fault."); + OS::get_singleton()->alert("Your system's graphic drivers seem not to support OpenGL 2.1 / GLES 2.0, sorry :(\n" + "Godot Engine will self-destruct as soon as you acknowledge this error message.", + "Fatal error: Insufficient OpenGL / GLES drivers"); + // TODO: If it's even possible, we should stop the execution without segfault and memory leaks :) + } +#endif @@ -10824,6 +10857,11 @@ void RasterizerGLES2::init() { copy_shader.set_conditional(CopyShaderGLES2::USE_GLES_OVER_GL,true); #endif +#ifdef ANGLE_ENABLED + // Fix for ANGLE + material_shader.set_conditional(MaterialShaderGLES2::DISABLE_FRONT_FACING, true); +#endif + shadow=NULL; shadow_pass=0; @@ -10911,7 +10949,11 @@ void RasterizerGLES2::init() { srgb_supported=extensions.has("GL_EXT_sRGB"); +#ifndef ANGLE_ENABLED s3tc_srgb_supported = s3tc_supported && extensions.has("GL_EXT_texture_compression_s3tc"); +#else + s3tc_srgb_supported = s3tc_supported; +#endif latc_supported = extensions.has("GL_EXT_texture_compression_latc"); anisotropic_level=1.0; use_anisotropic_filter=extensions.has("GL_EXT_texture_filter_anisotropic"); diff --git a/drivers/gles2/rasterizer_gles2.h b/drivers/gles2/rasterizer_gles2.h index c9fc0c247d..b18f89d8e7 100644 --- a/drivers/gles2/rasterizer_gles2.h +++ b/drivers/gles2/rasterizer_gles2.h @@ -1633,7 +1633,7 @@ public: virtual void canvas_begin_rect(const Matrix32& p_transform); virtual void canvas_set_clip(bool p_clip, const Rect2& p_rect); virtual void canvas_end_rect(); - virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width); + virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased); virtual void canvas_draw_rect(const Rect2& p_rect, int p_flags, const Rect2& p_source,RID p_texture,const Color& p_modulate); virtual void canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1)); virtual void canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width); diff --git a/drivers/gles2/shaders/material.glsl b/drivers/gles2/shaders/material.glsl index e68949b056..fd778f3442 100644 --- a/drivers/gles2/shaders/material.glsl +++ b/drivers/gles2/shaders/material.glsl @@ -811,7 +811,11 @@ void main() { float specular_exp=1.0; float glow=0.0; float shade_param=0.0; +#ifdef DISABLE_FRONT_FACING + float side=float(1)*2.0-1.0; +#else float side=float(gl_FrontFacing)*2.0-1.0; +#endif #if defined(ENABLE_TANGENT_INTERP) vec3 binormal = normalize(binormal_interp)*side; vec3 tangent = normalize(tangent_interp)*side; diff --git a/drivers/png/image_loader_png.cpp b/drivers/png/image_loader_png.cpp index e10ac7493f..4967b0f9df 100644 --- a/drivers/png/image_loader_png.cpp +++ b/drivers/png/image_loader_png.cpp @@ -270,7 +270,7 @@ static void user_read_data(png_structp png_ptr,png_bytep data, png_size_t p_leng PNGReadStatus *rstatus; rstatus=(PNGReadStatus*)png_get_io_ptr(png_ptr); - int to_read=p_length; + png_size_t to_read=p_length; if (rstatus->size>=0) { to_read = MIN( p_length, rstatus->size - rstatus->offset); } diff --git a/drivers/pulseaudio/audio_driver_pulseaudio.cpp b/drivers/pulseaudio/audio_driver_pulseaudio.cpp index 4804bc5630..954d2c20f2 100644 --- a/drivers/pulseaudio/audio_driver_pulseaudio.cpp +++ b/drivers/pulseaudio/audio_driver_pulseaudio.cpp @@ -175,8 +175,8 @@ void AudioDriverPulseAudio::finish() { exit_thread = true; Thread::wait_to_finish(thread); - if (pulse) - pa_simple_free(pulse); + if (pulse) + pa_simple_free(pulse); if (samples_in) { memdelete_arr(samples_in); diff --git a/drivers/unix/ip_unix.cpp b/drivers/unix/ip_unix.cpp index 535a425302..08a8c19583 100644 --- a/drivers/unix/ip_unix.cpp +++ b/drivers/unix/ip_unix.cpp @@ -28,7 +28,7 @@ /*************************************************************************/ #include "ip_unix.h" -#if defined(UNIX_ENABLED) || defined(WINDOWS_ENABLED) && !defined(WINRT_ENABLED) +#if defined(UNIX_ENABLED) || defined(WINDOWS_ENABLED) #ifdef WINDOWS_ENABLED @@ -83,6 +83,19 @@ IP_Address IP_Unix::_resolve_hostname(const String& p_hostname) { void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const { + using namespace Windows::Networking; + using namespace Windows::Networking::Connectivity; + + auto hostnames = NetworkInformation::GetHostNames(); + + for (int i = 0; i < hostnames->Size; i++) { + + if (hostnames->GetAt(i)->Type == HostNameType::Ipv4 && hostnames->GetAt(i)->IPInformation != nullptr) { + + r_addresses->push_back(IP_Address(String(hostnames->GetAt(i)->CanonicalName->Data()))); + + } + } }; #else diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index fd515d6dd3..271cf302ef 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -390,7 +390,7 @@ Error OS_Unix::execute(const String& p_path, const List<String>& p_arguments,boo if (p_blocking) { int status; - pid_t rpid = waitpid(pid,&status,0); + waitpid(pid,&status,0); if (r_exitcode) *r_exitcode=WEXITSTATUS(status); } else { diff --git a/drivers/windows/dir_access_windows.cpp b/drivers/windows/dir_access_windows.cpp index 90e43d2518..ad4e8f301c 100644 --- a/drivers/windows/dir_access_windows.cpp +++ b/drivers/windows/dir_access_windows.cpp @@ -37,12 +37,6 @@ #include <stdio.h> #include "print_string.h" -#ifdef WINRT_ENABLED -#include <Synchapi.h> -#include <collection.h> -#include <ppltasks.h> -#endif - /* [03:57] <reduz> yessopie, so i dont havemak to rely on unicows @@ -135,14 +129,6 @@ Error DirAccessWindows::change_dir(String p_dir) { GLOBAL_LOCK_FUNCTION -#ifdef WINRT_ENABLED - - p_dir = fix_path(p_dir); - current_dir = normalize_path(p_dir); - - return OK; -#else - p_dir=fix_path(p_dir); @@ -178,19 +164,12 @@ Error DirAccessWindows::change_dir(String p_dir) { //} return worked?OK:ERR_INVALID_PARAMETER; -#endif } Error DirAccessWindows::make_dir(String p_dir) { GLOBAL_LOCK_FUNCTION -#ifdef WINRT_ENABLED - - return ERR_CANT_CREATE; - -#else - if (p_dir.is_rel_path()) p_dir=get_current_dir().plus_file(p_dir); @@ -215,8 +194,6 @@ Error DirAccessWindows::make_dir(String p_dir) { }; return ERR_CANT_CREATE; - -#endif } @@ -259,7 +236,6 @@ bool DirAccessWindows::file_exists(String p_file) { return false; return !(fileAttr&FILE_ATTRIBUTE_DIRECTORY); - } bool DirAccessWindows::dir_exists(String p_dir) { @@ -282,7 +258,6 @@ bool DirAccessWindows::dir_exists(String p_dir) { if (INVALID_FILE_ATTRIBUTES == fileAttr) return false; return (fileAttr&FILE_ATTRIBUTE_DIRECTORY); - } Error DirAccessWindows::rename(String p_path,String p_new_path) { diff --git a/drivers/windows/file_access_windows.cpp b/drivers/windows/file_access_windows.cpp index 3f27068fb2..36dcab1d67 100644 --- a/drivers/windows/file_access_windows.cpp +++ b/drivers/windows/file_access_windows.cpp @@ -124,7 +124,16 @@ void FileAccessWindows::close() { bool rename_error; + +#ifdef WINRT_ENABLED + // WinRT has no PathFileExists, so we check attributes instead + DWORD fileAttr; + + fileAttr = GetFileAttributesW(save_path.c_str()); + if (INVALID_FILE_ATTRIBUTES == fileAttr) { +#else if (!PathFileExistsW(save_path.c_str())) { +#endif //creating new file rename_error = _wrename((save_path+".tmp").c_str(),save_path.c_str())!=0; } else { @@ -139,7 +148,6 @@ void FileAccessWindows::close() { ERR_FAIL_COND( rename_error ); } - } bool FileAccessWindows::is_open() const { diff --git a/drivers/windows/semaphore_windows.cpp b/drivers/windows/semaphore_windows.cpp index 74094f482a..8d11d1b1c1 100644 --- a/drivers/windows/semaphore_windows.cpp +++ b/drivers/windows/semaphore_windows.cpp @@ -28,7 +28,7 @@ /*************************************************************************/ #include "semaphore_windows.h" -#if defined(WINDOWS_ENABLED) && !defined(WINRT_ENABLED) +#if defined(WINDOWS_ENABLED) #include "os/memory.h" diff --git a/main/input_default.cpp b/main/input_default.cpp index 5e66a8b585..089772edc5 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -71,13 +71,13 @@ InputDefault::SpeedTrack::SpeedTrack() { reset(); } -bool InputDefault::is_key_pressed(int p_scancode) { +bool InputDefault::is_key_pressed(int p_scancode) const { _THREAD_SAFE_METHOD_ return keys_pressed.has(p_scancode); } -bool InputDefault::is_mouse_button_pressed(int p_button) { +bool InputDefault::is_mouse_button_pressed(int p_button) const { _THREAD_SAFE_METHOD_ return (mouse_button_mask&(1<<p_button))!=0; @@ -89,14 +89,16 @@ static int _combine_device(int p_value,int p_device) { return p_value|(p_device<<20); } -bool InputDefault::is_joy_button_pressed(int p_device, int p_button) { +bool InputDefault::is_joy_button_pressed(int p_device, int p_button) const{ _THREAD_SAFE_METHOD_ return joy_buttons_pressed.has(_combine_device(p_button,p_device)); } -bool InputDefault::is_action_pressed(const StringName& p_action) { +bool InputDefault::is_action_pressed(const StringName& p_action) const{ + return action_state.has(p_action) && action_state[p_action].pressed; +#if 0 if (custom_action_press.has(p_action)) return true; //simpler @@ -147,9 +149,37 @@ bool InputDefault::is_action_pressed(const StringName& p_action) { } return false; +#endif } -float InputDefault::get_joy_axis(int p_device,int p_axis) { +bool InputDefault::is_action_just_pressed(const StringName& p_action) const { + + const Map<StringName,Action>::Element *E=action_state.find(p_action); + if (!E) + return false; + + if (OS::get_singleton()->is_in_fixed_frame()) { + return E->get().pressed && E->get().fixed_frame==OS::get_singleton()->get_fixed_frames(); + } else { + return E->get().pressed && E->get().idle_frame==OS::get_singleton()->get_idle_frames(); + } +} + +bool InputDefault::is_action_just_released(const StringName& p_action) const{ + + const Map<StringName,Action>::Element *E=action_state.find(p_action); + if (!E) + return false; + + if (OS::get_singleton()->is_in_fixed_frame()) { + return !E->get().pressed && E->get().fixed_frame==OS::get_singleton()->get_fixed_frames(); + } else { + return !E->get().pressed && E->get().idle_frame==OS::get_singleton()->get_idle_frames(); + } +} + + +float InputDefault::get_joy_axis(int p_device,int p_axis) const{ _THREAD_SAFE_METHOD_ int c = _combine_device(p_axis,p_device); @@ -247,19 +277,19 @@ void InputDefault::joy_connection_changed(int p_idx, bool p_connected, String p_ emit_signal("joy_connection_changed", p_idx, p_connected); }; -Vector3 InputDefault::get_accelerometer() { +Vector3 InputDefault::get_accelerometer() const{ _THREAD_SAFE_METHOD_ return accelerometer; } -Vector3 InputDefault::get_magnetometer() { +Vector3 InputDefault::get_magnetometer() const{ _THREAD_SAFE_METHOD_ return magnetometer; } -Vector3 InputDefault::get_gyroscope() { +Vector3 InputDefault::get_gyroscope() const { _THREAD_SAFE_METHOD_ return gyroscope; @@ -341,6 +371,23 @@ void InputDefault::parse_input_event(const InputEvent& p_event) { } + + if (!p_event.is_echo()) { + for (const Map<StringName,InputMap::Action>::Element *E=InputMap::get_singleton()->get_action_map().front();E;E=E->next()) { + + if (InputMap::get_singleton()->event_is_action(p_event,E->key())) { + + Action action; + action.fixed_frame=OS::get_singleton()->get_fixed_frames(); + action.idle_frame=OS::get_singleton()->get_idle_frames(); + action.pressed=p_event.is_pressed(); + + action_state[E->key()]=action; + + } + } + } + if (main_loop) main_loop->input_event(p_event); @@ -441,21 +488,25 @@ void InputDefault::iteration(float p_step) { void InputDefault::action_press(const StringName& p_action) { - if (custom_action_press.has(p_action)) { + Action action; + + action.fixed_frame=OS::get_singleton()->get_fixed_frames(); + action.idle_frame=OS::get_singleton()->get_idle_frames(); + action.pressed=true; + + action_state[p_action]=action; - custom_action_press[p_action]++; - } else { - custom_action_press[p_action]=1; - } } void InputDefault::action_release(const StringName& p_action){ - ERR_FAIL_COND(!custom_action_press.has(p_action)); - custom_action_press[p_action]--; - if (custom_action_press[p_action]==0) { - custom_action_press.erase(p_action); - } + Action action; + + action.fixed_frame=OS::get_singleton()->get_fixed_frames(); + action.idle_frame=OS::get_singleton()->get_idle_frames(); + action.pressed=false; + + action_state[p_action]=action; } void InputDefault::set_emulate_touch(bool p_emulate) { @@ -508,12 +559,18 @@ static const char *s_ControllerMappings [] = #ifdef WINDOWS_ENABLED "00f00300000000000000504944564944,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,", "00f0f100000000000000504944564944,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,", + "02200090000000000000504944564944,8Bitdo NES30 PRO USB,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "0d0f4900000000000000504944564944,Hatsune Miku Sho Controller,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", + "0d0f6e00000000000000504944564944,HORIPAD 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", "10080100000000000000504944564944,PS1 USB,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,", "10080300000000000000504944564944,PS2 USB,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a4,righty:a2,lefttrigger:b4,righttrigger:b5,", + "10280900000000000000504944564944,8Bitdo SFC30 GamePad,a:b1,b:b0,y:b3,x:b4,start:b11,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,", + "20380900000000000000504944564944,8Bitdo NES30 PRO Wireless,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "25090500000000000000504944564944,PS3 DualShock,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,", "2509e803000000000000504944564944,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", "28040140000000000000504944564944,GamePad Pro USB,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7,", + "300f1001000000000000504944564944,Saitek P480 Rumble Pad,a:b2,b:b3,x:b0,y:b1,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b5,righttrigger:b7,", + "341a0108000000000000504944564944,EXEQ RF USB Gamepad 8206,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,leftstick:b8,rightstick:b7,back:b8,start:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,", "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", "36280100000000000000504944564944,OUYA Controller,a:b0,b:b3,y:b2,x:b1,start:b14,guide:b15,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b8,dpleft:b10,dpdown:b9,dpright:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b12,righttrigger:b13,", "49190204000000000000504944564944,Ipega PG-9023,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b8,righttrigger:b9", @@ -523,6 +580,7 @@ static const char *s_ControllerMappings [] = "4f0400b3000000000000504944564944,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,", "4f0415b3000000000000504944564944,Thrustmaster Dual Analog 3.2,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,", "4f0423b3000000000000504944564944,Dual Trigger 3-in-1,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7", + "63252305000000000000504944564944,USB Vibration Joystick (BM),x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,", "6d0416c2000000000000504944564944,Generic DirectInput Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", "6d0418c2000000000000504944564944,Logitech RumblePad 2 USB,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,", "6d0419c2000000000000504944564944,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", @@ -538,8 +596,10 @@ static const char *s_ControllerMappings [] = "8f0e1200000000000000504944564944,Acme,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,", "9000318000000000000504944564944,Mayflash Wiimote PC Adapter,a:b2,b:h0.4,x:b0,y:b1,back:b4,start:b5,guide:b11,leftshoulder:b6,rightshoulder:b3,leftx:a0,lefty:a1,", "a3060cff000000000000504944564944,Saitek P2500,a:b2,b:b3,y:b1,x:b0,start:b4,guide:b10,back:b5,leftstick:b8,rightstick:b9,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,", + "c0111352000000000000504944564944,Battalife Joystick,x:b4,a:b6,b:b7,y:b5,back:b2,start:b3,leftshoulder:b0,rightshoulder:b1,leftx:a0,lefty:a1,", "c911f055000000000000504944564944,GAMEPAD,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,", "d6206dca000000000000504944564944,PowerA Pro Ex,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", + "ff113133000000000000504944564944,Gembird JPD-DualForce,a:b2,b:b3,x:b0,y:b1,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,leftstick:b10,rightstick:b11,", "ff113133000000000000504944564944,SVEN X-PAD,a:b2,b:b3,y:b1,x:b0,start:b5,back:b4,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b8,righttrigger:b9,", "ffff0000000000000000504944564944,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,", "__XINPUT_DEVICE__,XInput Gamepad,a:b12,b:b13,x:b14,y:b15,start:b4,back:b5,leftstick:b6,rightstick:b7,leftshoulder:b8,rightshoulder:b9,dpup:b0,dpdown:b1,dpleft:b2,dpright:b3,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,", @@ -548,21 +608,30 @@ static const char *s_ControllerMappings [] = #ifdef OSX_ENABLED "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,", "050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,y:b9,x:b10,start:b6,guide:b8,back:b7,dpup:b2,dpleft:b0,dpdown:b3,dpright:b1,leftx:a0,lefty:a1,lefttrigger:b12,righttrigger:,leftshoulder:b11,", + "050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,x:b18,y:b17,back:b7,guide:b8,start:b6,leftstick:b23,rightstick:b24,leftshoulder:b19,rightshoulder:b20,dpup:b11,dpdown:b12,dpleft:b13,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b21,righttrigger:b22,", "0d0f0000000000004d00000000000000,HORI Gem Pad 3,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", + "0d0f0000000000006600000000000000,HORIPAD FPS PLUS 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:a4,", + "10280000000000000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,", + "2509000000000000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", + "351200000000000021ab000000000000,SFC30 Joystick,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,", "4c050000000000006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,", "4c05000000000000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,", "4f0400000000000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,", "4f0400000000000015b3000000000000,Thrustmaster Dual Analog 3.2,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,", "5e040000000000008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,", + "5e04000000000000dd02000000000000,Xbox One Wired Controller,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4,", "6d0400000000000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", /* Guide button doesn't seem to be sent in DInput mode. */ "6d0400000000000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", "6d0400000000000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", /* This includes F710 in DInput mode and the "Logitech Cordless RumblePad 2", at the very least. */ "6d040000000000001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,", + "79000000000000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,x:b0,y:b12,back:b32,start:b36,leftstick:b40,rightstick:b44,leftshoulder:b16,rightshoulder:b20,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a4,rightx:a8,righty:a12,lefttrigger:b24,righttrigger:b28,", "79000000000000000600000000000000,G-Shark GP-702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b6,righttrigger:b7,", "83050000000000006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,", "891600000000000000fd000000000000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b8,guide:b10,back:b9,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b11,dpleft:b13,dpdown:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,", "8f0e0000000000000300000000000000,Piranha xtreme,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,", - "AD1B00000000000001F9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,", + "ad1b00000000000001f9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,", + "b4040000000000000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,x:b3,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,", + "d814000000000000cecf000000000000,MC Cthulhu,leftx:,lefty:,rightx:,righty:,lefttrigger:b6,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,righttrigger:b7,", #endif #if X11_ENABLED @@ -586,12 +655,14 @@ static const char *s_ControllerMappings [] = "030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,a:b0,b:b2,x:b1,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,", "030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,y:b3,x:b1,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,", "030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a5,", - "030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", + "030000005e0400001907000000010000,X360 Wireless Controller,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:h0.8,lefttrigger:a2,x:b2,dpup:h0.1,back:b6,leftstick:b9,leftshoulder:b4,y:b3,a:b0,dpright:h0.2,righttrigger:a5,b:b1,", "030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,", + "030000005e0400008e02000001000000,Microsoft X-Box 360 pad,leftstick:b9,leftx:a0,lefty:a1,dpdown:h0.1,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:h0.2,lefttrigger:a2,x:b2,dpup:h0.4,back:b6,leftshoulder:b4,y:b3,a:b0,dpright:h0.8,righttrigger:a5,b:b1,", "030000005e0400008e02000004010000,Microsoft X-Box 360 pad,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,", "030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", "030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", "030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,", + "030000005e0400008e02000062230000,Microsoft X-Box 360 pad,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,", "030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,", "030000005e040000d102000001010000,Microsoft X-Box One pad,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,", "030000005e040000dd02000003020000,Microsoft X-Box One pad v2,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,", @@ -605,6 +676,7 @@ static const char *s_ControllerMappings [] = "030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", "030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", "030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,x:b0,a:b2,b:b3,y:b1,back:b10,guide:b12,start:b11,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,", + "030000006f0e00000103000000020000,Logic3 Controller,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,", "030000006f0e00001304000000010000,Generic X-Box pad,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,", "030000006f0e00001e01000011010000,Rock Candy Gamepad for PS3,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,", "030000006f0e00001f01000000010000,Generic X-Box pad,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,", @@ -619,19 +691,26 @@ static const char *s_ControllerMappings [] = "030000008916000001fd000024010000,Razer Onza Classic Edition,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:b11,dpdown:b14,dpright:b12,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,", "030000008f0e00000300000010010000,GreenAsia Inc. USB Joystick,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,", "030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,", + "03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,y:b1,x:b0,leftstick:b8,rightstick:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b6,righttrigger:b7,", "03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,", "03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,", "03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,", "03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,", + "03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,", "03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,", "03000000c9110000f055000011010000,HJC Game GAMEPAD,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b4,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,", + "03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,a:b0,b:b1,y:b2,x:b3,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7,", + "03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftshoulder:b4,rightshoulder:b5,lefttrigger:b6,righttrigger:b7,leftx:a0,lefty:a1,", "03000000de280000ff11000001000000,Valve Streaming Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", "03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,", "03000000fd0500002a26000000010000,3dfx InterAct HammerHead FX,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b5,rightshoulder:b7,rightx:a2,start:b11,righty:a3,dpleft:h0.8,lefttrigger:b8,x:b0,dpup:h0.1,back:b10,leftstick:b2,leftshoulder:b6,y:b1,a:b3,dpright:h0.2,righttrigger:b9,b:b4,", "03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", + "05000000010000000100000003000000,Nintendo Wiimote,a:b0,b:b1,y:b3,x:b2,start:b9,guide:b10,back:b8,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", + "05000000102800000900000000010000,8Bitdo SFC30 GamePad,x:b4,a:b1,b:b0,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,", "05000000362800000100000002010000,OUYA Game Controller,leftx:a0,lefty:a1,dpdown:b9,rightstick:b7,rightshoulder:b5,rightx:a3,start:b16,righty:a4,dpleft:b10,lefttrigger:b12,x:b1,dpup:b8,back:b14,leftstick:b6,leftshoulder:b4,y:b2,a:b0,dpright:b11,righttrigger:b13,b:b3,", "05000000362800000100000003010000,OUYA Game Controller,leftx:a0,lefty:a1,dpdown:b9,rightstick:b7,rightshoulder:b5,rightx:a3,start:b16,righty:a4,dpleft:b10,lefttrigger:b12,x:b1,dpup:b8,back:b14,leftstick:b6,leftshoulder:b4,y:b2,a:b0,dpright:b11,righttrigger:b13,b:b3,", "05000000362800000100000004010000,OUYA Game Controller,leftx:a0,lefty:a1,dpdown:b9,rightstick:b7,rightshoulder:b5,rightx:a3,start:b16,righty:a4,dpleft:b10,lefttrigger:b12,x:b1,dpup:b8,back:b14,leftstick:b6,leftshoulder:b4,y:b2,a:b0,dpright:b11,righttrigger:b13,b:b3,", + "05000000380700006652000025010000,Mad Catz C.T.R.L.R,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,", "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,", "050000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,", "050000004c050000c405000000010000,PS4 Controller (Bluetooth),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,", @@ -659,6 +738,10 @@ static const char *s_ControllerMappings [] = "303534632d303563342d576972656c65,PS4 Controller USB/Win,leftx:a0,lefty:a1,dpdown:b15,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a5,lefttrigger:a3,x:b0,dpup:b14,dpleft:b16,dpright:b17,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b1,righttrigger:b7,b:b2,", "c2a94d6963726f736f66742058626f78,Wireless X360 Controller,leftx:a0,lefty:a1,dpdown:b14,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:b11,lefttrigger:a2,x:b2,dpup:b13,back:b6,leftstick:b9,leftshoulder:b4,y:b3,a:b0,dpright:b12,righttrigger:a5,b:b1,", #endif + + #ifdef WINRT_ENABLED + "__WINRT_GAMEPAD__,Xbox Controller,a:b2,b:b3,x:b4,y:b5,start:b0,back:b1,leftstick:b12,rightstick:b13,leftshoulder:b10,rightshoulder:b11,dpup:b6,dpdown:b7,dpleft:b8,dpright:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,", + #endif NULL }; @@ -1054,6 +1137,7 @@ bool InputDefault::is_joy_mapped(int p_device) { } String InputDefault::get_joy_guid_remapped(int p_device) const { + ERR_FAIL_COND_V(!joy_names.has(p_device), ""); return joy_names[p_device].uid; } diff --git a/main/input_default.h b/main/input_default.h index cb71312e22..fbf7837b3b 100644 --- a/main/input_default.h +++ b/main/input_default.h @@ -38,16 +38,27 @@ class InputDefault : public Input { _THREAD_SAFE_CLASS_ int mouse_button_mask; + + Set<int> keys_pressed; Set<int> joy_buttons_pressed; Map<int,float> _joy_axis; - Map<StringName,int> custom_action_press; + //Map<StringName,int> custom_action_press; Vector3 accelerometer; Vector3 magnetometer; Vector3 gyroscope; Vector2 mouse_pos; MainLoop *main_loop; + struct Action { + uint64_t fixed_frame; + uint64_t idle_frame; + bool pressed; + }; + + Map<StringName,Action> action_state; + + bool emulate_touch; struct VibrationInfo { @@ -164,12 +175,14 @@ public: - virtual bool is_key_pressed(int p_scancode); - virtual bool is_mouse_button_pressed(int p_button); - virtual bool is_joy_button_pressed(int p_device, int p_button); - virtual bool is_action_pressed(const StringName& p_action); + virtual bool is_key_pressed(int p_scancode) const; + virtual bool is_mouse_button_pressed(int p_button) const; + virtual bool is_joy_button_pressed(int p_device, int p_button) const; + virtual bool is_action_pressed(const StringName& p_action) const; + virtual bool is_action_just_pressed(const StringName& p_action) const; + virtual bool is_action_just_released(const StringName& p_action) const; - virtual float get_joy_axis(int p_device,int p_axis); + virtual float get_joy_axis(int p_device,int p_axis) const; String get_joy_name(int p_idx); virtual Array get_connected_joysticks(); virtual Vector2 get_joy_vibration_strength(int p_device); @@ -178,9 +191,9 @@ public: void joy_connection_changed(int p_idx, bool p_connected, String p_name, String p_guid = ""); void parse_joystick_mapping(String p_mapping, bool p_update_existing); - virtual Vector3 get_accelerometer(); - virtual Vector3 get_magnetometer(); - virtual Vector3 get_gyroscope(); + virtual Vector3 get_accelerometer() const; + virtual Vector3 get_magnetometer() const; + virtual Vector3 get_gyroscope() const; virtual Point2 get_mouse_pos() const; virtual Point2 get_mouse_speed() const; diff --git a/main/main.cpp b/main/main.cpp index aa8540632f..ec4386ab20 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1294,9 +1294,10 @@ bool Main::start() { } + String local_game_path; if (game_path!="" && !project_manager_request) { - String local_game_path=game_path.replace("\\","/"); + local_game_path=game_path.replace("\\","/"); if (!local_game_path.begins_with("res://")) { bool absolute=(local_game_path.size()>1) && (local_game_path[0]=='/' || local_game_path[1]==':'); @@ -1363,98 +1364,99 @@ bool Main::start() { OS::get_singleton()->set_context(OS::CONTEXT_EDITOR); //editor_node->set_edited_scene(game); - } else { + } #endif + } - { - //autoload - List<PropertyInfo> props; - Globals::get_singleton()->get_property_list(&props); - - //first pass, add the constants so they exist before any script is loaded - for(List<PropertyInfo>::Element *E=props.front();E;E=E->next()) { - - String s = E->get().name; - if (!s.begins_with("autoload/")) - continue; - String name = s.get_slicec('/',1); - String path = Globals::get_singleton()->get(s); - bool global_var=false; - if (path.begins_with("*")) { - global_var=true; - } - - if (global_var) { - for(int i=0;i<ScriptServer::get_language_count();i++) { - ScriptServer::get_language(i)->add_global_constant(name,Variant()); - } - } - + if (!project_manager_request && !editor) { + if (game_path!="" || script!="") { + //autoload + List<PropertyInfo> props; + Globals::get_singleton()->get_property_list(&props); + + //first pass, add the constants so they exist before any script is loaded + for(List<PropertyInfo>::Element *E=props.front();E;E=E->next()) { + + String s = E->get().name; + if (!s.begins_with("autoload/")) + continue; + String name = s.get_slicec('/',1); + String path = Globals::get_singleton()->get(s); + bool global_var=false; + if (path.begins_with("*")) { + global_var=true; } - //second pass, load into global constants - List<Node*> to_add; - for(List<PropertyInfo>::Element *E=props.front();E;E=E->next()) { - - String s = E->get().name; - if (!s.begins_with("autoload/")) - continue; - String name = s.get_slicec('/',1); - String path = Globals::get_singleton()->get(s); - bool global_var=false; - if (path.begins_with("*")) { - global_var=true; - path=path.substr(1,path.length()-1); - } - - RES res = ResourceLoader::load(path); - ERR_EXPLAIN("Can't autoload: "+path); - ERR_CONTINUE(res.is_null()); - Node *n=NULL; - if (res->is_type("PackedScene")) { - Ref<PackedScene> ps = res; - n=ps->instance(); - } else if (res->is_type("Script")) { - Ref<Script> s = res; - StringName ibt = s->get_instance_base_type(); - bool valid_type = ObjectTypeDB::is_type(ibt,"Node"); - ERR_EXPLAIN("Script does not inherit a Node: "+path); - ERR_CONTINUE( !valid_type ); - - Object *obj = ObjectTypeDB::instance(ibt); - - ERR_EXPLAIN("Cannot instance script for autoload, expected 'Node' inheritance, got: "+String(ibt)); - ERR_CONTINUE( obj==NULL ); - - n = obj->cast_to<Node>(); - n->set_script(s.get_ref_ptr()); + if (global_var) { + for(int i=0;i<ScriptServer::get_language_count();i++) { + ScriptServer::get_language(i)->add_global_constant(name,Variant()); } + } - ERR_EXPLAIN("Path in autoload not a node or script: "+path); - ERR_CONTINUE(!n); - n->set_name(name); - - //defer so references are all valid on _ready() - //sml->get_root()->add_child(n); - to_add.push_back(n); + } - if (global_var) { - for(int i=0;i<ScriptServer::get_language_count();i++) { - ScriptServer::get_language(i)->add_global_constant(name,n); - } - } + //second pass, load into global constants + List<Node*> to_add; + for(List<PropertyInfo>::Element *E=props.front();E;E=E->next()) { + + String s = E->get().name; + if (!s.begins_with("autoload/")) + continue; + String name = s.get_slicec('/',1); + String path = Globals::get_singleton()->get(s); + bool global_var=false; + if (path.begins_with("*")) { + global_var=true; + path=path.substr(1,path.length()-1); + } + RES res = ResourceLoader::load(path); + ERR_EXPLAIN("Can't autoload: "+path); + ERR_CONTINUE(res.is_null()); + Node *n=NULL; + if (res->is_type("PackedScene")) { + Ref<PackedScene> ps = res; + n=ps->instance(); + } else if (res->is_type("Script")) { + Ref<Script> s = res; + StringName ibt = s->get_instance_base_type(); + bool valid_type = ObjectTypeDB::is_type(ibt,"Node"); + ERR_EXPLAIN("Script does not inherit a Node: "+path); + ERR_CONTINUE( !valid_type ); + + Object *obj = ObjectTypeDB::instance(ibt); + + ERR_EXPLAIN("Cannot instance script for autoload, expected 'Node' inheritance, got: "+String(ibt)); + ERR_CONTINUE( obj==NULL ); + + n = obj->cast_to<Node>(); + n->set_script(s.get_ref_ptr()); } - for(List<Node*>::Element *E=to_add.front();E;E=E->next()) { + ERR_EXPLAIN("Path in autoload not a node or script: "+path); + ERR_CONTINUE(!n); + n->set_name(name); - sml->get_root()->add_child(E->get()); + //defer so references are all valid on _ready() + //sml->get_root()->add_child(n); + to_add.push_back(n); + + if (global_var) { + for(int i=0;i<ScriptServer::get_language_count();i++) { + ScriptServer::get_language(i)->add_global_constant(name,n); + } } + } + for(List<Node*>::Element *E=to_add.front();E;E=E->next()) { + sml->get_root()->add_child(E->get()); } + //singletons + } + if (game_path!="") { Node *scene=NULL; Ref<PackedScene> scenedata = ResourceLoader::load(local_game_path); if (scenedata.is_valid()) @@ -1471,12 +1473,7 @@ bool Main::start() { if (icon.load(iconpath)==OK) OS::get_singleton()->set_icon(icon); } - - - //singletons -#ifdef TOOLS_ENABLED } -#endif } #ifdef TOOLS_ENABLED @@ -1560,6 +1557,8 @@ bool Main::iteration() { int iters = 0; + OS::get_singleton()->_in_fixed=true; + while(time_accum>frame_slice) { uint64_t fixed_begin = OS::get_singleton()->get_ticks_usec(); @@ -1590,8 +1589,11 @@ bool Main::iteration() { fixed_process_ticks=MAX(fixed_process_ticks,OS::get_singleton()->get_ticks_usec()-fixed_begin); // keep the largest one for reference fixed_process_max=MAX(OS::get_singleton()->get_ticks_usec()-fixed_begin,fixed_process_max); iters++; + OS::get_singleton()->_fixed_frames++; } + OS::get_singleton()->_in_fixed=false; + uint64_t idle_begin = OS::get_singleton()->get_ticks_usec(); OS::get_singleton()->get_main_loop()->idle( step*time_scale ); @@ -1640,6 +1642,7 @@ bool Main::iteration() { // x11_delay_usec(10000); frames++; + OS::get_singleton()->_idle_frames++; if (frame>1000000) { diff --git a/methods.py b/methods.py index 74c282b8cf..8c99794d7a 100755 --- a/methods.py +++ b/methods.py @@ -1213,7 +1213,9 @@ def detect_modules(): register_cpp="" unregister_cpp="" - for x in glob.glob("modules/*"): + files = glob.glob("modules/*") + files.sort() #so register_module_types does not change that often, and also plugins are registered in alphabetic order + for x in files: if (not os.path.isdir(x)): continue x=x.replace("modules/","") # rest of world @@ -1448,3 +1450,72 @@ def colored(sys,env): env.Append( JARCOMSTR=[java_library_message] ) env.Append( JAVACCOMSTR=[java_compile_source_message] ) +def detect_visual_c_compiler_version(tools_env): + # tools_env is the variable scons uses to call tools that execute tasks, SCons's env['ENV'] that executes tasks... + # (see the SCons documentation for more information on what it does)... + # in order for this function to be well encapsulated i choose to force it to recieve SCons's TOOLS env (env['ENV'] + # and not scons setup environment (env)... so make sure you call the right environment on it or it will fail to detect + # the propper vc version that will be called + + # These is no flag to give to visual c compilers to set the architecture, ie scons bits argument (32,64,ARM etc) + # There are many different cl.exe files that are run, and each one compiles & links to a different architecture + # As far as I know, the only way to figure out what compiler will be run when Scons calls cl.exe via Program() + # is to check the PATH varaible and figure out which one will be called first. Code bellow does that and returns: + # the following string values: + + # "" Compiler not detected + # "amd64" Native 64 bit compiler + # "amd64_x86" 64 bit Cross Compiler for 32 bit + # "x86" Native 32 bit compiler + # "x86_amd64" 32 bit Cross Compiler for 64 bit + + # There are other architectures, but Godot does not support them currently, so this function does not detect arm/amd64_arm + # and similar architectures/compilers + + # Set chosen compiler to "not detected" + vc_chosen_compiler_index = -1 + vc_chosen_compiler_str = "" + + # find() works with -1 so big ifs bellow are needed... the simplest solution, in fact + # First test if amd64 and amd64_x86 compilers are present in the path + vc_amd64_compiler_detection_index = tools_env["PATH"].find(tools_env["VCINSTALLDIR"]+"BIN\\amd64;") + if(vc_amd64_compiler_detection_index > -1): + vc_chosen_compiler_index = vc_amd64_compiler_detection_index + vc_chosen_compiler_str = "amd64" + + vc_amd64_x86_compiler_detection_index = tools_env["PATH"].find(tools_env["VCINSTALLDIR"]+"BIN\\amd64_x86;") + if(vc_amd64_x86_compiler_detection_index > -1 + and (vc_chosen_compiler_index == -1 + or vc_chosen_compiler_index > vc_amd64_x86_compiler_detection_index)): + vc_chosen_compiler_index = vc_amd64_x86_compiler_detection_index + vc_chosen_compiler_str = "amd64_x86" + + + # Now check the 32 bit compilers + vc_x86_compiler_detection_index = tools_env["PATH"].find(tools_env["VCINSTALLDIR"]+"BIN;") + if(vc_x86_compiler_detection_index > -1 + and (vc_chosen_compiler_index == -1 + or vc_chosen_compiler_index > vc_x86_compiler_detection_index)): + vc_chosen_compiler_index = vc_x86_compiler_detection_index + vc_chosen_compiler_str = "x86" + + vc_x86_amd64_compiler_detection_index = tools_env["PATH"].find(tools_env['VCINSTALLDIR']+"BIN\\x86_amd64;") + if(vc_x86_amd64_compiler_detection_index > -1 + and (vc_chosen_compiler_index == -1 + or vc_chosen_compiler_index > vc_x86_amd64_compiler_detection_index)): + vc_chosen_compiler_index = vc_x86_amd64_compiler_detection_index + vc_chosen_compiler_str = "x86_amd64" + + # debug help + #print vc_amd64_compiler_detection_index + #print vc_amd64_x86_compiler_detection_index + #print vc_x86_compiler_detection_index + #print vc_x86_amd64_compiler_detection_index + #print "chosen "+str(vc_chosen_compiler_index)+ " | "+str(vc_chosen_compiler_str) + + return vc_chosen_compiler_str + +def precious_program(env, program, sources, **args): + program = env.ProgramOriginal(program, sources, **args) + env.Precious(program) + return program diff --git a/modules/enet/SCsub b/modules/enet/SCsub new file mode 100644 index 0000000000..d2bc8801e4 --- /dev/null +++ b/modules/enet/SCsub @@ -0,0 +1,8 @@ +Import('env') + +env.add_source_files(env.modules_sources,"*.cpp") +env.add_source_files(env.modules_sources,"*.c") +#TODO: Make it possible to build against system enet +env.Append(CPPPATH = ["#modules/enet"]) + +Export('env') diff --git a/modules/enet/callbacks.c b/modules/enet/callbacks.c new file mode 100644 index 0000000000..b3990af1fb --- /dev/null +++ b/modules/enet/callbacks.c @@ -0,0 +1,53 @@ +/** + @file callbacks.c + @brief ENet callback functions +*/ +#define ENET_BUILDING_LIB 1 +#include "enet/enet.h" + +static ENetCallbacks callbacks = { malloc, free, abort }; + +int +enet_initialize_with_callbacks (ENetVersion version, const ENetCallbacks * inits) +{ + if (version < ENET_VERSION_CREATE (1, 3, 0)) + return -1; + + if (inits -> malloc != NULL || inits -> free != NULL) + { + if (inits -> malloc == NULL || inits -> free == NULL) + return -1; + + callbacks.malloc = inits -> malloc; + callbacks.free = inits -> free; + } + + if (inits -> no_memory != NULL) + callbacks.no_memory = inits -> no_memory; + + return enet_initialize (); +} + +ENetVersion +enet_linked_version (void) +{ + return ENET_VERSION; +} + +void * +enet_malloc (size_t size) +{ + void * memory = callbacks.malloc (size); + + if (memory == NULL) + callbacks.no_memory (); + + return memory; +} + +void +enet_free (void * memory) +{ + callbacks.free (memory); +} + diff --git a/modules/enet/compress.c b/modules/enet/compress.c new file mode 100644 index 0000000000..784489a787 --- /dev/null +++ b/modules/enet/compress.c @@ -0,0 +1,654 @@ +/** + @file compress.c + @brief An adaptive order-2 PPM range coder +*/ +#define ENET_BUILDING_LIB 1 +#include <string.h> +#include "enet/enet.h" + +typedef struct _ENetSymbol +{ + /* binary indexed tree of symbols */ + enet_uint8 value; + enet_uint8 count; + enet_uint16 under; + enet_uint16 left, right; + + /* context defined by this symbol */ + enet_uint16 symbols; + enet_uint16 escapes; + enet_uint16 total; + enet_uint16 parent; +} ENetSymbol; + +/* adaptation constants tuned aggressively for small packet sizes rather than large file compression */ +enum +{ + ENET_RANGE_CODER_TOP = 1<<24, + ENET_RANGE_CODER_BOTTOM = 1<<16, + + ENET_CONTEXT_SYMBOL_DELTA = 3, + ENET_CONTEXT_SYMBOL_MINIMUM = 1, + ENET_CONTEXT_ESCAPE_MINIMUM = 1, + + ENET_SUBCONTEXT_ORDER = 2, + ENET_SUBCONTEXT_SYMBOL_DELTA = 2, + ENET_SUBCONTEXT_ESCAPE_DELTA = 5 +}; + +/* context exclusion roughly halves compression speed, so disable for now */ +#undef ENET_CONTEXT_EXCLUSION + +typedef struct _ENetRangeCoder +{ + /* only allocate enough symbols for reasonable MTUs, would need to be larger for large file compression */ + ENetSymbol symbols[4096]; +} ENetRangeCoder; + +void * +enet_range_coder_create (void) +{ + ENetRangeCoder * rangeCoder = (ENetRangeCoder *) enet_malloc (sizeof (ENetRangeCoder)); + if (rangeCoder == NULL) + return NULL; + + return rangeCoder; +} + +void +enet_range_coder_destroy (void * context) +{ + ENetRangeCoder * rangeCoder = (ENetRangeCoder *) context; + if (rangeCoder == NULL) + return; + + enet_free (rangeCoder); +} + +#define ENET_SYMBOL_CREATE(symbol, value_, count_) \ +{ \ + symbol = & rangeCoder -> symbols [nextSymbol ++]; \ + symbol -> value = value_; \ + symbol -> count = count_; \ + symbol -> under = count_; \ + symbol -> left = 0; \ + symbol -> right = 0; \ + symbol -> symbols = 0; \ + symbol -> escapes = 0; \ + symbol -> total = 0; \ + symbol -> parent = 0; \ +} + +#define ENET_CONTEXT_CREATE(context, escapes_, minimum) \ +{ \ + ENET_SYMBOL_CREATE (context, 0, 0); \ + (context) -> escapes = escapes_; \ + (context) -> total = escapes_ + 256*minimum; \ + (context) -> symbols = 0; \ +} + +static enet_uint16 +enet_symbol_rescale (ENetSymbol * symbol) +{ + enet_uint16 total = 0; + for (;;) + { + symbol -> count -= symbol->count >> 1; + symbol -> under = symbol -> count; + if (symbol -> left) + symbol -> under += enet_symbol_rescale (symbol + symbol -> left); + total += symbol -> under; + if (! symbol -> right) break; + symbol += symbol -> right; + } + return total; +} + +#define ENET_CONTEXT_RESCALE(context, minimum) \ +{ \ + (context) -> total = (context) -> symbols ? enet_symbol_rescale ((context) + (context) -> symbols) : 0; \ + (context) -> escapes -= (context) -> escapes >> 1; \ + (context) -> total += (context) -> escapes + 256*minimum; \ +} + +#define ENET_RANGE_CODER_OUTPUT(value) \ +{ \ + if (outData >= outEnd) \ + return 0; \ + * outData ++ = value; \ +} + +#define ENET_RANGE_CODER_ENCODE(under, count, total) \ +{ \ + encodeRange /= (total); \ + encodeLow += (under) * encodeRange; \ + encodeRange *= (count); \ + for (;;) \ + { \ + if((encodeLow ^ (encodeLow + encodeRange)) >= ENET_RANGE_CODER_TOP) \ + { \ + if(encodeRange >= ENET_RANGE_CODER_BOTTOM) break; \ + encodeRange = -encodeLow & (ENET_RANGE_CODER_BOTTOM - 1); \ + } \ + ENET_RANGE_CODER_OUTPUT (encodeLow >> 24); \ + encodeRange <<= 8; \ + encodeLow <<= 8; \ + } \ +} + +#define ENET_RANGE_CODER_FLUSH \ +{ \ + while (encodeLow) \ + { \ + ENET_RANGE_CODER_OUTPUT (encodeLow >> 24); \ + encodeLow <<= 8; \ + } \ +} + +#define ENET_RANGE_CODER_FREE_SYMBOLS \ +{ \ + if (nextSymbol >= sizeof (rangeCoder -> symbols) / sizeof (ENetSymbol) - ENET_SUBCONTEXT_ORDER ) \ + { \ + nextSymbol = 0; \ + ENET_CONTEXT_CREATE (root, ENET_CONTEXT_ESCAPE_MINIMUM, ENET_CONTEXT_SYMBOL_MINIMUM); \ + predicted = 0; \ + order = 0; \ + } \ +} + +#define ENET_CONTEXT_ENCODE(context, symbol_, value_, under_, count_, update, minimum) \ +{ \ + under_ = value*minimum; \ + count_ = minimum; \ + if (! (context) -> symbols) \ + { \ + ENET_SYMBOL_CREATE (symbol_, value_, update); \ + (context) -> symbols = symbol_ - (context); \ + } \ + else \ + { \ + ENetSymbol * node = (context) + (context) -> symbols; \ + for (;;) \ + { \ + if (value_ < node -> value) \ + { \ + node -> under += update; \ + if (node -> left) { node += node -> left; continue; } \ + ENET_SYMBOL_CREATE (symbol_, value_, update); \ + node -> left = symbol_ - node; \ + } \ + else \ + if (value_ > node -> value) \ + { \ + under_ += node -> under; \ + if (node -> right) { node += node -> right; continue; } \ + ENET_SYMBOL_CREATE (symbol_, value_, update); \ + node -> right = symbol_ - node; \ + } \ + else \ + { \ + count_ += node -> count; \ + under_ += node -> under - node -> count; \ + node -> under += update; \ + node -> count += update; \ + symbol_ = node; \ + } \ + break; \ + } \ + } \ +} + +#ifdef ENET_CONTEXT_EXCLUSION +static const ENetSymbol emptyContext = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + +#define ENET_CONTEXT_WALK(context, body) \ +{ \ + const ENetSymbol * node = (context) + (context) -> symbols; \ + const ENetSymbol * stack [256]; \ + size_t stackSize = 0; \ + while (node -> left) \ + { \ + stack [stackSize ++] = node; \ + node += node -> left; \ + } \ + for (;;) \ + { \ + body; \ + if (node -> right) \ + { \ + node += node -> right; \ + while (node -> left) \ + { \ + stack [stackSize ++] = node; \ + node += node -> left; \ + } \ + } \ + else \ + if (stackSize <= 0) \ + break; \ + else \ + node = stack [-- stackSize]; \ + } \ +} + +#define ENET_CONTEXT_ENCODE_EXCLUDE(context, value_, under, total, minimum) \ +ENET_CONTEXT_WALK(context, { \ + if (node -> value != value_) \ + { \ + enet_uint16 parentCount = rangeCoder -> symbols [node -> parent].count + minimum; \ + if (node -> value < value_) \ + under -= parentCount; \ + total -= parentCount; \ + } \ +}) +#endif + +size_t +enet_range_coder_compress (void * context, const ENetBuffer * inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 * outData, size_t outLimit) +{ + ENetRangeCoder * rangeCoder = (ENetRangeCoder *) context; + enet_uint8 * outStart = outData, * outEnd = & outData [outLimit]; + const enet_uint8 * inData, * inEnd; + enet_uint32 encodeLow = 0, encodeRange = ~0; + ENetSymbol * root; + enet_uint16 predicted = 0; + size_t order = 0, nextSymbol = 0; + + if (rangeCoder == NULL || inBufferCount <= 0 || inLimit <= 0) + return 0; + + inData = (const enet_uint8 *) inBuffers -> data; + inEnd = & inData [inBuffers -> dataLength]; + inBuffers ++; + inBufferCount --; + + ENET_CONTEXT_CREATE (root, ENET_CONTEXT_ESCAPE_MINIMUM, ENET_CONTEXT_SYMBOL_MINIMUM); + + for (;;) + { + ENetSymbol * subcontext, * symbol; +#ifdef ENET_CONTEXT_EXCLUSION + const ENetSymbol * childContext = & emptyContext; +#endif + enet_uint8 value; + enet_uint16 count, under, * parent = & predicted, total; + if (inData >= inEnd) + { + if (inBufferCount <= 0) + break; + inData = (const enet_uint8 *) inBuffers -> data; + inEnd = & inData [inBuffers -> dataLength]; + inBuffers ++; + inBufferCount --; + } + value = * inData ++; + + for (subcontext = & rangeCoder -> symbols [predicted]; + subcontext != root; +#ifdef ENET_CONTEXT_EXCLUSION + childContext = subcontext, +#endif + subcontext = & rangeCoder -> symbols [subcontext -> parent]) + { + ENET_CONTEXT_ENCODE (subcontext, symbol, value, under, count, ENET_SUBCONTEXT_SYMBOL_DELTA, 0); + * parent = symbol - rangeCoder -> symbols; + parent = & symbol -> parent; + total = subcontext -> total; +#ifdef ENET_CONTEXT_EXCLUSION + if (childContext -> total > ENET_SUBCONTEXT_SYMBOL_DELTA + ENET_SUBCONTEXT_ESCAPE_DELTA) + ENET_CONTEXT_ENCODE_EXCLUDE (childContext, value, under, total, 0); +#endif + if (count > 0) + { + ENET_RANGE_CODER_ENCODE (subcontext -> escapes + under, count, total); + } + else + { + if (subcontext -> escapes > 0 && subcontext -> escapes < total) + ENET_RANGE_CODER_ENCODE (0, subcontext -> escapes, total); + subcontext -> escapes += ENET_SUBCONTEXT_ESCAPE_DELTA; + subcontext -> total += ENET_SUBCONTEXT_ESCAPE_DELTA; + } + subcontext -> total += ENET_SUBCONTEXT_SYMBOL_DELTA; + if (count > 0xFF - 2*ENET_SUBCONTEXT_SYMBOL_DELTA || subcontext -> total > ENET_RANGE_CODER_BOTTOM - 0x100) + ENET_CONTEXT_RESCALE (subcontext, 0); + if (count > 0) goto nextInput; + } + + ENET_CONTEXT_ENCODE (root, symbol, value, under, count, ENET_CONTEXT_SYMBOL_DELTA, ENET_CONTEXT_SYMBOL_MINIMUM); + * parent = symbol - rangeCoder -> symbols; + parent = & symbol -> parent; + total = root -> total; +#ifdef ENET_CONTEXT_EXCLUSION + if (childContext -> total > ENET_SUBCONTEXT_SYMBOL_DELTA + ENET_SUBCONTEXT_ESCAPE_DELTA) + ENET_CONTEXT_ENCODE_EXCLUDE (childContext, value, under, total, ENET_CONTEXT_SYMBOL_MINIMUM); +#endif + ENET_RANGE_CODER_ENCODE (root -> escapes + under, count, total); + root -> total += ENET_CONTEXT_SYMBOL_DELTA; + if (count > 0xFF - 2*ENET_CONTEXT_SYMBOL_DELTA + ENET_CONTEXT_SYMBOL_MINIMUM || root -> total > ENET_RANGE_CODER_BOTTOM - 0x100) + ENET_CONTEXT_RESCALE (root, ENET_CONTEXT_SYMBOL_MINIMUM); + + nextInput: + if (order >= ENET_SUBCONTEXT_ORDER) + predicted = rangeCoder -> symbols [predicted].parent; + else + order ++; + ENET_RANGE_CODER_FREE_SYMBOLS; + } + + ENET_RANGE_CODER_FLUSH; + + return (size_t) (outData - outStart); +} + +#define ENET_RANGE_CODER_SEED \ +{ \ + if (inData < inEnd) decodeCode |= * inData ++ << 24; \ + if (inData < inEnd) decodeCode |= * inData ++ << 16; \ + if (inData < inEnd) decodeCode |= * inData ++ << 8; \ + if (inData < inEnd) decodeCode |= * inData ++; \ +} + +#define ENET_RANGE_CODER_READ(total) ((decodeCode - decodeLow) / (decodeRange /= (total))) + +#define ENET_RANGE_CODER_DECODE(under, count, total) \ +{ \ + decodeLow += (under) * decodeRange; \ + decodeRange *= (count); \ + for (;;) \ + { \ + if((decodeLow ^ (decodeLow + decodeRange)) >= ENET_RANGE_CODER_TOP) \ + { \ + if(decodeRange >= ENET_RANGE_CODER_BOTTOM) break; \ + decodeRange = -decodeLow & (ENET_RANGE_CODER_BOTTOM - 1); \ + } \ + decodeCode <<= 8; \ + if (inData < inEnd) \ + decodeCode |= * inData ++; \ + decodeRange <<= 8; \ + decodeLow <<= 8; \ + } \ +} + +#define ENET_CONTEXT_DECODE(context, symbol_, code, value_, under_, count_, update, minimum, createRoot, visitNode, createRight, createLeft) \ +{ \ + under_ = 0; \ + count_ = minimum; \ + if (! (context) -> symbols) \ + { \ + createRoot; \ + } \ + else \ + { \ + ENetSymbol * node = (context) + (context) -> symbols; \ + for (;;) \ + { \ + enet_uint16 after = under_ + node -> under + (node -> value + 1)*minimum, before = node -> count + minimum; \ + visitNode; \ + if (code >= after) \ + { \ + under_ += node -> under; \ + if (node -> right) { node += node -> right; continue; } \ + createRight; \ + } \ + else \ + if (code < after - before) \ + { \ + node -> under += update; \ + if (node -> left) { node += node -> left; continue; } \ + createLeft; \ + } \ + else \ + { \ + value_ = node -> value; \ + count_ += node -> count; \ + under_ = after - before; \ + node -> under += update; \ + node -> count += update; \ + symbol_ = node; \ + } \ + break; \ + } \ + } \ +} + +#define ENET_CONTEXT_TRY_DECODE(context, symbol_, code, value_, under_, count_, update, minimum, exclude) \ +ENET_CONTEXT_DECODE (context, symbol_, code, value_, under_, count_, update, minimum, return 0, exclude (node -> value, after, before), return 0, return 0) + +#define ENET_CONTEXT_ROOT_DECODE(context, symbol_, code, value_, under_, count_, update, minimum, exclude) \ +ENET_CONTEXT_DECODE (context, symbol_, code, value_, under_, count_, update, minimum, \ + { \ + value_ = code / minimum; \ + under_ = code - code%minimum; \ + ENET_SYMBOL_CREATE (symbol_, value_, update); \ + (context) -> symbols = symbol_ - (context); \ + }, \ + exclude (node -> value, after, before), \ + { \ + value_ = node->value + 1 + (code - after)/minimum; \ + under_ = code - (code - after)%minimum; \ + ENET_SYMBOL_CREATE (symbol_, value_, update); \ + node -> right = symbol_ - node; \ + }, \ + { \ + value_ = node->value - 1 - (after - before - code - 1)/minimum; \ + under_ = code - (after - before - code - 1)%minimum; \ + ENET_SYMBOL_CREATE (symbol_, value_, update); \ + node -> left = symbol_ - node; \ + }) \ + +#ifdef ENET_CONTEXT_EXCLUSION +typedef struct _ENetExclude +{ + enet_uint8 value; + enet_uint16 under; +} ENetExclude; + +#define ENET_CONTEXT_DECODE_EXCLUDE(context, total, minimum) \ +{ \ + enet_uint16 under = 0; \ + nextExclude = excludes; \ + ENET_CONTEXT_WALK (context, { \ + under += rangeCoder -> symbols [node -> parent].count + minimum; \ + nextExclude -> value = node -> value; \ + nextExclude -> under = under; \ + nextExclude ++; \ + }); \ + total -= under; \ +} + +#define ENET_CONTEXT_EXCLUDED(value_, after, before) \ +{ \ + size_t low = 0, high = nextExclude - excludes; \ + for(;;) \ + { \ + size_t mid = (low + high) >> 1; \ + const ENetExclude * exclude = & excludes [mid]; \ + if (value_ < exclude -> value) \ + { \ + if (low + 1 < high) \ + { \ + high = mid; \ + continue; \ + } \ + if (exclude > excludes) \ + after -= exclude [-1].under; \ + } \ + else \ + { \ + if (value_ > exclude -> value) \ + { \ + if (low + 1 < high) \ + { \ + low = mid; \ + continue; \ + } \ + } \ + else \ + before = 0; \ + after -= exclude -> under; \ + } \ + break; \ + } \ +} +#endif + +#define ENET_CONTEXT_NOT_EXCLUDED(value_, after, before) + +size_t +enet_range_coder_decompress (void * context, const enet_uint8 * inData, size_t inLimit, enet_uint8 * outData, size_t outLimit) +{ + ENetRangeCoder * rangeCoder = (ENetRangeCoder *) context; + enet_uint8 * outStart = outData, * outEnd = & outData [outLimit]; + const enet_uint8 * inEnd = & inData [inLimit]; + enet_uint32 decodeLow = 0, decodeCode = 0, decodeRange = ~0; + ENetSymbol * root; + enet_uint16 predicted = 0; + size_t order = 0, nextSymbol = 0; +#ifdef ENET_CONTEXT_EXCLUSION + ENetExclude excludes [256]; + ENetExclude * nextExclude = excludes; +#endif + + if (rangeCoder == NULL || inLimit <= 0) + return 0; + + ENET_CONTEXT_CREATE (root, ENET_CONTEXT_ESCAPE_MINIMUM, ENET_CONTEXT_SYMBOL_MINIMUM); + + ENET_RANGE_CODER_SEED; + + for (;;) + { + ENetSymbol * subcontext, * symbol, * patch; +#ifdef ENET_CONTEXT_EXCLUSION + const ENetSymbol * childContext = & emptyContext; +#endif + enet_uint8 value = 0; + enet_uint16 code, under, count, bottom, * parent = & predicted, total; + + for (subcontext = & rangeCoder -> symbols [predicted]; + subcontext != root; +#ifdef ENET_CONTEXT_EXCLUSION + childContext = subcontext, +#endif + subcontext = & rangeCoder -> symbols [subcontext -> parent]) + { + if (subcontext -> escapes <= 0) + continue; + total = subcontext -> total; +#ifdef ENET_CONTEXT_EXCLUSION + if (childContext -> total > 0) + ENET_CONTEXT_DECODE_EXCLUDE (childContext, total, 0); +#endif + if (subcontext -> escapes >= total) + continue; + code = ENET_RANGE_CODER_READ (total); + if (code < subcontext -> escapes) + { + ENET_RANGE_CODER_DECODE (0, subcontext -> escapes, total); + continue; + } + code -= subcontext -> escapes; +#ifdef ENET_CONTEXT_EXCLUSION + if (childContext -> total > 0) + { + ENET_CONTEXT_TRY_DECODE (subcontext, symbol, code, value, under, count, ENET_SUBCONTEXT_SYMBOL_DELTA, 0, ENET_CONTEXT_EXCLUDED); + } + else +#endif + { + ENET_CONTEXT_TRY_DECODE (subcontext, symbol, code, value, under, count, ENET_SUBCONTEXT_SYMBOL_DELTA, 0, ENET_CONTEXT_NOT_EXCLUDED); + } + bottom = symbol - rangeCoder -> symbols; + ENET_RANGE_CODER_DECODE (subcontext -> escapes + under, count, total); + subcontext -> total += ENET_SUBCONTEXT_SYMBOL_DELTA; + if (count > 0xFF - 2*ENET_SUBCONTEXT_SYMBOL_DELTA || subcontext -> total > ENET_RANGE_CODER_BOTTOM - 0x100) + ENET_CONTEXT_RESCALE (subcontext, 0); + goto patchContexts; + } + + total = root -> total; +#ifdef ENET_CONTEXT_EXCLUSION + if (childContext -> total > 0) + ENET_CONTEXT_DECODE_EXCLUDE (childContext, total, ENET_CONTEXT_SYMBOL_MINIMUM); +#endif + code = ENET_RANGE_CODER_READ (total); + if (code < root -> escapes) + { + ENET_RANGE_CODER_DECODE (0, root -> escapes, total); + break; + } + code -= root -> escapes; +#ifdef ENET_CONTEXT_EXCLUSION + if (childContext -> total > 0) + { + ENET_CONTEXT_ROOT_DECODE (root, symbol, code, value, under, count, ENET_CONTEXT_SYMBOL_DELTA, ENET_CONTEXT_SYMBOL_MINIMUM, ENET_CONTEXT_EXCLUDED); + } + else +#endif + { + ENET_CONTEXT_ROOT_DECODE (root, symbol, code, value, under, count, ENET_CONTEXT_SYMBOL_DELTA, ENET_CONTEXT_SYMBOL_MINIMUM, ENET_CONTEXT_NOT_EXCLUDED); + } + bottom = symbol - rangeCoder -> symbols; + ENET_RANGE_CODER_DECODE (root -> escapes + under, count, total); + root -> total += ENET_CONTEXT_SYMBOL_DELTA; + if (count > 0xFF - 2*ENET_CONTEXT_SYMBOL_DELTA + ENET_CONTEXT_SYMBOL_MINIMUM || root -> total > ENET_RANGE_CODER_BOTTOM - 0x100) + ENET_CONTEXT_RESCALE (root, ENET_CONTEXT_SYMBOL_MINIMUM); + + patchContexts: + for (patch = & rangeCoder -> symbols [predicted]; + patch != subcontext; + patch = & rangeCoder -> symbols [patch -> parent]) + { + ENET_CONTEXT_ENCODE (patch, symbol, value, under, count, ENET_SUBCONTEXT_SYMBOL_DELTA, 0); + * parent = symbol - rangeCoder -> symbols; + parent = & symbol -> parent; + if (count <= 0) + { + patch -> escapes += ENET_SUBCONTEXT_ESCAPE_DELTA; + patch -> total += ENET_SUBCONTEXT_ESCAPE_DELTA; + } + patch -> total += ENET_SUBCONTEXT_SYMBOL_DELTA; + if (count > 0xFF - 2*ENET_SUBCONTEXT_SYMBOL_DELTA || patch -> total > ENET_RANGE_CODER_BOTTOM - 0x100) + ENET_CONTEXT_RESCALE (patch, 0); + } + * parent = bottom; + + ENET_RANGE_CODER_OUTPUT (value); + + if (order >= ENET_SUBCONTEXT_ORDER) + predicted = rangeCoder -> symbols [predicted].parent; + else + order ++; + ENET_RANGE_CODER_FREE_SYMBOLS; + } + + return (size_t) (outData - outStart); +} + +/** @defgroup host ENet host functions + @{ +*/ + +/** Sets the packet compressor the host should use to the default range coder. + @param host host to enable the range coder for + @returns 0 on success, < 0 on failure +*/ +int +enet_host_compress_with_range_coder (ENetHost * host) +{ + ENetCompressor compressor; + memset (& compressor, 0, sizeof (compressor)); + compressor.context = enet_range_coder_create(); + if (compressor.context == NULL) + return -1; + compressor.compress = enet_range_coder_compress; + compressor.decompress = enet_range_coder_decompress; + compressor.destroy = enet_range_coder_destroy; + enet_host_compress (host, & compressor); + return 0; +} + +/** @} */ + + diff --git a/modules/enet/config.py b/modules/enet/config.py new file mode 100644 index 0000000000..ea7e83378a --- /dev/null +++ b/modules/enet/config.py @@ -0,0 +1,11 @@ + + +def can_build(platform): + return True + + +def configure(env): + pass + + + diff --git a/modules/enet/enet/callbacks.h b/modules/enet/enet/callbacks.h new file mode 100644 index 0000000000..340a4a9896 --- /dev/null +++ b/modules/enet/enet/callbacks.h @@ -0,0 +1,27 @@ +/** + @file callbacks.h + @brief ENet callbacks +*/ +#ifndef __ENET_CALLBACKS_H__ +#define __ENET_CALLBACKS_H__ + +#include <stdlib.h> + +typedef struct _ENetCallbacks +{ + void * (ENET_CALLBACK * malloc) (size_t size); + void (ENET_CALLBACK * free) (void * memory); + void (ENET_CALLBACK * no_memory) (void); +} ENetCallbacks; + +/** @defgroup callbacks ENet internal callbacks + @{ + @ingroup private +*/ +extern void * enet_malloc (size_t); +extern void enet_free (void *); + +/** @} */ + +#endif /* __ENET_CALLBACKS_H__ */ + diff --git a/modules/enet/enet/enet.h b/modules/enet/enet/enet.h new file mode 100644 index 0000000000..650b199ee5 --- /dev/null +++ b/modules/enet/enet/enet.h @@ -0,0 +1,596 @@ +/** + @file enet.h + @brief ENet public header file +*/ +#ifndef __ENET_ENET_H__ +#define __ENET_ENET_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include <stdlib.h> + +#ifdef _WIN32 +#include "enet/win32.h" +#else +#include "enet/unix.h" +#endif + +#include "enet/types.h" +#include "enet/protocol.h" +#include "enet/list.h" +#include "enet/callbacks.h" + +#define ENET_VERSION_MAJOR 1 +#define ENET_VERSION_MINOR 3 +#define ENET_VERSION_PATCH 13 +#define ENET_VERSION_CREATE(major, minor, patch) (((major)<<16) | ((minor)<<8) | (patch)) +#define ENET_VERSION_GET_MAJOR(version) (((version)>>16)&0xFF) +#define ENET_VERSION_GET_MINOR(version) (((version)>>8)&0xFF) +#define ENET_VERSION_GET_PATCH(version) ((version)&0xFF) +#define ENET_VERSION ENET_VERSION_CREATE(ENET_VERSION_MAJOR, ENET_VERSION_MINOR, ENET_VERSION_PATCH) + +typedef enet_uint32 ENetVersion; + +struct _ENetHost; +struct _ENetEvent; +struct _ENetPacket; + +typedef enum _ENetSocketType +{ + ENET_SOCKET_TYPE_STREAM = 1, + ENET_SOCKET_TYPE_DATAGRAM = 2 +} ENetSocketType; + +typedef enum _ENetSocketWait +{ + ENET_SOCKET_WAIT_NONE = 0, + ENET_SOCKET_WAIT_SEND = (1 << 0), + ENET_SOCKET_WAIT_RECEIVE = (1 << 1), + ENET_SOCKET_WAIT_INTERRUPT = (1 << 2) +} ENetSocketWait; + +typedef enum _ENetSocketOption +{ + ENET_SOCKOPT_NONBLOCK = 1, + ENET_SOCKOPT_BROADCAST = 2, + ENET_SOCKOPT_RCVBUF = 3, + ENET_SOCKOPT_SNDBUF = 4, + ENET_SOCKOPT_REUSEADDR = 5, + ENET_SOCKOPT_RCVTIMEO = 6, + ENET_SOCKOPT_SNDTIMEO = 7, + ENET_SOCKOPT_ERROR = 8, + ENET_SOCKOPT_NODELAY = 9 +} ENetSocketOption; + +typedef enum _ENetSocketShutdown +{ + ENET_SOCKET_SHUTDOWN_READ = 0, + ENET_SOCKET_SHUTDOWN_WRITE = 1, + ENET_SOCKET_SHUTDOWN_READ_WRITE = 2 +} ENetSocketShutdown; + +#define ENET_HOST_ANY 0 +#define ENET_HOST_BROADCAST 0xFFFFFFFFU +#define ENET_PORT_ANY 0 + +/** + * Portable internet address structure. + * + * The host must be specified in network byte-order, and the port must be in host + * byte-order. The constant ENET_HOST_ANY may be used to specify the default + * server host. The constant ENET_HOST_BROADCAST may be used to specify the + * broadcast address (255.255.255.255). This makes sense for enet_host_connect, + * but not for enet_host_create. Once a server responds to a broadcast, the + * address is updated from ENET_HOST_BROADCAST to the server's actual IP address. + */ +typedef struct _ENetAddress +{ + enet_uint32 host; + enet_uint16 port; +} ENetAddress; + +/** + * Packet flag bit constants. + * + * The host must be specified in network byte-order, and the port must be in + * host byte-order. The constant ENET_HOST_ANY may be used to specify the + * default server host. + + @sa ENetPacket +*/ +typedef enum _ENetPacketFlag +{ + /** packet must be received by the target peer and resend attempts should be + * made until the packet is delivered */ + ENET_PACKET_FLAG_RELIABLE = (1 << 0), + /** packet will not be sequenced with other packets + * not supported for reliable packets + */ + ENET_PACKET_FLAG_UNSEQUENCED = (1 << 1), + /** packet will not allocate data, and user must supply it instead */ + ENET_PACKET_FLAG_NO_ALLOCATE = (1 << 2), + /** packet will be fragmented using unreliable (instead of reliable) sends + * if it exceeds the MTU */ + ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT = (1 << 3), + + /** whether the packet has been sent from all queues it has been entered into */ + ENET_PACKET_FLAG_SENT = (1<<8) +} ENetPacketFlag; + +typedef void (ENET_CALLBACK * ENetPacketFreeCallback) (struct _ENetPacket *); + +/** + * ENet packet structure. + * + * An ENet data packet that may be sent to or received from a peer. The shown + * fields should only be read and never modified. The data field contains the + * allocated data for the packet. The dataLength fields specifies the length + * of the allocated data. The flags field is either 0 (specifying no flags), + * or a bitwise-or of any combination of the following flags: + * + * ENET_PACKET_FLAG_RELIABLE - packet must be received by the target peer + * and resend attempts should be made until the packet is delivered + * + * ENET_PACKET_FLAG_UNSEQUENCED - packet will not be sequenced with other packets + * (not supported for reliable packets) + * + * ENET_PACKET_FLAG_NO_ALLOCATE - packet will not allocate data, and user must supply it instead + * + * ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT - packet will be fragmented using unreliable + * (instead of reliable) sends if it exceeds the MTU + * + * ENET_PACKET_FLAG_SENT - whether the packet has been sent from all queues it has been entered into + @sa ENetPacketFlag + */ +typedef struct _ENetPacket +{ + size_t referenceCount; /**< internal use only */ + enet_uint32 flags; /**< bitwise-or of ENetPacketFlag constants */ + enet_uint8 * data; /**< allocated data for packet */ + size_t dataLength; /**< length of data */ + ENetPacketFreeCallback freeCallback; /**< function to be called when the packet is no longer in use */ + void * userData; /**< application private data, may be freely modified */ +} ENetPacket; + +typedef struct _ENetAcknowledgement +{ + ENetListNode acknowledgementList; + enet_uint32 sentTime; + ENetProtocol command; +} ENetAcknowledgement; + +typedef struct _ENetOutgoingCommand +{ + ENetListNode outgoingCommandList; + enet_uint16 reliableSequenceNumber; + enet_uint16 unreliableSequenceNumber; + enet_uint32 sentTime; + enet_uint32 roundTripTimeout; + enet_uint32 roundTripTimeoutLimit; + enet_uint32 fragmentOffset; + enet_uint16 fragmentLength; + enet_uint16 sendAttempts; + ENetProtocol command; + ENetPacket * packet; +} ENetOutgoingCommand; + +typedef struct _ENetIncomingCommand +{ + ENetListNode incomingCommandList; + enet_uint16 reliableSequenceNumber; + enet_uint16 unreliableSequenceNumber; + ENetProtocol command; + enet_uint32 fragmentCount; + enet_uint32 fragmentsRemaining; + enet_uint32 * fragments; + ENetPacket * packet; +} ENetIncomingCommand; + +typedef enum _ENetPeerState +{ + ENET_PEER_STATE_DISCONNECTED = 0, + ENET_PEER_STATE_CONNECTING = 1, + ENET_PEER_STATE_ACKNOWLEDGING_CONNECT = 2, + ENET_PEER_STATE_CONNECTION_PENDING = 3, + ENET_PEER_STATE_CONNECTION_SUCCEEDED = 4, + ENET_PEER_STATE_CONNECTED = 5, + ENET_PEER_STATE_DISCONNECT_LATER = 6, + ENET_PEER_STATE_DISCONNECTING = 7, + ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT = 8, + ENET_PEER_STATE_ZOMBIE = 9 +} ENetPeerState; + +#ifndef ENET_BUFFER_MAXIMUM +#define ENET_BUFFER_MAXIMUM (1 + 2 * ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS) +#endif + +enum +{ + ENET_HOST_RECEIVE_BUFFER_SIZE = 256 * 1024, + ENET_HOST_SEND_BUFFER_SIZE = 256 * 1024, + ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL = 1000, + ENET_HOST_DEFAULT_MTU = 1400, + ENET_HOST_DEFAULT_MAXIMUM_PACKET_SIZE = 32 * 1024 * 1024, + ENET_HOST_DEFAULT_MAXIMUM_WAITING_DATA = 32 * 1024 * 1024, + + ENET_PEER_DEFAULT_ROUND_TRIP_TIME = 500, + ENET_PEER_DEFAULT_PACKET_THROTTLE = 32, + ENET_PEER_PACKET_THROTTLE_SCALE = 32, + ENET_PEER_PACKET_THROTTLE_COUNTER = 7, + ENET_PEER_PACKET_THROTTLE_ACCELERATION = 2, + ENET_PEER_PACKET_THROTTLE_DECELERATION = 2, + ENET_PEER_PACKET_THROTTLE_INTERVAL = 5000, + ENET_PEER_PACKET_LOSS_SCALE = (1 << 16), + ENET_PEER_PACKET_LOSS_INTERVAL = 10000, + ENET_PEER_WINDOW_SIZE_SCALE = 64 * 1024, + ENET_PEER_TIMEOUT_LIMIT = 32, + ENET_PEER_TIMEOUT_MINIMUM = 5000, + ENET_PEER_TIMEOUT_MAXIMUM = 30000, + ENET_PEER_PING_INTERVAL = 500, + ENET_PEER_UNSEQUENCED_WINDOWS = 64, + ENET_PEER_UNSEQUENCED_WINDOW_SIZE = 1024, + ENET_PEER_FREE_UNSEQUENCED_WINDOWS = 32, + ENET_PEER_RELIABLE_WINDOWS = 16, + ENET_PEER_RELIABLE_WINDOW_SIZE = 0x1000, + ENET_PEER_FREE_RELIABLE_WINDOWS = 8 +}; + +typedef struct _ENetChannel +{ + enet_uint16 outgoingReliableSequenceNumber; + enet_uint16 outgoingUnreliableSequenceNumber; + enet_uint16 usedReliableWindows; + enet_uint16 reliableWindows [ENET_PEER_RELIABLE_WINDOWS]; + enet_uint16 incomingReliableSequenceNumber; + enet_uint16 incomingUnreliableSequenceNumber; + ENetList incomingReliableCommands; + ENetList incomingUnreliableCommands; +} ENetChannel; + +/** + * An ENet peer which data packets may be sent or received from. + * + * No fields should be modified unless otherwise specified. + */ +typedef struct _ENetPeer +{ + ENetListNode dispatchList; + struct _ENetHost * host; + enet_uint16 outgoingPeerID; + enet_uint16 incomingPeerID; + enet_uint32 connectID; + enet_uint8 outgoingSessionID; + enet_uint8 incomingSessionID; + ENetAddress address; /**< Internet address of the peer */ + void * data; /**< Application private data, may be freely modified */ + ENetPeerState state; + ENetChannel * channels; + size_t channelCount; /**< Number of channels allocated for communication with peer */ + enet_uint32 incomingBandwidth; /**< Downstream bandwidth of the client in bytes/second */ + enet_uint32 outgoingBandwidth; /**< Upstream bandwidth of the client in bytes/second */ + enet_uint32 incomingBandwidthThrottleEpoch; + enet_uint32 outgoingBandwidthThrottleEpoch; + enet_uint32 incomingDataTotal; + enet_uint32 outgoingDataTotal; + enet_uint32 lastSendTime; + enet_uint32 lastReceiveTime; + enet_uint32 nextTimeout; + enet_uint32 earliestTimeout; + enet_uint32 packetLossEpoch; + enet_uint32 packetsSent; + enet_uint32 packetsLost; + enet_uint32 packetLoss; /**< mean packet loss of reliable packets as a ratio with respect to the constant ENET_PEER_PACKET_LOSS_SCALE */ + enet_uint32 packetLossVariance; + enet_uint32 packetThrottle; + enet_uint32 packetThrottleLimit; + enet_uint32 packetThrottleCounter; + enet_uint32 packetThrottleEpoch; + enet_uint32 packetThrottleAcceleration; + enet_uint32 packetThrottleDeceleration; + enet_uint32 packetThrottleInterval; + enet_uint32 pingInterval; + enet_uint32 timeoutLimit; + enet_uint32 timeoutMinimum; + enet_uint32 timeoutMaximum; + enet_uint32 lastRoundTripTime; + enet_uint32 lowestRoundTripTime; + enet_uint32 lastRoundTripTimeVariance; + enet_uint32 highestRoundTripTimeVariance; + enet_uint32 roundTripTime; /**< mean round trip time (RTT), in milliseconds, between sending a reliable packet and receiving its acknowledgement */ + enet_uint32 roundTripTimeVariance; + enet_uint32 mtu; + enet_uint32 windowSize; + enet_uint32 reliableDataInTransit; + enet_uint16 outgoingReliableSequenceNumber; + ENetList acknowledgements; + ENetList sentReliableCommands; + ENetList sentUnreliableCommands; + ENetList outgoingReliableCommands; + ENetList outgoingUnreliableCommands; + ENetList dispatchedCommands; + int needsDispatch; + enet_uint16 incomingUnsequencedGroup; + enet_uint16 outgoingUnsequencedGroup; + enet_uint32 unsequencedWindow [ENET_PEER_UNSEQUENCED_WINDOW_SIZE / 32]; + enet_uint32 eventData; + size_t totalWaitingData; +} ENetPeer; + +/** An ENet packet compressor for compressing UDP packets before socket sends or receives. + */ +typedef struct _ENetCompressor +{ + /** Context data for the compressor. Must be non-NULL. */ + void * context; + /** Compresses from inBuffers[0:inBufferCount-1], containing inLimit bytes, to outData, outputting at most outLimit bytes. Should return 0 on failure. */ + size_t (ENET_CALLBACK * compress) (void * context, const ENetBuffer * inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 * outData, size_t outLimit); + /** Decompresses from inData, containing inLimit bytes, to outData, outputting at most outLimit bytes. Should return 0 on failure. */ + size_t (ENET_CALLBACK * decompress) (void * context, const enet_uint8 * inData, size_t inLimit, enet_uint8 * outData, size_t outLimit); + /** Destroys the context when compression is disabled or the host is destroyed. May be NULL. */ + void (ENET_CALLBACK * destroy) (void * context); +} ENetCompressor; + +/** Callback that computes the checksum of the data held in buffers[0:bufferCount-1] */ +typedef enet_uint32 (ENET_CALLBACK * ENetChecksumCallback) (const ENetBuffer * buffers, size_t bufferCount); + +/** Callback for intercepting received raw UDP packets. Should return 1 to intercept, 0 to ignore, or -1 to propagate an error. */ +typedef int (ENET_CALLBACK * ENetInterceptCallback) (struct _ENetHost * host, struct _ENetEvent * event); + +/** An ENet host for communicating with peers. + * + * No fields should be modified unless otherwise stated. + + @sa enet_host_create() + @sa enet_host_destroy() + @sa enet_host_connect() + @sa enet_host_service() + @sa enet_host_flush() + @sa enet_host_broadcast() + @sa enet_host_compress() + @sa enet_host_compress_with_range_coder() + @sa enet_host_channel_limit() + @sa enet_host_bandwidth_limit() + @sa enet_host_bandwidth_throttle() + */ +typedef struct _ENetHost +{ + ENetSocket socket; + ENetAddress address; /**< Internet address of the host */ + enet_uint32 incomingBandwidth; /**< downstream bandwidth of the host */ + enet_uint32 outgoingBandwidth; /**< upstream bandwidth of the host */ + enet_uint32 bandwidthThrottleEpoch; + enet_uint32 mtu; + enet_uint32 randomSeed; + int recalculateBandwidthLimits; + ENetPeer * peers; /**< array of peers allocated for this host */ + size_t peerCount; /**< number of peers allocated for this host */ + size_t channelLimit; /**< maximum number of channels allowed for connected peers */ + enet_uint32 serviceTime; + ENetList dispatchQueue; + int continueSending; + size_t packetSize; + enet_uint16 headerFlags; + ENetProtocol commands [ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS]; + size_t commandCount; + ENetBuffer buffers [ENET_BUFFER_MAXIMUM]; + size_t bufferCount; + ENetChecksumCallback checksum; /**< callback the user can set to enable packet checksums for this host */ + ENetCompressor compressor; + enet_uint8 packetData [2][ENET_PROTOCOL_MAXIMUM_MTU]; + ENetAddress receivedAddress; + enet_uint8 * receivedData; + size_t receivedDataLength; + enet_uint32 totalSentData; /**< total data sent, user should reset to 0 as needed to prevent overflow */ + enet_uint32 totalSentPackets; /**< total UDP packets sent, user should reset to 0 as needed to prevent overflow */ + enet_uint32 totalReceivedData; /**< total data received, user should reset to 0 as needed to prevent overflow */ + enet_uint32 totalReceivedPackets; /**< total UDP packets received, user should reset to 0 as needed to prevent overflow */ + ENetInterceptCallback intercept; /**< callback the user can set to intercept received raw UDP packets */ + size_t connectedPeers; + size_t bandwidthLimitedPeers; + size_t duplicatePeers; /**< optional number of allowed peers from duplicate IPs, defaults to ENET_PROTOCOL_MAXIMUM_PEER_ID */ + size_t maximumPacketSize; /**< the maximum allowable packet size that may be sent or received on a peer */ + size_t maximumWaitingData; /**< the maximum aggregate amount of buffer space a peer may use waiting for packets to be delivered */ +} ENetHost; + +/** + * An ENet event type, as specified in @ref ENetEvent. + */ +typedef enum _ENetEventType +{ + /** no event occurred within the specified time limit */ + ENET_EVENT_TYPE_NONE = 0, + + /** a connection request initiated by enet_host_connect has completed. + * The peer field contains the peer which successfully connected. + */ + ENET_EVENT_TYPE_CONNECT = 1, + + /** a peer has disconnected. This event is generated on a successful + * completion of a disconnect initiated by enet_peer_disconnect, if + * a peer has timed out, or if a connection request intialized by + * enet_host_connect has timed out. The peer field contains the peer + * which disconnected. The data field contains user supplied data + * describing the disconnection, or 0, if none is available. + */ + ENET_EVENT_TYPE_DISCONNECT = 2, + + /** a packet has been received from a peer. The peer field specifies the + * peer which sent the packet. The channelID field specifies the channel + * number upon which the packet was received. The packet field contains + * the packet that was received; this packet must be destroyed with + * enet_packet_destroy after use. + */ + ENET_EVENT_TYPE_RECEIVE = 3 +} ENetEventType; + +/** + * An ENet event as returned by enet_host_service(). + + @sa enet_host_service + */ +typedef struct _ENetEvent +{ + ENetEventType type; /**< type of the event */ + ENetPeer * peer; /**< peer that generated a connect, disconnect or receive event */ + enet_uint8 channelID; /**< channel on the peer that generated the event, if appropriate */ + enet_uint32 data; /**< data associated with the event, if appropriate */ + ENetPacket * packet; /**< packet associated with the event, if appropriate */ +} ENetEvent; + +/** @defgroup global ENet global functions + @{ +*/ + +/** + Initializes ENet globally. Must be called prior to using any functions in + ENet. + @returns 0 on success, < 0 on failure +*/ +ENET_API int enet_initialize (void); + +/** + Initializes ENet globally and supplies user-overridden callbacks. Must be called prior to using any functions in ENet. Do not use enet_initialize() if you use this variant. Make sure the ENetCallbacks structure is zeroed out so that any additional callbacks added in future versions will be properly ignored. + + @param version the constant ENET_VERSION should be supplied so ENet knows which version of ENetCallbacks struct to use + @param inits user-overridden callbacks where any NULL callbacks will use ENet's defaults + @returns 0 on success, < 0 on failure +*/ +ENET_API int enet_initialize_with_callbacks (ENetVersion version, const ENetCallbacks * inits); + +/** + Shuts down ENet globally. Should be called when a program that has + initialized ENet exits. +*/ +ENET_API void enet_deinitialize (void); + +/** + Gives the linked version of the ENet library. + @returns the version number +*/ +ENET_API ENetVersion enet_linked_version (void); + +/** @} */ + +/** @defgroup private ENet private implementation functions */ + +/** + Returns the wall-time in milliseconds. Its initial value is unspecified + unless otherwise set. + */ +ENET_API enet_uint32 enet_time_get (void); +/** + Sets the current wall-time in milliseconds. + */ +ENET_API void enet_time_set (enet_uint32); + +/** @defgroup socket ENet socket functions + @{ +*/ +ENET_API ENetSocket enet_socket_create (ENetSocketType); +ENET_API int enet_socket_bind (ENetSocket, const ENetAddress *); +ENET_API int enet_socket_get_address (ENetSocket, ENetAddress *); +ENET_API int enet_socket_listen (ENetSocket, int); +ENET_API ENetSocket enet_socket_accept (ENetSocket, ENetAddress *); +ENET_API int enet_socket_connect (ENetSocket, const ENetAddress *); +ENET_API int enet_socket_send (ENetSocket, const ENetAddress *, const ENetBuffer *, size_t); +ENET_API int enet_socket_receive (ENetSocket, ENetAddress *, ENetBuffer *, size_t); +ENET_API int enet_socket_wait (ENetSocket, enet_uint32 *, enet_uint32); +ENET_API int enet_socket_set_option (ENetSocket, ENetSocketOption, int); +ENET_API int enet_socket_get_option (ENetSocket, ENetSocketOption, int *); +ENET_API int enet_socket_shutdown (ENetSocket, ENetSocketShutdown); +ENET_API void enet_socket_destroy (ENetSocket); +ENET_API int enet_socketset_select (ENetSocket, ENetSocketSet *, ENetSocketSet *, enet_uint32); + +/** @} */ + +/** @defgroup Address ENet address functions + @{ +*/ +/** Attempts to resolve the host named by the parameter hostName and sets + the host field in the address parameter if successful. + @param address destination to store resolved address + @param hostName host name to lookup + @retval 0 on success + @retval < 0 on failure + @returns the address of the given hostName in address on success +*/ +ENET_API int enet_address_set_host (ENetAddress * address, const char * hostName); + +/** Gives the printable form of the IP address specified in the address parameter. + @param address address printed + @param hostName destination for name, must not be NULL + @param nameLength maximum length of hostName. + @returns the null-terminated name of the host in hostName on success + @retval 0 on success + @retval < 0 on failure +*/ +ENET_API int enet_address_get_host_ip (const ENetAddress * address, char * hostName, size_t nameLength); + +/** Attempts to do a reverse lookup of the host field in the address parameter. + @param address address used for reverse lookup + @param hostName destination for name, must not be NULL + @param nameLength maximum length of hostName. + @returns the null-terminated name of the host in hostName on success + @retval 0 on success + @retval < 0 on failure +*/ +ENET_API int enet_address_get_host (const ENetAddress * address, char * hostName, size_t nameLength); + +/** @} */ + +ENET_API ENetPacket * enet_packet_create (const void *, size_t, enet_uint32); +ENET_API void enet_packet_destroy (ENetPacket *); +ENET_API int enet_packet_resize (ENetPacket *, size_t); +ENET_API enet_uint32 enet_crc32 (const ENetBuffer *, size_t); + +ENET_API ENetHost * enet_host_create (const ENetAddress *, size_t, size_t, enet_uint32, enet_uint32); +ENET_API void enet_host_destroy (ENetHost *); +ENET_API ENetPeer * enet_host_connect (ENetHost *, const ENetAddress *, size_t, enet_uint32); +ENET_API int enet_host_check_events (ENetHost *, ENetEvent *); +ENET_API int enet_host_service (ENetHost *, ENetEvent *, enet_uint32); +ENET_API void enet_host_flush (ENetHost *); +ENET_API void enet_host_broadcast (ENetHost *, enet_uint8, ENetPacket *); +ENET_API void enet_host_compress (ENetHost *, const ENetCompressor *); +ENET_API int enet_host_compress_with_range_coder (ENetHost * host); +ENET_API void enet_host_channel_limit (ENetHost *, size_t); +ENET_API void enet_host_bandwidth_limit (ENetHost *, enet_uint32, enet_uint32); +extern void enet_host_bandwidth_throttle (ENetHost *); +extern enet_uint32 enet_host_random_seed (void); + +ENET_API int enet_peer_send (ENetPeer *, enet_uint8, ENetPacket *); +ENET_API ENetPacket * enet_peer_receive (ENetPeer *, enet_uint8 * channelID); +ENET_API void enet_peer_ping (ENetPeer *); +ENET_API void enet_peer_ping_interval (ENetPeer *, enet_uint32); +ENET_API void enet_peer_timeout (ENetPeer *, enet_uint32, enet_uint32, enet_uint32); +ENET_API void enet_peer_reset (ENetPeer *); +ENET_API void enet_peer_disconnect (ENetPeer *, enet_uint32); +ENET_API void enet_peer_disconnect_now (ENetPeer *, enet_uint32); +ENET_API void enet_peer_disconnect_later (ENetPeer *, enet_uint32); +ENET_API void enet_peer_throttle_configure (ENetPeer *, enet_uint32, enet_uint32, enet_uint32); +extern int enet_peer_throttle (ENetPeer *, enet_uint32); +extern void enet_peer_reset_queues (ENetPeer *); +extern void enet_peer_setup_outgoing_command (ENetPeer *, ENetOutgoingCommand *); +extern ENetOutgoingCommand * enet_peer_queue_outgoing_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32, enet_uint16); +extern ENetIncomingCommand * enet_peer_queue_incoming_command (ENetPeer *, const ENetProtocol *, const void *, size_t, enet_uint32, enet_uint32); +extern ENetAcknowledgement * enet_peer_queue_acknowledgement (ENetPeer *, const ENetProtocol *, enet_uint16); +extern void enet_peer_dispatch_incoming_unreliable_commands (ENetPeer *, ENetChannel *); +extern void enet_peer_dispatch_incoming_reliable_commands (ENetPeer *, ENetChannel *); +extern void enet_peer_on_connect (ENetPeer *); +extern void enet_peer_on_disconnect (ENetPeer *); + +ENET_API void * enet_range_coder_create (void); +ENET_API void enet_range_coder_destroy (void *); +ENET_API size_t enet_range_coder_compress (void *, const ENetBuffer *, size_t, size_t, enet_uint8 *, size_t); +ENET_API size_t enet_range_coder_decompress (void *, const enet_uint8 *, size_t, enet_uint8 *, size_t); + +extern size_t enet_protocol_command_size (enet_uint8); + +#ifdef __cplusplus +} +#endif + +#endif /* __ENET_ENET_H__ */ + diff --git a/modules/enet/enet/list.h b/modules/enet/enet/list.h new file mode 100644 index 0000000000..d7b2600848 --- /dev/null +++ b/modules/enet/enet/list.h @@ -0,0 +1,43 @@ +/** + @file list.h + @brief ENet list management +*/ +#ifndef __ENET_LIST_H__ +#define __ENET_LIST_H__ + +#include <stdlib.h> + +typedef struct _ENetListNode +{ + struct _ENetListNode * next; + struct _ENetListNode * previous; +} ENetListNode; + +typedef ENetListNode * ENetListIterator; + +typedef struct _ENetList +{ + ENetListNode sentinel; +} ENetList; + +extern void enet_list_clear (ENetList *); + +extern ENetListIterator enet_list_insert (ENetListIterator, void *); +extern void * enet_list_remove (ENetListIterator); +extern ENetListIterator enet_list_move (ENetListIterator, void *, void *); + +extern size_t enet_list_size (ENetList *); + +#define enet_list_begin(list) ((list) -> sentinel.next) +#define enet_list_end(list) (& (list) -> sentinel) + +#define enet_list_empty(list) (enet_list_begin (list) == enet_list_end (list)) + +#define enet_list_next(iterator) ((iterator) -> next) +#define enet_list_previous(iterator) ((iterator) -> previous) + +#define enet_list_front(list) ((void *) (list) -> sentinel.next) +#define enet_list_back(list) ((void *) (list) -> sentinel.previous) + +#endif /* __ENET_LIST_H__ */ + diff --git a/modules/enet/enet/protocol.h b/modules/enet/enet/protocol.h new file mode 100644 index 0000000000..f8c73d8a66 --- /dev/null +++ b/modules/enet/enet/protocol.h @@ -0,0 +1,198 @@ +/** + @file protocol.h + @brief ENet protocol +*/ +#ifndef __ENET_PROTOCOL_H__ +#define __ENET_PROTOCOL_H__ + +#include "enet/types.h" + +enum +{ + ENET_PROTOCOL_MINIMUM_MTU = 576, + ENET_PROTOCOL_MAXIMUM_MTU = 4096, + ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS = 32, + ENET_PROTOCOL_MINIMUM_WINDOW_SIZE = 4096, + ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE = 65536, + ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT = 1, + ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT = 255, + ENET_PROTOCOL_MAXIMUM_PEER_ID = 0xFFF, + ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT = 1024 * 1024 +}; + +typedef enum _ENetProtocolCommand +{ + ENET_PROTOCOL_COMMAND_NONE = 0, + ENET_PROTOCOL_COMMAND_ACKNOWLEDGE = 1, + ENET_PROTOCOL_COMMAND_CONNECT = 2, + ENET_PROTOCOL_COMMAND_VERIFY_CONNECT = 3, + ENET_PROTOCOL_COMMAND_DISCONNECT = 4, + ENET_PROTOCOL_COMMAND_PING = 5, + ENET_PROTOCOL_COMMAND_SEND_RELIABLE = 6, + ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE = 7, + ENET_PROTOCOL_COMMAND_SEND_FRAGMENT = 8, + ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED = 9, + ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT = 10, + ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE = 11, + ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT = 12, + ENET_PROTOCOL_COMMAND_COUNT = 13, + + ENET_PROTOCOL_COMMAND_MASK = 0x0F +} ENetProtocolCommand; + +typedef enum _ENetProtocolFlag +{ + ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = (1 << 7), + ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = (1 << 6), + + ENET_PROTOCOL_HEADER_FLAG_COMPRESSED = (1 << 14), + ENET_PROTOCOL_HEADER_FLAG_SENT_TIME = (1 << 15), + ENET_PROTOCOL_HEADER_FLAG_MASK = ENET_PROTOCOL_HEADER_FLAG_COMPRESSED | ENET_PROTOCOL_HEADER_FLAG_SENT_TIME, + + ENET_PROTOCOL_HEADER_SESSION_MASK = (3 << 12), + ENET_PROTOCOL_HEADER_SESSION_SHIFT = 12 +} ENetProtocolFlag; + +#ifdef _MSC_VER +#pragma pack(push, 1) +#define ENET_PACKED +#elif defined(__GNUC__) || defined(__clang__) +#define ENET_PACKED __attribute__ ((packed)) +#else +#define ENET_PACKED +#endif + +typedef struct _ENetProtocolHeader +{ + enet_uint16 peerID; + enet_uint16 sentTime; +} ENET_PACKED ENetProtocolHeader; + +typedef struct _ENetProtocolCommandHeader +{ + enet_uint8 command; + enet_uint8 channelID; + enet_uint16 reliableSequenceNumber; +} ENET_PACKED ENetProtocolCommandHeader; + +typedef struct _ENetProtocolAcknowledge +{ + ENetProtocolCommandHeader header; + enet_uint16 receivedReliableSequenceNumber; + enet_uint16 receivedSentTime; +} ENET_PACKED ENetProtocolAcknowledge; + +typedef struct _ENetProtocolConnect +{ + ENetProtocolCommandHeader header; + enet_uint16 outgoingPeerID; + enet_uint8 incomingSessionID; + enet_uint8 outgoingSessionID; + enet_uint32 mtu; + enet_uint32 windowSize; + enet_uint32 channelCount; + enet_uint32 incomingBandwidth; + enet_uint32 outgoingBandwidth; + enet_uint32 packetThrottleInterval; + enet_uint32 packetThrottleAcceleration; + enet_uint32 packetThrottleDeceleration; + enet_uint32 connectID; + enet_uint32 data; +} ENET_PACKED ENetProtocolConnect; + +typedef struct _ENetProtocolVerifyConnect +{ + ENetProtocolCommandHeader header; + enet_uint16 outgoingPeerID; + enet_uint8 incomingSessionID; + enet_uint8 outgoingSessionID; + enet_uint32 mtu; + enet_uint32 windowSize; + enet_uint32 channelCount; + enet_uint32 incomingBandwidth; + enet_uint32 outgoingBandwidth; + enet_uint32 packetThrottleInterval; + enet_uint32 packetThrottleAcceleration; + enet_uint32 packetThrottleDeceleration; + enet_uint32 connectID; +} ENET_PACKED ENetProtocolVerifyConnect; + +typedef struct _ENetProtocolBandwidthLimit +{ + ENetProtocolCommandHeader header; + enet_uint32 incomingBandwidth; + enet_uint32 outgoingBandwidth; +} ENET_PACKED ENetProtocolBandwidthLimit; + +typedef struct _ENetProtocolThrottleConfigure +{ + ENetProtocolCommandHeader header; + enet_uint32 packetThrottleInterval; + enet_uint32 packetThrottleAcceleration; + enet_uint32 packetThrottleDeceleration; +} ENET_PACKED ENetProtocolThrottleConfigure; + +typedef struct _ENetProtocolDisconnect +{ + ENetProtocolCommandHeader header; + enet_uint32 data; +} ENET_PACKED ENetProtocolDisconnect; + +typedef struct _ENetProtocolPing +{ + ENetProtocolCommandHeader header; +} ENET_PACKED ENetProtocolPing; + +typedef struct _ENetProtocolSendReliable +{ + ENetProtocolCommandHeader header; + enet_uint16 dataLength; +} ENET_PACKED ENetProtocolSendReliable; + +typedef struct _ENetProtocolSendUnreliable +{ + ENetProtocolCommandHeader header; + enet_uint16 unreliableSequenceNumber; + enet_uint16 dataLength; +} ENET_PACKED ENetProtocolSendUnreliable; + +typedef struct _ENetProtocolSendUnsequenced +{ + ENetProtocolCommandHeader header; + enet_uint16 unsequencedGroup; + enet_uint16 dataLength; +} ENET_PACKED ENetProtocolSendUnsequenced; + +typedef struct _ENetProtocolSendFragment +{ + ENetProtocolCommandHeader header; + enet_uint16 startSequenceNumber; + enet_uint16 dataLength; + enet_uint32 fragmentCount; + enet_uint32 fragmentNumber; + enet_uint32 totalLength; + enet_uint32 fragmentOffset; +} ENET_PACKED ENetProtocolSendFragment; + +typedef union _ENetProtocol +{ + ENetProtocolCommandHeader header; + ENetProtocolAcknowledge acknowledge; + ENetProtocolConnect connect; + ENetProtocolVerifyConnect verifyConnect; + ENetProtocolDisconnect disconnect; + ENetProtocolPing ping; + ENetProtocolSendReliable sendReliable; + ENetProtocolSendUnreliable sendUnreliable; + ENetProtocolSendUnsequenced sendUnsequenced; + ENetProtocolSendFragment sendFragment; + ENetProtocolBandwidthLimit bandwidthLimit; + ENetProtocolThrottleConfigure throttleConfigure; +} ENET_PACKED ENetProtocol; + +#ifdef _MSC_VER +#pragma pack(pop) +#endif + +#endif /* __ENET_PROTOCOL_H__ */ + diff --git a/modules/enet/enet/time.h b/modules/enet/enet/time.h new file mode 100644 index 0000000000..c82a546035 --- /dev/null +++ b/modules/enet/enet/time.h @@ -0,0 +1,18 @@ +/** + @file time.h + @brief ENet time constants and macros +*/ +#ifndef __ENET_TIME_H__ +#define __ENET_TIME_H__ + +#define ENET_TIME_OVERFLOW 86400000 + +#define ENET_TIME_LESS(a, b) ((a) - (b) >= ENET_TIME_OVERFLOW) +#define ENET_TIME_GREATER(a, b) ((b) - (a) >= ENET_TIME_OVERFLOW) +#define ENET_TIME_LESS_EQUAL(a, b) (! ENET_TIME_GREATER (a, b)) +#define ENET_TIME_GREATER_EQUAL(a, b) (! ENET_TIME_LESS (a, b)) + +#define ENET_TIME_DIFFERENCE(a, b) ((a) - (b) >= ENET_TIME_OVERFLOW ? (b) - (a) : (a) - (b)) + +#endif /* __ENET_TIME_H__ */ + diff --git a/modules/enet/enet/types.h b/modules/enet/enet/types.h new file mode 100644 index 0000000000..ab010a4b13 --- /dev/null +++ b/modules/enet/enet/types.h @@ -0,0 +1,13 @@ +/** + @file types.h + @brief type definitions for ENet +*/ +#ifndef __ENET_TYPES_H__ +#define __ENET_TYPES_H__ + +typedef unsigned char enet_uint8; /**< unsigned 8-bit type */ +typedef unsigned short enet_uint16; /**< unsigned 16-bit type */ +typedef unsigned int enet_uint32; /**< unsigned 32-bit type */ + +#endif /* __ENET_TYPES_H__ */ + diff --git a/modules/enet/enet/unix.h b/modules/enet/enet/unix.h new file mode 100644 index 0000000000..a59e340606 --- /dev/null +++ b/modules/enet/enet/unix.h @@ -0,0 +1,47 @@ +/** + @file unix.h + @brief ENet Unix header +*/ +#ifndef __ENET_UNIX_H__ +#define __ENET_UNIX_H__ + +#include <stdlib.h> +#include <sys/time.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <unistd.h> + +#ifdef MSG_MAXIOVLEN +#define ENET_BUFFER_MAXIMUM MSG_MAXIOVLEN +#endif + +typedef int ENetSocket; + +#define ENET_SOCKET_NULL -1 + +#define ENET_HOST_TO_NET_16(value) (htons (value)) /**< macro that converts host to net byte-order of a 16-bit value */ +#define ENET_HOST_TO_NET_32(value) (htonl (value)) /**< macro that converts host to net byte-order of a 32-bit value */ + +#define ENET_NET_TO_HOST_16(value) (ntohs (value)) /**< macro that converts net to host byte-order of a 16-bit value */ +#define ENET_NET_TO_HOST_32(value) (ntohl (value)) /**< macro that converts net to host byte-order of a 32-bit value */ + +typedef struct +{ + void * data; + size_t dataLength; +} ENetBuffer; + +#define ENET_CALLBACK + +#define ENET_API extern + +typedef fd_set ENetSocketSet; + +#define ENET_SOCKETSET_EMPTY(sockset) FD_ZERO (& (sockset)) +#define ENET_SOCKETSET_ADD(sockset, socket) FD_SET (socket, & (sockset)) +#define ENET_SOCKETSET_REMOVE(sockset, socket) FD_CLR (socket, & (sockset)) +#define ENET_SOCKETSET_CHECK(sockset, socket) FD_ISSET (socket, & (sockset)) + +#endif /* __ENET_UNIX_H__ */ + diff --git a/modules/enet/enet/utility.h b/modules/enet/enet/utility.h new file mode 100644 index 0000000000..e48a476be3 --- /dev/null +++ b/modules/enet/enet/utility.h @@ -0,0 +1,12 @@ +/** + @file utility.h + @brief ENet utility header +*/ +#ifndef __ENET_UTILITY_H__ +#define __ENET_UTILITY_H__ + +#define ENET_MAX(x, y) ((x) > (y) ? (x) : (y)) +#define ENET_MIN(x, y) ((x) < (y) ? (x) : (y)) + +#endif /* __ENET_UTILITY_H__ */ + diff --git a/modules/enet/enet/win32.h b/modules/enet/enet/win32.h new file mode 100644 index 0000000000..e73ca9d052 --- /dev/null +++ b/modules/enet/enet/win32.h @@ -0,0 +1,57 @@ +/** + @file win32.h + @brief ENet Win32 header +*/ +#ifndef __ENET_WIN32_H__ +#define __ENET_WIN32_H__ + +#ifdef _MSC_VER +#ifdef ENET_BUILDING_LIB +#pragma warning (disable: 4267) // size_t to int conversion +#pragma warning (disable: 4244) // 64bit to 32bit int +#pragma warning (disable: 4018) // signed/unsigned mismatch +#pragma warning (disable: 4146) // unary minus operator applied to unsigned type +#endif +#endif + +#include <stdlib.h> +#include <winsock2.h> + +typedef SOCKET ENetSocket; + +#define ENET_SOCKET_NULL INVALID_SOCKET + +#define ENET_HOST_TO_NET_16(value) (htons (value)) +#define ENET_HOST_TO_NET_32(value) (htonl (value)) + +#define ENET_NET_TO_HOST_16(value) (ntohs (value)) +#define ENET_NET_TO_HOST_32(value) (ntohl (value)) + +typedef struct +{ + size_t dataLength; + void * data; +} ENetBuffer; + +#define ENET_CALLBACK __cdecl + +#ifdef ENET_DLL +#ifdef ENET_BUILDING_LIB +#define ENET_API __declspec( dllexport ) +#else +#define ENET_API __declspec( dllimport ) +#endif /* ENET_BUILDING_LIB */ +#else /* !ENET_DLL */ +#define ENET_API extern +#endif /* ENET_DLL */ + +typedef fd_set ENetSocketSet; + +#define ENET_SOCKETSET_EMPTY(sockset) FD_ZERO (& (sockset)) +#define ENET_SOCKETSET_ADD(sockset, socket) FD_SET (socket, & (sockset)) +#define ENET_SOCKETSET_REMOVE(sockset, socket) FD_CLR (socket, & (sockset)) +#define ENET_SOCKETSET_CHECK(sockset, socket) FD_ISSET (socket, & (sockset)) + +#endif /* __ENET_WIN32_H__ */ + + diff --git a/modules/enet/host.c b/modules/enet/host.c new file mode 100644 index 0000000000..3be6c0922c --- /dev/null +++ b/modules/enet/host.c @@ -0,0 +1,492 @@ +/** + @file host.c + @brief ENet host management functions +*/ +#define ENET_BUILDING_LIB 1 +#include <string.h> +#include "enet/enet.h" + +/** @defgroup host ENet host functions + @{ +*/ + +/** Creates a host for communicating to peers. + + @param address the address at which other peers may connect to this host. If NULL, then no peers may connect to the host. + @param peerCount the maximum number of peers that should be allocated for the host. + @param channelLimit the maximum number of channels allowed; if 0, then this is equivalent to ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT + @param incomingBandwidth downstream bandwidth of the host in bytes/second; if 0, ENet will assume unlimited bandwidth. + @param outgoingBandwidth upstream bandwidth of the host in bytes/second; if 0, ENet will assume unlimited bandwidth. + + @returns the host on success and NULL on failure + + @remarks ENet will strategically drop packets on specific sides of a connection between hosts + to ensure the host's bandwidth is not overwhelmed. The bandwidth parameters also determine + the window size of a connection which limits the amount of reliable packets that may be in transit + at any given time. +*/ +ENetHost * +enet_host_create (const ENetAddress * address, size_t peerCount, size_t channelLimit, enet_uint32 incomingBandwidth, enet_uint32 outgoingBandwidth) +{ + ENetHost * host; + ENetPeer * currentPeer; + + if (peerCount > ENET_PROTOCOL_MAXIMUM_PEER_ID) + return NULL; + + host = (ENetHost *) enet_malloc (sizeof (ENetHost)); + if (host == NULL) + return NULL; + memset (host, 0, sizeof (ENetHost)); + + host -> peers = (ENetPeer *) enet_malloc (peerCount * sizeof (ENetPeer)); + if (host -> peers == NULL) + { + enet_free (host); + + return NULL; + } + memset (host -> peers, 0, peerCount * sizeof (ENetPeer)); + + host -> socket = enet_socket_create (ENET_SOCKET_TYPE_DATAGRAM); + if (host -> socket == ENET_SOCKET_NULL || (address != NULL && enet_socket_bind (host -> socket, address) < 0)) + { + if (host -> socket != ENET_SOCKET_NULL) + enet_socket_destroy (host -> socket); + + enet_free (host -> peers); + enet_free (host); + + return NULL; + } + + enet_socket_set_option (host -> socket, ENET_SOCKOPT_NONBLOCK, 1); + enet_socket_set_option (host -> socket, ENET_SOCKOPT_BROADCAST, 1); + enet_socket_set_option (host -> socket, ENET_SOCKOPT_RCVBUF, ENET_HOST_RECEIVE_BUFFER_SIZE); + enet_socket_set_option (host -> socket, ENET_SOCKOPT_SNDBUF, ENET_HOST_SEND_BUFFER_SIZE); + + if (address != NULL && enet_socket_get_address (host -> socket, & host -> address) < 0) + host -> address = * address; + + if (! channelLimit || channelLimit > ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT) + channelLimit = ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT; + else + if (channelLimit < ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT) + channelLimit = ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT; + + host -> randomSeed = (enet_uint32) (size_t) host; + host -> randomSeed += enet_host_random_seed (); + host -> randomSeed = (host -> randomSeed << 16) | (host -> randomSeed >> 16); + host -> channelLimit = channelLimit; + host -> incomingBandwidth = incomingBandwidth; + host -> outgoingBandwidth = outgoingBandwidth; + host -> bandwidthThrottleEpoch = 0; + host -> recalculateBandwidthLimits = 0; + host -> mtu = ENET_HOST_DEFAULT_MTU; + host -> peerCount = peerCount; + host -> commandCount = 0; + host -> bufferCount = 0; + host -> checksum = NULL; + host -> receivedAddress.host = ENET_HOST_ANY; + host -> receivedAddress.port = 0; + host -> receivedData = NULL; + host -> receivedDataLength = 0; + + host -> totalSentData = 0; + host -> totalSentPackets = 0; + host -> totalReceivedData = 0; + host -> totalReceivedPackets = 0; + + host -> connectedPeers = 0; + host -> bandwidthLimitedPeers = 0; + host -> duplicatePeers = ENET_PROTOCOL_MAXIMUM_PEER_ID; + host -> maximumPacketSize = ENET_HOST_DEFAULT_MAXIMUM_PACKET_SIZE; + host -> maximumWaitingData = ENET_HOST_DEFAULT_MAXIMUM_WAITING_DATA; + + host -> compressor.context = NULL; + host -> compressor.compress = NULL; + host -> compressor.decompress = NULL; + host -> compressor.destroy = NULL; + + host -> intercept = NULL; + + enet_list_clear (& host -> dispatchQueue); + + for (currentPeer = host -> peers; + currentPeer < & host -> peers [host -> peerCount]; + ++ currentPeer) + { + currentPeer -> host = host; + currentPeer -> incomingPeerID = currentPeer - host -> peers; + currentPeer -> outgoingSessionID = currentPeer -> incomingSessionID = 0xFF; + currentPeer -> data = NULL; + + enet_list_clear (& currentPeer -> acknowledgements); + enet_list_clear (& currentPeer -> sentReliableCommands); + enet_list_clear (& currentPeer -> sentUnreliableCommands); + enet_list_clear (& currentPeer -> outgoingReliableCommands); + enet_list_clear (& currentPeer -> outgoingUnreliableCommands); + enet_list_clear (& currentPeer -> dispatchedCommands); + + enet_peer_reset (currentPeer); + } + + return host; +} + +/** Destroys the host and all resources associated with it. + @param host pointer to the host to destroy +*/ +void +enet_host_destroy (ENetHost * host) +{ + ENetPeer * currentPeer; + + if (host == NULL) + return; + + enet_socket_destroy (host -> socket); + + for (currentPeer = host -> peers; + currentPeer < & host -> peers [host -> peerCount]; + ++ currentPeer) + { + enet_peer_reset (currentPeer); + } + + if (host -> compressor.context != NULL && host -> compressor.destroy) + (* host -> compressor.destroy) (host -> compressor.context); + + enet_free (host -> peers); + enet_free (host); +} + +/** Initiates a connection to a foreign host. + @param host host seeking the connection + @param address destination for the connection + @param channelCount number of channels to allocate + @param data user data supplied to the receiving host + @returns a peer representing the foreign host on success, NULL on failure + @remarks The peer returned will have not completed the connection until enet_host_service() + notifies of an ENET_EVENT_TYPE_CONNECT event for the peer. +*/ +ENetPeer * +enet_host_connect (ENetHost * host, const ENetAddress * address, size_t channelCount, enet_uint32 data) +{ + ENetPeer * currentPeer; + ENetChannel * channel; + ENetProtocol command; + + if (channelCount < ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT) + channelCount = ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT; + else + if (channelCount > ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT) + channelCount = ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT; + + for (currentPeer = host -> peers; + currentPeer < & host -> peers [host -> peerCount]; + ++ currentPeer) + { + if (currentPeer -> state == ENET_PEER_STATE_DISCONNECTED) + break; + } + + if (currentPeer >= & host -> peers [host -> peerCount]) + return NULL; + + currentPeer -> channels = (ENetChannel *) enet_malloc (channelCount * sizeof (ENetChannel)); + if (currentPeer -> channels == NULL) + return NULL; + currentPeer -> channelCount = channelCount; + currentPeer -> state = ENET_PEER_STATE_CONNECTING; + currentPeer -> address = * address; + currentPeer -> connectID = ++ host -> randomSeed; + + if (host -> outgoingBandwidth == 0) + currentPeer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; + else + currentPeer -> windowSize = (host -> outgoingBandwidth / + ENET_PEER_WINDOW_SIZE_SCALE) * + ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; + + if (currentPeer -> windowSize < ENET_PROTOCOL_MINIMUM_WINDOW_SIZE) + currentPeer -> windowSize = ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; + else + if (currentPeer -> windowSize > ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE) + currentPeer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; + + for (channel = currentPeer -> channels; + channel < & currentPeer -> channels [channelCount]; + ++ channel) + { + channel -> outgoingReliableSequenceNumber = 0; + channel -> outgoingUnreliableSequenceNumber = 0; + channel -> incomingReliableSequenceNumber = 0; + channel -> incomingUnreliableSequenceNumber = 0; + + enet_list_clear (& channel -> incomingReliableCommands); + enet_list_clear (& channel -> incomingUnreliableCommands); + + channel -> usedReliableWindows = 0; + memset (channel -> reliableWindows, 0, sizeof (channel -> reliableWindows)); + } + + command.header.command = ENET_PROTOCOL_COMMAND_CONNECT | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; + command.header.channelID = 0xFF; + command.connect.outgoingPeerID = ENET_HOST_TO_NET_16 (currentPeer -> incomingPeerID); + command.connect.incomingSessionID = currentPeer -> incomingSessionID; + command.connect.outgoingSessionID = currentPeer -> outgoingSessionID; + command.connect.mtu = ENET_HOST_TO_NET_32 (currentPeer -> mtu); + command.connect.windowSize = ENET_HOST_TO_NET_32 (currentPeer -> windowSize); + command.connect.channelCount = ENET_HOST_TO_NET_32 (channelCount); + command.connect.incomingBandwidth = ENET_HOST_TO_NET_32 (host -> incomingBandwidth); + command.connect.outgoingBandwidth = ENET_HOST_TO_NET_32 (host -> outgoingBandwidth); + command.connect.packetThrottleInterval = ENET_HOST_TO_NET_32 (currentPeer -> packetThrottleInterval); + command.connect.packetThrottleAcceleration = ENET_HOST_TO_NET_32 (currentPeer -> packetThrottleAcceleration); + command.connect.packetThrottleDeceleration = ENET_HOST_TO_NET_32 (currentPeer -> packetThrottleDeceleration); + command.connect.connectID = currentPeer -> connectID; + command.connect.data = ENET_HOST_TO_NET_32 (data); + + enet_peer_queue_outgoing_command (currentPeer, & command, NULL, 0, 0); + + return currentPeer; +} + +/** Queues a packet to be sent to all peers associated with the host. + @param host host on which to broadcast the packet + @param channelID channel on which to broadcast + @param packet packet to broadcast +*/ +void +enet_host_broadcast (ENetHost * host, enet_uint8 channelID, ENetPacket * packet) +{ + ENetPeer * currentPeer; + + for (currentPeer = host -> peers; + currentPeer < & host -> peers [host -> peerCount]; + ++ currentPeer) + { + if (currentPeer -> state != ENET_PEER_STATE_CONNECTED) + continue; + + enet_peer_send (currentPeer, channelID, packet); + } + + if (packet -> referenceCount == 0) + enet_packet_destroy (packet); +} + +/** Sets the packet compressor the host should use to compress and decompress packets. + @param host host to enable or disable compression for + @param compressor callbacks for for the packet compressor; if NULL, then compression is disabled +*/ +void +enet_host_compress (ENetHost * host, const ENetCompressor * compressor) +{ + if (host -> compressor.context != NULL && host -> compressor.destroy) + (* host -> compressor.destroy) (host -> compressor.context); + + if (compressor) + host -> compressor = * compressor; + else + host -> compressor.context = NULL; +} + +/** Limits the maximum allowed channels of future incoming connections. + @param host host to limit + @param channelLimit the maximum number of channels allowed; if 0, then this is equivalent to ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT +*/ +void +enet_host_channel_limit (ENetHost * host, size_t channelLimit) +{ + if (! channelLimit || channelLimit > ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT) + channelLimit = ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT; + else + if (channelLimit < ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT) + channelLimit = ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT; + + host -> channelLimit = channelLimit; +} + + +/** Adjusts the bandwidth limits of a host. + @param host host to adjust + @param incomingBandwidth new incoming bandwidth + @param outgoingBandwidth new outgoing bandwidth + @remarks the incoming and outgoing bandwidth parameters are identical in function to those + specified in enet_host_create(). +*/ +void +enet_host_bandwidth_limit (ENetHost * host, enet_uint32 incomingBandwidth, enet_uint32 outgoingBandwidth) +{ + host -> incomingBandwidth = incomingBandwidth; + host -> outgoingBandwidth = outgoingBandwidth; + host -> recalculateBandwidthLimits = 1; +} + +void +enet_host_bandwidth_throttle (ENetHost * host) +{ + enet_uint32 timeCurrent = enet_time_get (), + elapsedTime = timeCurrent - host -> bandwidthThrottleEpoch, + peersRemaining = (enet_uint32) host -> connectedPeers, + dataTotal = ~0, + bandwidth = ~0, + throttle = 0, + bandwidthLimit = 0; + int needsAdjustment = host -> bandwidthLimitedPeers > 0 ? 1 : 0; + ENetPeer * peer; + ENetProtocol command; + + if (elapsedTime < ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL) + return; + + host -> bandwidthThrottleEpoch = timeCurrent; + + if (peersRemaining == 0) + return; + + if (host -> outgoingBandwidth != 0) + { + dataTotal = 0; + bandwidth = (host -> outgoingBandwidth * elapsedTime) / 1000; + + for (peer = host -> peers; + peer < & host -> peers [host -> peerCount]; + ++ peer) + { + if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) + continue; + + dataTotal += peer -> outgoingDataTotal; + } + } + + while (peersRemaining > 0 && needsAdjustment != 0) + { + needsAdjustment = 0; + + if (dataTotal <= bandwidth) + throttle = ENET_PEER_PACKET_THROTTLE_SCALE; + else + throttle = (bandwidth * ENET_PEER_PACKET_THROTTLE_SCALE) / dataTotal; + + for (peer = host -> peers; + peer < & host -> peers [host -> peerCount]; + ++ peer) + { + enet_uint32 peerBandwidth; + + if ((peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) || + peer -> incomingBandwidth == 0 || + peer -> outgoingBandwidthThrottleEpoch == timeCurrent) + continue; + + peerBandwidth = (peer -> incomingBandwidth * elapsedTime) / 1000; + if ((throttle * peer -> outgoingDataTotal) / ENET_PEER_PACKET_THROTTLE_SCALE <= peerBandwidth) + continue; + + peer -> packetThrottleLimit = (peerBandwidth * + ENET_PEER_PACKET_THROTTLE_SCALE) / peer -> outgoingDataTotal; + + if (peer -> packetThrottleLimit == 0) + peer -> packetThrottleLimit = 1; + + if (peer -> packetThrottle > peer -> packetThrottleLimit) + peer -> packetThrottle = peer -> packetThrottleLimit; + + peer -> outgoingBandwidthThrottleEpoch = timeCurrent; + + peer -> incomingDataTotal = 0; + peer -> outgoingDataTotal = 0; + + needsAdjustment = 1; + -- peersRemaining; + bandwidth -= peerBandwidth; + dataTotal -= peerBandwidth; + } + } + + if (peersRemaining > 0) + { + if (dataTotal <= bandwidth) + throttle = ENET_PEER_PACKET_THROTTLE_SCALE; + else + throttle = (bandwidth * ENET_PEER_PACKET_THROTTLE_SCALE) / dataTotal; + + for (peer = host -> peers; + peer < & host -> peers [host -> peerCount]; + ++ peer) + { + if ((peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) || + peer -> outgoingBandwidthThrottleEpoch == timeCurrent) + continue; + + peer -> packetThrottleLimit = throttle; + + if (peer -> packetThrottle > peer -> packetThrottleLimit) + peer -> packetThrottle = peer -> packetThrottleLimit; + + peer -> incomingDataTotal = 0; + peer -> outgoingDataTotal = 0; + } + } + + if (host -> recalculateBandwidthLimits) + { + host -> recalculateBandwidthLimits = 0; + + peersRemaining = (enet_uint32) host -> connectedPeers; + bandwidth = host -> incomingBandwidth; + needsAdjustment = 1; + + if (bandwidth == 0) + bandwidthLimit = 0; + else + while (peersRemaining > 0 && needsAdjustment != 0) + { + needsAdjustment = 0; + bandwidthLimit = bandwidth / peersRemaining; + + for (peer = host -> peers; + peer < & host -> peers [host -> peerCount]; + ++ peer) + { + if ((peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) || + peer -> incomingBandwidthThrottleEpoch == timeCurrent) + continue; + + if (peer -> outgoingBandwidth > 0 && + peer -> outgoingBandwidth >= bandwidthLimit) + continue; + + peer -> incomingBandwidthThrottleEpoch = timeCurrent; + + needsAdjustment = 1; + -- peersRemaining; + bandwidth -= peer -> outgoingBandwidth; + } + } + + for (peer = host -> peers; + peer < & host -> peers [host -> peerCount]; + ++ peer) + { + if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) + continue; + + command.header.command = ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; + command.header.channelID = 0xFF; + command.bandwidthLimit.outgoingBandwidth = ENET_HOST_TO_NET_32 (host -> outgoingBandwidth); + + if (peer -> incomingBandwidthThrottleEpoch == timeCurrent) + command.bandwidthLimit.incomingBandwidth = ENET_HOST_TO_NET_32 (peer -> outgoingBandwidth); + else + command.bandwidthLimit.incomingBandwidth = ENET_HOST_TO_NET_32 (bandwidthLimit); + + enet_peer_queue_outgoing_command (peer, & command, NULL, 0, 0); + } + } +} + +/** @} */ diff --git a/modules/enet/list.c b/modules/enet/list.c new file mode 100644 index 0000000000..1c1a8dfaaf --- /dev/null +++ b/modules/enet/list.c @@ -0,0 +1,75 @@ +/** + @file list.c + @brief ENet linked list functions +*/ +#define ENET_BUILDING_LIB 1 +#include "enet/enet.h" + +/** + @defgroup list ENet linked list utility functions + @ingroup private + @{ +*/ +void +enet_list_clear (ENetList * list) +{ + list -> sentinel.next = & list -> sentinel; + list -> sentinel.previous = & list -> sentinel; +} + +ENetListIterator +enet_list_insert (ENetListIterator position, void * data) +{ + ENetListIterator result = (ENetListIterator) data; + + result -> previous = position -> previous; + result -> next = position; + + result -> previous -> next = result; + position -> previous = result; + + return result; +} + +void * +enet_list_remove (ENetListIterator position) +{ + position -> previous -> next = position -> next; + position -> next -> previous = position -> previous; + + return position; +} + +ENetListIterator +enet_list_move (ENetListIterator position, void * dataFirst, void * dataLast) +{ + ENetListIterator first = (ENetListIterator) dataFirst, + last = (ENetListIterator) dataLast; + + first -> previous -> next = last -> next; + last -> next -> previous = first -> previous; + + first -> previous = position -> previous; + last -> next = position; + + first -> previous -> next = first; + position -> previous = last; + + return first; +} + +size_t +enet_list_size (ENetList * list) +{ + size_t size = 0; + ENetListIterator position; + + for (position = enet_list_begin (list); + position != enet_list_end (list); + position = enet_list_next (position)) + ++ size; + + return size; +} + +/** @} */ diff --git a/modules/enet/networked_multiplayer_enet.cpp b/modules/enet/networked_multiplayer_enet.cpp new file mode 100644 index 0000000000..18a4347edf --- /dev/null +++ b/modules/enet/networked_multiplayer_enet.cpp @@ -0,0 +1,650 @@ +#include "os/os.h" +#include "io/marshalls.h" +#include "networked_multiplayer_enet.h" + +void NetworkedMultiplayerENet::set_transfer_mode(TransferMode p_mode) { + + transfer_mode=p_mode; +} + +void NetworkedMultiplayerENet::set_target_peer(int p_peer){ + + target_peer=p_peer; +} + +int NetworkedMultiplayerENet::get_packet_peer() const{ + + ERR_FAIL_COND_V(!active,1); + ERR_FAIL_COND_V(incoming_packets.size()==0,1); + + return incoming_packets.front()->get().from; + +} + +Error NetworkedMultiplayerENet::create_server(int p_port, int p_max_clients, int p_in_bandwidth, int p_out_bandwidth){ + + ERR_FAIL_COND_V(active,ERR_ALREADY_IN_USE); + + ENetAddress address; + address.host = bind_ip; + + address.port = p_port; + + host = enet_host_create (& address /* the address to bind the server host to */, + p_max_clients /* allow up to 32 clients and/or outgoing connections */, + 2 /* allow up to 2 channels to be used, 0 and 1 */, + p_in_bandwidth /* assume any amount of incoming bandwidth */, + p_out_bandwidth /* assume any amount of outgoing bandwidth */); + + ERR_FAIL_COND_V(!host,ERR_CANT_CREATE); + + _setup_compressor(); + active=true; + server=true; + refuse_connections=false; + unique_id=1; + connection_status=CONNECTION_CONNECTED; + return OK; +} +Error NetworkedMultiplayerENet::create_client(const IP_Address& p_ip, int p_port, int p_in_bandwidth, int p_out_bandwidth){ + + ERR_FAIL_COND_V(active,ERR_ALREADY_IN_USE); + + host = enet_host_create (NULL /* create a client host */, + 1 /* only allow 1 outgoing connection */, + 2 /* allow up 2 channels to be used, 0 and 1 */, + p_in_bandwidth /* 56K modem with 56 Kbps downstream bandwidth */, + p_out_bandwidth /* 56K modem with 14 Kbps upstream bandwidth */); + + ERR_FAIL_COND_V(!host,ERR_CANT_CREATE); + + + _setup_compressor(); + + ENetAddress address; + address.host=p_ip.host; + address.port=p_port; + + //enet_address_set_host (& address, "localhost"); + //address.port = p_port; + + unique_id=_gen_unique_id(); + + /* Initiate the connection, allocating the two channels 0 and 1. */ + ENetPeer *peer = enet_host_connect (host, & address, 2, unique_id); + + if (peer == NULL) { + enet_host_destroy(host); + ERR_FAIL_COND_V(!peer,ERR_CANT_CREATE); + } + + //technically safe to ignore the peer or anything else. + + connection_status=CONNECTION_CONNECTING; + active=true; + server=false; + refuse_connections=false; + + return OK; +} + +void NetworkedMultiplayerENet::poll(){ + + ERR_FAIL_COND(!active); + + _pop_current_packet(); + + ENetEvent event; + /* Wait up to 1000 milliseconds for an event. */ + while (true) { + + if (!host || !active) //might have been disconnected while emitting a notification + return; + + int ret = enet_host_service (host, & event, 1); + + if (ret<0) { + //error, do something? + break; + } else if (ret==0) { + break; + } + + switch (event.type) + { + case ENET_EVENT_TYPE_CONNECT: { + /* Store any relevant client information here. */ + + if (server && refuse_connections) { + enet_peer_reset(event.peer); + break; + } + + IP_Address ip; + ip.host=event.peer -> address.host; + + int *new_id = memnew( int ); + *new_id = event.data; + + if (*new_id==0) { //data zero is sent by server (enet won't let you configure this). Server is always 1 + *new_id=1; + } + + event.peer->data=new_id; + + peer_map[*new_id]=event.peer; + + connection_status=CONNECTION_CONNECTED; //if connecting, this means it connected t something! + + emit_signal("peer_connected",*new_id); + + if (server) { + //someone connected, let it know of all the peers available + for (Map<int,ENetPeer*>::Element *E=peer_map.front();E;E=E->next()) { + + if (E->key()==*new_id) + continue; + //send existing peers to new peer + ENetPacket * packet = enet_packet_create (NULL,8,ENET_PACKET_FLAG_RELIABLE); + encode_uint32(SYSMSG_ADD_PEER,&packet->data[0]); + encode_uint32(E->key(),&packet->data[4]); + enet_peer_send(event.peer,1,packet); + //send the new peer to existing peers + packet = enet_packet_create (NULL,8,ENET_PACKET_FLAG_RELIABLE); + encode_uint32(SYSMSG_ADD_PEER,&packet->data[0]); + encode_uint32(*new_id,&packet->data[4]); + enet_peer_send(E->get(),1,packet); + } + } else { + + emit_signal("connection_succeeded"); + } + + } break; + case ENET_EVENT_TYPE_DISCONNECT: { + + /* Reset the peer's client information. */ + + int *id = (int*)event.peer -> data; + + + + if (!id) { + if (!server) { + emit_signal("connection_failed"); + } + } else { + + if (server) { + //someone disconnected, let it know to everyone else + for (Map<int,ENetPeer*>::Element *E=peer_map.front();E;E=E->next()) { + + if (E->key()==*id) + continue; + //send the new peer to existing peers + ENetPacket* packet = enet_packet_create (NULL,8,ENET_PACKET_FLAG_RELIABLE); + encode_uint32(SYSMSG_REMOVE_PEER,&packet->data[0]); + encode_uint32(*id,&packet->data[4]); + enet_peer_send(E->get(),1,packet); + } + } else if (!server) { + emit_signal("server_disconnected"); + close_connection(); + return; + } + + emit_signal("peer_disconnected",*id); + peer_map.erase(*id); + memdelete( id ); + + } + + + } break; + case ENET_EVENT_TYPE_RECEIVE: { + + + if (event.channelID==1) { + //some config message + ERR_CONTINUE( event.packet->dataLength < 8); + + int msg = decode_uint32(&event.packet->data[0]); + int id = decode_uint32(&event.packet->data[4]); + + switch(msg) { + case SYSMSG_ADD_PEER: { + + peer_map[id]=NULL; + emit_signal("peer_connected",id); + + } break; + case SYSMSG_REMOVE_PEER: { + + peer_map.erase(id); + emit_signal("peer_disconnected",id); + } break; + } + + enet_packet_destroy(event.packet); + } else if (event.channelID==0){ + + Packet packet; + packet.packet = event.packet; + + int *id = (int*)event.peer -> data; + + ERR_CONTINUE(event.packet->dataLength<12) + + + uint32_t source = decode_uint32(&event.packet->data[0]); + int target = decode_uint32(&event.packet->data[4]); + uint32_t flags = decode_uint32(&event.packet->data[8]); + + packet.from=source; + + if (server) { + + packet.from=*id; + + if (target==0) { + //re-send the everyone but sender :| + + incoming_packets.push_back(packet); + //and make copies for sending + for (Map<int,ENetPeer*>::Element *E=peer_map.front();E;E=E->next()) { + + if (uint32_t(E->key())==source) //do not resend to self + continue; + + ENetPacket* packet2 = enet_packet_create (packet.packet->data,packet.packet->dataLength,flags); + + enet_peer_send(E->get(),0,packet2); + } + + } else if (target<0) { + //to all but one + + //and make copies for sending + for (Map<int,ENetPeer*>::Element *E=peer_map.front();E;E=E->next()) { + + if (uint32_t(E->key())==source || E->key()==-target) //do not resend to self, also do not send to excluded + continue; + + ENetPacket* packet2 = enet_packet_create (packet.packet->data,packet.packet->dataLength,flags); + + enet_peer_send(E->get(),0,packet2); + } + + if (-target != 1) { + //server is not excluded + incoming_packets.push_back(packet); + } else { + //server is excluded, erase packet + enet_packet_destroy(packet.packet); + } + + } else if (target==1) { + //to myself and only myself + incoming_packets.push_back(packet); + } else { + //to someone else, specifically + ERR_CONTINUE(!peer_map.has(target)); + enet_peer_send(peer_map[target],0,packet.packet); + } + } else { + + incoming_packets.push_back(packet); + } + + + //destroy packet later.. + } else { + ERR_CONTINUE(true); + } + + + }break; + case ENET_EVENT_TYPE_NONE: { + //do nothing + } break; + } + } +} + +bool NetworkedMultiplayerENet::is_server() const { + ERR_FAIL_COND_V(!active,false); + + return server; +} + +void NetworkedMultiplayerENet::close_connection() { + + if (!active) + return; + + _pop_current_packet(); + + bool peers_disconnected=false; + for (Map<int,ENetPeer*>::Element *E=peer_map.front();E;E=E->next()) { + if (E->get()) { + enet_peer_disconnect_now(E->get(),unique_id); + peers_disconnected=true; + } + } + + if (peers_disconnected) { + enet_host_flush(host); + OS::get_singleton()->delay_usec(100); //wait 100ms for disconnection packets to send + + } + + enet_host_destroy(host); + active=false; + incoming_packets.clear(); + unique_id=1; //server is 1 + connection_status=CONNECTION_DISCONNECTED; +} + +int NetworkedMultiplayerENet::get_available_packet_count() const { + + return incoming_packets.size(); +} +Error NetworkedMultiplayerENet::get_packet(const uint8_t **r_buffer,int &r_buffer_size) const{ + + ERR_FAIL_COND_V(incoming_packets.size()==0,ERR_UNAVAILABLE); + + _pop_current_packet(); + + current_packet = incoming_packets.front()->get(); + incoming_packets.pop_front(); + + *r_buffer=(const uint8_t*)(¤t_packet.packet->data[12]); + r_buffer_size=current_packet.packet->dataLength; + + return OK; +} +Error NetworkedMultiplayerENet::put_packet(const uint8_t *p_buffer,int p_buffer_size){ + + ERR_FAIL_COND_V(!active,ERR_UNCONFIGURED); + ERR_FAIL_COND_V(connection_status!=CONNECTION_CONNECTED,ERR_UNCONFIGURED); + + int packet_flags=0; + + switch(transfer_mode) { + case TRANSFER_MODE_UNRELIABLE: { + packet_flags=ENET_PACKET_FLAG_UNSEQUENCED; + } break; + case TRANSFER_MODE_UNRELIABLE_ORDERED: { + packet_flags=0; + } break; + case TRANSFER_MODE_RELIABLE: { + packet_flags=ENET_PACKET_FLAG_RELIABLE; + } break; + } + + Map<int,ENetPeer*>::Element *E=NULL; + + if (target_peer!=0) { + + E = peer_map.find(ABS(target_peer)); + if (!E) { + ERR_EXPLAIN("Invalid Target Peer: "+itos(target_peer)); + ERR_FAIL_V(ERR_INVALID_PARAMETER); + } + } + + ENetPacket * packet = enet_packet_create (NULL,p_buffer_size+12,packet_flags); + encode_uint32(unique_id,&packet->data[0]); //source ID + encode_uint32(target_peer,&packet->data[4]); //dest ID + encode_uint32(packet_flags,&packet->data[8]); //dest ID + copymem(&packet->data[12],p_buffer,p_buffer_size); + + if (server) { + + if (target_peer==0) { + enet_host_broadcast(host,0,packet); + } else if (target_peer<0) { + //send to all but one + //and make copies for sending + + int exclude=-target_peer; + + for (Map<int,ENetPeer*>::Element *F=peer_map.front();F;F=F->next()) { + + if (F->key()==exclude) // exclude packet + continue; + + ENetPacket* packet2 = enet_packet_create (packet->data,packet->dataLength,packet_flags); + + enet_peer_send(F->get(),0,packet2); + } + + enet_packet_destroy(packet); //original packet no longer needed + } else { + enet_peer_send (E->get(), 0, packet); + + } + } else { + + ERR_FAIL_COND_V(!peer_map.has(1),ERR_BUG); + enet_peer_send (peer_map[1], 0, packet); //send to server for broadcast.. + + } + + enet_host_flush(host); + + return OK; +} + +int NetworkedMultiplayerENet::get_max_packet_size() const { + + return 1<<24; //anything is good +} + +void NetworkedMultiplayerENet::_pop_current_packet() const { + + if (current_packet.packet) { + enet_packet_destroy(current_packet.packet); + current_packet.packet=NULL; + current_packet.from=0; + } + +} + +NetworkedMultiplayerPeer::ConnectionStatus NetworkedMultiplayerENet::get_connection_status() const { + + return connection_status; +} + +uint32_t NetworkedMultiplayerENet::_gen_unique_id() const { + + uint32_t hash = 0; + + while (hash==0 || hash==1) { + + hash = hash_djb2_one_32( + (uint32_t)OS::get_singleton()->get_ticks_usec() ); + hash = hash_djb2_one_32( + (uint32_t)OS::get_singleton()->get_unix_time(), hash ); + hash = hash_djb2_one_32( + (uint32_t)OS::get_singleton()->get_data_dir().hash64(), hash ); + //hash = hash_djb2_one_32( + // (uint32_t)OS::get_singleton()->get_unique_ID().hash64(), hash ); + hash = hash_djb2_one_32( + (uint32_t)((uint64_t)this), hash ); //rely on aslr heap + hash = hash_djb2_one_32( + (uint32_t)((uint64_t)&hash), hash ); //rely on aslr stack + + hash=hash&0x7FFFFFFF; // make it compatible with unsigned, since negatie id is used for exclusion + } + + return hash; +} + +int NetworkedMultiplayerENet::get_unique_id() const { + + ERR_FAIL_COND_V(!active,0); + return unique_id; +} + +void NetworkedMultiplayerENet::set_refuse_new_connections(bool p_enable) { + + refuse_connections=p_enable; +} + +bool NetworkedMultiplayerENet::is_refusing_new_connections() const { + + return refuse_connections; +} + +void NetworkedMultiplayerENet::set_compression_mode(CompressionMode p_mode) { + + compression_mode=p_mode; +} + +NetworkedMultiplayerENet::CompressionMode NetworkedMultiplayerENet::get_compression_mode() const{ + + return compression_mode; +} + +size_t NetworkedMultiplayerENet::enet_compress(void * context, const ENetBuffer * inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 * outData, size_t outLimit) { + + NetworkedMultiplayerENet *enet = (NetworkedMultiplayerENet*)(context); + + if (size_t(enet->src_compressor_mem.size())<inLimit) { + enet->src_compressor_mem.resize( inLimit ); + } + + int total = inLimit; + int ofs=0; + while(total) { + for(size_t i=0;i<inBufferCount;i++) { + int to_copy = MIN(total,int(inBuffers[i].dataLength)); + copymem(&enet->src_compressor_mem[ofs],inBuffers[i].data,to_copy); + ofs+=to_copy; + total-=to_copy; + } + } + + Compression::Mode mode; + + switch(enet->compression_mode) { + case COMPRESS_FASTLZ: { + mode=Compression::MODE_FASTLZ; + } break; + case COMPRESS_ZLIB: { + mode=Compression::MODE_DEFLATE; + } break; + default: { ERR_FAIL_V(0); } + } + + int req_size = Compression::get_max_compressed_buffer_size(ofs,mode); + if (enet->dst_compressor_mem.size()<req_size) { + enet->dst_compressor_mem.resize(req_size); + } + int ret=Compression::compress(enet->dst_compressor_mem.ptr(),enet->src_compressor_mem.ptr(),ofs,mode); + + if (ret<0) + return 0; + + + if (ret>int(outLimit)) + return 0; //do not bother + + copymem(outData,enet->dst_compressor_mem.ptr(),ret); + + return ret; +} + +size_t NetworkedMultiplayerENet::enet_decompress (void * context, const enet_uint8 * inData, size_t inLimit, enet_uint8 * outData, size_t outLimit){ + + NetworkedMultiplayerENet *enet = (NetworkedMultiplayerENet*)(context); + int ret = -1; + switch(enet->compression_mode) { + case COMPRESS_FASTLZ: { + + ret=Compression::decompress(outData,outLimit,inData,inLimit,Compression::MODE_FASTLZ); + } break; + case COMPRESS_ZLIB: { + + ret=Compression::decompress(outData,outLimit,inData,inLimit,Compression::MODE_DEFLATE); + } break; + default: {} + } + if (ret<0) { + return 0; + } else { + return ret; + } +} + +void NetworkedMultiplayerENet::_setup_compressor() { + + switch(compression_mode) { + + case COMPRESS_NONE: { + + enet_host_compress(host,NULL); + } break; + case COMPRESS_RANGE_CODER: { + enet_host_compress_with_range_coder(host); + } break; + case COMPRESS_FASTLZ: + case COMPRESS_ZLIB: { + + enet_host_compress(host,&enet_compressor); + } break; + } +} + +void NetworkedMultiplayerENet::enet_compressor_destroy(void * context){ + + //do none +} + + +void NetworkedMultiplayerENet::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("create_server","port","max_clients","in_bandwidth","out_bandwidth"),&NetworkedMultiplayerENet::create_server,DEFVAL(32),DEFVAL(0),DEFVAL(0)); + ObjectTypeDB::bind_method(_MD("create_client","ip","port","in_bandwidth","out_bandwidth"),&NetworkedMultiplayerENet::create_client,DEFVAL(0),DEFVAL(0)); + ObjectTypeDB::bind_method(_MD("close_connection"),&NetworkedMultiplayerENet::close_connection); + ObjectTypeDB::bind_method(_MD("set_compression_mode","mode"),&NetworkedMultiplayerENet::set_compression_mode); + ObjectTypeDB::bind_method(_MD("get_compression_mode"),&NetworkedMultiplayerENet::get_compression_mode); + ObjectTypeDB::bind_method(_MD("set_bind_ip", "ip"),&NetworkedMultiplayerENet::set_bind_ip); + + BIND_CONSTANT( COMPRESS_NONE ); + BIND_CONSTANT( COMPRESS_RANGE_CODER ); + BIND_CONSTANT( COMPRESS_FASTLZ ); + BIND_CONSTANT( COMPRESS_ZLIB ); +} + + +NetworkedMultiplayerENet::NetworkedMultiplayerENet(){ + + active=false; + server=false; + refuse_connections=false; + unique_id=0; + target_peer=0; + current_packet.packet=NULL; + transfer_mode=TRANSFER_MODE_RELIABLE; + connection_status=CONNECTION_DISCONNECTED; + compression_mode=COMPRESS_NONE; + enet_compressor.context=this; + enet_compressor.compress=enet_compress; + enet_compressor.decompress=enet_decompress; + enet_compressor.destroy=enet_compressor_destroy; + + bind_ip=ENET_HOST_ANY; +} + +NetworkedMultiplayerENet::~NetworkedMultiplayerENet(){ + + close_connection(); +} + +// sets IP for ENet to bind when using create_server +// if no IP is set, then ENet bind to ENET_HOST_ANY +void NetworkedMultiplayerENet::set_bind_ip(const IP_Address& p_ip){ + bind_ip=p_ip.host; +} diff --git a/modules/enet/networked_multiplayer_enet.h b/modules/enet/networked_multiplayer_enet.h new file mode 100644 index 0000000000..59863c1f78 --- /dev/null +++ b/modules/enet/networked_multiplayer_enet.h @@ -0,0 +1,114 @@ +#ifndef NETWORKED_MULTIPLAYER_ENET_H +#define NETWORKED_MULTIPLAYER_ENET_H + +#include "io/networked_multiplayer_peer.h" +#include "enet/enet.h" +#include "io/compression.h" + +class NetworkedMultiplayerENet : public NetworkedMultiplayerPeer { + + OBJ_TYPE(NetworkedMultiplayerENet,NetworkedMultiplayerPeer) +public: + enum CompressionMode { + COMPRESS_NONE, + COMPRESS_RANGE_CODER, + COMPRESS_FASTLZ, + COMPRESS_ZLIB + }; +private: + + + enum { + SYSMSG_ADD_PEER, + SYSMSG_REMOVE_PEER + }; + + bool active; + bool server; + + uint32_t unique_id; + + int target_peer; + TransferMode transfer_mode; + + ENetEvent event; + ENetPeer *peer; + ENetHost *host; + + bool refuse_connections; + + ConnectionStatus connection_status; + + Map<int,ENetPeer*> peer_map; + + struct Packet { + + ENetPacket *packet; + int from; + }; + + CompressionMode compression_mode; + + mutable List<Packet> incoming_packets; + + mutable Packet current_packet; + + uint32_t _gen_unique_id() const; + void _pop_current_packet() const; + + Vector<uint8_t> src_compressor_mem; + Vector<uint8_t> dst_compressor_mem; + + ENetCompressor enet_compressor; + static size_t enet_compress(void * context, const ENetBuffer * inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 * outData, size_t outLimit); + static size_t enet_decompress (void * context, const enet_uint8 * inData, size_t inLimit, enet_uint8 * outData, size_t outLimit); + static void enet_compressor_destroy(void * context); + void _setup_compressor(); + + enet_uint32 bind_ip; +protected: + static void _bind_methods(); +public: + + virtual void set_transfer_mode(TransferMode p_mode); + virtual void set_target_peer(int p_peer); + + + virtual int get_packet_peer() const; + + + Error create_server(int p_port, int p_max_peers=32, int p_in_bandwidth=0, int p_out_bandwidth=0); + Error create_client(const IP_Address& p_ip, int p_port, int p_in_bandwidth=0, int p_out_bandwidth=0); + + void close_connection(); + + virtual void poll(); + + virtual bool is_server() const; + + virtual int get_available_packet_count() const; + virtual Error get_packet(const uint8_t **r_buffer,int &r_buffer_size) const; ///< buffer is GONE after next get_packet + virtual Error put_packet(const uint8_t *p_buffer,int p_buffer_size); + + virtual int get_max_packet_size() const; + + virtual ConnectionStatus get_connection_status() const; + + virtual void set_refuse_new_connections(bool p_enable); + virtual bool is_refusing_new_connections() const; + + virtual int get_unique_id() const; + + void set_compression_mode(CompressionMode p_mode); + CompressionMode get_compression_mode() const; + + NetworkedMultiplayerENet(); + ~NetworkedMultiplayerENet(); + + void set_bind_ip(const IP_Address& p_ip); +}; + +VARIANT_ENUM_CAST(NetworkedMultiplayerENet::CompressionMode); + + +#endif // NETWORKED_MULTIPLAYER_ENET_H diff --git a/modules/enet/packet.c b/modules/enet/packet.c new file mode 100644 index 0000000000..5fa78b28ae --- /dev/null +++ b/modules/enet/packet.c @@ -0,0 +1,165 @@ +/** + @file packet.c + @brief ENet packet management functions +*/ +#include <string.h> +#define ENET_BUILDING_LIB 1 +#include "enet/enet.h" + +/** @defgroup Packet ENet packet functions + @{ +*/ + +/** Creates a packet that may be sent to a peer. + @param data initial contents of the packet's data; the packet's data will remain uninitialized if data is NULL. + @param dataLength size of the data allocated for this packet + @param flags flags for this packet as described for the ENetPacket structure. + @returns the packet on success, NULL on failure +*/ +ENetPacket * +enet_packet_create (const void * data, size_t dataLength, enet_uint32 flags) +{ + ENetPacket * packet = (ENetPacket *) enet_malloc (sizeof (ENetPacket)); + if (packet == NULL) + return NULL; + + if (flags & ENET_PACKET_FLAG_NO_ALLOCATE) + packet -> data = (enet_uint8 *) data; + else + if (dataLength <= 0) + packet -> data = NULL; + else + { + packet -> data = (enet_uint8 *) enet_malloc (dataLength); + if (packet -> data == NULL) + { + enet_free (packet); + return NULL; + } + + if (data != NULL) + memcpy (packet -> data, data, dataLength); + } + + packet -> referenceCount = 0; + packet -> flags = flags; + packet -> dataLength = dataLength; + packet -> freeCallback = NULL; + packet -> userData = NULL; + + return packet; +} + +/** Destroys the packet and deallocates its data. + @param packet packet to be destroyed +*/ +void +enet_packet_destroy (ENetPacket * packet) +{ + if (packet == NULL) + return; + + if (packet -> freeCallback != NULL) + (* packet -> freeCallback) (packet); + if (! (packet -> flags & ENET_PACKET_FLAG_NO_ALLOCATE) && + packet -> data != NULL) + enet_free (packet -> data); + enet_free (packet); +} + +/** Attempts to resize the data in the packet to length specified in the + dataLength parameter + @param packet packet to resize + @param dataLength new size for the packet data + @returns 0 on success, < 0 on failure +*/ +int +enet_packet_resize (ENetPacket * packet, size_t dataLength) +{ + enet_uint8 * newData; + + if (dataLength <= packet -> dataLength || (packet -> flags & ENET_PACKET_FLAG_NO_ALLOCATE)) + { + packet -> dataLength = dataLength; + + return 0; + } + + newData = (enet_uint8 *) enet_malloc (dataLength); + if (newData == NULL) + return -1; + + memcpy (newData, packet -> data, packet -> dataLength); + enet_free (packet -> data); + + packet -> data = newData; + packet -> dataLength = dataLength; + + return 0; +} + +static int initializedCRC32 = 0; +static enet_uint32 crcTable [256]; + +static enet_uint32 +reflect_crc (int val, int bits) +{ + int result = 0, bit; + + for (bit = 0; bit < bits; bit ++) + { + if(val & 1) result |= 1 << (bits - 1 - bit); + val >>= 1; + } + + return result; +} + +static void +initialize_crc32 (void) +{ + int byte; + + for (byte = 0; byte < 256; ++ byte) + { + enet_uint32 crc = reflect_crc (byte, 8) << 24; + int offset; + + for(offset = 0; offset < 8; ++ offset) + { + if (crc & 0x80000000) + crc = (crc << 1) ^ 0x04c11db7; + else + crc <<= 1; + } + + crcTable [byte] = reflect_crc (crc, 32); + } + + initializedCRC32 = 1; +} + +enet_uint32 +enet_crc32 (const ENetBuffer * buffers, size_t bufferCount) +{ + enet_uint32 crc = 0xFFFFFFFF; + + if (! initializedCRC32) initialize_crc32 (); + + while (bufferCount -- > 0) + { + const enet_uint8 * data = (const enet_uint8 *) buffers -> data, + * dataEnd = & data [buffers -> dataLength]; + + while (data < dataEnd) + { + crc = (crc >> 8) ^ crcTable [(crc & 0xFF) ^ *data++]; + } + + ++ buffers; + } + + return ENET_HOST_TO_NET_32 (~ crc); +} + +/** @} */ diff --git a/modules/enet/peer.c b/modules/enet/peer.c new file mode 100644 index 0000000000..e2d0872bd3 --- /dev/null +++ b/modules/enet/peer.c @@ -0,0 +1,1004 @@ +/** + @file peer.c + @brief ENet peer management functions +*/ +#include <string.h> +#define ENET_BUILDING_LIB 1 +#include "enet/enet.h" + +/** @defgroup peer ENet peer functions + @{ +*/ + +/** Configures throttle parameter for a peer. + + Unreliable packets are dropped by ENet in response to the varying conditions + of the Internet connection to the peer. The throttle represents a probability + that an unreliable packet should not be dropped and thus sent by ENet to the peer. + The lowest mean round trip time from the sending of a reliable packet to the + receipt of its acknowledgement is measured over an amount of time specified by + the interval parameter in milliseconds. If a measured round trip time happens to + be significantly less than the mean round trip time measured over the interval, + then the throttle probability is increased to allow more traffic by an amount + specified in the acceleration parameter, which is a ratio to the ENET_PEER_PACKET_THROTTLE_SCALE + constant. If a measured round trip time happens to be significantly greater than + the mean round trip time measured over the interval, then the throttle probability + is decreased to limit traffic by an amount specified in the deceleration parameter, which + is a ratio to the ENET_PEER_PACKET_THROTTLE_SCALE constant. When the throttle has + a value of ENET_PEER_PACKET_THROTTLE_SCALE, no unreliable packets are dropped by + ENet, and so 100% of all unreliable packets will be sent. When the throttle has a + value of 0, all unreliable packets are dropped by ENet, and so 0% of all unreliable + packets will be sent. Intermediate values for the throttle represent intermediate + probabilities between 0% and 100% of unreliable packets being sent. The bandwidth + limits of the local and foreign hosts are taken into account to determine a + sensible limit for the throttle probability above which it should not raise even in + the best of conditions. + + @param peer peer to configure + @param interval interval, in milliseconds, over which to measure lowest mean RTT; the default value is ENET_PEER_PACKET_THROTTLE_INTERVAL. + @param acceleration rate at which to increase the throttle probability as mean RTT declines + @param deceleration rate at which to decrease the throttle probability as mean RTT increases +*/ +void +enet_peer_throttle_configure (ENetPeer * peer, enet_uint32 interval, enet_uint32 acceleration, enet_uint32 deceleration) +{ + ENetProtocol command; + + peer -> packetThrottleInterval = interval; + peer -> packetThrottleAcceleration = acceleration; + peer -> packetThrottleDeceleration = deceleration; + + command.header.command = ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; + command.header.channelID = 0xFF; + + command.throttleConfigure.packetThrottleInterval = ENET_HOST_TO_NET_32 (interval); + command.throttleConfigure.packetThrottleAcceleration = ENET_HOST_TO_NET_32 (acceleration); + command.throttleConfigure.packetThrottleDeceleration = ENET_HOST_TO_NET_32 (deceleration); + + enet_peer_queue_outgoing_command (peer, & command, NULL, 0, 0); +} + +int +enet_peer_throttle (ENetPeer * peer, enet_uint32 rtt) +{ + if (peer -> lastRoundTripTime <= peer -> lastRoundTripTimeVariance) + { + peer -> packetThrottle = peer -> packetThrottleLimit; + } + else + if (rtt < peer -> lastRoundTripTime) + { + peer -> packetThrottle += peer -> packetThrottleAcceleration; + + if (peer -> packetThrottle > peer -> packetThrottleLimit) + peer -> packetThrottle = peer -> packetThrottleLimit; + + return 1; + } + else + if (rtt > peer -> lastRoundTripTime + 2 * peer -> lastRoundTripTimeVariance) + { + if (peer -> packetThrottle > peer -> packetThrottleDeceleration) + peer -> packetThrottle -= peer -> packetThrottleDeceleration; + else + peer -> packetThrottle = 0; + + return -1; + } + + return 0; +} + +/** Queues a packet to be sent. + @param peer destination for the packet + @param channelID channel on which to send + @param packet packet to send + @retval 0 on success + @retval < 0 on failure +*/ +int +enet_peer_send (ENetPeer * peer, enet_uint8 channelID, ENetPacket * packet) +{ + ENetChannel * channel = & peer -> channels [channelID]; + ENetProtocol command; + size_t fragmentLength; + + if (peer -> state != ENET_PEER_STATE_CONNECTED || + channelID >= peer -> channelCount || + packet -> dataLength > peer -> host -> maximumPacketSize) + return -1; + + fragmentLength = peer -> mtu - sizeof (ENetProtocolHeader) - sizeof (ENetProtocolSendFragment); + if (peer -> host -> checksum != NULL) + fragmentLength -= sizeof(enet_uint32); + + if (packet -> dataLength > fragmentLength) + { + enet_uint32 fragmentCount = (packet -> dataLength + fragmentLength - 1) / fragmentLength, + fragmentNumber, + fragmentOffset; + enet_uint8 commandNumber; + enet_uint16 startSequenceNumber; + ENetList fragments; + ENetOutgoingCommand * fragment; + + if (fragmentCount > ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT) + return -1; + + if ((packet -> flags & (ENET_PACKET_FLAG_RELIABLE | ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT)) == ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT && + channel -> outgoingUnreliableSequenceNumber < 0xFFFF) + { + commandNumber = ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT; + startSequenceNumber = ENET_HOST_TO_NET_16 (channel -> outgoingUnreliableSequenceNumber + 1); + } + else + { + commandNumber = ENET_PROTOCOL_COMMAND_SEND_FRAGMENT | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; + startSequenceNumber = ENET_HOST_TO_NET_16 (channel -> outgoingReliableSequenceNumber + 1); + } + + enet_list_clear (& fragments); + + for (fragmentNumber = 0, + fragmentOffset = 0; + fragmentOffset < packet -> dataLength; + ++ fragmentNumber, + fragmentOffset += fragmentLength) + { + if (packet -> dataLength - fragmentOffset < fragmentLength) + fragmentLength = packet -> dataLength - fragmentOffset; + + fragment = (ENetOutgoingCommand *) enet_malloc (sizeof (ENetOutgoingCommand)); + if (fragment == NULL) + { + while (! enet_list_empty (& fragments)) + { + fragment = (ENetOutgoingCommand *) enet_list_remove (enet_list_begin (& fragments)); + + enet_free (fragment); + } + + return -1; + } + + fragment -> fragmentOffset = fragmentOffset; + fragment -> fragmentLength = fragmentLength; + fragment -> packet = packet; + fragment -> command.header.command = commandNumber; + fragment -> command.header.channelID = channelID; + fragment -> command.sendFragment.startSequenceNumber = startSequenceNumber; + fragment -> command.sendFragment.dataLength = ENET_HOST_TO_NET_16 (fragmentLength); + fragment -> command.sendFragment.fragmentCount = ENET_HOST_TO_NET_32 (fragmentCount); + fragment -> command.sendFragment.fragmentNumber = ENET_HOST_TO_NET_32 (fragmentNumber); + fragment -> command.sendFragment.totalLength = ENET_HOST_TO_NET_32 (packet -> dataLength); + fragment -> command.sendFragment.fragmentOffset = ENET_NET_TO_HOST_32 (fragmentOffset); + + enet_list_insert (enet_list_end (& fragments), fragment); + } + + packet -> referenceCount += fragmentNumber; + + while (! enet_list_empty (& fragments)) + { + fragment = (ENetOutgoingCommand *) enet_list_remove (enet_list_begin (& fragments)); + + enet_peer_setup_outgoing_command (peer, fragment); + } + + return 0; + } + + command.header.channelID = channelID; + + if ((packet -> flags & (ENET_PACKET_FLAG_RELIABLE | ENET_PACKET_FLAG_UNSEQUENCED)) == ENET_PACKET_FLAG_UNSEQUENCED) + { + command.header.command = ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED | ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED; + command.sendUnsequenced.dataLength = ENET_HOST_TO_NET_16 (packet -> dataLength); + } + else + if (packet -> flags & ENET_PACKET_FLAG_RELIABLE || channel -> outgoingUnreliableSequenceNumber >= 0xFFFF) + { + command.header.command = ENET_PROTOCOL_COMMAND_SEND_RELIABLE | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; + command.sendReliable.dataLength = ENET_HOST_TO_NET_16 (packet -> dataLength); + } + else + { + command.header.command = ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE; + command.sendUnreliable.dataLength = ENET_HOST_TO_NET_16 (packet -> dataLength); + } + + if (enet_peer_queue_outgoing_command (peer, & command, packet, 0, packet -> dataLength) == NULL) + return -1; + + return 0; +} + +/** Attempts to dequeue any incoming queued packet. + @param peer peer to dequeue packets from + @param channelID holds the channel ID of the channel the packet was received on success + @returns a pointer to the packet, or NULL if there are no available incoming queued packets +*/ +ENetPacket * +enet_peer_receive (ENetPeer * peer, enet_uint8 * channelID) +{ + ENetIncomingCommand * incomingCommand; + ENetPacket * packet; + + if (enet_list_empty (& peer -> dispatchedCommands)) + return NULL; + + incomingCommand = (ENetIncomingCommand *) enet_list_remove (enet_list_begin (& peer -> dispatchedCommands)); + + if (channelID != NULL) + * channelID = incomingCommand -> command.header.channelID; + + packet = incomingCommand -> packet; + + -- packet -> referenceCount; + + if (incomingCommand -> fragments != NULL) + enet_free (incomingCommand -> fragments); + + enet_free (incomingCommand); + + peer -> totalWaitingData -= packet -> dataLength; + + return packet; +} + +static void +enet_peer_reset_outgoing_commands (ENetList * queue) +{ + ENetOutgoingCommand * outgoingCommand; + + while (! enet_list_empty (queue)) + { + outgoingCommand = (ENetOutgoingCommand *) enet_list_remove (enet_list_begin (queue)); + + if (outgoingCommand -> packet != NULL) + { + -- outgoingCommand -> packet -> referenceCount; + + if (outgoingCommand -> packet -> referenceCount == 0) + enet_packet_destroy (outgoingCommand -> packet); + } + + enet_free (outgoingCommand); + } +} + +static void +enet_peer_remove_incoming_commands (ENetList * queue, ENetListIterator startCommand, ENetListIterator endCommand) +{ + ENetListIterator currentCommand; + + for (currentCommand = startCommand; currentCommand != endCommand; ) + { + ENetIncomingCommand * incomingCommand = (ENetIncomingCommand *) currentCommand; + + currentCommand = enet_list_next (currentCommand); + + enet_list_remove (& incomingCommand -> incomingCommandList); + + if (incomingCommand -> packet != NULL) + { + -- incomingCommand -> packet -> referenceCount; + + if (incomingCommand -> packet -> referenceCount == 0) + enet_packet_destroy (incomingCommand -> packet); + } + + if (incomingCommand -> fragments != NULL) + enet_free (incomingCommand -> fragments); + + enet_free (incomingCommand); + } +} + +static void +enet_peer_reset_incoming_commands (ENetList * queue) +{ + enet_peer_remove_incoming_commands(queue, enet_list_begin (queue), enet_list_end (queue)); +} + +void +enet_peer_reset_queues (ENetPeer * peer) +{ + ENetChannel * channel; + + if (peer -> needsDispatch) + { + enet_list_remove (& peer -> dispatchList); + + peer -> needsDispatch = 0; + } + + while (! enet_list_empty (& peer -> acknowledgements)) + enet_free (enet_list_remove (enet_list_begin (& peer -> acknowledgements))); + + enet_peer_reset_outgoing_commands (& peer -> sentReliableCommands); + enet_peer_reset_outgoing_commands (& peer -> sentUnreliableCommands); + enet_peer_reset_outgoing_commands (& peer -> outgoingReliableCommands); + enet_peer_reset_outgoing_commands (& peer -> outgoingUnreliableCommands); + enet_peer_reset_incoming_commands (& peer -> dispatchedCommands); + + if (peer -> channels != NULL && peer -> channelCount > 0) + { + for (channel = peer -> channels; + channel < & peer -> channels [peer -> channelCount]; + ++ channel) + { + enet_peer_reset_incoming_commands (& channel -> incomingReliableCommands); + enet_peer_reset_incoming_commands (& channel -> incomingUnreliableCommands); + } + + enet_free (peer -> channels); + } + + peer -> channels = NULL; + peer -> channelCount = 0; +} + +void +enet_peer_on_connect (ENetPeer * peer) +{ + if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) + { + if (peer -> incomingBandwidth != 0) + ++ peer -> host -> bandwidthLimitedPeers; + + ++ peer -> host -> connectedPeers; + } +} + +void +enet_peer_on_disconnect (ENetPeer * peer) +{ + if (peer -> state == ENET_PEER_STATE_CONNECTED || peer -> state == ENET_PEER_STATE_DISCONNECT_LATER) + { + if (peer -> incomingBandwidth != 0) + -- peer -> host -> bandwidthLimitedPeers; + + -- peer -> host -> connectedPeers; + } +} + +/** Forcefully disconnects a peer. + @param peer peer to forcefully disconnect + @remarks The foreign host represented by the peer is not notified of the disconnection and will timeout + on its connection to the local host. +*/ +void +enet_peer_reset (ENetPeer * peer) +{ + enet_peer_on_disconnect (peer); + + peer -> outgoingPeerID = ENET_PROTOCOL_MAXIMUM_PEER_ID; + peer -> connectID = 0; + + peer -> state = ENET_PEER_STATE_DISCONNECTED; + + peer -> incomingBandwidth = 0; + peer -> outgoingBandwidth = 0; + peer -> incomingBandwidthThrottleEpoch = 0; + peer -> outgoingBandwidthThrottleEpoch = 0; + peer -> incomingDataTotal = 0; + peer -> outgoingDataTotal = 0; + peer -> lastSendTime = 0; + peer -> lastReceiveTime = 0; + peer -> nextTimeout = 0; + peer -> earliestTimeout = 0; + peer -> packetLossEpoch = 0; + peer -> packetsSent = 0; + peer -> packetsLost = 0; + peer -> packetLoss = 0; + peer -> packetLossVariance = 0; + peer -> packetThrottle = ENET_PEER_DEFAULT_PACKET_THROTTLE; + peer -> packetThrottleLimit = ENET_PEER_PACKET_THROTTLE_SCALE; + peer -> packetThrottleCounter = 0; + peer -> packetThrottleEpoch = 0; + peer -> packetThrottleAcceleration = ENET_PEER_PACKET_THROTTLE_ACCELERATION; + peer -> packetThrottleDeceleration = ENET_PEER_PACKET_THROTTLE_DECELERATION; + peer -> packetThrottleInterval = ENET_PEER_PACKET_THROTTLE_INTERVAL; + peer -> pingInterval = ENET_PEER_PING_INTERVAL; + peer -> timeoutLimit = ENET_PEER_TIMEOUT_LIMIT; + peer -> timeoutMinimum = ENET_PEER_TIMEOUT_MINIMUM; + peer -> timeoutMaximum = ENET_PEER_TIMEOUT_MAXIMUM; + peer -> lastRoundTripTime = ENET_PEER_DEFAULT_ROUND_TRIP_TIME; + peer -> lowestRoundTripTime = ENET_PEER_DEFAULT_ROUND_TRIP_TIME; + peer -> lastRoundTripTimeVariance = 0; + peer -> highestRoundTripTimeVariance = 0; + peer -> roundTripTime = ENET_PEER_DEFAULT_ROUND_TRIP_TIME; + peer -> roundTripTimeVariance = 0; + peer -> mtu = peer -> host -> mtu; + peer -> reliableDataInTransit = 0; + peer -> outgoingReliableSequenceNumber = 0; + peer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; + peer -> incomingUnsequencedGroup = 0; + peer -> outgoingUnsequencedGroup = 0; + peer -> eventData = 0; + peer -> totalWaitingData = 0; + + memset (peer -> unsequencedWindow, 0, sizeof (peer -> unsequencedWindow)); + + enet_peer_reset_queues (peer); +} + +/** Sends a ping request to a peer. + @param peer destination for the ping request + @remarks ping requests factor into the mean round trip time as designated by the + roundTripTime field in the ENetPeer structure. ENet automatically pings all connected + peers at regular intervals, however, this function may be called to ensure more + frequent ping requests. +*/ +void +enet_peer_ping (ENetPeer * peer) +{ + ENetProtocol command; + + if (peer -> state != ENET_PEER_STATE_CONNECTED) + return; + + command.header.command = ENET_PROTOCOL_COMMAND_PING | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; + command.header.channelID = 0xFF; + + enet_peer_queue_outgoing_command (peer, & command, NULL, 0, 0); +} + +/** Sets the interval at which pings will be sent to a peer. + + Pings are used both to monitor the liveness of the connection and also to dynamically + adjust the throttle during periods of low traffic so that the throttle has reasonable + responsiveness during traffic spikes. + + @param peer the peer to adjust + @param pingInterval the interval at which to send pings; defaults to ENET_PEER_PING_INTERVAL if 0 +*/ +void +enet_peer_ping_interval (ENetPeer * peer, enet_uint32 pingInterval) +{ + peer -> pingInterval = pingInterval ? pingInterval : ENET_PEER_PING_INTERVAL; +} + +/** Sets the timeout parameters for a peer. + + The timeout parameter control how and when a peer will timeout from a failure to acknowledge + reliable traffic. Timeout values use an exponential backoff mechanism, where if a reliable + packet is not acknowledge within some multiple of the average RTT plus a variance tolerance, + the timeout will be doubled until it reaches a set limit. If the timeout is thus at this + limit and reliable packets have been sent but not acknowledged within a certain minimum time + period, the peer will be disconnected. Alternatively, if reliable packets have been sent + but not acknowledged for a certain maximum time period, the peer will be disconnected regardless + of the current timeout limit value. + + @param peer the peer to adjust + @param timeoutLimit the timeout limit; defaults to ENET_PEER_TIMEOUT_LIMIT if 0 + @param timeoutMinimum the timeout minimum; defaults to ENET_PEER_TIMEOUT_MINIMUM if 0 + @param timeoutMaximum the timeout maximum; defaults to ENET_PEER_TIMEOUT_MAXIMUM if 0 +*/ + +void +enet_peer_timeout (ENetPeer * peer, enet_uint32 timeoutLimit, enet_uint32 timeoutMinimum, enet_uint32 timeoutMaximum) +{ + peer -> timeoutLimit = timeoutLimit ? timeoutLimit : ENET_PEER_TIMEOUT_LIMIT; + peer -> timeoutMinimum = timeoutMinimum ? timeoutMinimum : ENET_PEER_TIMEOUT_MINIMUM; + peer -> timeoutMaximum = timeoutMaximum ? timeoutMaximum : ENET_PEER_TIMEOUT_MAXIMUM; +} + +/** Force an immediate disconnection from a peer. + @param peer peer to disconnect + @param data data describing the disconnection + @remarks No ENET_EVENT_DISCONNECT event will be generated. The foreign peer is not + guaranteed to receive the disconnect notification, and is reset immediately upon + return from this function. +*/ +void +enet_peer_disconnect_now (ENetPeer * peer, enet_uint32 data) +{ + ENetProtocol command; + + if (peer -> state == ENET_PEER_STATE_DISCONNECTED) + return; + + if (peer -> state != ENET_PEER_STATE_ZOMBIE && + peer -> state != ENET_PEER_STATE_DISCONNECTING) + { + enet_peer_reset_queues (peer); + + command.header.command = ENET_PROTOCOL_COMMAND_DISCONNECT | ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED; + command.header.channelID = 0xFF; + command.disconnect.data = ENET_HOST_TO_NET_32 (data); + + enet_peer_queue_outgoing_command (peer, & command, NULL, 0, 0); + + enet_host_flush (peer -> host); + } + + enet_peer_reset (peer); +} + +/** Request a disconnection from a peer. + @param peer peer to request a disconnection + @param data data describing the disconnection + @remarks An ENET_EVENT_DISCONNECT event will be generated by enet_host_service() + once the disconnection is complete. +*/ +void +enet_peer_disconnect (ENetPeer * peer, enet_uint32 data) +{ + ENetProtocol command; + + if (peer -> state == ENET_PEER_STATE_DISCONNECTING || + peer -> state == ENET_PEER_STATE_DISCONNECTED || + peer -> state == ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT || + peer -> state == ENET_PEER_STATE_ZOMBIE) + return; + + enet_peer_reset_queues (peer); + + command.header.command = ENET_PROTOCOL_COMMAND_DISCONNECT; + command.header.channelID = 0xFF; + command.disconnect.data = ENET_HOST_TO_NET_32 (data); + + if (peer -> state == ENET_PEER_STATE_CONNECTED || peer -> state == ENET_PEER_STATE_DISCONNECT_LATER) + command.header.command |= ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; + else + command.header.command |= ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED; + + enet_peer_queue_outgoing_command (peer, & command, NULL, 0, 0); + + if (peer -> state == ENET_PEER_STATE_CONNECTED || peer -> state == ENET_PEER_STATE_DISCONNECT_LATER) + { + enet_peer_on_disconnect (peer); + + peer -> state = ENET_PEER_STATE_DISCONNECTING; + } + else + { + enet_host_flush (peer -> host); + enet_peer_reset (peer); + } +} + +/** Request a disconnection from a peer, but only after all queued outgoing packets are sent. + @param peer peer to request a disconnection + @param data data describing the disconnection + @remarks An ENET_EVENT_DISCONNECT event will be generated by enet_host_service() + once the disconnection is complete. +*/ +void +enet_peer_disconnect_later (ENetPeer * peer, enet_uint32 data) +{ + if ((peer -> state == ENET_PEER_STATE_CONNECTED || peer -> state == ENET_PEER_STATE_DISCONNECT_LATER) && + ! (enet_list_empty (& peer -> outgoingReliableCommands) && + enet_list_empty (& peer -> outgoingUnreliableCommands) && + enet_list_empty (& peer -> sentReliableCommands))) + { + peer -> state = ENET_PEER_STATE_DISCONNECT_LATER; + peer -> eventData = data; + } + else + enet_peer_disconnect (peer, data); +} + +ENetAcknowledgement * +enet_peer_queue_acknowledgement (ENetPeer * peer, const ENetProtocol * command, enet_uint16 sentTime) +{ + ENetAcknowledgement * acknowledgement; + + if (command -> header.channelID < peer -> channelCount) + { + ENetChannel * channel = & peer -> channels [command -> header.channelID]; + enet_uint16 reliableWindow = command -> header.reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE, + currentWindow = channel -> incomingReliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; + + if (command -> header.reliableSequenceNumber < channel -> incomingReliableSequenceNumber) + reliableWindow += ENET_PEER_RELIABLE_WINDOWS; + + if (reliableWindow >= currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS - 1 && reliableWindow <= currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS) + return NULL; + } + + acknowledgement = (ENetAcknowledgement *) enet_malloc (sizeof (ENetAcknowledgement)); + if (acknowledgement == NULL) + return NULL; + + peer -> outgoingDataTotal += sizeof (ENetProtocolAcknowledge); + + acknowledgement -> sentTime = sentTime; + acknowledgement -> command = * command; + + enet_list_insert (enet_list_end (& peer -> acknowledgements), acknowledgement); + + return acknowledgement; +} + +void +enet_peer_setup_outgoing_command (ENetPeer * peer, ENetOutgoingCommand * outgoingCommand) +{ + ENetChannel * channel = & peer -> channels [outgoingCommand -> command.header.channelID]; + + peer -> outgoingDataTotal += enet_protocol_command_size (outgoingCommand -> command.header.command) + outgoingCommand -> fragmentLength; + + if (outgoingCommand -> command.header.channelID == 0xFF) + { + ++ peer -> outgoingReliableSequenceNumber; + + outgoingCommand -> reliableSequenceNumber = peer -> outgoingReliableSequenceNumber; + outgoingCommand -> unreliableSequenceNumber = 0; + } + else + if (outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE) + { + ++ channel -> outgoingReliableSequenceNumber; + channel -> outgoingUnreliableSequenceNumber = 0; + + outgoingCommand -> reliableSequenceNumber = channel -> outgoingReliableSequenceNumber; + outgoingCommand -> unreliableSequenceNumber = 0; + } + else + if (outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED) + { + ++ peer -> outgoingUnsequencedGroup; + + outgoingCommand -> reliableSequenceNumber = 0; + outgoingCommand -> unreliableSequenceNumber = 0; + } + else + { + if (outgoingCommand -> fragmentOffset == 0) + ++ channel -> outgoingUnreliableSequenceNumber; + + outgoingCommand -> reliableSequenceNumber = channel -> outgoingReliableSequenceNumber; + outgoingCommand -> unreliableSequenceNumber = channel -> outgoingUnreliableSequenceNumber; + } + + outgoingCommand -> sendAttempts = 0; + outgoingCommand -> sentTime = 0; + outgoingCommand -> roundTripTimeout = 0; + outgoingCommand -> roundTripTimeoutLimit = 0; + outgoingCommand -> command.header.reliableSequenceNumber = ENET_HOST_TO_NET_16 (outgoingCommand -> reliableSequenceNumber); + + switch (outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK) + { + case ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE: + outgoingCommand -> command.sendUnreliable.unreliableSequenceNumber = ENET_HOST_TO_NET_16 (outgoingCommand -> unreliableSequenceNumber); + break; + + case ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED: + outgoingCommand -> command.sendUnsequenced.unsequencedGroup = ENET_HOST_TO_NET_16 (peer -> outgoingUnsequencedGroup); + break; + + default: + break; + } + + if (outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE) + enet_list_insert (enet_list_end (& peer -> outgoingReliableCommands), outgoingCommand); + else + enet_list_insert (enet_list_end (& peer -> outgoingUnreliableCommands), outgoingCommand); +} + +ENetOutgoingCommand * +enet_peer_queue_outgoing_command (ENetPeer * peer, const ENetProtocol * command, ENetPacket * packet, enet_uint32 offset, enet_uint16 length) +{ + ENetOutgoingCommand * outgoingCommand = (ENetOutgoingCommand *) enet_malloc (sizeof (ENetOutgoingCommand)); + if (outgoingCommand == NULL) + return NULL; + + outgoingCommand -> command = * command; + outgoingCommand -> fragmentOffset = offset; + outgoingCommand -> fragmentLength = length; + outgoingCommand -> packet = packet; + if (packet != NULL) + ++ packet -> referenceCount; + + enet_peer_setup_outgoing_command (peer, outgoingCommand); + + return outgoingCommand; +} + +void +enet_peer_dispatch_incoming_unreliable_commands (ENetPeer * peer, ENetChannel * channel) +{ + ENetListIterator droppedCommand, startCommand, currentCommand; + + for (droppedCommand = startCommand = currentCommand = enet_list_begin (& channel -> incomingUnreliableCommands); + currentCommand != enet_list_end (& channel -> incomingUnreliableCommands); + currentCommand = enet_list_next (currentCommand)) + { + ENetIncomingCommand * incomingCommand = (ENetIncomingCommand *) currentCommand; + + if ((incomingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK) == ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED) + continue; + + if (incomingCommand -> reliableSequenceNumber == channel -> incomingReliableSequenceNumber) + { + if (incomingCommand -> fragmentsRemaining <= 0) + { + channel -> incomingUnreliableSequenceNumber = incomingCommand -> unreliableSequenceNumber; + continue; + } + + if (startCommand != currentCommand) + { + enet_list_move (enet_list_end (& peer -> dispatchedCommands), startCommand, enet_list_previous (currentCommand)); + + if (! peer -> needsDispatch) + { + enet_list_insert (enet_list_end (& peer -> host -> dispatchQueue), & peer -> dispatchList); + + peer -> needsDispatch = 1; + } + + droppedCommand = currentCommand; + } + else + if (droppedCommand != currentCommand) + droppedCommand = enet_list_previous (currentCommand); + } + else + { + enet_uint16 reliableWindow = incomingCommand -> reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE, + currentWindow = channel -> incomingReliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; + if (incomingCommand -> reliableSequenceNumber < channel -> incomingReliableSequenceNumber) + reliableWindow += ENET_PEER_RELIABLE_WINDOWS; + if (reliableWindow >= currentWindow && reliableWindow < currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS - 1) + break; + + droppedCommand = enet_list_next (currentCommand); + + if (startCommand != currentCommand) + { + enet_list_move (enet_list_end (& peer -> dispatchedCommands), startCommand, enet_list_previous (currentCommand)); + + if (! peer -> needsDispatch) + { + enet_list_insert (enet_list_end (& peer -> host -> dispatchQueue), & peer -> dispatchList); + + peer -> needsDispatch = 1; + } + } + } + + startCommand = enet_list_next (currentCommand); + } + + if (startCommand != currentCommand) + { + enet_list_move (enet_list_end (& peer -> dispatchedCommands), startCommand, enet_list_previous (currentCommand)); + + if (! peer -> needsDispatch) + { + enet_list_insert (enet_list_end (& peer -> host -> dispatchQueue), & peer -> dispatchList); + + peer -> needsDispatch = 1; + } + + droppedCommand = currentCommand; + } + + enet_peer_remove_incoming_commands (& channel -> incomingUnreliableCommands, enet_list_begin (& channel -> incomingUnreliableCommands), droppedCommand); +} + +void +enet_peer_dispatch_incoming_reliable_commands (ENetPeer * peer, ENetChannel * channel) +{ + ENetListIterator currentCommand; + + for (currentCommand = enet_list_begin (& channel -> incomingReliableCommands); + currentCommand != enet_list_end (& channel -> incomingReliableCommands); + currentCommand = enet_list_next (currentCommand)) + { + ENetIncomingCommand * incomingCommand = (ENetIncomingCommand *) currentCommand; + + if (incomingCommand -> fragmentsRemaining > 0 || + incomingCommand -> reliableSequenceNumber != (enet_uint16) (channel -> incomingReliableSequenceNumber + 1)) + break; + + channel -> incomingReliableSequenceNumber = incomingCommand -> reliableSequenceNumber; + + if (incomingCommand -> fragmentCount > 0) + channel -> incomingReliableSequenceNumber += incomingCommand -> fragmentCount - 1; + } + + if (currentCommand == enet_list_begin (& channel -> incomingReliableCommands)) + return; + + channel -> incomingUnreliableSequenceNumber = 0; + + enet_list_move (enet_list_end (& peer -> dispatchedCommands), enet_list_begin (& channel -> incomingReliableCommands), enet_list_previous (currentCommand)); + + if (! peer -> needsDispatch) + { + enet_list_insert (enet_list_end (& peer -> host -> dispatchQueue), & peer -> dispatchList); + + peer -> needsDispatch = 1; + } + + if (! enet_list_empty (& channel -> incomingUnreliableCommands)) + enet_peer_dispatch_incoming_unreliable_commands (peer, channel); +} + +ENetIncomingCommand * +enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, const void * data, size_t dataLength, enet_uint32 flags, enet_uint32 fragmentCount) +{ + static ENetIncomingCommand dummyCommand; + + ENetChannel * channel = & peer -> channels [command -> header.channelID]; + enet_uint32 unreliableSequenceNumber = 0, reliableSequenceNumber = 0; + enet_uint16 reliableWindow, currentWindow; + ENetIncomingCommand * incomingCommand; + ENetListIterator currentCommand; + ENetPacket * packet = NULL; + + if (peer -> state == ENET_PEER_STATE_DISCONNECT_LATER) + goto discardCommand; + + if ((command -> header.command & ENET_PROTOCOL_COMMAND_MASK) != ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED) + { + reliableSequenceNumber = command -> header.reliableSequenceNumber; + reliableWindow = reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; + currentWindow = channel -> incomingReliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; + + if (reliableSequenceNumber < channel -> incomingReliableSequenceNumber) + reliableWindow += ENET_PEER_RELIABLE_WINDOWS; + + if (reliableWindow < currentWindow || reliableWindow >= currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS - 1) + goto discardCommand; + } + + switch (command -> header.command & ENET_PROTOCOL_COMMAND_MASK) + { + case ENET_PROTOCOL_COMMAND_SEND_FRAGMENT: + case ENET_PROTOCOL_COMMAND_SEND_RELIABLE: + if (reliableSequenceNumber == channel -> incomingReliableSequenceNumber) + goto discardCommand; + + for (currentCommand = enet_list_previous (enet_list_end (& channel -> incomingReliableCommands)); + currentCommand != enet_list_end (& channel -> incomingReliableCommands); + currentCommand = enet_list_previous (currentCommand)) + { + incomingCommand = (ENetIncomingCommand *) currentCommand; + + if (reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) + { + if (incomingCommand -> reliableSequenceNumber < channel -> incomingReliableSequenceNumber) + continue; + } + else + if (incomingCommand -> reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) + break; + + if (incomingCommand -> reliableSequenceNumber <= reliableSequenceNumber) + { + if (incomingCommand -> reliableSequenceNumber < reliableSequenceNumber) + break; + + goto discardCommand; + } + } + break; + + case ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE: + case ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT: + unreliableSequenceNumber = ENET_NET_TO_HOST_16 (command -> sendUnreliable.unreliableSequenceNumber); + + if (reliableSequenceNumber == channel -> incomingReliableSequenceNumber && + unreliableSequenceNumber <= channel -> incomingUnreliableSequenceNumber) + goto discardCommand; + + for (currentCommand = enet_list_previous (enet_list_end (& channel -> incomingUnreliableCommands)); + currentCommand != enet_list_end (& channel -> incomingUnreliableCommands); + currentCommand = enet_list_previous (currentCommand)) + { + incomingCommand = (ENetIncomingCommand *) currentCommand; + + if ((command -> header.command & ENET_PROTOCOL_COMMAND_MASK) == ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED) + continue; + + if (reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) + { + if (incomingCommand -> reliableSequenceNumber < channel -> incomingReliableSequenceNumber) + continue; + } + else + if (incomingCommand -> reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) + break; + + if (incomingCommand -> reliableSequenceNumber < reliableSequenceNumber) + break; + + if (incomingCommand -> reliableSequenceNumber > reliableSequenceNumber) + continue; + + if (incomingCommand -> unreliableSequenceNumber <= unreliableSequenceNumber) + { + if (incomingCommand -> unreliableSequenceNumber < unreliableSequenceNumber) + break; + + goto discardCommand; + } + } + break; + + case ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED: + currentCommand = enet_list_end (& channel -> incomingUnreliableCommands); + break; + + default: + goto discardCommand; + } + + if (peer -> totalWaitingData >= peer -> host -> maximumWaitingData) + goto notifyError; + + packet = enet_packet_create (data, dataLength, flags); + if (packet == NULL) + goto notifyError; + + incomingCommand = (ENetIncomingCommand *) enet_malloc (sizeof (ENetIncomingCommand)); + if (incomingCommand == NULL) + goto notifyError; + + incomingCommand -> reliableSequenceNumber = command -> header.reliableSequenceNumber; + incomingCommand -> unreliableSequenceNumber = unreliableSequenceNumber & 0xFFFF; + incomingCommand -> command = * command; + incomingCommand -> fragmentCount = fragmentCount; + incomingCommand -> fragmentsRemaining = fragmentCount; + incomingCommand -> packet = packet; + incomingCommand -> fragments = NULL; + + if (fragmentCount > 0) + { + if (fragmentCount <= ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT) + incomingCommand -> fragments = (enet_uint32 *) enet_malloc ((fragmentCount + 31) / 32 * sizeof (enet_uint32)); + if (incomingCommand -> fragments == NULL) + { + enet_free (incomingCommand); + + goto notifyError; + } + memset (incomingCommand -> fragments, 0, (fragmentCount + 31) / 32 * sizeof (enet_uint32)); + } + + if (packet != NULL) + { + ++ packet -> referenceCount; + + peer -> totalWaitingData += packet -> dataLength; + } + + enet_list_insert (enet_list_next (currentCommand), incomingCommand); + + switch (command -> header.command & ENET_PROTOCOL_COMMAND_MASK) + { + case ENET_PROTOCOL_COMMAND_SEND_FRAGMENT: + case ENET_PROTOCOL_COMMAND_SEND_RELIABLE: + enet_peer_dispatch_incoming_reliable_commands (peer, channel); + break; + + default: + enet_peer_dispatch_incoming_unreliable_commands (peer, channel); + break; + } + + return incomingCommand; + +discardCommand: + if (fragmentCount > 0) + goto notifyError; + + if (packet != NULL && packet -> referenceCount == 0) + enet_packet_destroy (packet); + + return & dummyCommand; + +notifyError: + if (packet != NULL && packet -> referenceCount == 0) + enet_packet_destroy (packet); + + return NULL; +} + +/** @} */ diff --git a/modules/enet/protocol.c b/modules/enet/protocol.c new file mode 100644 index 0000000000..4a2a4ed185 --- /dev/null +++ b/modules/enet/protocol.c @@ -0,0 +1,1914 @@ +/** + @file protocol.c + @brief ENet protocol functions +*/ +#include <stdio.h> +#include <string.h> +#define ENET_BUILDING_LIB 1 +#include "enet/utility.h" +#include "enet/time.h" +#include "enet/enet.h" + + +static size_t commandSizes [ENET_PROTOCOL_COMMAND_COUNT] = +{ + 0, + sizeof (ENetProtocolAcknowledge), + sizeof (ENetProtocolConnect), + sizeof (ENetProtocolVerifyConnect), + sizeof (ENetProtocolDisconnect), + sizeof (ENetProtocolPing), + sizeof (ENetProtocolSendReliable), + sizeof (ENetProtocolSendUnreliable), + sizeof (ENetProtocolSendFragment), + sizeof (ENetProtocolSendUnsequenced), + sizeof (ENetProtocolBandwidthLimit), + sizeof (ENetProtocolThrottleConfigure), + sizeof (ENetProtocolSendFragment) +}; + +size_t +enet_protocol_command_size (enet_uint8 commandNumber) +{ + return commandSizes [commandNumber & ENET_PROTOCOL_COMMAND_MASK]; +} + +static void +enet_protocol_change_state (ENetHost * host, ENetPeer * peer, ENetPeerState state) +{ + if (state == ENET_PEER_STATE_CONNECTED || state == ENET_PEER_STATE_DISCONNECT_LATER) + enet_peer_on_connect (peer); + else + enet_peer_on_disconnect (peer); + + peer -> state = state; +} + +static void +enet_protocol_dispatch_state (ENetHost * host, ENetPeer * peer, ENetPeerState state) +{ + enet_protocol_change_state (host, peer, state); + + if (! peer -> needsDispatch) + { + enet_list_insert (enet_list_end (& host -> dispatchQueue), & peer -> dispatchList); + + peer -> needsDispatch = 1; + } +} + +static int +enet_protocol_dispatch_incoming_commands (ENetHost * host, ENetEvent * event) +{ + while (! enet_list_empty (& host -> dispatchQueue)) + { + ENetPeer * peer = (ENetPeer *) enet_list_remove (enet_list_begin (& host -> dispatchQueue)); + + peer -> needsDispatch = 0; + + switch (peer -> state) + { + case ENET_PEER_STATE_CONNECTION_PENDING: + case ENET_PEER_STATE_CONNECTION_SUCCEEDED: + enet_protocol_change_state (host, peer, ENET_PEER_STATE_CONNECTED); + + event -> type = ENET_EVENT_TYPE_CONNECT; + event -> peer = peer; + event -> data = peer -> eventData; + + return 1; + + case ENET_PEER_STATE_ZOMBIE: + host -> recalculateBandwidthLimits = 1; + + event -> type = ENET_EVENT_TYPE_DISCONNECT; + event -> peer = peer; + event -> data = peer -> eventData; + + enet_peer_reset (peer); + + return 1; + + case ENET_PEER_STATE_CONNECTED: + if (enet_list_empty (& peer -> dispatchedCommands)) + continue; + + event -> packet = enet_peer_receive (peer, & event -> channelID); + if (event -> packet == NULL) + continue; + + event -> type = ENET_EVENT_TYPE_RECEIVE; + event -> peer = peer; + + if (! enet_list_empty (& peer -> dispatchedCommands)) + { + peer -> needsDispatch = 1; + + enet_list_insert (enet_list_end (& host -> dispatchQueue), & peer -> dispatchList); + } + + return 1; + + default: + break; + } + } + + return 0; +} + +static void +enet_protocol_notify_connect (ENetHost * host, ENetPeer * peer, ENetEvent * event) +{ + host -> recalculateBandwidthLimits = 1; + + if (event != NULL) + { + enet_protocol_change_state (host, peer, ENET_PEER_STATE_CONNECTED); + + event -> type = ENET_EVENT_TYPE_CONNECT; + event -> peer = peer; + event -> data = peer -> eventData; + } + else + enet_protocol_dispatch_state (host, peer, peer -> state == ENET_PEER_STATE_CONNECTING ? ENET_PEER_STATE_CONNECTION_SUCCEEDED : ENET_PEER_STATE_CONNECTION_PENDING); +} + +static void +enet_protocol_notify_disconnect (ENetHost * host, ENetPeer * peer, ENetEvent * event) +{ + if (peer -> state >= ENET_PEER_STATE_CONNECTION_PENDING) + host -> recalculateBandwidthLimits = 1; + + if (peer -> state != ENET_PEER_STATE_CONNECTING && peer -> state < ENET_PEER_STATE_CONNECTION_SUCCEEDED) + enet_peer_reset (peer); + else + if (event != NULL) + { + event -> type = ENET_EVENT_TYPE_DISCONNECT; + event -> peer = peer; + event -> data = 0; + + enet_peer_reset (peer); + } + else + { + peer -> eventData = 0; + + enet_protocol_dispatch_state (host, peer, ENET_PEER_STATE_ZOMBIE); + } +} + +static void +enet_protocol_remove_sent_unreliable_commands (ENetPeer * peer) +{ + ENetOutgoingCommand * outgoingCommand; + + while (! enet_list_empty (& peer -> sentUnreliableCommands)) + { + outgoingCommand = (ENetOutgoingCommand *) enet_list_front (& peer -> sentUnreliableCommands); + + enet_list_remove (& outgoingCommand -> outgoingCommandList); + + if (outgoingCommand -> packet != NULL) + { + -- outgoingCommand -> packet -> referenceCount; + + if (outgoingCommand -> packet -> referenceCount == 0) + { + outgoingCommand -> packet -> flags |= ENET_PACKET_FLAG_SENT; + + enet_packet_destroy (outgoingCommand -> packet); + } + } + + enet_free (outgoingCommand); + } +} + +static ENetProtocolCommand +enet_protocol_remove_sent_reliable_command (ENetPeer * peer, enet_uint16 reliableSequenceNumber, enet_uint8 channelID) +{ + ENetOutgoingCommand * outgoingCommand = NULL; + ENetListIterator currentCommand; + ENetProtocolCommand commandNumber; + int wasSent = 1; + + for (currentCommand = enet_list_begin (& peer -> sentReliableCommands); + currentCommand != enet_list_end (& peer -> sentReliableCommands); + currentCommand = enet_list_next (currentCommand)) + { + outgoingCommand = (ENetOutgoingCommand *) currentCommand; + + if (outgoingCommand -> reliableSequenceNumber == reliableSequenceNumber && + outgoingCommand -> command.header.channelID == channelID) + break; + } + + if (currentCommand == enet_list_end (& peer -> sentReliableCommands)) + { + for (currentCommand = enet_list_begin (& peer -> outgoingReliableCommands); + currentCommand != enet_list_end (& peer -> outgoingReliableCommands); + currentCommand = enet_list_next (currentCommand)) + { + outgoingCommand = (ENetOutgoingCommand *) currentCommand; + + if (outgoingCommand -> sendAttempts < 1) return ENET_PROTOCOL_COMMAND_NONE; + + if (outgoingCommand -> reliableSequenceNumber == reliableSequenceNumber && + outgoingCommand -> command.header.channelID == channelID) + break; + } + + if (currentCommand == enet_list_end (& peer -> outgoingReliableCommands)) + return ENET_PROTOCOL_COMMAND_NONE; + + wasSent = 0; + } + + if (outgoingCommand == NULL) + return ENET_PROTOCOL_COMMAND_NONE; + + if (channelID < peer -> channelCount) + { + ENetChannel * channel = & peer -> channels [channelID]; + enet_uint16 reliableWindow = reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; + if (channel -> reliableWindows [reliableWindow] > 0) + { + -- channel -> reliableWindows [reliableWindow]; + if (! channel -> reliableWindows [reliableWindow]) + channel -> usedReliableWindows &= ~ (1 << reliableWindow); + } + } + + commandNumber = (ENetProtocolCommand) (outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK); + + enet_list_remove (& outgoingCommand -> outgoingCommandList); + + if (outgoingCommand -> packet != NULL) + { + if (wasSent) + peer -> reliableDataInTransit -= outgoingCommand -> fragmentLength; + + -- outgoingCommand -> packet -> referenceCount; + + if (outgoingCommand -> packet -> referenceCount == 0) + { + outgoingCommand -> packet -> flags |= ENET_PACKET_FLAG_SENT; + + enet_packet_destroy (outgoingCommand -> packet); + } + } + + enet_free (outgoingCommand); + + if (enet_list_empty (& peer -> sentReliableCommands)) + return commandNumber; + + outgoingCommand = (ENetOutgoingCommand *) enet_list_front (& peer -> sentReliableCommands); + + peer -> nextTimeout = outgoingCommand -> sentTime + outgoingCommand -> roundTripTimeout; + + return commandNumber; +} + +static ENetPeer * +enet_protocol_handle_connect (ENetHost * host, ENetProtocolHeader * header, ENetProtocol * command) +{ + enet_uint8 incomingSessionID, outgoingSessionID; + enet_uint32 mtu, windowSize; + ENetChannel * channel; + size_t channelCount, duplicatePeers = 0; + ENetPeer * currentPeer, * peer = NULL; + ENetProtocol verifyCommand; + + channelCount = ENET_NET_TO_HOST_32 (command -> connect.channelCount); + + if (channelCount < ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT || + channelCount > ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT) + return NULL; + + for (currentPeer = host -> peers; + currentPeer < & host -> peers [host -> peerCount]; + ++ currentPeer) + { + if (currentPeer -> state == ENET_PEER_STATE_DISCONNECTED) + { + if (peer == NULL) + peer = currentPeer; + } + else + if (currentPeer -> state != ENET_PEER_STATE_CONNECTING && + currentPeer -> address.host == host -> receivedAddress.host) + { + if (currentPeer -> address.port == host -> receivedAddress.port && + currentPeer -> connectID == command -> connect.connectID) + return NULL; + + ++ duplicatePeers; + } + } + + if (peer == NULL || duplicatePeers >= host -> duplicatePeers) + return NULL; + + if (channelCount > host -> channelLimit) + channelCount = host -> channelLimit; + peer -> channels = (ENetChannel *) enet_malloc (channelCount * sizeof (ENetChannel)); + if (peer -> channels == NULL) + return NULL; + peer -> channelCount = channelCount; + peer -> state = ENET_PEER_STATE_ACKNOWLEDGING_CONNECT; + peer -> connectID = command -> connect.connectID; + peer -> address = host -> receivedAddress; + peer -> outgoingPeerID = ENET_NET_TO_HOST_16 (command -> connect.outgoingPeerID); + peer -> incomingBandwidth = ENET_NET_TO_HOST_32 (command -> connect.incomingBandwidth); + peer -> outgoingBandwidth = ENET_NET_TO_HOST_32 (command -> connect.outgoingBandwidth); + peer -> packetThrottleInterval = ENET_NET_TO_HOST_32 (command -> connect.packetThrottleInterval); + peer -> packetThrottleAcceleration = ENET_NET_TO_HOST_32 (command -> connect.packetThrottleAcceleration); + peer -> packetThrottleDeceleration = ENET_NET_TO_HOST_32 (command -> connect.packetThrottleDeceleration); + peer -> eventData = ENET_NET_TO_HOST_32 (command -> connect.data); + + incomingSessionID = command -> connect.incomingSessionID == 0xFF ? peer -> outgoingSessionID : command -> connect.incomingSessionID; + incomingSessionID = (incomingSessionID + 1) & (ENET_PROTOCOL_HEADER_SESSION_MASK >> ENET_PROTOCOL_HEADER_SESSION_SHIFT); + if (incomingSessionID == peer -> outgoingSessionID) + incomingSessionID = (incomingSessionID + 1) & (ENET_PROTOCOL_HEADER_SESSION_MASK >> ENET_PROTOCOL_HEADER_SESSION_SHIFT); + peer -> outgoingSessionID = incomingSessionID; + + outgoingSessionID = command -> connect.outgoingSessionID == 0xFF ? peer -> incomingSessionID : command -> connect.outgoingSessionID; + outgoingSessionID = (outgoingSessionID + 1) & (ENET_PROTOCOL_HEADER_SESSION_MASK >> ENET_PROTOCOL_HEADER_SESSION_SHIFT); + if (outgoingSessionID == peer -> incomingSessionID) + outgoingSessionID = (outgoingSessionID + 1) & (ENET_PROTOCOL_HEADER_SESSION_MASK >> ENET_PROTOCOL_HEADER_SESSION_SHIFT); + peer -> incomingSessionID = outgoingSessionID; + + for (channel = peer -> channels; + channel < & peer -> channels [channelCount]; + ++ channel) + { + channel -> outgoingReliableSequenceNumber = 0; + channel -> outgoingUnreliableSequenceNumber = 0; + channel -> incomingReliableSequenceNumber = 0; + channel -> incomingUnreliableSequenceNumber = 0; + + enet_list_clear (& channel -> incomingReliableCommands); + enet_list_clear (& channel -> incomingUnreliableCommands); + + channel -> usedReliableWindows = 0; + memset (channel -> reliableWindows, 0, sizeof (channel -> reliableWindows)); + } + + mtu = ENET_NET_TO_HOST_32 (command -> connect.mtu); + + if (mtu < ENET_PROTOCOL_MINIMUM_MTU) + mtu = ENET_PROTOCOL_MINIMUM_MTU; + else + if (mtu > ENET_PROTOCOL_MAXIMUM_MTU) + mtu = ENET_PROTOCOL_MAXIMUM_MTU; + + peer -> mtu = mtu; + + if (host -> outgoingBandwidth == 0 && + peer -> incomingBandwidth == 0) + peer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; + else + if (host -> outgoingBandwidth == 0 || + peer -> incomingBandwidth == 0) + peer -> windowSize = (ENET_MAX (host -> outgoingBandwidth, peer -> incomingBandwidth) / + ENET_PEER_WINDOW_SIZE_SCALE) * + ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; + else + peer -> windowSize = (ENET_MIN (host -> outgoingBandwidth, peer -> incomingBandwidth) / + ENET_PEER_WINDOW_SIZE_SCALE) * + ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; + + if (peer -> windowSize < ENET_PROTOCOL_MINIMUM_WINDOW_SIZE) + peer -> windowSize = ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; + else + if (peer -> windowSize > ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE) + peer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; + + if (host -> incomingBandwidth == 0) + windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; + else + windowSize = (host -> incomingBandwidth / ENET_PEER_WINDOW_SIZE_SCALE) * + ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; + + if (windowSize > ENET_NET_TO_HOST_32 (command -> connect.windowSize)) + windowSize = ENET_NET_TO_HOST_32 (command -> connect.windowSize); + + if (windowSize < ENET_PROTOCOL_MINIMUM_WINDOW_SIZE) + windowSize = ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; + else + if (windowSize > ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE) + windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; + + verifyCommand.header.command = ENET_PROTOCOL_COMMAND_VERIFY_CONNECT | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; + verifyCommand.header.channelID = 0xFF; + verifyCommand.verifyConnect.outgoingPeerID = ENET_HOST_TO_NET_16 (peer -> incomingPeerID); + verifyCommand.verifyConnect.incomingSessionID = incomingSessionID; + verifyCommand.verifyConnect.outgoingSessionID = outgoingSessionID; + verifyCommand.verifyConnect.mtu = ENET_HOST_TO_NET_32 (peer -> mtu); + verifyCommand.verifyConnect.windowSize = ENET_HOST_TO_NET_32 (windowSize); + verifyCommand.verifyConnect.channelCount = ENET_HOST_TO_NET_32 (channelCount); + verifyCommand.verifyConnect.incomingBandwidth = ENET_HOST_TO_NET_32 (host -> incomingBandwidth); + verifyCommand.verifyConnect.outgoingBandwidth = ENET_HOST_TO_NET_32 (host -> outgoingBandwidth); + verifyCommand.verifyConnect.packetThrottleInterval = ENET_HOST_TO_NET_32 (peer -> packetThrottleInterval); + verifyCommand.verifyConnect.packetThrottleAcceleration = ENET_HOST_TO_NET_32 (peer -> packetThrottleAcceleration); + verifyCommand.verifyConnect.packetThrottleDeceleration = ENET_HOST_TO_NET_32 (peer -> packetThrottleDeceleration); + verifyCommand.verifyConnect.connectID = peer -> connectID; + + enet_peer_queue_outgoing_command (peer, & verifyCommand, NULL, 0, 0); + + return peer; +} + +static int +enet_protocol_handle_send_reliable (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) +{ + size_t dataLength; + + if (command -> header.channelID >= peer -> channelCount || + (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER)) + return -1; + + dataLength = ENET_NET_TO_HOST_16 (command -> sendReliable.dataLength); + * currentData += dataLength; + if (dataLength > host -> maximumPacketSize || + * currentData < host -> receivedData || + * currentData > & host -> receivedData [host -> receivedDataLength]) + return -1; + + if (enet_peer_queue_incoming_command (peer, command, (const enet_uint8 *) command + sizeof (ENetProtocolSendReliable), dataLength, ENET_PACKET_FLAG_RELIABLE, 0) == NULL) + return -1; + + return 0; +} + +static int +enet_protocol_handle_send_unsequenced (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) +{ + enet_uint32 unsequencedGroup, index; + size_t dataLength; + + if (command -> header.channelID >= peer -> channelCount || + (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER)) + return -1; + + dataLength = ENET_NET_TO_HOST_16 (command -> sendUnsequenced.dataLength); + * currentData += dataLength; + if (dataLength > host -> maximumPacketSize || + * currentData < host -> receivedData || + * currentData > & host -> receivedData [host -> receivedDataLength]) + return -1; + + unsequencedGroup = ENET_NET_TO_HOST_16 (command -> sendUnsequenced.unsequencedGroup); + index = unsequencedGroup % ENET_PEER_UNSEQUENCED_WINDOW_SIZE; + + if (unsequencedGroup < peer -> incomingUnsequencedGroup) + unsequencedGroup += 0x10000; + + if (unsequencedGroup >= (enet_uint32) peer -> incomingUnsequencedGroup + ENET_PEER_FREE_UNSEQUENCED_WINDOWS * ENET_PEER_UNSEQUENCED_WINDOW_SIZE) + return 0; + + unsequencedGroup &= 0xFFFF; + + if (unsequencedGroup - index != peer -> incomingUnsequencedGroup) + { + peer -> incomingUnsequencedGroup = unsequencedGroup - index; + + memset (peer -> unsequencedWindow, 0, sizeof (peer -> unsequencedWindow)); + } + else + if (peer -> unsequencedWindow [index / 32] & (1 << (index % 32))) + return 0; + + if (enet_peer_queue_incoming_command (peer, command, (const enet_uint8 *) command + sizeof (ENetProtocolSendUnsequenced), dataLength, ENET_PACKET_FLAG_UNSEQUENCED, 0) == NULL) + return -1; + + peer -> unsequencedWindow [index / 32] |= 1 << (index % 32); + + return 0; +} + +static int +enet_protocol_handle_send_unreliable (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) +{ + size_t dataLength; + + if (command -> header.channelID >= peer -> channelCount || + (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER)) + return -1; + + dataLength = ENET_NET_TO_HOST_16 (command -> sendUnreliable.dataLength); + * currentData += dataLength; + if (dataLength > host -> maximumPacketSize || + * currentData < host -> receivedData || + * currentData > & host -> receivedData [host -> receivedDataLength]) + return -1; + + if (enet_peer_queue_incoming_command (peer, command, (const enet_uint8 *) command + sizeof (ENetProtocolSendUnreliable), dataLength, 0, 0) == NULL) + return -1; + + return 0; +} + +static int +enet_protocol_handle_send_fragment (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) +{ + enet_uint32 fragmentNumber, + fragmentCount, + fragmentOffset, + fragmentLength, + startSequenceNumber, + totalLength; + ENetChannel * channel; + enet_uint16 startWindow, currentWindow; + ENetListIterator currentCommand; + ENetIncomingCommand * startCommand = NULL; + + if (command -> header.channelID >= peer -> channelCount || + (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER)) + return -1; + + fragmentLength = ENET_NET_TO_HOST_16 (command -> sendFragment.dataLength); + * currentData += fragmentLength; + if (fragmentLength > host -> maximumPacketSize || + * currentData < host -> receivedData || + * currentData > & host -> receivedData [host -> receivedDataLength]) + return -1; + + channel = & peer -> channels [command -> header.channelID]; + startSequenceNumber = ENET_NET_TO_HOST_16 (command -> sendFragment.startSequenceNumber); + startWindow = startSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; + currentWindow = channel -> incomingReliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; + + if (startSequenceNumber < channel -> incomingReliableSequenceNumber) + startWindow += ENET_PEER_RELIABLE_WINDOWS; + + if (startWindow < currentWindow || startWindow >= currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS - 1) + return 0; + + fragmentNumber = ENET_NET_TO_HOST_32 (command -> sendFragment.fragmentNumber); + fragmentCount = ENET_NET_TO_HOST_32 (command -> sendFragment.fragmentCount); + fragmentOffset = ENET_NET_TO_HOST_32 (command -> sendFragment.fragmentOffset); + totalLength = ENET_NET_TO_HOST_32 (command -> sendFragment.totalLength); + + if (fragmentCount > ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT || + fragmentNumber >= fragmentCount || + totalLength > host -> maximumPacketSize || + fragmentOffset >= totalLength || + fragmentLength > totalLength - fragmentOffset) + return -1; + + for (currentCommand = enet_list_previous (enet_list_end (& channel -> incomingReliableCommands)); + currentCommand != enet_list_end (& channel -> incomingReliableCommands); + currentCommand = enet_list_previous (currentCommand)) + { + ENetIncomingCommand * incomingCommand = (ENetIncomingCommand *) currentCommand; + + if (startSequenceNumber >= channel -> incomingReliableSequenceNumber) + { + if (incomingCommand -> reliableSequenceNumber < channel -> incomingReliableSequenceNumber) + continue; + } + else + if (incomingCommand -> reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) + break; + + if (incomingCommand -> reliableSequenceNumber <= startSequenceNumber) + { + if (incomingCommand -> reliableSequenceNumber < startSequenceNumber) + break; + + if ((incomingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK) != ENET_PROTOCOL_COMMAND_SEND_FRAGMENT || + totalLength != incomingCommand -> packet -> dataLength || + fragmentCount != incomingCommand -> fragmentCount) + return -1; + + startCommand = incomingCommand; + break; + } + } + + if (startCommand == NULL) + { + ENetProtocol hostCommand = * command; + + hostCommand.header.reliableSequenceNumber = startSequenceNumber; + + startCommand = enet_peer_queue_incoming_command (peer, & hostCommand, NULL, totalLength, ENET_PACKET_FLAG_RELIABLE, fragmentCount); + if (startCommand == NULL) + return -1; + } + + if ((startCommand -> fragments [fragmentNumber / 32] & (1 << (fragmentNumber % 32))) == 0) + { + -- startCommand -> fragmentsRemaining; + + startCommand -> fragments [fragmentNumber / 32] |= (1 << (fragmentNumber % 32)); + + if (fragmentOffset + fragmentLength > startCommand -> packet -> dataLength) + fragmentLength = startCommand -> packet -> dataLength - fragmentOffset; + + memcpy (startCommand -> packet -> data + fragmentOffset, + (enet_uint8 *) command + sizeof (ENetProtocolSendFragment), + fragmentLength); + + if (startCommand -> fragmentsRemaining <= 0) + enet_peer_dispatch_incoming_reliable_commands (peer, channel); + } + + return 0; +} + +static int +enet_protocol_handle_send_unreliable_fragment (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) +{ + enet_uint32 fragmentNumber, + fragmentCount, + fragmentOffset, + fragmentLength, + reliableSequenceNumber, + startSequenceNumber, + totalLength; + enet_uint16 reliableWindow, currentWindow; + ENetChannel * channel; + ENetListIterator currentCommand; + ENetIncomingCommand * startCommand = NULL; + + if (command -> header.channelID >= peer -> channelCount || + (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER)) + return -1; + + fragmentLength = ENET_NET_TO_HOST_16 (command -> sendFragment.dataLength); + * currentData += fragmentLength; + if (fragmentLength > host -> maximumPacketSize || + * currentData < host -> receivedData || + * currentData > & host -> receivedData [host -> receivedDataLength]) + return -1; + + channel = & peer -> channels [command -> header.channelID]; + reliableSequenceNumber = command -> header.reliableSequenceNumber; + startSequenceNumber = ENET_NET_TO_HOST_16 (command -> sendFragment.startSequenceNumber); + + reliableWindow = reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; + currentWindow = channel -> incomingReliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; + + if (reliableSequenceNumber < channel -> incomingReliableSequenceNumber) + reliableWindow += ENET_PEER_RELIABLE_WINDOWS; + + if (reliableWindow < currentWindow || reliableWindow >= currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS - 1) + return 0; + + if (reliableSequenceNumber == channel -> incomingReliableSequenceNumber && + startSequenceNumber <= channel -> incomingUnreliableSequenceNumber) + return 0; + + fragmentNumber = ENET_NET_TO_HOST_32 (command -> sendFragment.fragmentNumber); + fragmentCount = ENET_NET_TO_HOST_32 (command -> sendFragment.fragmentCount); + fragmentOffset = ENET_NET_TO_HOST_32 (command -> sendFragment.fragmentOffset); + totalLength = ENET_NET_TO_HOST_32 (command -> sendFragment.totalLength); + + if (fragmentCount > ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT || + fragmentNumber >= fragmentCount || + totalLength > host -> maximumPacketSize || + fragmentOffset >= totalLength || + fragmentLength > totalLength - fragmentOffset) + return -1; + + for (currentCommand = enet_list_previous (enet_list_end (& channel -> incomingUnreliableCommands)); + currentCommand != enet_list_end (& channel -> incomingUnreliableCommands); + currentCommand = enet_list_previous (currentCommand)) + { + ENetIncomingCommand * incomingCommand = (ENetIncomingCommand *) currentCommand; + + if (reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) + { + if (incomingCommand -> reliableSequenceNumber < channel -> incomingReliableSequenceNumber) + continue; + } + else + if (incomingCommand -> reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) + break; + + if (incomingCommand -> reliableSequenceNumber < reliableSequenceNumber) + break; + + if (incomingCommand -> reliableSequenceNumber > reliableSequenceNumber) + continue; + + if (incomingCommand -> unreliableSequenceNumber <= startSequenceNumber) + { + if (incomingCommand -> unreliableSequenceNumber < startSequenceNumber) + break; + + if ((incomingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK) != ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT || + totalLength != incomingCommand -> packet -> dataLength || + fragmentCount != incomingCommand -> fragmentCount) + return -1; + + startCommand = incomingCommand; + break; + } + } + + if (startCommand == NULL) + { + startCommand = enet_peer_queue_incoming_command (peer, command, NULL, totalLength, ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT, fragmentCount); + if (startCommand == NULL) + return -1; + } + + if ((startCommand -> fragments [fragmentNumber / 32] & (1 << (fragmentNumber % 32))) == 0) + { + -- startCommand -> fragmentsRemaining; + + startCommand -> fragments [fragmentNumber / 32] |= (1 << (fragmentNumber % 32)); + + if (fragmentOffset + fragmentLength > startCommand -> packet -> dataLength) + fragmentLength = startCommand -> packet -> dataLength - fragmentOffset; + + memcpy (startCommand -> packet -> data + fragmentOffset, + (enet_uint8 *) command + sizeof (ENetProtocolSendFragment), + fragmentLength); + + if (startCommand -> fragmentsRemaining <= 0) + enet_peer_dispatch_incoming_unreliable_commands (peer, channel); + } + + return 0; +} + +static int +enet_protocol_handle_ping (ENetHost * host, ENetPeer * peer, const ENetProtocol * command) +{ + if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) + return -1; + + return 0; +} + +static int +enet_protocol_handle_bandwidth_limit (ENetHost * host, ENetPeer * peer, const ENetProtocol * command) +{ + if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) + return -1; + + if (peer -> incomingBandwidth != 0) + -- host -> bandwidthLimitedPeers; + + peer -> incomingBandwidth = ENET_NET_TO_HOST_32 (command -> bandwidthLimit.incomingBandwidth); + peer -> outgoingBandwidth = ENET_NET_TO_HOST_32 (command -> bandwidthLimit.outgoingBandwidth); + + if (peer -> incomingBandwidth != 0) + ++ host -> bandwidthLimitedPeers; + + if (peer -> incomingBandwidth == 0 && host -> outgoingBandwidth == 0) + peer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; + else + if (peer -> incomingBandwidth == 0 || host -> outgoingBandwidth == 0) + peer -> windowSize = (ENET_MAX (peer -> incomingBandwidth, host -> outgoingBandwidth) / + ENET_PEER_WINDOW_SIZE_SCALE) * ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; + else + peer -> windowSize = (ENET_MIN (peer -> incomingBandwidth, host -> outgoingBandwidth) / + ENET_PEER_WINDOW_SIZE_SCALE) * ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; + + if (peer -> windowSize < ENET_PROTOCOL_MINIMUM_WINDOW_SIZE) + peer -> windowSize = ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; + else + if (peer -> windowSize > ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE) + peer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; + + return 0; +} + +static int +enet_protocol_handle_throttle_configure (ENetHost * host, ENetPeer * peer, const ENetProtocol * command) +{ + if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) + return -1; + + peer -> packetThrottleInterval = ENET_NET_TO_HOST_32 (command -> throttleConfigure.packetThrottleInterval); + peer -> packetThrottleAcceleration = ENET_NET_TO_HOST_32 (command -> throttleConfigure.packetThrottleAcceleration); + peer -> packetThrottleDeceleration = ENET_NET_TO_HOST_32 (command -> throttleConfigure.packetThrottleDeceleration); + + return 0; +} + +static int +enet_protocol_handle_disconnect (ENetHost * host, ENetPeer * peer, const ENetProtocol * command) +{ + if (peer -> state == ENET_PEER_STATE_DISCONNECTED || peer -> state == ENET_PEER_STATE_ZOMBIE || peer -> state == ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT) + return 0; + + enet_peer_reset_queues (peer); + + if (peer -> state == ENET_PEER_STATE_CONNECTION_SUCCEEDED || peer -> state == ENET_PEER_STATE_DISCONNECTING || peer -> state == ENET_PEER_STATE_CONNECTING) + enet_protocol_dispatch_state (host, peer, ENET_PEER_STATE_ZOMBIE); + else + if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) + { + if (peer -> state == ENET_PEER_STATE_CONNECTION_PENDING) host -> recalculateBandwidthLimits = 1; + + enet_peer_reset (peer); + } + else + if (command -> header.command & ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE) + enet_protocol_change_state (host, peer, ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT); + else + enet_protocol_dispatch_state (host, peer, ENET_PEER_STATE_ZOMBIE); + + if (peer -> state != ENET_PEER_STATE_DISCONNECTED) + peer -> eventData = ENET_NET_TO_HOST_32 (command -> disconnect.data); + + return 0; +} + +static int +enet_protocol_handle_acknowledge (ENetHost * host, ENetEvent * event, ENetPeer * peer, const ENetProtocol * command) +{ + enet_uint32 roundTripTime, + receivedSentTime, + receivedReliableSequenceNumber; + ENetProtocolCommand commandNumber; + + if (peer -> state == ENET_PEER_STATE_DISCONNECTED || peer -> state == ENET_PEER_STATE_ZOMBIE) + return 0; + + receivedSentTime = ENET_NET_TO_HOST_16 (command -> acknowledge.receivedSentTime); + receivedSentTime |= host -> serviceTime & 0xFFFF0000; + if ((receivedSentTime & 0x8000) > (host -> serviceTime & 0x8000)) + receivedSentTime -= 0x10000; + + if (ENET_TIME_LESS (host -> serviceTime, receivedSentTime)) + return 0; + + peer -> lastReceiveTime = host -> serviceTime; + peer -> earliestTimeout = 0; + + roundTripTime = ENET_TIME_DIFFERENCE (host -> serviceTime, receivedSentTime); + + enet_peer_throttle (peer, roundTripTime); + + peer -> roundTripTimeVariance -= peer -> roundTripTimeVariance / 4; + + if (roundTripTime >= peer -> roundTripTime) + { + peer -> roundTripTime += (roundTripTime - peer -> roundTripTime) / 8; + peer -> roundTripTimeVariance += (roundTripTime - peer -> roundTripTime) / 4; + } + else + { + peer -> roundTripTime -= (peer -> roundTripTime - roundTripTime) / 8; + peer -> roundTripTimeVariance += (peer -> roundTripTime - roundTripTime) / 4; + } + + if (peer -> roundTripTime < peer -> lowestRoundTripTime) + peer -> lowestRoundTripTime = peer -> roundTripTime; + + if (peer -> roundTripTimeVariance > peer -> highestRoundTripTimeVariance) + peer -> highestRoundTripTimeVariance = peer -> roundTripTimeVariance; + + if (peer -> packetThrottleEpoch == 0 || + ENET_TIME_DIFFERENCE (host -> serviceTime, peer -> packetThrottleEpoch) >= peer -> packetThrottleInterval) + { + peer -> lastRoundTripTime = peer -> lowestRoundTripTime; + peer -> lastRoundTripTimeVariance = peer -> highestRoundTripTimeVariance; + peer -> lowestRoundTripTime = peer -> roundTripTime; + peer -> highestRoundTripTimeVariance = peer -> roundTripTimeVariance; + peer -> packetThrottleEpoch = host -> serviceTime; + } + + receivedReliableSequenceNumber = ENET_NET_TO_HOST_16 (command -> acknowledge.receivedReliableSequenceNumber); + + commandNumber = enet_protocol_remove_sent_reliable_command (peer, receivedReliableSequenceNumber, command -> header.channelID); + + switch (peer -> state) + { + case ENET_PEER_STATE_ACKNOWLEDGING_CONNECT: + if (commandNumber != ENET_PROTOCOL_COMMAND_VERIFY_CONNECT) + return -1; + + enet_protocol_notify_connect (host, peer, event); + break; + + case ENET_PEER_STATE_DISCONNECTING: + if (commandNumber != ENET_PROTOCOL_COMMAND_DISCONNECT) + return -1; + + enet_protocol_notify_disconnect (host, peer, event); + break; + + case ENET_PEER_STATE_DISCONNECT_LATER: + if (enet_list_empty (& peer -> outgoingReliableCommands) && + enet_list_empty (& peer -> outgoingUnreliableCommands) && + enet_list_empty (& peer -> sentReliableCommands)) + enet_peer_disconnect (peer, peer -> eventData); + break; + + default: + break; + } + + return 0; +} + +static int +enet_protocol_handle_verify_connect (ENetHost * host, ENetEvent * event, ENetPeer * peer, const ENetProtocol * command) +{ + enet_uint32 mtu, windowSize; + size_t channelCount; + + if (peer -> state != ENET_PEER_STATE_CONNECTING) + return 0; + + channelCount = ENET_NET_TO_HOST_32 (command -> verifyConnect.channelCount); + + if (channelCount < ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT || channelCount > ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT || + ENET_NET_TO_HOST_32 (command -> verifyConnect.packetThrottleInterval) != peer -> packetThrottleInterval || + ENET_NET_TO_HOST_32 (command -> verifyConnect.packetThrottleAcceleration) != peer -> packetThrottleAcceleration || + ENET_NET_TO_HOST_32 (command -> verifyConnect.packetThrottleDeceleration) != peer -> packetThrottleDeceleration || + command -> verifyConnect.connectID != peer -> connectID) + { + peer -> eventData = 0; + + enet_protocol_dispatch_state (host, peer, ENET_PEER_STATE_ZOMBIE); + + return -1; + } + + enet_protocol_remove_sent_reliable_command (peer, 1, 0xFF); + + if (channelCount < peer -> channelCount) + peer -> channelCount = channelCount; + + peer -> outgoingPeerID = ENET_NET_TO_HOST_16 (command -> verifyConnect.outgoingPeerID); + peer -> incomingSessionID = command -> verifyConnect.incomingSessionID; + peer -> outgoingSessionID = command -> verifyConnect.outgoingSessionID; + + mtu = ENET_NET_TO_HOST_32 (command -> verifyConnect.mtu); + + if (mtu < ENET_PROTOCOL_MINIMUM_MTU) + mtu = ENET_PROTOCOL_MINIMUM_MTU; + else + if (mtu > ENET_PROTOCOL_MAXIMUM_MTU) + mtu = ENET_PROTOCOL_MAXIMUM_MTU; + + if (mtu < peer -> mtu) + peer -> mtu = mtu; + + windowSize = ENET_NET_TO_HOST_32 (command -> verifyConnect.windowSize); + + if (windowSize < ENET_PROTOCOL_MINIMUM_WINDOW_SIZE) + windowSize = ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; + + if (windowSize > ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE) + windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; + + if (windowSize < peer -> windowSize) + peer -> windowSize = windowSize; + + peer -> incomingBandwidth = ENET_NET_TO_HOST_32 (command -> verifyConnect.incomingBandwidth); + peer -> outgoingBandwidth = ENET_NET_TO_HOST_32 (command -> verifyConnect.outgoingBandwidth); + + enet_protocol_notify_connect (host, peer, event); + return 0; +} + +static int +enet_protocol_handle_incoming_commands (ENetHost * host, ENetEvent * event) +{ + ENetProtocolHeader * header; + ENetProtocol * command; + ENetPeer * peer; + enet_uint8 * currentData; + size_t headerSize; + enet_uint16 peerID, flags; + enet_uint8 sessionID; + + if (host -> receivedDataLength < (size_t) & ((ENetProtocolHeader *) 0) -> sentTime) + return 0; + + header = (ENetProtocolHeader *) host -> receivedData; + + peerID = ENET_NET_TO_HOST_16 (header -> peerID); + sessionID = (peerID & ENET_PROTOCOL_HEADER_SESSION_MASK) >> ENET_PROTOCOL_HEADER_SESSION_SHIFT; + flags = peerID & ENET_PROTOCOL_HEADER_FLAG_MASK; + peerID &= ~ (ENET_PROTOCOL_HEADER_FLAG_MASK | ENET_PROTOCOL_HEADER_SESSION_MASK); + + headerSize = (flags & ENET_PROTOCOL_HEADER_FLAG_SENT_TIME ? sizeof (ENetProtocolHeader) : (size_t) & ((ENetProtocolHeader *) 0) -> sentTime); + if (host -> checksum != NULL) + headerSize += sizeof (enet_uint32); + + if (peerID == ENET_PROTOCOL_MAXIMUM_PEER_ID) + peer = NULL; + else + if (peerID >= host -> peerCount) + return 0; + else + { + peer = & host -> peers [peerID]; + + if (peer -> state == ENET_PEER_STATE_DISCONNECTED || + peer -> state == ENET_PEER_STATE_ZOMBIE || + ((host -> receivedAddress.host != peer -> address.host || + host -> receivedAddress.port != peer -> address.port) && + peer -> address.host != ENET_HOST_BROADCAST) || + (peer -> outgoingPeerID < ENET_PROTOCOL_MAXIMUM_PEER_ID && + sessionID != peer -> incomingSessionID)) + return 0; + } + + if (flags & ENET_PROTOCOL_HEADER_FLAG_COMPRESSED) + { + size_t originalSize; + if (host -> compressor.context == NULL || host -> compressor.decompress == NULL) + return 0; + + originalSize = host -> compressor.decompress (host -> compressor.context, + host -> receivedData + headerSize, + host -> receivedDataLength - headerSize, + host -> packetData [1] + headerSize, + sizeof (host -> packetData [1]) - headerSize); + if (originalSize <= 0 || originalSize > sizeof (host -> packetData [1]) - headerSize) + return 0; + + memcpy (host -> packetData [1], header, headerSize); + host -> receivedData = host -> packetData [1]; + host -> receivedDataLength = headerSize + originalSize; + } + + if (host -> checksum != NULL) + { + enet_uint32 * checksum = (enet_uint32 *) & host -> receivedData [headerSize - sizeof (enet_uint32)], + desiredChecksum = * checksum; + ENetBuffer buffer; + + * checksum = peer != NULL ? peer -> connectID : 0; + + buffer.data = host -> receivedData; + buffer.dataLength = host -> receivedDataLength; + + if (host -> checksum (& buffer, 1) != desiredChecksum) + return 0; + } + + if (peer != NULL) + { + peer -> address.host = host -> receivedAddress.host; + peer -> address.port = host -> receivedAddress.port; + peer -> incomingDataTotal += host -> receivedDataLength; + } + + currentData = host -> receivedData + headerSize; + + while (currentData < & host -> receivedData [host -> receivedDataLength]) + { + enet_uint8 commandNumber; + size_t commandSize; + + command = (ENetProtocol *) currentData; + + if (currentData + sizeof (ENetProtocolCommandHeader) > & host -> receivedData [host -> receivedDataLength]) + break; + + commandNumber = command -> header.command & ENET_PROTOCOL_COMMAND_MASK; + if (commandNumber >= ENET_PROTOCOL_COMMAND_COUNT) + break; + + commandSize = commandSizes [commandNumber]; + if (commandSize == 0 || currentData + commandSize > & host -> receivedData [host -> receivedDataLength]) + break; + + currentData += commandSize; + + if (peer == NULL && commandNumber != ENET_PROTOCOL_COMMAND_CONNECT) + break; + + command -> header.reliableSequenceNumber = ENET_NET_TO_HOST_16 (command -> header.reliableSequenceNumber); + + switch (commandNumber) + { + case ENET_PROTOCOL_COMMAND_ACKNOWLEDGE: + if (enet_protocol_handle_acknowledge (host, event, peer, command)) + goto commandError; + break; + + case ENET_PROTOCOL_COMMAND_CONNECT: + if (peer != NULL) + goto commandError; + peer = enet_protocol_handle_connect (host, header, command); + if (peer == NULL) + goto commandError; + break; + + case ENET_PROTOCOL_COMMAND_VERIFY_CONNECT: + if (enet_protocol_handle_verify_connect (host, event, peer, command)) + goto commandError; + break; + + case ENET_PROTOCOL_COMMAND_DISCONNECT: + if (enet_protocol_handle_disconnect (host, peer, command)) + goto commandError; + break; + + case ENET_PROTOCOL_COMMAND_PING: + if (enet_protocol_handle_ping (host, peer, command)) + goto commandError; + break; + + case ENET_PROTOCOL_COMMAND_SEND_RELIABLE: + if (enet_protocol_handle_send_reliable (host, peer, command, & currentData)) + goto commandError; + break; + + case ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE: + if (enet_protocol_handle_send_unreliable (host, peer, command, & currentData)) + goto commandError; + break; + + case ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED: + if (enet_protocol_handle_send_unsequenced (host, peer, command, & currentData)) + goto commandError; + break; + + case ENET_PROTOCOL_COMMAND_SEND_FRAGMENT: + if (enet_protocol_handle_send_fragment (host, peer, command, & currentData)) + goto commandError; + break; + + case ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT: + if (enet_protocol_handle_bandwidth_limit (host, peer, command)) + goto commandError; + break; + + case ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE: + if (enet_protocol_handle_throttle_configure (host, peer, command)) + goto commandError; + break; + + case ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT: + if (enet_protocol_handle_send_unreliable_fragment (host, peer, command, & currentData)) + goto commandError; + break; + + default: + goto commandError; + } + + if (peer != NULL && + (command -> header.command & ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE) != 0) + { + enet_uint16 sentTime; + + if (! (flags & ENET_PROTOCOL_HEADER_FLAG_SENT_TIME)) + break; + + sentTime = ENET_NET_TO_HOST_16 (header -> sentTime); + + switch (peer -> state) + { + case ENET_PEER_STATE_DISCONNECTING: + case ENET_PEER_STATE_ACKNOWLEDGING_CONNECT: + case ENET_PEER_STATE_DISCONNECTED: + case ENET_PEER_STATE_ZOMBIE: + break; + + case ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT: + if ((command -> header.command & ENET_PROTOCOL_COMMAND_MASK) == ENET_PROTOCOL_COMMAND_DISCONNECT) + enet_peer_queue_acknowledgement (peer, command, sentTime); + break; + + default: + enet_peer_queue_acknowledgement (peer, command, sentTime); + break; + } + } + } + +commandError: + if (event != NULL && event -> type != ENET_EVENT_TYPE_NONE) + return 1; + + return 0; +} + +static int +enet_protocol_receive_incoming_commands (ENetHost * host, ENetEvent * event) +{ + int packets; + + for (packets = 0; packets < 256; ++ packets) + { + int receivedLength; + ENetBuffer buffer; + + buffer.data = host -> packetData [0]; + buffer.dataLength = sizeof (host -> packetData [0]); + + receivedLength = enet_socket_receive (host -> socket, + & host -> receivedAddress, + & buffer, + 1); + + if (receivedLength < 0) + return -1; + + if (receivedLength == 0) + return 0; + + host -> receivedData = host -> packetData [0]; + host -> receivedDataLength = receivedLength; + + host -> totalReceivedData += receivedLength; + host -> totalReceivedPackets ++; + + if (host -> intercept != NULL) + { + switch (host -> intercept (host, event)) + { + case 1: + if (event != NULL && event -> type != ENET_EVENT_TYPE_NONE) + return 1; + + continue; + + case -1: + return -1; + + default: + break; + } + } + + switch (enet_protocol_handle_incoming_commands (host, event)) + { + case 1: + return 1; + + case -1: + return -1; + + default: + break; + } + } + + return -1; +} + +static void +enet_protocol_send_acknowledgements (ENetHost * host, ENetPeer * peer) +{ + ENetProtocol * command = & host -> commands [host -> commandCount]; + ENetBuffer * buffer = & host -> buffers [host -> bufferCount]; + ENetAcknowledgement * acknowledgement; + ENetListIterator currentAcknowledgement; + enet_uint16 reliableSequenceNumber; + + currentAcknowledgement = enet_list_begin (& peer -> acknowledgements); + + while (currentAcknowledgement != enet_list_end (& peer -> acknowledgements)) + { + if (command >= & host -> commands [sizeof (host -> commands) / sizeof (ENetProtocol)] || + buffer >= & host -> buffers [sizeof (host -> buffers) / sizeof (ENetBuffer)] || + peer -> mtu - host -> packetSize < sizeof (ENetProtocolAcknowledge)) + { + host -> continueSending = 1; + + break; + } + + acknowledgement = (ENetAcknowledgement *) currentAcknowledgement; + + currentAcknowledgement = enet_list_next (currentAcknowledgement); + + buffer -> data = command; + buffer -> dataLength = sizeof (ENetProtocolAcknowledge); + + host -> packetSize += buffer -> dataLength; + + reliableSequenceNumber = ENET_HOST_TO_NET_16 (acknowledgement -> command.header.reliableSequenceNumber); + + command -> header.command = ENET_PROTOCOL_COMMAND_ACKNOWLEDGE; + command -> header.channelID = acknowledgement -> command.header.channelID; + command -> header.reliableSequenceNumber = reliableSequenceNumber; + command -> acknowledge.receivedReliableSequenceNumber = reliableSequenceNumber; + command -> acknowledge.receivedSentTime = ENET_HOST_TO_NET_16 (acknowledgement -> sentTime); + + if ((acknowledgement -> command.header.command & ENET_PROTOCOL_COMMAND_MASK) == ENET_PROTOCOL_COMMAND_DISCONNECT) + enet_protocol_dispatch_state (host, peer, ENET_PEER_STATE_ZOMBIE); + + enet_list_remove (& acknowledgement -> acknowledgementList); + enet_free (acknowledgement); + + ++ command; + ++ buffer; + } + + host -> commandCount = command - host -> commands; + host -> bufferCount = buffer - host -> buffers; +} + +static void +enet_protocol_send_unreliable_outgoing_commands (ENetHost * host, ENetPeer * peer) +{ + ENetProtocol * command = & host -> commands [host -> commandCount]; + ENetBuffer * buffer = & host -> buffers [host -> bufferCount]; + ENetOutgoingCommand * outgoingCommand; + ENetListIterator currentCommand; + + currentCommand = enet_list_begin (& peer -> outgoingUnreliableCommands); + + while (currentCommand != enet_list_end (& peer -> outgoingUnreliableCommands)) + { + size_t commandSize; + + outgoingCommand = (ENetOutgoingCommand *) currentCommand; + commandSize = commandSizes [outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK]; + + if (command >= & host -> commands [sizeof (host -> commands) / sizeof (ENetProtocol)] || + buffer + 1 >= & host -> buffers [sizeof (host -> buffers) / sizeof (ENetBuffer)] || + peer -> mtu - host -> packetSize < commandSize || + (outgoingCommand -> packet != NULL && + peer -> mtu - host -> packetSize < commandSize + outgoingCommand -> fragmentLength)) + { + host -> continueSending = 1; + + break; + } + + currentCommand = enet_list_next (currentCommand); + + if (outgoingCommand -> packet != NULL && outgoingCommand -> fragmentOffset == 0) + { + peer -> packetThrottleCounter += ENET_PEER_PACKET_THROTTLE_COUNTER; + peer -> packetThrottleCounter %= ENET_PEER_PACKET_THROTTLE_SCALE; + + if (peer -> packetThrottleCounter > peer -> packetThrottle) + { + enet_uint16 reliableSequenceNumber = outgoingCommand -> reliableSequenceNumber, + unreliableSequenceNumber = outgoingCommand -> unreliableSequenceNumber; + for (;;) + { + -- outgoingCommand -> packet -> referenceCount; + + if (outgoingCommand -> packet -> referenceCount == 0) + enet_packet_destroy (outgoingCommand -> packet); + + enet_list_remove (& outgoingCommand -> outgoingCommandList); + enet_free (outgoingCommand); + + if (currentCommand == enet_list_end (& peer -> outgoingUnreliableCommands)) + break; + + outgoingCommand = (ENetOutgoingCommand *) currentCommand; + if (outgoingCommand -> reliableSequenceNumber != reliableSequenceNumber || + outgoingCommand -> unreliableSequenceNumber != unreliableSequenceNumber) + break; + + currentCommand = enet_list_next (currentCommand); + } + + continue; + } + } + + buffer -> data = command; + buffer -> dataLength = commandSize; + + host -> packetSize += buffer -> dataLength; + + * command = outgoingCommand -> command; + + enet_list_remove (& outgoingCommand -> outgoingCommandList); + + if (outgoingCommand -> packet != NULL) + { + ++ buffer; + + buffer -> data = outgoingCommand -> packet -> data + outgoingCommand -> fragmentOffset; + buffer -> dataLength = outgoingCommand -> fragmentLength; + + host -> packetSize += buffer -> dataLength; + + enet_list_insert (enet_list_end (& peer -> sentUnreliableCommands), outgoingCommand); + } + else + enet_free (outgoingCommand); + + ++ command; + ++ buffer; + } + + host -> commandCount = command - host -> commands; + host -> bufferCount = buffer - host -> buffers; + + if (peer -> state == ENET_PEER_STATE_DISCONNECT_LATER && + enet_list_empty (& peer -> outgoingReliableCommands) && + enet_list_empty (& peer -> outgoingUnreliableCommands) && + enet_list_empty (& peer -> sentReliableCommands)) + enet_peer_disconnect (peer, peer -> eventData); +} + +static int +enet_protocol_check_timeouts (ENetHost * host, ENetPeer * peer, ENetEvent * event) +{ + ENetOutgoingCommand * outgoingCommand; + ENetListIterator currentCommand, insertPosition; + + currentCommand = enet_list_begin (& peer -> sentReliableCommands); + insertPosition = enet_list_begin (& peer -> outgoingReliableCommands); + + while (currentCommand != enet_list_end (& peer -> sentReliableCommands)) + { + outgoingCommand = (ENetOutgoingCommand *) currentCommand; + + currentCommand = enet_list_next (currentCommand); + + if (ENET_TIME_DIFFERENCE (host -> serviceTime, outgoingCommand -> sentTime) < outgoingCommand -> roundTripTimeout) + continue; + + if (peer -> earliestTimeout == 0 || + ENET_TIME_LESS (outgoingCommand -> sentTime, peer -> earliestTimeout)) + peer -> earliestTimeout = outgoingCommand -> sentTime; + + if (peer -> earliestTimeout != 0 && + (ENET_TIME_DIFFERENCE (host -> serviceTime, peer -> earliestTimeout) >= peer -> timeoutMaximum || + (outgoingCommand -> roundTripTimeout >= outgoingCommand -> roundTripTimeoutLimit && + ENET_TIME_DIFFERENCE (host -> serviceTime, peer -> earliestTimeout) >= peer -> timeoutMinimum))) + { + enet_protocol_notify_disconnect (host, peer, event); + + return 1; + } + + if (outgoingCommand -> packet != NULL) + peer -> reliableDataInTransit -= outgoingCommand -> fragmentLength; + + ++ peer -> packetsLost; + + outgoingCommand -> roundTripTimeout *= 2; + + enet_list_insert (insertPosition, enet_list_remove (& outgoingCommand -> outgoingCommandList)); + + if (currentCommand == enet_list_begin (& peer -> sentReliableCommands) && + ! enet_list_empty (& peer -> sentReliableCommands)) + { + outgoingCommand = (ENetOutgoingCommand *) currentCommand; + + peer -> nextTimeout = outgoingCommand -> sentTime + outgoingCommand -> roundTripTimeout; + } + } + + return 0; +} + +static int +enet_protocol_send_reliable_outgoing_commands (ENetHost * host, ENetPeer * peer) +{ + ENetProtocol * command = & host -> commands [host -> commandCount]; + ENetBuffer * buffer = & host -> buffers [host -> bufferCount]; + ENetOutgoingCommand * outgoingCommand; + ENetListIterator currentCommand; + ENetChannel *channel; + enet_uint16 reliableWindow; + size_t commandSize; + int windowExceeded = 0, windowWrap = 0, canPing = 1; + + currentCommand = enet_list_begin (& peer -> outgoingReliableCommands); + + while (currentCommand != enet_list_end (& peer -> outgoingReliableCommands)) + { + outgoingCommand = (ENetOutgoingCommand *) currentCommand; + + channel = outgoingCommand -> command.header.channelID < peer -> channelCount ? & peer -> channels [outgoingCommand -> command.header.channelID] : NULL; + reliableWindow = outgoingCommand -> reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; + if (channel != NULL) + { + if (! windowWrap && + outgoingCommand -> sendAttempts < 1 && + ! (outgoingCommand -> reliableSequenceNumber % ENET_PEER_RELIABLE_WINDOW_SIZE) && + (channel -> reliableWindows [(reliableWindow + ENET_PEER_RELIABLE_WINDOWS - 1) % ENET_PEER_RELIABLE_WINDOWS] >= ENET_PEER_RELIABLE_WINDOW_SIZE || + channel -> usedReliableWindows & ((((1 << ENET_PEER_FREE_RELIABLE_WINDOWS) - 1) << reliableWindow) | + (((1 << ENET_PEER_FREE_RELIABLE_WINDOWS) - 1) >> (ENET_PEER_RELIABLE_WINDOWS - reliableWindow))))) + windowWrap = 1; + if (windowWrap) + { + currentCommand = enet_list_next (currentCommand); + + continue; + } + } + + if (outgoingCommand -> packet != NULL) + { + if (! windowExceeded) + { + enet_uint32 windowSize = (peer -> packetThrottle * peer -> windowSize) / ENET_PEER_PACKET_THROTTLE_SCALE; + + if (peer -> reliableDataInTransit + outgoingCommand -> fragmentLength > ENET_MAX (windowSize, peer -> mtu)) + windowExceeded = 1; + } + if (windowExceeded) + { + currentCommand = enet_list_next (currentCommand); + + continue; + } + } + + canPing = 0; + + commandSize = commandSizes [outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK]; + if (command >= & host -> commands [sizeof (host -> commands) / sizeof (ENetProtocol)] || + buffer + 1 >= & host -> buffers [sizeof (host -> buffers) / sizeof (ENetBuffer)] || + peer -> mtu - host -> packetSize < commandSize || + (outgoingCommand -> packet != NULL && + (enet_uint16) (peer -> mtu - host -> packetSize) < (enet_uint16) (commandSize + outgoingCommand -> fragmentLength))) + { + host -> continueSending = 1; + + break; + } + + currentCommand = enet_list_next (currentCommand); + + if (channel != NULL && outgoingCommand -> sendAttempts < 1) + { + channel -> usedReliableWindows |= 1 << reliableWindow; + ++ channel -> reliableWindows [reliableWindow]; + } + + ++ outgoingCommand -> sendAttempts; + + if (outgoingCommand -> roundTripTimeout == 0) + { + outgoingCommand -> roundTripTimeout = peer -> roundTripTime + 4 * peer -> roundTripTimeVariance; + outgoingCommand -> roundTripTimeoutLimit = peer -> timeoutLimit * outgoingCommand -> roundTripTimeout; + } + + if (enet_list_empty (& peer -> sentReliableCommands)) + peer -> nextTimeout = host -> serviceTime + outgoingCommand -> roundTripTimeout; + + enet_list_insert (enet_list_end (& peer -> sentReliableCommands), + enet_list_remove (& outgoingCommand -> outgoingCommandList)); + + outgoingCommand -> sentTime = host -> serviceTime; + + buffer -> data = command; + buffer -> dataLength = commandSize; + + host -> packetSize += buffer -> dataLength; + host -> headerFlags |= ENET_PROTOCOL_HEADER_FLAG_SENT_TIME; + + * command = outgoingCommand -> command; + + if (outgoingCommand -> packet != NULL) + { + ++ buffer; + + buffer -> data = outgoingCommand -> packet -> data + outgoingCommand -> fragmentOffset; + buffer -> dataLength = outgoingCommand -> fragmentLength; + + host -> packetSize += outgoingCommand -> fragmentLength; + + peer -> reliableDataInTransit += outgoingCommand -> fragmentLength; + } + + ++ peer -> packetsSent; + + ++ command; + ++ buffer; + } + + host -> commandCount = command - host -> commands; + host -> bufferCount = buffer - host -> buffers; + + return canPing; +} + +static int +enet_protocol_send_outgoing_commands (ENetHost * host, ENetEvent * event, int checkForTimeouts) +{ + enet_uint8 headerData [sizeof (ENetProtocolHeader) + sizeof (enet_uint32)]; + ENetProtocolHeader * header = (ENetProtocolHeader *) headerData; + ENetPeer * currentPeer; + int sentLength; + size_t shouldCompress = 0; + + host -> continueSending = 1; + + while (host -> continueSending) + for (host -> continueSending = 0, + currentPeer = host -> peers; + currentPeer < & host -> peers [host -> peerCount]; + ++ currentPeer) + { + if (currentPeer -> state == ENET_PEER_STATE_DISCONNECTED || + currentPeer -> state == ENET_PEER_STATE_ZOMBIE) + continue; + + host -> headerFlags = 0; + host -> commandCount = 0; + host -> bufferCount = 1; + host -> packetSize = sizeof (ENetProtocolHeader); + + if (! enet_list_empty (& currentPeer -> acknowledgements)) + enet_protocol_send_acknowledgements (host, currentPeer); + + if (checkForTimeouts != 0 && + ! enet_list_empty (& currentPeer -> sentReliableCommands) && + ENET_TIME_GREATER_EQUAL (host -> serviceTime, currentPeer -> nextTimeout) && + enet_protocol_check_timeouts (host, currentPeer, event) == 1) + { + if (event != NULL && event -> type != ENET_EVENT_TYPE_NONE) + return 1; + else + continue; + } + + if ((enet_list_empty (& currentPeer -> outgoingReliableCommands) || + enet_protocol_send_reliable_outgoing_commands (host, currentPeer)) && + enet_list_empty (& currentPeer -> sentReliableCommands) && + ENET_TIME_DIFFERENCE (host -> serviceTime, currentPeer -> lastReceiveTime) >= currentPeer -> pingInterval && + currentPeer -> mtu - host -> packetSize >= sizeof (ENetProtocolPing)) + { + enet_peer_ping (currentPeer); + enet_protocol_send_reliable_outgoing_commands (host, currentPeer); + } + + if (! enet_list_empty (& currentPeer -> outgoingUnreliableCommands)) + enet_protocol_send_unreliable_outgoing_commands (host, currentPeer); + + if (host -> commandCount == 0) + continue; + + if (currentPeer -> packetLossEpoch == 0) + currentPeer -> packetLossEpoch = host -> serviceTime; + else + if (ENET_TIME_DIFFERENCE (host -> serviceTime, currentPeer -> packetLossEpoch) >= ENET_PEER_PACKET_LOSS_INTERVAL && + currentPeer -> packetsSent > 0) + { + enet_uint32 packetLoss = currentPeer -> packetsLost * ENET_PEER_PACKET_LOSS_SCALE / currentPeer -> packetsSent; + +#ifdef ENET_DEBUG + printf ("peer %u: %f%%+-%f%% packet loss, %u+-%u ms round trip time, %f%% throttle, %u/%u outgoing, %u/%u incoming\n", currentPeer -> incomingPeerID, currentPeer -> packetLoss / (float) ENET_PEER_PACKET_LOSS_SCALE, currentPeer -> packetLossVariance / (float) ENET_PEER_PACKET_LOSS_SCALE, currentPeer -> roundTripTime, currentPeer -> roundTripTimeVariance, currentPeer -> packetThrottle / (float) ENET_PEER_PACKET_THROTTLE_SCALE, enet_list_size (& currentPeer -> outgoingReliableCommands), enet_list_size (& currentPeer -> outgoingUnreliableCommands), currentPeer -> channels != NULL ? enet_list_size (& currentPeer -> channels -> incomingReliableCommands) : 0, currentPeer -> channels != NULL ? enet_list_size (& currentPeer -> channels -> incomingUnreliableCommands) : 0); +#endif + + currentPeer -> packetLossVariance -= currentPeer -> packetLossVariance / 4; + + if (packetLoss >= currentPeer -> packetLoss) + { + currentPeer -> packetLoss += (packetLoss - currentPeer -> packetLoss) / 8; + currentPeer -> packetLossVariance += (packetLoss - currentPeer -> packetLoss) / 4; + } + else + { + currentPeer -> packetLoss -= (currentPeer -> packetLoss - packetLoss) / 8; + currentPeer -> packetLossVariance += (currentPeer -> packetLoss - packetLoss) / 4; + } + + currentPeer -> packetLossEpoch = host -> serviceTime; + currentPeer -> packetsSent = 0; + currentPeer -> packetsLost = 0; + } + + host -> buffers -> data = headerData; + if (host -> headerFlags & ENET_PROTOCOL_HEADER_FLAG_SENT_TIME) + { + header -> sentTime = ENET_HOST_TO_NET_16 (host -> serviceTime & 0xFFFF); + + host -> buffers -> dataLength = sizeof (ENetProtocolHeader); + } + else + host -> buffers -> dataLength = (size_t) & ((ENetProtocolHeader *) 0) -> sentTime; + + shouldCompress = 0; + if (host -> compressor.context != NULL && host -> compressor.compress != NULL) + { + size_t originalSize = host -> packetSize - sizeof(ENetProtocolHeader), + compressedSize = host -> compressor.compress (host -> compressor.context, + & host -> buffers [1], host -> bufferCount - 1, + originalSize, + host -> packetData [1], + originalSize); + if (compressedSize > 0 && compressedSize < originalSize) + { + host -> headerFlags |= ENET_PROTOCOL_HEADER_FLAG_COMPRESSED; + shouldCompress = compressedSize; +#ifdef ENET_DEBUG_COMPRESS + printf ("peer %u: compressed %u -> %u (%u%%)\n", currentPeer -> incomingPeerID, originalSize, compressedSize, (compressedSize * 100) / originalSize); +#endif + } + } + + if (currentPeer -> outgoingPeerID < ENET_PROTOCOL_MAXIMUM_PEER_ID) + host -> headerFlags |= currentPeer -> outgoingSessionID << ENET_PROTOCOL_HEADER_SESSION_SHIFT; + header -> peerID = ENET_HOST_TO_NET_16 (currentPeer -> outgoingPeerID | host -> headerFlags); + if (host -> checksum != NULL) + { + enet_uint32 * checksum = (enet_uint32 *) & headerData [host -> buffers -> dataLength]; + * checksum = currentPeer -> outgoingPeerID < ENET_PROTOCOL_MAXIMUM_PEER_ID ? currentPeer -> connectID : 0; + host -> buffers -> dataLength += sizeof (enet_uint32); + * checksum = host -> checksum (host -> buffers, host -> bufferCount); + } + + if (shouldCompress > 0) + { + host -> buffers [1].data = host -> packetData [1]; + host -> buffers [1].dataLength = shouldCompress; + host -> bufferCount = 2; + } + + currentPeer -> lastSendTime = host -> serviceTime; + + sentLength = enet_socket_send (host -> socket, & currentPeer -> address, host -> buffers, host -> bufferCount); + + enet_protocol_remove_sent_unreliable_commands (currentPeer); + + if (sentLength < 0) + return -1; + + host -> totalSentData += sentLength; + host -> totalSentPackets ++; + } + + return 0; +} + +/** Sends any queued packets on the host specified to its designated peers. + + @param host host to flush + @remarks this function need only be used in circumstances where one wishes to send queued packets earlier than in a call to enet_host_service(). + @ingroup host +*/ +void +enet_host_flush (ENetHost * host) +{ + host -> serviceTime = enet_time_get (); + + enet_protocol_send_outgoing_commands (host, NULL, 0); +} + +/** Checks for any queued events on the host and dispatches one if available. + + @param host host to check for events + @param event an event structure where event details will be placed if available + @retval > 0 if an event was dispatched + @retval 0 if no events are available + @retval < 0 on failure + @ingroup host +*/ +int +enet_host_check_events (ENetHost * host, ENetEvent * event) +{ + if (event == NULL) return -1; + + event -> type = ENET_EVENT_TYPE_NONE; + event -> peer = NULL; + event -> packet = NULL; + + return enet_protocol_dispatch_incoming_commands (host, event); +} + +/** Waits for events on the host specified and shuttles packets between + the host and its peers. + + @param host host to service + @param event an event structure where event details will be placed if one occurs + if event == NULL then no events will be delivered + @param timeout number of milliseconds that ENet should wait for events + @retval > 0 if an event occurred within the specified time limit + @retval 0 if no event occurred + @retval < 0 on failure + @remarks enet_host_service should be called fairly regularly for adequate performance + @ingroup host +*/ +int +enet_host_service (ENetHost * host, ENetEvent * event, enet_uint32 timeout) +{ + enet_uint32 waitCondition; + + if (event != NULL) + { + event -> type = ENET_EVENT_TYPE_NONE; + event -> peer = NULL; + event -> packet = NULL; + + switch (enet_protocol_dispatch_incoming_commands (host, event)) + { + case 1: + return 1; + + case -1: +#ifdef ENET_DEBUG + perror ("Error dispatching incoming packets"); +#endif + + return -1; + + default: + break; + } + } + + host -> serviceTime = enet_time_get (); + + timeout += host -> serviceTime; + + do + { + if (ENET_TIME_DIFFERENCE (host -> serviceTime, host -> bandwidthThrottleEpoch) >= ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL) + enet_host_bandwidth_throttle (host); + + switch (enet_protocol_send_outgoing_commands (host, event, 1)) + { + case 1: + return 1; + + case -1: +#ifdef ENET_DEBUG + perror ("Error sending outgoing packets"); +#endif + + return -1; + + default: + break; + } + + switch (enet_protocol_receive_incoming_commands (host, event)) + { + case 1: + return 1; + + case -1: +#ifdef ENET_DEBUG + perror ("Error receiving incoming packets"); +#endif + + return -1; + + default: + break; + } + + switch (enet_protocol_send_outgoing_commands (host, event, 1)) + { + case 1: + return 1; + + case -1: +#ifdef ENET_DEBUG + perror ("Error sending outgoing packets"); +#endif + + return -1; + + default: + break; + } + + if (event != NULL) + { + switch (enet_protocol_dispatch_incoming_commands (host, event)) + { + case 1: + return 1; + + case -1: +#ifdef ENET_DEBUG + perror ("Error dispatching incoming packets"); +#endif + + return -1; + + default: + break; + } + } + + if (ENET_TIME_GREATER_EQUAL (host -> serviceTime, timeout)) + return 0; + + do + { + host -> serviceTime = enet_time_get (); + + if (ENET_TIME_GREATER_EQUAL (host -> serviceTime, timeout)) + return 0; + + waitCondition = ENET_SOCKET_WAIT_RECEIVE | ENET_SOCKET_WAIT_INTERRUPT; + + if (enet_socket_wait (host -> socket, & waitCondition, ENET_TIME_DIFFERENCE (timeout, host -> serviceTime)) != 0) + return -1; + } + while (waitCondition & ENET_SOCKET_WAIT_INTERRUPT); + + host -> serviceTime = enet_time_get (); + } while (waitCondition & ENET_SOCKET_WAIT_RECEIVE); + + return 0; +} + diff --git a/tools/ios_xcode_template/godot_iosTests/godot_iosTests.m b/modules/enet/register_types.cpp index d9fac0a250..630b76ced8 100644 --- a/tools/ios_xcode_template/godot_iosTests/godot_iosTests.m +++ b/modules/enet/register_types.cpp @@ -1,5 +1,5 @@ /*************************************************************************/ -/* godot_iosTests.m */ +/* register_types.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -26,30 +26,26 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ +#include "register_types.h" +#include "error_macros.h" +#include "networked_multiplayer_enet.h" -#import <XCTest/XCTest.h> +static bool enet_ok=false; -@interface godot_iosTests : XCTestCase +void register_enet_types() { -@end + if (enet_initialize() !=0 ) { + ERR_PRINT("ENet initialization failure"); + } else { + enet_ok=true; + } -@implementation godot_iosTests - -- (void)setUp -{ - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. + ObjectTypeDB::register_type<NetworkedMultiplayerENet>(); } -- (void)tearDown -{ - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} +void unregister_enet_types() { -- (void)testExample -{ - XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); -} + if (enet_ok) + enet_deinitialize(); -@end +} diff --git a/modules/enet/register_types.h b/modules/enet/register_types.h new file mode 100644 index 0000000000..50f34dc67f --- /dev/null +++ b/modules/enet/register_types.h @@ -0,0 +1,30 @@ +/*************************************************************************/ +/* register_types.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +void register_enet_types(); +void unregister_enet_types(); diff --git a/modules/enet/unix.c b/modules/enet/unix.c new file mode 100644 index 0000000000..3138cc04b6 --- /dev/null +++ b/modules/enet/unix.c @@ -0,0 +1,616 @@ +/** + @file unix.c + @brief ENet Unix system specific functions +*/ +#ifndef _WIN32 + +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <sys/time.h> +#include <arpa/inet.h> +#include <netinet/tcp.h> +#include <netdb.h> +#include <unistd.h> +#include <string.h> +#include <errno.h> +#include <time.h> + +#define ENET_BUILDING_LIB 1 +#include "enet/enet.h" + +//@godot: added this since enet takes them fromt he build system +#define HAS_POLL +#define HAS_FCNTL +#define HAS_SOCKLEN_T + + +#ifdef __APPLE__ +#ifdef HAS_POLL +#undef HAS_POLL +#endif +#ifndef HAS_FCNTL +#define HAS_FCNTL 1 +#endif +#ifndef HAS_INET_PTON +#define HAS_INET_PTON 1 +#endif +#ifndef HAS_INET_NTOP +#define HAS_INET_NTOP 1 +#endif +#ifndef HAS_MSGHDR_FLAGS +#define HAS_MSGHDR_FLAGS 1 +#endif +#ifndef HAS_SOCKLEN_T +#define HAS_SOCKLEN_T 1 +#endif +#ifndef HAS_GETADDRINFO +#define HAS_GETADDRINFO 1 +#endif +#ifndef HAS_GETNAMEINFO +#define HAS_GETNAMEINFO 1 +#endif +#endif + +#ifdef HAS_FCNTL +#include <fcntl.h> +#endif + +#ifdef HAS_POLL +#include <sys/poll.h> +#endif + +#ifndef HAS_SOCKLEN_T +typedef int socklen_t; +#endif + +#ifndef MSG_NOSIGNAL +#define MSG_NOSIGNAL 0 +#endif + +static enet_uint32 timeBase = 0; + +int +enet_initialize (void) +{ + return 0; +} + +void +enet_deinitialize (void) +{ +} + +enet_uint32 +enet_host_random_seed (void) +{ + return (enet_uint32) time (NULL); +} + +enet_uint32 +enet_time_get (void) +{ + struct timeval timeVal; + + gettimeofday (& timeVal, NULL); + + return timeVal.tv_sec * 1000 + timeVal.tv_usec / 1000 - timeBase; +} + +void +enet_time_set (enet_uint32 newTimeBase) +{ + struct timeval timeVal; + + gettimeofday (& timeVal, NULL); + + timeBase = timeVal.tv_sec * 1000 + timeVal.tv_usec / 1000 - newTimeBase; +} + +int +enet_address_set_host (ENetAddress * address, const char * name) +{ +#ifdef HAS_GETADDRINFO + struct addrinfo hints, * resultList = NULL, * result = NULL; + + memset (& hints, 0, sizeof (hints)); + hints.ai_family = AF_INET; + + if (getaddrinfo (name, NULL, NULL, & resultList) != 0) + return -1; + + for (result = resultList; result != NULL; result = result -> ai_next) + { + if (result -> ai_family == AF_INET && result -> ai_addr != NULL && result -> ai_addrlen >= sizeof (struct sockaddr_in)) + { + struct sockaddr_in * sin = (struct sockaddr_in *) result -> ai_addr; + + address -> host = sin -> sin_addr.s_addr; + + freeaddrinfo (resultList); + + return 0; + } + } + + if (resultList != NULL) + freeaddrinfo (resultList); +#else + struct hostent * hostEntry = NULL; +#ifdef HAS_GETHOSTBYNAME_R + struct hostent hostData; + char buffer [2048]; + int errnum; + +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) + gethostbyname_r (name, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum); +#else + hostEntry = gethostbyname_r (name, & hostData, buffer, sizeof (buffer), & errnum); +#endif +#else + hostEntry = gethostbyname (name); +#endif + + if (hostEntry != NULL && hostEntry -> h_addrtype == AF_INET) + { + address -> host = * (enet_uint32 *) hostEntry -> h_addr_list [0]; + + return 0; + } +#endif + +#ifdef HAS_INET_PTON + if (! inet_pton (AF_INET, name, & address -> host)) +#else + if (! inet_aton (name, (struct in_addr *) & address -> host)) +#endif + return -1; + + return 0; +} + +int +enet_address_get_host_ip (const ENetAddress * address, char * name, size_t nameLength) +{ +#ifdef HAS_INET_NTOP + if (inet_ntop (AF_INET, & address -> host, name, nameLength) == NULL) +#else + char * addr = inet_ntoa (* (struct in_addr *) & address -> host); + if (addr != NULL) + { + size_t addrLen = strlen(addr); + if (addrLen >= nameLength) + return -1; + memcpy (name, addr, addrLen + 1); + } + else +#endif + return -1; + return 0; +} + +int +enet_address_get_host (const ENetAddress * address, char * name, size_t nameLength) +{ +#ifdef HAS_GETNAMEINFO + struct sockaddr_in sin; + int err; + + memset (& sin, 0, sizeof (struct sockaddr_in)); + + sin.sin_family = AF_INET; + sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); + sin.sin_addr.s_addr = address -> host; + + err = getnameinfo ((struct sockaddr *) & sin, sizeof (sin), name, nameLength, NULL, 0, NI_NAMEREQD); + if (! err) + { + if (name != NULL && nameLength > 0 && ! memchr (name, '\0', nameLength)) + return -1; + return 0; + } + if (err != EAI_NONAME) + return -1; +#else + struct in_addr in; + struct hostent * hostEntry = NULL; +#ifdef HAS_GETHOSTBYADDR_R + struct hostent hostData; + char buffer [2048]; + int errnum; + + in.s_addr = address -> host; + +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) + gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum); +#else + hostEntry = gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & errnum); +#endif +#else + in.s_addr = address -> host; + + hostEntry = gethostbyaddr ((char *) & in, sizeof (struct in_addr), AF_INET); +#endif + + if (hostEntry != NULL) + { + size_t hostLen = strlen (hostEntry -> h_name); + if (hostLen >= nameLength) + return -1; + memcpy (name, hostEntry -> h_name, hostLen + 1); + return 0; + } +#endif + + return enet_address_get_host_ip (address, name, nameLength); +} + +int +enet_socket_bind (ENetSocket socket, const ENetAddress * address) +{ + struct sockaddr_in sin; + + memset (& sin, 0, sizeof (struct sockaddr_in)); + + sin.sin_family = AF_INET; + + if (address != NULL) + { + sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); + sin.sin_addr.s_addr = address -> host; + } + else + { + sin.sin_port = 0; + sin.sin_addr.s_addr = INADDR_ANY; + } + + return bind (socket, + (struct sockaddr *) & sin, + sizeof (struct sockaddr_in)); +} + +int +enet_socket_get_address (ENetSocket socket, ENetAddress * address) +{ + struct sockaddr_in sin; + socklen_t sinLength = sizeof (struct sockaddr_in); + + if (getsockname (socket, (struct sockaddr *) & sin, & sinLength) == -1) + return -1; + + address -> host = (enet_uint32) sin.sin_addr.s_addr; + address -> port = ENET_NET_TO_HOST_16 (sin.sin_port); + + return 0; +} + +int +enet_socket_listen (ENetSocket socket, int backlog) +{ + return listen (socket, backlog < 0 ? SOMAXCONN : backlog); +} + +ENetSocket +enet_socket_create (ENetSocketType type) +{ + return socket (PF_INET, type == ENET_SOCKET_TYPE_DATAGRAM ? SOCK_DGRAM : SOCK_STREAM, 0); +} + +int +enet_socket_set_option (ENetSocket socket, ENetSocketOption option, int value) +{ + int result = -1; + switch (option) + { + case ENET_SOCKOPT_NONBLOCK: +#ifdef HAS_FCNTL + result = fcntl (socket, F_SETFL, (value ? O_NONBLOCK : 0) | (fcntl (socket, F_GETFL) & ~O_NONBLOCK)); +#else + result = ioctl (socket, FIONBIO, & value); +#endif + break; + + case ENET_SOCKOPT_BROADCAST: + result = setsockopt (socket, SOL_SOCKET, SO_BROADCAST, (char *) & value, sizeof (int)); + break; + + case ENET_SOCKOPT_REUSEADDR: + result = setsockopt (socket, SOL_SOCKET, SO_REUSEADDR, (char *) & value, sizeof (int)); + break; + + case ENET_SOCKOPT_RCVBUF: + result = setsockopt (socket, SOL_SOCKET, SO_RCVBUF, (char *) & value, sizeof (int)); + break; + + case ENET_SOCKOPT_SNDBUF: + result = setsockopt (socket, SOL_SOCKET, SO_SNDBUF, (char *) & value, sizeof (int)); + break; + + case ENET_SOCKOPT_RCVTIMEO: + { + struct timeval timeVal; + timeVal.tv_sec = value / 1000; + timeVal.tv_usec = (value % 1000) * 1000; + result = setsockopt (socket, SOL_SOCKET, SO_RCVTIMEO, (char *) & timeVal, sizeof (struct timeval)); + break; + } + + case ENET_SOCKOPT_SNDTIMEO: + { + struct timeval timeVal; + timeVal.tv_sec = value / 1000; + timeVal.tv_usec = (value % 1000) * 1000; + result = setsockopt (socket, SOL_SOCKET, SO_SNDTIMEO, (char *) & timeVal, sizeof (struct timeval)); + break; + } + + case ENET_SOCKOPT_NODELAY: + result = setsockopt (socket, IPPROTO_TCP, TCP_NODELAY, (char *) & value, sizeof (int)); + break; + + default: + break; + } + return result == -1 ? -1 : 0; +} + +int +enet_socket_get_option (ENetSocket socket, ENetSocketOption option, int * value) +{ + int result = -1; + socklen_t len; + switch (option) + { + case ENET_SOCKOPT_ERROR: + len = sizeof (int); + result = getsockopt (socket, SOL_SOCKET, SO_ERROR, value, & len); + break; + + default: + break; + } + return result == -1 ? -1 : 0; +} + +int +enet_socket_connect (ENetSocket socket, const ENetAddress * address) +{ + struct sockaddr_in sin; + int result; + + memset (& sin, 0, sizeof (struct sockaddr_in)); + + sin.sin_family = AF_INET; + sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); + sin.sin_addr.s_addr = address -> host; + + result = connect (socket, (struct sockaddr *) & sin, sizeof (struct sockaddr_in)); + if (result == -1 && errno == EINPROGRESS) + return 0; + + return result; +} + +ENetSocket +enet_socket_accept (ENetSocket socket, ENetAddress * address) +{ + int result; + struct sockaddr_in sin; + socklen_t sinLength = sizeof (struct sockaddr_in); + + result = accept (socket, + address != NULL ? (struct sockaddr *) & sin : NULL, + address != NULL ? & sinLength : NULL); + + if (result == -1) + return ENET_SOCKET_NULL; + + if (address != NULL) + { + address -> host = (enet_uint32) sin.sin_addr.s_addr; + address -> port = ENET_NET_TO_HOST_16 (sin.sin_port); + } + + return result; +} + +int +enet_socket_shutdown (ENetSocket socket, ENetSocketShutdown how) +{ + return shutdown (socket, (int) how); +} + +void +enet_socket_destroy (ENetSocket socket) +{ + if (socket != -1) + close (socket); +} + +int +enet_socket_send (ENetSocket socket, + const ENetAddress * address, + const ENetBuffer * buffers, + size_t bufferCount) +{ + struct msghdr msgHdr; + struct sockaddr_in sin; + int sentLength; + + memset (& msgHdr, 0, sizeof (struct msghdr)); + + if (address != NULL) + { + memset (& sin, 0, sizeof (struct sockaddr_in)); + + sin.sin_family = AF_INET; + sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); + sin.sin_addr.s_addr = address -> host; + + msgHdr.msg_name = & sin; + msgHdr.msg_namelen = sizeof (struct sockaddr_in); + } + + msgHdr.msg_iov = (struct iovec *) buffers; + msgHdr.msg_iovlen = bufferCount; + + sentLength = sendmsg (socket, & msgHdr, MSG_NOSIGNAL); + + if (sentLength == -1) + { + if (errno == EWOULDBLOCK) + return 0; + + return -1; + } + + return sentLength; +} + +int +enet_socket_receive (ENetSocket socket, + ENetAddress * address, + ENetBuffer * buffers, + size_t bufferCount) +{ + struct msghdr msgHdr; + struct sockaddr_in sin; + int recvLength; + + memset (& msgHdr, 0, sizeof (struct msghdr)); + + if (address != NULL) + { + msgHdr.msg_name = & sin; + msgHdr.msg_namelen = sizeof (struct sockaddr_in); + } + + msgHdr.msg_iov = (struct iovec *) buffers; + msgHdr.msg_iovlen = bufferCount; + + recvLength = recvmsg (socket, & msgHdr, MSG_NOSIGNAL); + + if (recvLength == -1) + { + if (errno == EWOULDBLOCK) + return 0; + + return -1; + } + +#ifdef HAS_MSGHDR_FLAGS + if (msgHdr.msg_flags & MSG_TRUNC) + return -1; +#endif + + if (address != NULL) + { + address -> host = (enet_uint32) sin.sin_addr.s_addr; + address -> port = ENET_NET_TO_HOST_16 (sin.sin_port); + } + + return recvLength; +} + +int +enet_socketset_select (ENetSocket maxSocket, ENetSocketSet * readSet, ENetSocketSet * writeSet, enet_uint32 timeout) +{ + struct timeval timeVal; + + timeVal.tv_sec = timeout / 1000; + timeVal.tv_usec = (timeout % 1000) * 1000; + + return select (maxSocket + 1, readSet, writeSet, NULL, & timeVal); +} + +int +enet_socket_wait (ENetSocket socket, enet_uint32 * condition, enet_uint32 timeout) +{ +#ifdef HAS_POLL + struct pollfd pollSocket; + int pollCount; + + pollSocket.fd = socket; + pollSocket.events = 0; + + if (* condition & ENET_SOCKET_WAIT_SEND) + pollSocket.events |= POLLOUT; + + if (* condition & ENET_SOCKET_WAIT_RECEIVE) + pollSocket.events |= POLLIN; + + pollCount = poll (& pollSocket, 1, timeout); + + if (pollCount < 0) + { + if (errno == EINTR && * condition & ENET_SOCKET_WAIT_INTERRUPT) + { + * condition = ENET_SOCKET_WAIT_INTERRUPT; + + return 0; + } + + return -1; + } + + * condition = ENET_SOCKET_WAIT_NONE; + + if (pollCount == 0) + return 0; + + if (pollSocket.revents & POLLOUT) + * condition |= ENET_SOCKET_WAIT_SEND; + + if (pollSocket.revents & POLLIN) + * condition |= ENET_SOCKET_WAIT_RECEIVE; + + return 0; +#else + fd_set readSet, writeSet; + struct timeval timeVal; + int selectCount; + + timeVal.tv_sec = timeout / 1000; + timeVal.tv_usec = (timeout % 1000) * 1000; + + FD_ZERO (& readSet); + FD_ZERO (& writeSet); + + if (* condition & ENET_SOCKET_WAIT_SEND) + FD_SET (socket, & writeSet); + + if (* condition & ENET_SOCKET_WAIT_RECEIVE) + FD_SET (socket, & readSet); + + selectCount = select (socket + 1, & readSet, & writeSet, NULL, & timeVal); + + if (selectCount < 0) + { + if (errno == EINTR && * condition & ENET_SOCKET_WAIT_INTERRUPT) + { + * condition = ENET_SOCKET_WAIT_INTERRUPT; + + return 0; + } + + return -1; + } + + * condition = ENET_SOCKET_WAIT_NONE; + + if (selectCount == 0) + return 0; + + if (FD_ISSET (socket, & writeSet)) + * condition |= ENET_SOCKET_WAIT_SEND; + + if (FD_ISSET (socket, & readSet)) + * condition |= ENET_SOCKET_WAIT_RECEIVE; + + return 0; +#endif +} + +#endif + diff --git a/modules/enet/win32.c b/modules/enet/win32.c new file mode 100644 index 0000000000..15edd7acbb --- /dev/null +++ b/modules/enet/win32.c @@ -0,0 +1,435 @@ +/** + @file win32.c + @brief ENet Win32 system specific functions +*/ +#ifdef _WIN32 + +#define ENET_BUILDING_LIB 0 +#include "enet/enet.h" +#include <windows.h> +#include <mmsystem.h> + +static enet_uint32 timeBase = 0; + +int +enet_initialize (void) +{ + WORD versionRequested = MAKEWORD (1, 1); + WSADATA wsaData; + + if (WSAStartup (versionRequested, & wsaData)) + return -1; + + if (LOBYTE (wsaData.wVersion) != 1|| + HIBYTE (wsaData.wVersion) != 1) + { + WSACleanup (); + + return -1; + } + +#ifndef WINRT_ENABLED + timeBeginPeriod (1); +#endif + + return 0; +} + +void +enet_deinitialize (void) +{ +#ifndef WINRT_ENABLED + timeEndPeriod (1); +#endif + + WSACleanup (); +} + +#ifdef WINRT_ENABLED +enet_uint32 +timeGetTime() { + ULONGLONG ticks = GetTickCount64(); + return (enet_uint32)ticks; +} +#endif + + +enet_uint32 +enet_host_random_seed (void) +{ + return (enet_uint32) timeGetTime (); +} + +enet_uint32 +enet_time_get (void) +{ + return (enet_uint32) timeGetTime () - timeBase; +} + +void +enet_time_set (enet_uint32 newTimeBase) +{ + timeBase = (enet_uint32) timeGetTime () - newTimeBase; +} + +int +enet_address_set_host (ENetAddress * address, const char * name) +{ + struct hostent * hostEntry; + + hostEntry = gethostbyname (name); + if (hostEntry == NULL || + hostEntry -> h_addrtype != AF_INET) + { + unsigned long host = inet_addr (name); + if (host == INADDR_NONE) + return -1; + address -> host = host; + return 0; + } + + address -> host = * (enet_uint32 *) hostEntry -> h_addr_list [0]; + + return 0; +} + +int +enet_address_get_host_ip (const ENetAddress * address, char * name, size_t nameLength) +{ + char * addr = inet_ntoa (* (struct in_addr *) & address -> host); + if (addr == NULL) + return -1; + else + { + size_t addrLen = strlen(addr); + if (addrLen >= nameLength) + return -1; + memcpy (name, addr, addrLen + 1); + } + return 0; +} + +int +enet_address_get_host (const ENetAddress * address, char * name, size_t nameLength) +{ + struct in_addr in; + struct hostent * hostEntry; + + in.s_addr = address -> host; + + hostEntry = gethostbyaddr ((char *) & in, sizeof (struct in_addr), AF_INET); + if (hostEntry == NULL) + return enet_address_get_host_ip (address, name, nameLength); + else + { + size_t hostLen = strlen (hostEntry -> h_name); + if (hostLen >= nameLength) + return -1; + memcpy (name, hostEntry -> h_name, hostLen + 1); + } + + return 0; +} + +int +enet_socket_bind (ENetSocket socket, const ENetAddress * address) +{ + struct sockaddr_in sin; + + memset (& sin, 0, sizeof (struct sockaddr_in)); + + sin.sin_family = AF_INET; + + if (address != NULL) + { + sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); + sin.sin_addr.s_addr = address -> host; + } + else + { + sin.sin_port = 0; + sin.sin_addr.s_addr = INADDR_ANY; + } + + return bind (socket, + (struct sockaddr *) & sin, + sizeof (struct sockaddr_in)) == SOCKET_ERROR ? -1 : 0; +} + +int +enet_socket_get_address (ENetSocket socket, ENetAddress * address) +{ + struct sockaddr_in sin; + int sinLength = sizeof (struct sockaddr_in); + + if (getsockname (socket, (struct sockaddr *) & sin, & sinLength) == -1) + return -1; + + address -> host = (enet_uint32) sin.sin_addr.s_addr; + address -> port = ENET_NET_TO_HOST_16 (sin.sin_port); + + return 0; +} + +int +enet_socket_listen (ENetSocket socket, int backlog) +{ + return listen (socket, backlog < 0 ? SOMAXCONN : backlog) == SOCKET_ERROR ? -1 : 0; +} + +ENetSocket +enet_socket_create (ENetSocketType type) +{ + return socket (PF_INET, type == ENET_SOCKET_TYPE_DATAGRAM ? SOCK_DGRAM : SOCK_STREAM, 0); +} + +int +enet_socket_set_option (ENetSocket socket, ENetSocketOption option, int value) +{ + int result = SOCKET_ERROR; + switch (option) + { + case ENET_SOCKOPT_NONBLOCK: + { + u_long nonBlocking = (u_long) value; + result = ioctlsocket (socket, FIONBIO, & nonBlocking); + break; + } + + case ENET_SOCKOPT_BROADCAST: + result = setsockopt (socket, SOL_SOCKET, SO_BROADCAST, (char *) & value, sizeof (int)); + break; + + case ENET_SOCKOPT_REUSEADDR: + result = setsockopt (socket, SOL_SOCKET, SO_REUSEADDR, (char *) & value, sizeof (int)); + break; + + case ENET_SOCKOPT_RCVBUF: + result = setsockopt (socket, SOL_SOCKET, SO_RCVBUF, (char *) & value, sizeof (int)); + break; + + case ENET_SOCKOPT_SNDBUF: + result = setsockopt (socket, SOL_SOCKET, SO_SNDBUF, (char *) & value, sizeof (int)); + break; + + case ENET_SOCKOPT_RCVTIMEO: + result = setsockopt (socket, SOL_SOCKET, SO_RCVTIMEO, (char *) & value, sizeof (int)); + break; + + case ENET_SOCKOPT_SNDTIMEO: + result = setsockopt (socket, SOL_SOCKET, SO_SNDTIMEO, (char *) & value, sizeof (int)); + break; + + case ENET_SOCKOPT_NODELAY: + result = setsockopt (socket, IPPROTO_TCP, TCP_NODELAY, (char *) & value, sizeof (int)); + break; + + default: + break; + } + return result == SOCKET_ERROR ? -1 : 0; +} + +int +enet_socket_get_option (ENetSocket socket, ENetSocketOption option, int * value) +{ + int result = SOCKET_ERROR, len; + switch (option) + { + case ENET_SOCKOPT_ERROR: + len = sizeof(int); + result = getsockopt (socket, SOL_SOCKET, SO_ERROR, (char *) value, & len); + break; + + default: + break; + } + return result == SOCKET_ERROR ? -1 : 0; +} + +int +enet_socket_connect (ENetSocket socket, const ENetAddress * address) +{ + struct sockaddr_in sin; + int result; + + memset (& sin, 0, sizeof (struct sockaddr_in)); + + sin.sin_family = AF_INET; + sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); + sin.sin_addr.s_addr = address -> host; + + result = connect (socket, (struct sockaddr *) & sin, sizeof (struct sockaddr_in)); + if (result == SOCKET_ERROR && WSAGetLastError () != WSAEWOULDBLOCK) + return -1; + + return 0; +} + +ENetSocket +enet_socket_accept (ENetSocket socket, ENetAddress * address) +{ + SOCKET result; + struct sockaddr_in sin; + int sinLength = sizeof (struct sockaddr_in); + + result = accept (socket, + address != NULL ? (struct sockaddr *) & sin : NULL, + address != NULL ? & sinLength : NULL); + + if (result == INVALID_SOCKET) + return ENET_SOCKET_NULL; + + if (address != NULL) + { + address -> host = (enet_uint32) sin.sin_addr.s_addr; + address -> port = ENET_NET_TO_HOST_16 (sin.sin_port); + } + + return result; +} + +int +enet_socket_shutdown (ENetSocket socket, ENetSocketShutdown how) +{ + return shutdown (socket, (int) how) == SOCKET_ERROR ? -1 : 0; +} + +void +enet_socket_destroy (ENetSocket socket) +{ + if (socket != INVALID_SOCKET) + closesocket (socket); +} + +int +enet_socket_send (ENetSocket socket, + const ENetAddress * address, + const ENetBuffer * buffers, + size_t bufferCount) +{ + struct sockaddr_in sin; + DWORD sentLength; + + if (address != NULL) + { + memset (& sin, 0, sizeof (struct sockaddr_in)); + + sin.sin_family = AF_INET; + sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); + sin.sin_addr.s_addr = address -> host; + } + + if (WSASendTo (socket, + (LPWSABUF) buffers, + (DWORD) bufferCount, + & sentLength, + 0, + address != NULL ? (struct sockaddr *) & sin : NULL, + address != NULL ? sizeof (struct sockaddr_in) : 0, + NULL, + NULL) == SOCKET_ERROR) + { + if (WSAGetLastError () == WSAEWOULDBLOCK) + return 0; + + return -1; + } + + return (int) sentLength; +} + +int +enet_socket_receive (ENetSocket socket, + ENetAddress * address, + ENetBuffer * buffers, + size_t bufferCount) +{ + INT sinLength = sizeof (struct sockaddr_in); + DWORD flags = 0, + recvLength; + struct sockaddr_in sin; + + if (WSARecvFrom (socket, + (LPWSABUF) buffers, + (DWORD) bufferCount, + & recvLength, + & flags, + address != NULL ? (struct sockaddr *) & sin : NULL, + address != NULL ? & sinLength : NULL, + NULL, + NULL) == SOCKET_ERROR) + { + switch (WSAGetLastError ()) + { + case WSAEWOULDBLOCK: + case WSAECONNRESET: + return 0; + } + + return -1; + } + + if (flags & MSG_PARTIAL) + return -1; + + if (address != NULL) + { + address -> host = (enet_uint32) sin.sin_addr.s_addr; + address -> port = ENET_NET_TO_HOST_16 (sin.sin_port); + } + + return (int) recvLength; +} + +int +enet_socketset_select (ENetSocket maxSocket, ENetSocketSet * readSet, ENetSocketSet * writeSet, enet_uint32 timeout) +{ + struct timeval timeVal; + + timeVal.tv_sec = timeout / 1000; + timeVal.tv_usec = (timeout % 1000) * 1000; + + return select (maxSocket + 1, readSet, writeSet, NULL, & timeVal); +} + +int +enet_socket_wait (ENetSocket socket, enet_uint32 * condition, enet_uint32 timeout) +{ + fd_set readSet, writeSet; + struct timeval timeVal; + int selectCount; + + timeVal.tv_sec = timeout / 1000; + timeVal.tv_usec = (timeout % 1000) * 1000; + + FD_ZERO (& readSet); + FD_ZERO (& writeSet); + + if (* condition & ENET_SOCKET_WAIT_SEND) + FD_SET (socket, & writeSet); + + if (* condition & ENET_SOCKET_WAIT_RECEIVE) + FD_SET (socket, & readSet); + + selectCount = select (socket + 1, & readSet, & writeSet, NULL, & timeVal); + + if (selectCount < 0) + return -1; + + * condition = ENET_SOCKET_WAIT_NONE; + + if (selectCount == 0) + return 0; + + if (FD_ISSET (socket, & writeSet)) + * condition |= ENET_SOCKET_WAIT_SEND; + + if (FD_ISSET (socket, & readSet)) + * condition |= ENET_SOCKET_WAIT_RECEIVE; + + return 0; +} + +#endif + diff --git a/modules/gdscript/gd_compiler.cpp b/modules/gdscript/gd_compiler.cpp index 68c3dc98d3..ce8b6a6ea4 100644 --- a/modules/gdscript/gd_compiler.cpp +++ b/modules/gdscript/gd_compiler.cpp @@ -1297,8 +1297,10 @@ Error GDCompiler::_parse_function(GDScript *p_script,const GDParser::ClassNode * gdfunc = p_script->member_functions[func_name]; //} - if (p_func) + if (p_func) { gdfunc->_static=p_func->_static; + gdfunc->rpc_mode=p_func->rpc_mode; + } #ifdef TOOLS_ENABLED gdfunc->arg_names=argnames; @@ -1625,6 +1627,8 @@ Error GDCompiler::_parse_class(GDScript *p_script, GDScript *p_owner, const GDPa minfo.index = p_script->member_indices.size(); minfo.setter = p_class->variables[i].setter; minfo.getter = p_class->variables[i].getter; + minfo.rpc_mode=p_class->variables[i].rpc_mode; + p_script->member_indices[name]=minfo; p_script->members.insert(name); diff --git a/modules/gdscript/gd_editor.cpp b/modules/gdscript/gd_editor.cpp index 520a8b18d8..d02e2b92e4 100644 --- a/modules/gdscript/gd_editor.cpp +++ b/modules/gdscript/gd_editor.cpp @@ -44,21 +44,26 @@ void GDScriptLanguage::get_string_delimiters(List<String> *p_delimiters) const { } -String GDScriptLanguage::get_template(const String& p_class_name, const String& p_base_class_name) const { +Ref<Script> GDScriptLanguage::get_template(const String& p_class_name, const String& p_base_class_name) const { String _template = String()+ - "\nextends %BASE%\n\n"+ - "# member variables here, example:\n"+ - "# var a=2\n"+ - "# var b=\"textvar\"\n\n"+ + "extends %BASE%\n\n"+ + "# class member variables go here, for example:\n"+ + "# var a = 2\n"+ + "# var b = \"textvar\"\n\n"+ "func _ready():\n"+ "\t# Called every time the node is added to the scene.\n"+ "\t# Initialization here\n"+ - "\tpass\n"+ - "\n"+ - "\n"; + "\tpass\n"; + + _template = _template.replace("%BASE%",p_base_class_name); + + Ref<GDScript> script; + script.instance(); + script->set_source_code(_template); + + return script; - return _template.replace("%BASE%",p_base_class_name); } @@ -297,7 +302,7 @@ void GDScriptLanguage::get_public_functions(List<MethodInfo> *p_functions) const } { MethodInfo mi; - mi.name="yield"; + mi.name="yield:GDFunctionState"; mi.arguments.push_back(PropertyInfo(Variant::OBJECT,"object")); mi.arguments.push_back(PropertyInfo(Variant::STRING,"signal")); mi.default_arguments.push_back(Variant::NIL); @@ -328,7 +333,7 @@ String GDScriptLanguage::make_function(const String& p_class,const String& p_nam for(int i=0;i<p_args.size();i++) { if (i>0) s+=", "; - s+=p_args[i]; + s+=p_args[i].get_slice(":",0); } s+=" "; } @@ -1456,7 +1461,7 @@ static void _make_function_hint(const GDParser::FunctionNode* p_func,int p_argid } -static void _find_type_arguments(const GDParser::Node*p_node,int p_line,const StringName& p_method,const GDCompletionIdentifier& id, int p_argidx, Set<String>& result, String& arghint) { +static void _find_type_arguments(GDCompletionContext& context,const GDParser::Node*p_node,int p_line,const StringName& p_method,const GDCompletionIdentifier& id, int p_argidx, Set<String>& result, String& arghint) { //print_line("find type arguments?"); @@ -1693,9 +1698,31 @@ static void _find_type_arguments(const GDParser::Node*p_node,int p_line,const St if (p_argidx==0) { List<MethodInfo> sigs; ObjectTypeDB::get_signal_list(id.obj_type,&sigs); + + if (id.script.is_valid()) { + id.script->get_script_signal_list(&sigs); + } else if (id.value.get_type()==Variant::OBJECT) { + Object *obj = id.value; + if (obj && !obj->get_script().is_null()) { + Ref<Script> scr=obj->get_script(); + if (scr.is_valid()) { + scr->get_script_signal_list(&sigs); + } + } + } + for (List<MethodInfo>::Element *E=sigs.front();E;E=E->next()) { result.insert("\""+E->get().name+"\""); } + + } else if (p_argidx==2){ + + + if (context._class) { + for(int i=0;i<context._class->functions.size();i++) { + result.insert("\""+context._class->functions[i]->name+"\""); + } + } } /*if (p_argidx==2) { @@ -1937,7 +1964,7 @@ static void _find_call_arguments(GDCompletionContext& context,const GDParser::No if (!context._class->owner) ci.value=context.base; - _find_type_arguments(p_node,p_line,id->name,ci,p_argidx,result,arghint); + _find_type_arguments(context,p_node,p_line,id->name,ci,p_argidx,result,arghint); //guess type.. /* List<MethodInfo> methods; @@ -1960,7 +1987,7 @@ static void _find_call_arguments(GDCompletionContext& context,const GDParser::No GDCompletionIdentifier ci; if (_guess_expression_type(context,op->arguments[0],p_line,ci)) { - _find_type_arguments(p_node,p_line,id->name,ci,p_argidx,result,arghint); + _find_type_arguments(context,p_node,p_line,id->name,ci,p_argidx,result,arghint); return; } @@ -2067,7 +2094,7 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base GDParser p; - Error err = p.parse(p_code,p_base_path,false,"",true); + p.parse(p_code,p_base_path,false,"",true); bool isfunction=false; Set<String> options; @@ -2382,7 +2409,24 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base } } } break; + case GDParser::COMPLETION_YIELD: { + + const GDParser::Node *node = p.get_completion_node(); + + GDCompletionIdentifier t; + if (!_guess_expression_type(context,node,p.get_completion_line(),t)) + break; + + if (t.type==Variant::OBJECT && t.obj_type!=StringName()) { + + List<MethodInfo> sigs; + ObjectTypeDB::get_signal_list(t.obj_type,&sigs); + for (List<MethodInfo>::Element *E=sigs.front();E;E=E->next()) { + options.insert("\""+E->get().name+"\""); + } + } + } break; } diff --git a/modules/gdscript/gd_function.cpp b/modules/gdscript/gd_function.cpp index de86eb2ab9..094e21bb4f 100644 --- a/modules/gdscript/gd_function.cpp +++ b/modules/gdscript/gd_function.cpp @@ -372,8 +372,7 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a if (obj_A->get_script_instance() && obj_A->get_script_instance()->get_language()==GDScriptLanguage::get_singleton()) { - GDInstance *ins = static_cast<GDInstance*>(obj_A->get_script_instance()); - GDScript *cmp = ins->script.ptr(); + GDScript *cmp = static_cast<GDScript*>(obj_A->get_script_instance()->get_script().ptr()); //bool found=false; while(cmp) { @@ -1310,6 +1309,7 @@ GDFunction::GDFunction() : function_list(this) { _stack_size=0; _call_size=0; + rpc_mode=ScriptInstance::RPC_MODE_DISABLED; name="<anonymous>"; #ifdef DEBUG_ENABLED _func_cname=NULL; @@ -1437,7 +1437,7 @@ void GDFunctionState::_bind_methods() { ObjectTypeDB::bind_method(_MD("resume:Variant","arg"),&GDFunctionState::resume,DEFVAL(Variant())); ObjectTypeDB::bind_method(_MD("is_valid"),&GDFunctionState::is_valid); - ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"_signal_callback",&GDFunctionState::_signal_callback,MethodInfo("_signal_callback")); + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"_signal_callback",&GDFunctionState::_signal_callback,MethodInfo("_signal_callback")); } diff --git a/modules/gdscript/gd_function.h b/modules/gdscript/gd_function.h index e09c6509dd..f1c5b13ca1 100644 --- a/modules/gdscript/gd_function.h +++ b/modules/gdscript/gd_function.h @@ -7,6 +7,7 @@ #include "variant.h" #include "string_db.h" #include "reference.h" +#include "script_language.h" class GDInstance; class GDScript; @@ -64,6 +65,14 @@ public: ADDR_TYPE_NIL=8 }; + enum RPCMode { + RPC_DISABLED, + RPC_ENABLED, + RPC_SYNC, + RPC_SYNC_MASTER, + RPC_SYNC_SLAVE + }; + struct StackDebug { int line; @@ -91,6 +100,8 @@ friend class GDCompiler; int _call_size; int _initial_line; bool _static; + ScriptInstance::RPCMode rpc_mode; + GDScript *_script; StringName name; @@ -185,6 +196,7 @@ public: Variant call(GDInstance *p_instance,const Variant **p_args, int p_argcount,Variant::CallError& r_err,CallState *p_state=NULL); + _FORCE_INLINE_ ScriptInstance::RPCMode get_rpc_mode() const { return rpc_mode; } GDFunction(); ~GDFunction(); }; diff --git a/modules/gdscript/gd_functions.cpp b/modules/gdscript/gd_functions.cpp index b9815a5efd..a565e866d0 100644 --- a/modules/gdscript/gd_functions.cpp +++ b/modules/gdscript/gd_functions.cpp @@ -304,7 +304,7 @@ void GDFunctions::call(Function p_func,const Variant **p_args,int p_arg_count,Va case MATH_DECIMALS: { VALIDATE_ARG_COUNT(1); VALIDATE_ARG_NUM(0); - r_ret=Math::decimals(*p_args[0]); + r_ret=Math::step_decimals(*p_args[0]); } break; case MATH_STEPIFY: { VALIDATE_ARG_COUNT(2); diff --git a/modules/gdscript/gd_parser.cpp b/modules/gdscript/gd_parser.cpp index e829fa86b4..4a32bec73a 100644 --- a/modules/gdscript/gd_parser.cpp +++ b/modules/gdscript/gd_parser.cpp @@ -378,6 +378,21 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_ tokenizer->advance(); + if (tokenizer->get_token()==GDTokenizer::TK_CURSOR) { + + + completion_cursor=StringName(); + completion_node=object; + completion_type=COMPLETION_YIELD; + completion_class=current_class; + completion_function=current_function; + completion_line=tokenizer->get_token_line(); + completion_argument=0; + completion_block=current_block; + completion_found=true; + tokenizer->advance(); + } + Node *signal = _parse_and_reduce_expression(p_parent,p_static); if (!signal) return NULL; @@ -2060,6 +2075,7 @@ void GDParser::_parse_class(ClassNode *p_class) { if (error_set) return; + if (indent_level>tab_level.back()->get()) { p_class->end_line=tokenizer->get_token_line(); return; //go back a level @@ -2356,6 +2372,9 @@ void GDParser::_parse_class(ClassNode *p_class) { function->_static=_static; function->line=fnline; + function->rpc_mode=rpc_mode; + rpc_mode=ScriptInstance::RPC_MODE_DISABLED; + if (_static) p_class->static_functions.push_back(function); @@ -2827,25 +2846,101 @@ void GDParser::_parse_class(ClassNode *p_class) { } - if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR) { + if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR && tokenizer->get_token()!=GDTokenizer::TK_PR_ONREADY && tokenizer->get_token()!=GDTokenizer::TK_PR_REMOTE && tokenizer->get_token()!=GDTokenizer::TK_PR_MASTER && tokenizer->get_token()!=GDTokenizer::TK_PR_SLAVE && tokenizer->get_token()!=GDTokenizer::TK_PR_SYNC) { current_export=PropertyInfo(); - _set_error("Expected 'var'."); + _set_error("Expected 'var', 'onready', 'remote', 'master', 'slave' or 'sync'."); return; } - }; //fallthrough to var + continue; + } break; case GDTokenizer::TK_PR_ONREADY: { - if (token==GDTokenizer::TK_PR_ONREADY) { - //may be fallthrough from export, ignore if so - tokenizer->advance(); + //may be fallthrough from export, ignore if so + tokenizer->advance(); + if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR) { + _set_error("Expected 'var'."); + return; + } + + continue; + } break; + case GDTokenizer::TK_PR_REMOTE: { + + //may be fallthrough from export, ignore if so + tokenizer->advance(); + if (current_export.type) { if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR) { _set_error("Expected 'var'."); return; } + + } else { + if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR && tokenizer->get_token()!=GDTokenizer::TK_PR_FUNCTION) { + _set_error("Expected 'var' or 'func'."); + return; + } } - }; //fallthrough to var + rpc_mode=ScriptInstance::RPC_MODE_REMOTE; + + continue; + } break; + case GDTokenizer::TK_PR_MASTER: { + + //may be fallthrough from export, ignore if so + tokenizer->advance(); + if (current_export.type) { + if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR) { + _set_error("Expected 'var'."); + return; + } + + } else { + if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR && tokenizer->get_token()!=GDTokenizer::TK_PR_FUNCTION) { + _set_error("Expected 'var' or 'func'."); + return; + } + } + + rpc_mode=ScriptInstance::RPC_MODE_MASTER; + continue; + } break; + case GDTokenizer::TK_PR_SLAVE: { + + //may be fallthrough from export, ignore if so + tokenizer->advance(); + if (current_export.type) { + if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR) { + _set_error("Expected 'var'."); + return; + } + + } else { + if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR && tokenizer->get_token()!=GDTokenizer::TK_PR_FUNCTION) { + _set_error("Expected 'var' or 'func'."); + return; + } + } + + rpc_mode=ScriptInstance::RPC_MODE_SLAVE; + continue; + } break; + case GDTokenizer::TK_PR_SYNC: { + + //may be fallthrough from export, ignore if so + tokenizer->advance(); + if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR && tokenizer->get_token()!=GDTokenizer::TK_PR_FUNCTION) { + if (current_export.type) + _set_error("Expected 'var'."); + else + _set_error("Expected 'var' or 'func'."); + return; + } + + rpc_mode=ScriptInstance::RPC_MODE_SYNC; + continue; + } break; case GDTokenizer::TK_PR_VAR: { //variale declaration and (eventual) initialization @@ -2869,8 +2964,12 @@ void GDParser::_parse_class(ClassNode *p_class) { member.expression=NULL; member._export.name=member.identifier; member.line=tokenizer->get_token_line(); + member.rpc_mode=rpc_mode; + tokenizer->advance(); + rpc_mode=ScriptInstance::RPC_MODE_DISABLED; + if (tokenizer->get_token()==GDTokenizer::TK_OP_ASSIGN) { #ifdef DEBUG_ENABLED @@ -3058,6 +3157,114 @@ void GDParser::_parse_class(ClassNode *p_class) { } } break; + case GDTokenizer::TK_PR_ENUM: { + //mutiple constant declarations.. + + int last_assign = -1; // Incremented by 1 right before the assingment. + String enum_name; + Dictionary enum_dict; + + tokenizer->advance(); + if (tokenizer->get_token()==GDTokenizer::TK_IDENTIFIER) { + enum_name=tokenizer->get_token_identifier(); + tokenizer->advance(); + } + if (tokenizer->get_token()!=GDTokenizer::TK_CURLY_BRACKET_OPEN) { + _set_error("Expected '{' in enum declaration"); + return; + } + tokenizer->advance(); + + while(true) { + if(tokenizer->get_token()==GDTokenizer::TK_NEWLINE) { + + tokenizer->advance(); // Ignore newlines + } else if (tokenizer->get_token()==GDTokenizer::TK_CURLY_BRACKET_CLOSE) { + + tokenizer->advance(); + break; // End of enum + } else if (tokenizer->get_token()!=GDTokenizer::TK_IDENTIFIER) { + + if(tokenizer->get_token()==GDTokenizer::TK_EOF) { + _set_error("Unexpected end of file."); + } else { + _set_error(String("Unexpected ") + GDTokenizer::get_token_name(tokenizer->get_token()) + ", expected identifier"); + } + + return; + } else { // tokenizer->get_token()==GDTokenizer::TK_IDENTIFIER + ClassNode::Constant constant; + + constant.identifier=tokenizer->get_token_identifier(); + + tokenizer->advance(); + + if (tokenizer->get_token()==GDTokenizer::TK_OP_ASSIGN) { + tokenizer->advance(); + + Node *subexpr=NULL; + + subexpr = _parse_and_reduce_expression(p_class,true,true); + if (!subexpr) { + if (_recover_from_completion()) { + break; + } + return; + } + + if (subexpr->type!=Node::TYPE_CONSTANT) { + _set_error("Expected constant expression"); + } + + const ConstantNode *subexpr_const = static_cast<const ConstantNode*>(subexpr); + + if(subexpr_const->value.get_type() != Variant::INT) { + _set_error("Expected an int value for enum"); + } + + last_assign = subexpr_const->value; + + constant.expression=subexpr; + + } else { + last_assign = last_assign + 1; + ConstantNode *cn = alloc_node<ConstantNode>(); + cn->value = last_assign; + constant.expression = cn; + } + + if(tokenizer->get_token()==GDTokenizer::TK_COMMA) { + tokenizer->advance(); + } + + if(enum_name != "") { + const ConstantNode *cn = static_cast<const ConstantNode*>(constant.expression); + enum_dict[constant.identifier] = cn->value; + } + + p_class->constant_expressions.push_back(constant); + } + + } + + if(enum_name != "") { + ClassNode::Constant enum_constant; + enum_constant.identifier=enum_name; + ConstantNode *cn = alloc_node<ConstantNode>(); + cn->value = enum_dict; + enum_constant.expression=cn; + p_class->constant_expressions.push_back(enum_constant); + } + + if (!_end_statement()) { + _set_error("Expected end of statement (enum)"); + return; + } + + + + + } break; default: { @@ -3213,6 +3420,7 @@ void GDParser::clear() { current_class=NULL; completion_found=false; + rpc_mode=ScriptInstance::RPC_MODE_DISABLED; current_function=NULL; diff --git a/modules/gdscript/gd_parser.h b/modules/gdscript/gd_parser.h index 4afc534a8c..9e6f6e6765 100644 --- a/modules/gdscript/gd_parser.h +++ b/modules/gdscript/gd_parser.h @@ -33,6 +33,7 @@ #include "gd_functions.h" #include "map.h" #include "object.h" +#include "script_language.h" class GDParser { public: @@ -88,6 +89,7 @@ public: StringName getter; int line; Node *expression; + ScriptInstance::RPCMode rpc_mode; }; struct Constant { StringName identifier; @@ -119,12 +121,13 @@ public: struct FunctionNode : public Node { bool _static; + ScriptInstance::RPCMode rpc_mode; StringName name; Vector<StringName> arguments; Vector<Node*> default_values; BlockNode *body; - FunctionNode() { type=TYPE_FUNCTION; _static=false; } + FunctionNode() { type=TYPE_FUNCTION; _static=false; rpc_mode=ScriptInstance::RPC_MODE_DISABLED; } }; @@ -375,7 +378,8 @@ public: COMPLETION_METHOD, COMPLETION_CALL_ARGUMENTS, COMPLETION_INDEX, - COMPLETION_VIRTUAL_FUNC + COMPLETION_VIRTUAL_FUNC, + COMPLETION_YIELD, }; @@ -428,6 +432,9 @@ private: PropertyInfo current_export; + ScriptInstance::RPCMode rpc_mode; + + void _set_error(const String& p_error, int p_line=-1, int p_column=-1); bool _recover_from_completion(); diff --git a/modules/gdscript/gd_script.cpp b/modules/gdscript/gd_script.cpp index d1946e2a63..0ea10950df 100644 --- a/modules/gdscript/gd_script.cpp +++ b/modules/gdscript/gd_script.cpp @@ -179,6 +179,15 @@ bool GDScript::can_instance() const { } +Ref<Script> GDScript::get_base_script() const { + + if (_base) { + return Ref<GDScript>( _base ); + } else { + return Ref<Script>(); + } +} + StringName GDScript::get_instance_base_type() const { if (native.is_valid()) @@ -249,6 +258,85 @@ void GDScript::_update_placeholder(PlaceHolderScriptInstance *p_placeholder) { }*/ #endif + +void GDScript::get_script_method_list(List<MethodInfo> *p_list) const { + + for (const Map<StringName,GDFunction*>::Element *E=member_functions.front();E;E=E->next()) { + MethodInfo mi; + mi.name=E->key(); + for(int i=0;i<E->get()->get_argument_count();i++) { + PropertyInfo arg; + arg.type=Variant::NIL; //variant + arg.name=E->get()->get_argument_name(i); + mi.arguments.push_back(arg); + } + + mi.return_val.name="Variant"; + p_list->push_back(mi); + } +} + +void GDScript::get_script_property_list(List<PropertyInfo> *p_list) const { + + const GDScript *sptr=this; + List<PropertyInfo> props; + + while(sptr) { + + Vector<_GDScriptMemberSort> msort; + for(Map<StringName,PropertyInfo>::Element *E=sptr->member_info.front();E;E=E->next()) { + + _GDScriptMemberSort ms; + ERR_CONTINUE(!sptr->member_indices.has(E->key())); + ms.index=sptr->member_indices[E->key()].index; + ms.name=E->key(); + msort.push_back(ms); + + } + + msort.sort(); + msort.invert(); + for(int i=0;i<msort.size();i++) { + + props.push_front(sptr->member_info[msort[i].name]); + + } + + sptr = sptr->_base; + } + + for (List<PropertyInfo>::Element *E=props.front();E;E=E->next()) { + p_list->push_back(E->get()); + } + +} + +bool GDScript::has_method(const StringName& p_method) const { + + return member_functions.has(p_method); +} + +MethodInfo GDScript::get_method_info(const StringName& p_method) const { + + const Map<StringName,GDFunction*>::Element *E=member_functions.find(p_method); + if (!E) + return MethodInfo(); + + MethodInfo mi; + mi.name=E->key(); + for(int i=0;i<E->get()->get_argument_count();i++) { + PropertyInfo arg; + arg.type=Variant::NIL; //variant + arg.name=E->get()->get_argument_name(i); + mi.arguments.push_back(arg); + } + + mi.return_val.name="Variant"; + return mi; + +} + + bool GDScript::get_property_default_value(const StringName& p_property, Variant &r_value) const { #ifdef TOOLS_ENABLED @@ -663,7 +751,7 @@ void GDScript::_get_property_list(List<PropertyInfo> *p_properties) const { void GDScript::_bind_methods() { - ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"new",&GDScript::_new,MethodInfo("new")); + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"new",&GDScript::_new,MethodInfo(Variant::OBJECT,"new")); ObjectTypeDB::bind_method(_MD("get_as_byte_code"),&GDScript::get_as_byte_code); @@ -1222,6 +1310,8 @@ void GDInstance::call_multilevel_reversed(const StringName& p_method,const Varia } } + + void GDInstance::notification(int p_notification) { //notification is not virutal, it gets called at ALL levels just like in C. @@ -1254,6 +1344,46 @@ ScriptLanguage *GDInstance::get_language() { return GDScriptLanguage::get_singleton(); } +GDInstance::RPCMode GDInstance::get_rpc_mode(const StringName& p_method) const { + + const GDScript *cscript = script.ptr(); + + while(cscript) { + const Map<StringName,GDFunction*>::Element *E=cscript->member_functions.find(p_method); + if (E) { + + if (E->get()->get_rpc_mode()!=RPC_MODE_DISABLED) { + return E->get()->get_rpc_mode(); + } + + } + cscript=cscript->_base; + } + + return RPC_MODE_DISABLED; +} + +GDInstance::RPCMode GDInstance::get_rset_mode(const StringName& p_variable) const { + + const GDScript *cscript = script.ptr(); + + while(cscript) { + const Map<StringName,GDScript::MemberInfo>::Element *E=cscript->member_indices.find(p_variable); + if (E) { + + if (E->get().rpc_mode) { + return E->get().rpc_mode; + } + + } + cscript=cscript->_base; + } + + return RPC_MODE_DISABLED; +} + + + void GDInstance::reload_members() { #ifdef DEBUG_ENABLED @@ -1765,6 +1895,10 @@ void GDScriptLanguage::get_reserved_words(List<String> *p_words) const { "pass", "return", "while", + "remote", + "sync", + "master", + "slave", 0}; diff --git a/modules/gdscript/gd_script.h b/modules/gdscript/gd_script.h index f0b6b7103c..0c3e1eb614 100644 --- a/modules/gdscript/gd_script.h +++ b/modules/gdscript/gd_script.h @@ -64,6 +64,7 @@ class GDScript : public Script { int index; StringName setter; StringName getter; + ScriptInstance::RPCMode rpc_mode; }; friend class GDInstance; @@ -161,6 +162,8 @@ public: Variant _new(const Variant** p_args,int p_argcount,Variant::CallError& r_error); virtual bool can_instance() const; + virtual Ref<Script> get_base_script() const; + virtual StringName get_instance_base_type() const; // this may not work in all scripts, will return empty if so virtual ScriptInstance* instance_create(Object *p_this); virtual bool instance_has(const Object *p_this) const; @@ -181,6 +184,13 @@ public: bool get_property_default_value(const StringName& p_property,Variant& r_value) const; + virtual void get_script_method_list(List<MethodInfo> *p_list) const; + virtual bool has_method(const StringName& p_method) const; + virtual MethodInfo get_method_info(const StringName& p_method) const; + + virtual void get_script_property_list(List<PropertyInfo> *p_list) const; + + virtual ScriptLanguage *get_language() const; GDScript(); @@ -232,6 +242,10 @@ public: void reload_members(); + virtual RPCMode get_rpc_mode(const StringName& p_method) const; + virtual RPCMode get_rset_mode(const StringName& p_variable) const; + + GDInstance(); ~GDInstance(); @@ -246,23 +260,23 @@ class GDScriptLanguage : public ScriptLanguage { Map<StringName,int> globals; - struct CallLevel { + struct CallLevel { - Variant *stack; - GDFunction *function; - GDInstance *instance; - int *ip; - int *line; + Variant *stack; + GDFunction *function; + GDInstance *instance; + int *ip; + int *line; - }; + }; - int _debug_parse_err_line; - String _debug_parse_err_file; - String _debug_error; - int _debug_call_stack_pos; - int _debug_max_call_stack; - CallLevel *_call_stack; + int _debug_parse_err_line; + String _debug_parse_err_file; + String _debug_error; + int _debug_call_stack_pos; + int _debug_max_call_stack; + CallLevel *_call_stack; void _add_global(const StringName& p_name,const Variant& p_value); @@ -284,54 +298,54 @@ public: int calls; - bool debug_break(const String& p_error,bool p_allow_continue=true); - bool debug_break_parse(const String& p_file, int p_line,const String& p_error); + bool debug_break(const String& p_error,bool p_allow_continue=true); + bool debug_break_parse(const String& p_file, int p_line,const String& p_error); - _FORCE_INLINE_ void enter_function(GDInstance *p_instance,GDFunction *p_function, Variant *p_stack, int *p_ip, int *p_line) { + _FORCE_INLINE_ void enter_function(GDInstance *p_instance,GDFunction *p_function, Variant *p_stack, int *p_ip, int *p_line) { - if (Thread::get_main_ID()!=Thread::get_caller_ID()) - return; //no support for other threads than main for now + if (Thread::get_main_ID()!=Thread::get_caller_ID()) + return; //no support for other threads than main for now - if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0) - ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() +1 ); + if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0) + ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() +1 ); - if (_debug_call_stack_pos >= _debug_max_call_stack) { - //stack overflow - _debug_error="Stack Overflow (Stack Size: "+itos(_debug_max_call_stack)+")"; - ScriptDebugger::get_singleton()->debug(this); - return; - } + if (_debug_call_stack_pos >= _debug_max_call_stack) { + //stack overflow + _debug_error="Stack Overflow (Stack Size: "+itos(_debug_max_call_stack)+")"; + ScriptDebugger::get_singleton()->debug(this); + return; + } - _call_stack[_debug_call_stack_pos].stack=p_stack; - _call_stack[_debug_call_stack_pos].instance=p_instance; - _call_stack[_debug_call_stack_pos].function=p_function; - _call_stack[_debug_call_stack_pos].ip=p_ip; - _call_stack[_debug_call_stack_pos].line=p_line; - _debug_call_stack_pos++; - } + _call_stack[_debug_call_stack_pos].stack=p_stack; + _call_stack[_debug_call_stack_pos].instance=p_instance; + _call_stack[_debug_call_stack_pos].function=p_function; + _call_stack[_debug_call_stack_pos].ip=p_ip; + _call_stack[_debug_call_stack_pos].line=p_line; + _debug_call_stack_pos++; + } - _FORCE_INLINE_ void exit_function() { + _FORCE_INLINE_ void exit_function() { - if (Thread::get_main_ID()!=Thread::get_caller_ID()) - return; //no support for other threads than main for now + if (Thread::get_main_ID()!=Thread::get_caller_ID()) + return; //no support for other threads than main for now - if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0) - ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() -1 ); + if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0) + ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() -1 ); - if (_debug_call_stack_pos==0) { + if (_debug_call_stack_pos==0) { - _debug_error="Stack Underflow (Engine Bug)"; - ScriptDebugger::get_singleton()->debug(this); - return; - } + _debug_error="Stack Underflow (Engine Bug)"; + ScriptDebugger::get_singleton()->debug(this); + return; + } - _debug_call_stack_pos--; - } + _debug_call_stack_pos--; + } virtual Vector<StackInfo> debug_get_current_stack_info() { - if (Thread::get_main_ID()!=Thread::get_caller_ID()) - return Vector<StackInfo>(); + if (Thread::get_main_ID()!=Thread::get_caller_ID()) + return Vector<StackInfo>(); Vector<StackInfo> csi; csi.resize(_debug_call_stack_pos); @@ -373,7 +387,7 @@ public: virtual void get_reserved_words(List<String> *p_words) const; virtual void get_comment_delimiters(List<String> *p_delimiters) const; virtual void get_string_delimiters(List<String> *p_delimiters) const; - virtual String get_template(const String& p_class_name, const String& p_base_class_name) const; + virtual Ref<Script> get_template(const String& p_class_name, const String& p_base_class_name) const; virtual bool validate(const String& p_script,int &r_line_error,int &r_col_error,String& r_test_error, const String& p_path="",List<String> *r_functions=NULL) const; virtual Script *create_script() const; virtual bool has_named_classes() const; diff --git a/modules/gdscript/gd_tokenizer.cpp b/modules/gdscript/gd_tokenizer.cpp index 93863c4eb2..2041ec12ad 100644 --- a/modules/gdscript/gd_tokenizer.cpp +++ b/modules/gdscript/gd_tokenizer.cpp @@ -95,11 +95,16 @@ const char* GDTokenizer::token_names[TK_MAX]={ "setget", "const", "var", +"enum", "preload", "assert", "yield", "signal", "breakpoint", +"rpc", +"sync", +"master", +"slave", "'['", "']'", "'{'", @@ -865,7 +870,12 @@ void GDTokenizerText::_advance() { {TK_PR_YIELD,"yield"}, {TK_PR_SIGNAL,"signal"}, {TK_PR_BREAKPOINT,"breakpoint"}, + {TK_PR_REMOTE,"remote"}, + {TK_PR_MASTER,"master"}, + {TK_PR_SLAVE,"slave"}, + {TK_PR_SYNC,"sync"}, {TK_PR_CONST,"const"}, + {TK_PR_ENUM,"enum"}, //controlflow {TK_CF_IF,"if"}, {TK_CF_ELIF,"elif"}, @@ -1047,7 +1057,7 @@ void GDTokenizerText::advance(int p_amount) { ////////////////////////////////////////////////////////////////////////////////////////////////////// -#define BYTECODE_VERSION 10 +#define BYTECODE_VERSION 11 Error GDTokenizerBuffer::set_code_buffer(const Vector<uint8_t> & p_buffer) { @@ -1322,7 +1332,7 @@ StringName GDTokenizerBuffer::get_token_identifier(int p_offset) const{ ERR_FAIL_INDEX_V(offset,tokens.size(),StringName()); uint32_t identifier = tokens[offset]>>TOKEN_BITS; - ERR_FAIL_INDEX_V(identifier,identifiers.size(),StringName()); + ERR_FAIL_INDEX_V(identifier,(uint32_t)identifiers.size(),StringName()); return identifiers[identifier]; } @@ -1381,7 +1391,7 @@ const Variant& GDTokenizerBuffer::get_token_constant(int p_offset) const{ int offset = token+p_offset; ERR_FAIL_INDEX_V(offset,tokens.size(),nil); uint32_t constant = tokens[offset]>>TOKEN_BITS; - ERR_FAIL_INDEX_V(constant,constants.size(),nil); + ERR_FAIL_INDEX_V(constant,(uint32_t)constants.size(),nil); return constants[constant]; } diff --git a/modules/gdscript/gd_tokenizer.h b/modules/gdscript/gd_tokenizer.h index aaff573090..b91229ab1e 100644 --- a/modules/gdscript/gd_tokenizer.h +++ b/modules/gdscript/gd_tokenizer.h @@ -102,11 +102,16 @@ public: TK_PR_SETGET, TK_PR_CONST, TK_PR_VAR, + TK_PR_ENUM, TK_PR_PRELOAD, TK_PR_ASSERT, TK_PR_YIELD, TK_PR_SIGNAL, TK_PR_BREAKPOINT, + TK_PR_REMOTE, + TK_PR_SYNC, + TK_PR_MASTER, + TK_PR_SLAVE, TK_BRACKET_OPEN, TK_BRACKET_CLOSE, TK_CURLY_BRACKET_OPEN, diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp index 37a3fb2b25..6e73244b57 100644 --- a/modules/gridmap/grid_map.cpp +++ b/modules/gridmap/grid_map.cpp @@ -1808,6 +1808,7 @@ bool GridMap::is_using_baked_light() const{ } + GridMap::GridMap() { cell_size=2; diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp index f3beabceb8..9bdad6713d 100644 --- a/modules/gridmap/grid_map_editor_plugin.cpp +++ b/modules/gridmap/grid_map_editor_plugin.cpp @@ -212,6 +212,18 @@ void GridMapEditor::_menu_option(int p_option) { _update_areas_display(); update_areas(); } break; + case MENU_OPTION_SELECTION_DUPLICATE: + if (!(selection.active && input_action==INPUT_NONE)) + return; + if (last_mouseover==Vector3(-1,-1,-1)) //nono mouseovering anythin + break; + + input_action=INPUT_DUPLICATE; + selection.click=last_mouseover; + selection.current=last_mouseover; + selection.duplicate_rot=0; + _update_duplicate_indicator(); + break; case MENU_OPTION_SELECTION_CLEAR: { if (!selection.active) return; @@ -377,7 +389,9 @@ bool GridMapEditor::do_input_action(Camera* p_camera,const Point2& p_point,bool int item=node->get_cell_item(cell[0],cell[1],cell[2]); if (item>=0) { selected_pallete=item; + theme_pallete->set_current(item); update_pallete(); + _update_cursor_instance(); } return true; } if (input_action==INPUT_PAINT) { @@ -530,29 +544,6 @@ bool GridMapEditor::forward_spatial_input_event(Camera* p_camera,const InputEven if (edit_mode->get_selected()==0) { // regular click switch (p_event.type) { - case InputEvent::KEY: { - - if (p_event.key.pressed && p_event.key.scancode==KEY_D && p_event.key.mod.shift && selection.active && input_action==INPUT_NONE) { - - if (last_mouseover==Vector3(-1,-1,-1)) //nono mouseovering anythin - return false; - - input_action=INPUT_DUPLICATE; - selection.click=last_mouseover; - selection.current=last_mouseover; - selection.duplicate_rot=0; - _update_duplicate_indicator(); - - - } - - if (p_event.key.pressed && p_event.key.scancode==KEY_DELETE && selection.active) { - - _delete_selection(); - return true; - } - - } break; case InputEvent::MOUSE_BUTTON: { if (p_event.mouse_button.button_index==BUTTON_WHEEL_UP && (p_event.mouse_button.mod.command || p_event.mouse_button.mod.shift)) { @@ -851,6 +842,11 @@ void GridMapEditor::edit(GridMap *p_gridmap) { VS *vs = VS::get_singleton(); last_mouseover=Vector3(-1,-1,-1); + input_action=INPUT_NONE; + selection.active=false; + _update_selection_transform(); + _update_duplicate_indicator(); + spatial_editor = editor->get_editor_plugin_screen()->cast_to<SpatialEditorPlugin>(); if (!node) { @@ -1247,7 +1243,8 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) { options->get_popup()->add_item("Create Exterior Connector",MENU_OPTION_SELECTION_MAKE_EXTERIOR_CONNECTOR); options->get_popup()->add_item("Erase Area",MENU_OPTION_REMOVE_AREA); options->get_popup()->add_separator(); - options->get_popup()->add_item("Selection -> Clear",MENU_OPTION_SELECTION_CLEAR); + options->get_popup()->add_item("Selection -> Duplicate",MENU_OPTION_SELECTION_DUPLICATE,KEY_MASK_SHIFT+KEY_INSERT); + options->get_popup()->add_item("Selection -> Clear",MENU_OPTION_SELECTION_CLEAR,KEY_MASK_SHIFT+KEY_DELETE); //options->get_popup()->add_separator(); //options->get_popup()->add_item("Configure",MENU_OPTION_CONFIGURE); @@ -1266,7 +1263,7 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) { settings_pick_distance->set_max(10000.0f); settings_pick_distance->set_min(500.0f); settings_pick_distance->set_step(1.0f); - settings_pick_distance->set_val(EDITOR_DEF("gridmap_editor/pick_distance", 5000.0)); + settings_pick_distance->set_val(EDITOR_DEF("grid_map/pick_distance", 5000.0)); settings_vbc->add_margin_child("Pick Distance:", settings_pick_distance); clip_mode=CLIP_DISABLED; diff --git a/modules/gridmap/grid_map_editor_plugin.h b/modules/gridmap/grid_map_editor_plugin.h index fc43866ef3..535c51bcbf 100644 --- a/modules/gridmap/grid_map_editor_plugin.h +++ b/modules/gridmap/grid_map_editor_plugin.h @@ -167,6 +167,7 @@ class GridMapEditor : public VBoxContainer { MENU_OPTION_DUPLICATE_SELECTS, MENU_OPTION_SELECTION_MAKE_AREA, MENU_OPTION_SELECTION_MAKE_EXTERIOR_CONNECTOR, + MENU_OPTION_SELECTION_DUPLICATE, MENU_OPTION_SELECTION_CLEAR, MENU_OPTION_REMOVE_AREA, MENU_OPTION_GRIDMAP_SETTINGS diff --git a/modules/visual_script/SCsub b/modules/visual_script/SCsub new file mode 100644 index 0000000000..403fe68f66 --- /dev/null +++ b/modules/visual_script/SCsub @@ -0,0 +1,5 @@ +Import('env') + +env.add_source_files(env.modules_sources,"*.cpp") + +Export('env') diff --git a/modules/visual_script/config.py b/modules/visual_script/config.py new file mode 100644 index 0000000000..ea7e83378a --- /dev/null +++ b/modules/visual_script/config.py @@ -0,0 +1,11 @@ + + +def can_build(platform): + return True + + +def configure(env): + pass + + + diff --git a/modules/visual_script/register_types.cpp b/modules/visual_script/register_types.cpp new file mode 100644 index 0000000000..ad54149b51 --- /dev/null +++ b/modules/visual_script/register_types.cpp @@ -0,0 +1,131 @@ +/*************************************************************************/ +/* register_types.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#include "register_types.h" + +#include "visual_script.h" +#include "visual_script_editor.h" +#include "io/resource_loader.h" +#include "visual_script_nodes.h" +#include "visual_script_func_nodes.h" +#include "visual_script_builtin_funcs.h" +#include "visual_script_flow_control.h" +#include "visual_script_yield_nodes.h" +#include "visual_script_expression.h" + + +VisualScriptLanguage *visual_script_language=NULL; + + +void register_visual_script_types() { + + visual_script_language=memnew( VisualScriptLanguage ); + //script_language_gd->init(); + ScriptServer::register_language(visual_script_language); + + ObjectTypeDB::register_type<VisualScript>(); + ObjectTypeDB::register_virtual_type<VisualScriptNode>(); + ObjectTypeDB::register_virtual_type<VisualScriptFunctionState>(); + ObjectTypeDB::register_type<VisualScriptFunction>(); + ObjectTypeDB::register_type<VisualScriptOperator>(); + ObjectTypeDB::register_type<VisualScriptVariableSet>(); + ObjectTypeDB::register_type<VisualScriptVariableGet>(); + ObjectTypeDB::register_type<VisualScriptConstant>(); + ObjectTypeDB::register_type<VisualScriptIndexGet>(); + ObjectTypeDB::register_type<VisualScriptIndexSet>(); + ObjectTypeDB::register_type<VisualScriptGlobalConstant>(); + ObjectTypeDB::register_type<VisualScriptClassConstant>(); + ObjectTypeDB::register_type<VisualScriptMathConstant>(); + ObjectTypeDB::register_type<VisualScriptBasicTypeConstant>(); + ObjectTypeDB::register_type<VisualScriptEngineSingleton>(); + ObjectTypeDB::register_type<VisualScriptSceneNode>(); + ObjectTypeDB::register_type<VisualScriptSceneTree>(); + ObjectTypeDB::register_type<VisualScriptResourcePath>(); + ObjectTypeDB::register_type<VisualScriptSelf>(); + ObjectTypeDB::register_type<VisualScriptCustomNode>(); + ObjectTypeDB::register_type<VisualScriptSubCall>(); + ObjectTypeDB::register_type<VisualScriptComment>(); + ObjectTypeDB::register_type<VisualScriptConstructor>(); + ObjectTypeDB::register_type<VisualScriptLocalVar>(); + ObjectTypeDB::register_type<VisualScriptLocalVarSet>(); + ObjectTypeDB::register_type<VisualScriptInputAction>(); + ObjectTypeDB::register_type<VisualScriptDeconstruct>(); + ObjectTypeDB::register_type<VisualScriptPreload>(); + ObjectTypeDB::register_type<VisualScriptTypeCast>(); + + + ObjectTypeDB::register_type<VisualScriptFunctionCall>(); + ObjectTypeDB::register_type<VisualScriptPropertySet>(); + ObjectTypeDB::register_type<VisualScriptPropertyGet>(); +// ObjectTypeDB::register_type<VisualScriptScriptCall>(); + ObjectTypeDB::register_type<VisualScriptEmitSignal>(); + + ObjectTypeDB::register_type<VisualScriptReturn>(); + ObjectTypeDB::register_type<VisualScriptCondition>(); + ObjectTypeDB::register_type<VisualScriptWhile>(); + ObjectTypeDB::register_type<VisualScriptIterator>(); + ObjectTypeDB::register_type<VisualScriptSequence>(); + ObjectTypeDB::register_type<VisualScriptInputFilter>(); + ObjectTypeDB::register_type<VisualScriptSwitch >(); + + ObjectTypeDB::register_type<VisualScriptYield>(); + ObjectTypeDB::register_type<VisualScriptYieldSignal>(); + + ObjectTypeDB::register_type<VisualScriptBuiltinFunc>(); + + + ObjectTypeDB::register_type<VisualScriptExpression>(); + + register_visual_script_nodes(); + register_visual_script_func_nodes(); + register_visual_script_builtin_func_node(); + register_visual_script_flow_control_nodes(); + register_visual_script_yield_nodes(); + register_visual_script_expression_node(); + +#ifdef TOOLS_ENABLED + VisualScriptEditor::register_editor(); +#endif + + +} + +void unregister_visual_script_types() { + + + unregister_visual_script_nodes(); + + ScriptServer::unregister_language(visual_script_language); + +#ifdef TOOLS_ENABLED + VisualScriptEditor::free_clipboard(); +#endif + if (visual_script_language) + memdelete( visual_script_language ); + +} diff --git a/modules/visual_script/register_types.h b/modules/visual_script/register_types.h new file mode 100644 index 0000000000..0a5805eb0b --- /dev/null +++ b/modules/visual_script/register_types.h @@ -0,0 +1,30 @@ +/*************************************************************************/ +/* register_types.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +void register_visual_script_types(); +void unregister_visual_script_types(); diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp new file mode 100644 index 0000000000..bd042c8989 --- /dev/null +++ b/modules/visual_script/visual_script.cpp @@ -0,0 +1,2842 @@ +#include "visual_script.h" +#include "visual_script_nodes.h" +#include "scene/main/node.h" +#include "os/os.h" +#include "globals.h" + + + +//used by editor, this is not really saved +void VisualScriptNode::set_breakpoint(bool p_breakpoint) { + breakpoint=p_breakpoint; +} + +bool VisualScriptNode::is_breakpoint() const { + + return breakpoint; +} + +void VisualScriptNode::_notification(int p_what) { + + if (p_what==NOTIFICATION_POSTINITIALIZE) { + + int dvc = get_input_value_port_count(); + for(int i=0;i<dvc;i++) { + Variant::Type expected = get_input_value_port_info(i).type; + Variant::CallError ce; + default_input_values.push_back(Variant::construct(expected,NULL,0,ce,false)); + } + } +} + +void VisualScriptNode::ports_changed_notify(){ + + + default_input_values.resize( MAX(default_input_values.size(),get_input_value_port_count()) ); //let it grow as big as possible, we don't want to lose values on resize + + emit_signal("ports_changed"); + +} + +void VisualScriptNode::set_default_input_value(int p_port,const Variant& p_value) { + + ERR_FAIL_INDEX(p_port,default_input_values.size()); + + default_input_values[p_port]=p_value; + +#ifdef TOOLS_ENABLED + for (Set<VisualScript*>::Element *E=scripts_used.front();E;E=E->next()) { + E->get()->set_edited(true); + } +#endif + +} + +Variant VisualScriptNode::get_default_input_value(int p_port) const { + + ERR_FAIL_INDEX_V(p_port,default_input_values.size(),Variant()); + return default_input_values[p_port]; +} + +void VisualScriptNode::_set_default_input_values(Array p_values) { + + + default_input_values=p_values; +} + + +void VisualScriptNode::validate_input_default_values() { + + + + default_input_values.resize(get_input_value_port_count()); + + //actually validate on save + for(int i=0;i<get_input_value_port_count();i++) { + + Variant::Type expected = get_input_value_port_info(i).type; + + + if (expected==Variant::NIL || expected==default_input_values[i].get_type()) { + continue; + } else { + //not the same, reconvert + Variant::CallError ce; + Variant existing = default_input_values[i]; + const Variant *existingp=&existing; + default_input_values[i] = Variant::construct(expected,&existingp,1,ce,false); + if (ce.error!=Variant::CallError::CALL_OK) { + //could not convert? force.. + default_input_values[i] = Variant::construct(expected,NULL,0,ce,false); + } + } + } +} + +Array VisualScriptNode::_get_default_input_values() const { + + //validate on save, since on load there is little info about this + + return default_input_values; +} + + + +void VisualScriptNode::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("get_visual_script:VisualScript"),&VisualScriptNode::get_visual_script); + ObjectTypeDB::bind_method(_MD("set_default_input_value","port_idx","value:Variant"),&VisualScriptNode::set_default_input_value); + ObjectTypeDB::bind_method(_MD("get_default_input_value:Variant","port_idx"),&VisualScriptNode::get_default_input_value); + ObjectTypeDB::bind_method(_MD("_set_default_input_values","values"),&VisualScriptNode::_set_default_input_values); + ObjectTypeDB::bind_method(_MD("_get_default_input_values"),&VisualScriptNode::_get_default_input_values); + + ADD_PROPERTY(PropertyInfo(Variant::ARRAY,"_default_input_values",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_default_input_values"),_SCS("_get_default_input_values")); + ADD_SIGNAL(MethodInfo("ports_changed")); +} + +VisualScriptNode::TypeGuess VisualScriptNode::guess_output_type(TypeGuess* p_inputs,int p_output) const { + + PropertyInfo pinfo = get_output_value_port_info(p_output); + + TypeGuess tg; + + tg.type=pinfo.type; + if (pinfo.hint==PROPERTY_HINT_RESOURCE_TYPE) { + tg.obj_type=pinfo.hint_string; + } + + return tg; +} + +Ref<VisualScript> VisualScriptNode::get_visual_script() const { + + if (scripts_used.size()) + return Ref<VisualScript>(scripts_used.front()->get()); + + return Ref<VisualScript>(); +} + +VisualScriptNode::VisualScriptNode() { + breakpoint=false; +} + +//////////////// + +///////////////////// + +VisualScriptNodeInstance::VisualScriptNodeInstance() { + + sequence_outputs=NULL; + input_ports=NULL; +} + +VisualScriptNodeInstance::~VisualScriptNodeInstance() { + + if (sequence_outputs) { + memdelete_arr(sequence_outputs); + } + + if (input_ports) { + memdelete_arr(input_ports); + } + + if (output_ports) { + memdelete_arr(output_ports); + } + +} + +void VisualScript::add_function(const StringName& p_name) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!String(p_name).is_valid_identifier()); + ERR_FAIL_COND(functions.has(p_name)); + + functions[p_name]=Function(); + functions[p_name].scroll=Vector2(-50,-100); +} + +bool VisualScript::has_function(const StringName& p_name) const { + + return functions.has(p_name); + +} +void VisualScript::remove_function(const StringName& p_name) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!functions.has(p_name)); + + for (Map<int,Function::NodeData>::Element *E=functions[p_name].nodes.front();E;E=E->next()) { + + E->get().node->disconnect("ports_changed",this,"_node_ports_changed"); + E->get().node->scripts_used.erase(this); + } + + functions.erase(p_name); + +} + +void VisualScript::rename_function(const StringName& p_name,const StringName& p_new_name) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!functions.has(p_name)); + if (p_new_name==p_name) + return; + + ERR_FAIL_COND(!String(p_new_name).is_valid_identifier()); + + ERR_FAIL_COND(functions.has(p_new_name)); + ERR_FAIL_COND(variables.has(p_new_name)); + ERR_FAIL_COND(custom_signals.has(p_new_name)); + + functions[p_new_name]=functions[p_name]; + functions.erase(p_name); + +} + +void VisualScript::set_function_scroll(const StringName& p_name, const Vector2& p_scroll) { + + ERR_FAIL_COND(!functions.has(p_name)); + functions[p_name].scroll=p_scroll; + +} + +Vector2 VisualScript::get_function_scroll(const StringName& p_name) const { + + ERR_FAIL_COND_V(!functions.has(p_name),Vector2()); + return functions[p_name].scroll; + +} + + +void VisualScript::get_function_list(List<StringName> *r_functions) const { + + for (const Map<StringName,Function>::Element *E=functions.front();E;E=E->next()) { + r_functions->push_back(E->key()); + } + + r_functions->sort_custom<StringName::AlphCompare>(); + +} + +int VisualScript::get_function_node_id(const StringName& p_name) const { + + ERR_FAIL_COND_V(!functions.has(p_name),-1); + + return functions[p_name].function_id; + +} + + +void VisualScript::_node_ports_changed(int p_id) { + + + + StringName function; + + for (Map<StringName,Function>::Element *E=functions.front();E;E=E->next()) { + + if (E->get().nodes.has(p_id)) { + function=E->key(); + break; + } + } + + ERR_FAIL_COND(function==StringName()); + + Function &func = functions[function]; + Ref<VisualScriptNode> vsn = func.nodes[p_id].node; + + if (OS::get_singleton()->get_main_loop() && OS::get_singleton()->get_main_loop()->cast_to<SceneTree>() && OS::get_singleton()->get_main_loop()->cast_to<SceneTree>()->is_editor_hint()) { + vsn->validate_input_default_values(); //force validate default values when editing on editor + } + + //must revalidate all the functions + + { + List<SequenceConnection> to_remove; + + for (Set<SequenceConnection>::Element *E=func.sequence_connections.front();E;E=E->next()) { + if (E->get().from_node==p_id && E->get().from_output>=vsn->get_output_sequence_port_count()) { + + to_remove.push_back(E->get()); + } + if (E->get().to_node==p_id && !vsn->has_input_sequence_port()) { + + to_remove.push_back(E->get()); + } + } + + while(to_remove.size()) { + func.sequence_connections.erase(to_remove.front()->get()); + to_remove.pop_front(); + } + } + + { + + List<DataConnection> to_remove; + + + for (Set<DataConnection>::Element *E=func.data_connections.front();E;E=E->next()) { + if (E->get().from_node==p_id && E->get().from_port>=vsn->get_output_value_port_count()) { + to_remove.push_back(E->get()); + } + if (E->get().to_node==p_id && E->get().to_port>=vsn->get_input_value_port_count()) { + to_remove.push_back(E->get()); + } + } + + while(to_remove.size()) { + func.data_connections.erase(to_remove.front()->get()); + to_remove.pop_front(); + } + } + +#ifdef TOOLS_ENABLED + set_edited(true); //something changed, let's set as edited + emit_signal("node_ports_changed",function,p_id); +#endif +} + +void VisualScript::add_node(const StringName& p_func,int p_id, const Ref<VisualScriptNode>& p_node, const Point2 &p_pos) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!functions.has(p_func)); + + + for (Map<StringName,Function>::Element *E=functions.front();E;E=E->next()) { + + ERR_FAIL_COND(E->get().nodes.has(p_id)); //id can exist only one in script, even for different functions + } + + Function &func = functions[p_func]; + + + if (p_node->cast_to<VisualScriptFunction>()) { + //the function indeed + ERR_EXPLAIN("A function node already has been set here."); + ERR_FAIL_COND(func.function_id>=0); + + func.function_id=p_id; + } + + Function::NodeData nd; + nd.node=p_node; + nd.pos=p_pos; + + Ref<VisualScriptNode> vsn = p_node; + vsn->connect("ports_changed",this,"_node_ports_changed",varray(p_id)); + vsn->scripts_used.insert(this); + + + + func.nodes[p_id]=nd; +} + +void VisualScript::remove_node(const StringName& p_func,int p_id){ + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!functions.has(p_func)); + Function &func = functions[p_func]; + + ERR_FAIL_COND(!func.nodes.has(p_id)); + { + List<SequenceConnection> to_remove; + + for (Set<SequenceConnection>::Element *E=func.sequence_connections.front();E;E=E->next()) { + if (E->get().from_node==p_id || E->get().to_node==p_id) { + to_remove.push_back(E->get()); + } + } + + while(to_remove.size()) { + func.sequence_connections.erase(to_remove.front()->get()); + to_remove.pop_front(); + } + } + + { + + List<DataConnection> to_remove; + + + for (Set<DataConnection>::Element *E=func.data_connections.front();E;E=E->next()) { + if (E->get().from_node==p_id || E->get().to_node==p_id) { + to_remove.push_back(E->get()); + } + } + + while(to_remove.size()) { + func.data_connections.erase(to_remove.front()->get()); + to_remove.pop_front(); + } + } + + if (func.nodes[p_id].node->cast_to<VisualScriptFunction>()) { + func.function_id=-1; //revert to invalid + } + + func.nodes[p_id].node->disconnect("ports_changed",this,"_node_ports_changed"); + func.nodes[p_id].node->scripts_used.erase(this); + + func.nodes.erase(p_id); + + +} + + +bool VisualScript::has_node(const StringName& p_func,int p_id) const { + + ERR_FAIL_COND_V(!functions.has(p_func),false); + const Function &func = functions[p_func]; + + return func.nodes.has(p_id); +} + +Ref<VisualScriptNode> VisualScript::get_node(const StringName& p_func,int p_id) const{ + + ERR_FAIL_COND_V(!functions.has(p_func),Ref<VisualScriptNode>()); + const Function &func = functions[p_func]; + + ERR_FAIL_COND_V(!func.nodes.has(p_id),Ref<VisualScriptNode>()); + + return func.nodes[p_id].node; +} + +void VisualScript::set_node_pos(const StringName& p_func,int p_id,const Point2& p_pos) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!functions.has(p_func)); + Function &func = functions[p_func]; + + ERR_FAIL_COND(!func.nodes.has(p_id)); + func.nodes[p_id].pos=p_pos; +} + +Point2 VisualScript::get_node_pos(const StringName& p_func,int p_id) const{ + + ERR_FAIL_COND_V(!functions.has(p_func),Point2()); + const Function &func = functions[p_func]; + + ERR_FAIL_COND_V(!func.nodes.has(p_id),Point2()); + return func.nodes[p_id].pos; +} + + +void VisualScript::get_node_list(const StringName& p_func,List<int> *r_nodes) const{ + + ERR_FAIL_COND(!functions.has(p_func)); + const Function &func = functions[p_func]; + + for (const Map<int,Function::NodeData>::Element *E=func.nodes.front();E;E=E->next()) { + r_nodes->push_back(E->key()); + } + +} + + +void VisualScript::sequence_connect(const StringName& p_func,int p_from_node,int p_from_output,int p_to_node){ + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!functions.has(p_func)); + Function &func = functions[p_func]; + + + SequenceConnection sc; + sc.from_node=p_from_node; + sc.from_output=p_from_output; + sc.to_node=p_to_node; + ERR_FAIL_COND(func.sequence_connections.has(sc)); + + func.sequence_connections.insert(sc); + +} + +void VisualScript::sequence_disconnect(const StringName& p_func,int p_from_node,int p_from_output,int p_to_node){ + + ERR_FAIL_COND(!functions.has(p_func)); + Function &func = functions[p_func]; + + SequenceConnection sc; + sc.from_node=p_from_node; + sc.from_output=p_from_output; + sc.to_node=p_to_node; + ERR_FAIL_COND(!func.sequence_connections.has(sc)); + + func.sequence_connections.erase(sc); + +} + +bool VisualScript::has_sequence_connection(const StringName& p_func,int p_from_node,int p_from_output,int p_to_node) const{ + + ERR_FAIL_COND_V(!functions.has(p_func),false); + const Function &func = functions[p_func]; + + SequenceConnection sc; + sc.from_node=p_from_node; + sc.from_output=p_from_output; + sc.to_node=p_to_node; + + return func.sequence_connections.has(sc); +} + +void VisualScript::get_sequence_connection_list(const StringName& p_func,List<SequenceConnection> *r_connection) const { + + ERR_FAIL_COND(!functions.has(p_func)); + const Function &func = functions[p_func]; + + for (const Set<SequenceConnection>::Element *E=func.sequence_connections.front();E;E=E->next()) { + r_connection->push_back(E->get()); + } +} + + +void VisualScript::data_connect(const StringName& p_func,int p_from_node,int p_from_port,int p_to_node,int p_to_port) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!functions.has(p_func)); + Function &func = functions[p_func]; + + DataConnection dc; + dc.from_node=p_from_node; + dc.from_port=p_from_port; + dc.to_node=p_to_node; + dc.to_port=p_to_port; + + ERR_FAIL_COND( func.data_connections.has(dc)); + + func.data_connections.insert(dc); +} + +void VisualScript::data_disconnect(const StringName& p_func,int p_from_node,int p_from_port,int p_to_node,int p_to_port) { + + ERR_FAIL_COND(!functions.has(p_func)); + Function &func = functions[p_func]; + + DataConnection dc; + dc.from_node=p_from_node; + dc.from_port=p_from_port; + dc.to_node=p_to_node; + dc.to_port=p_to_port; + + ERR_FAIL_COND( !func.data_connections.has(dc)); + + func.data_connections.erase(dc); + +} + +bool VisualScript::has_data_connection(const StringName& p_func,int p_from_node,int p_from_port,int p_to_node,int p_to_port) const { + + ERR_FAIL_COND_V(!functions.has(p_func),false); + const Function &func = functions[p_func]; + + DataConnection dc; + dc.from_node=p_from_node; + dc.from_port=p_from_port; + dc.to_node=p_to_node; + dc.to_port=p_to_port; + + return func.data_connections.has(dc); + +} + +bool VisualScript::is_input_value_port_connected(const StringName& p_func,int p_node,int p_port) const { + + ERR_FAIL_COND_V(!functions.has(p_func),false); + const Function &func = functions[p_func]; + + for (const Set<DataConnection>::Element *E=func.data_connections.front();E;E=E->next()) { + if (E->get().to_node==p_node && E->get().to_port==p_port) + return true; + } + + return false; +} + +bool VisualScript::get_input_value_port_connection_source(const StringName& p_func,int p_node,int p_port,int *r_node,int *r_port) const { + + ERR_FAIL_COND_V(!functions.has(p_func),false); + const Function &func = functions[p_func]; + + for (const Set<DataConnection>::Element *E=func.data_connections.front();E;E=E->next()) { + if (E->get().to_node==p_node && E->get().to_port==p_port) { + *r_node=E->get().from_node; + *r_port=E->get().from_port; + return true; + } + } + + return false; + +} + +void VisualScript::get_data_connection_list(const StringName& p_func,List<DataConnection> *r_connection) const { + + ERR_FAIL_COND(!functions.has(p_func)); + const Function &func = functions[p_func]; + + for (const Set<DataConnection>::Element *E=func.data_connections.front();E;E=E->next()) { + r_connection->push_back(E->get()); + } +} + +void VisualScript::add_variable(const StringName& p_name,const Variant& p_default_value,bool p_export) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!String(p_name).is_valid_identifier()); + ERR_FAIL_COND(variables.has(p_name)); + + Variable v; + v.default_value=p_default_value; + v.info.type=p_default_value.get_type(); + v.info.name=p_name; + v.info.hint=PROPERTY_HINT_NONE; + v._export=p_export; + + variables[p_name]=v; + +#ifdef TOOLS_ENABLED + _update_placeholders(); +#endif + +} + +bool VisualScript::has_variable(const StringName& p_name) const { + + return variables.has(p_name); +} + +void VisualScript::remove_variable(const StringName& p_name) { + + ERR_FAIL_COND(!variables.has(p_name)); + variables.erase(p_name); + +#ifdef TOOLS_ENABLED + _update_placeholders(); +#endif +} + +void VisualScript::set_variable_default_value(const StringName& p_name,const Variant& p_value){ + + ERR_FAIL_COND(!variables.has(p_name)); + + variables[p_name].default_value=p_value; + +#ifdef TOOLS_ENABLED + _update_placeholders(); +#endif + + +} +Variant VisualScript::get_variable_default_value(const StringName& p_name) const{ + + ERR_FAIL_COND_V(!variables.has(p_name),Variant()); + return variables[p_name].default_value; + +} +void VisualScript::set_variable_info(const StringName& p_name,const PropertyInfo& p_info){ + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!variables.has(p_name)); + variables[p_name].info=p_info; + variables[p_name].info.name=p_name; + +#ifdef TOOLS_ENABLED + _update_placeholders(); +#endif + + +} +PropertyInfo VisualScript::get_variable_info(const StringName& p_name) const{ + + ERR_FAIL_COND_V(!variables.has(p_name),PropertyInfo()); + return variables[p_name].info; +} + +void VisualScript::set_variable_export(const StringName& p_name,bool p_export) { + + ERR_FAIL_COND(!variables.has(p_name)); + + variables[p_name]._export=p_export; +} + +bool VisualScript::get_variable_export(const StringName& p_name) const { + + ERR_FAIL_COND_V(!variables.has(p_name),false); + return variables[p_name]._export; + +} + + +void VisualScript::_set_variable_info(const StringName& p_name,const Dictionary& p_info) { + + PropertyInfo pinfo; + if (p_info.has("type")) + pinfo.type=Variant::Type(int(p_info["type"])); + if (p_info.has("name")) + pinfo.name=p_info["name"]; + if (p_info.has("hint")) + pinfo.hint=PropertyHint(int(p_info["hint"])); + if (p_info.has("hint_string")) + pinfo.hint_string=p_info["hint_string"]; + if (p_info.has("usage")) + pinfo.usage=p_info["usage"]; + + set_variable_info(p_name,pinfo); +} + +Dictionary VisualScript::_get_variable_info(const StringName& p_name) const{ + + PropertyInfo pinfo=get_variable_info(p_name); + Dictionary d; + d["type"]=pinfo.type; + d["name"]=pinfo.name; + d["hint"]=pinfo.hint; + d["hint_string"]=pinfo.hint_string; + d["usage"]=pinfo.usage; + + return d; +} + +void VisualScript::get_variable_list(List<StringName> *r_variables) const{ + + + for (Map<StringName,Variable>::Element *E=variables.front();E;E=E->next()) { + r_variables->push_back(E->key()); + } + + r_variables->sort_custom<StringName::AlphCompare>(); +} + + +void VisualScript::set_instance_base_type(const StringName& p_type) { + + ERR_FAIL_COND( instances.size() ); + base_type=p_type; +} + + +void VisualScript::rename_variable(const StringName& p_name,const StringName& p_new_name) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!variables.has(p_name)); + if (p_new_name==p_name) + return; + + ERR_FAIL_COND(!String(p_new_name).is_valid_identifier()); + + ERR_FAIL_COND(functions.has(p_new_name)); + ERR_FAIL_COND(variables.has(p_new_name)); + ERR_FAIL_COND(custom_signals.has(p_new_name)); + + variables[p_new_name]=variables[p_name]; + variables.erase(p_name); + +} + +void VisualScript::add_custom_signal(const StringName& p_name) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!String(p_name).is_valid_identifier()); + ERR_FAIL_COND(custom_signals.has(p_name)); + + custom_signals[p_name]=Vector<Argument>(); +} + +bool VisualScript::has_custom_signal(const StringName& p_name) const { + + return custom_signals.has(p_name); + +} +void VisualScript::custom_signal_add_argument(const StringName& p_func,Variant::Type p_type,const String& p_name,int p_index) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!custom_signals.has(p_func)); + Argument arg; + arg.type=p_type; + arg.name=p_name; + if (p_index<0) + custom_signals[p_func].push_back(arg); + else + custom_signals[p_func].insert(0,arg); + +} +void VisualScript::custom_signal_set_argument_type(const StringName& p_func,int p_argidx,Variant::Type p_type) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!custom_signals.has(p_func)); + ERR_FAIL_INDEX(p_argidx,custom_signals[p_func].size()); + custom_signals[p_func][p_argidx].type=p_type; +} +Variant::Type VisualScript::custom_signal_get_argument_type(const StringName& p_func,int p_argidx) const { + + ERR_FAIL_COND_V(!custom_signals.has(p_func),Variant::NIL); + ERR_FAIL_INDEX_V(p_argidx,custom_signals[p_func].size(),Variant::NIL); + return custom_signals[p_func][p_argidx].type; +} +void VisualScript::custom_signal_set_argument_name(const StringName& p_func,int p_argidx,const String& p_name) { + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!custom_signals.has(p_func)); + ERR_FAIL_INDEX(p_argidx,custom_signals[p_func].size()); + custom_signals[p_func][p_argidx].name=p_name; + +} +String VisualScript::custom_signal_get_argument_name(const StringName& p_func,int p_argidx) const { + + ERR_FAIL_COND_V(!custom_signals.has(p_func),String()); + ERR_FAIL_INDEX_V(p_argidx,custom_signals[p_func].size(),String()); + return custom_signals[p_func][p_argidx].name; + +} +void VisualScript::custom_signal_remove_argument(const StringName& p_func,int p_argidx) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!custom_signals.has(p_func)); + ERR_FAIL_INDEX(p_argidx,custom_signals[p_func].size()); + custom_signals[p_func].remove(p_argidx); + +} + +int VisualScript::custom_signal_get_argument_count(const StringName& p_func) const { + + ERR_FAIL_COND_V(!custom_signals.has(p_func),0); + return custom_signals[p_func].size(); + +} +void VisualScript::custom_signal_swap_argument(const StringName& p_func,int p_argidx,int p_with_argidx) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!custom_signals.has(p_func)); + ERR_FAIL_INDEX(p_argidx,custom_signals[p_func].size()); + ERR_FAIL_INDEX(p_with_argidx,custom_signals[p_func].size()); + + SWAP( custom_signals[p_func][p_argidx], custom_signals[p_func][p_with_argidx] ); + +} +void VisualScript::remove_custom_signal(const StringName& p_name) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!custom_signals.has(p_name)); + custom_signals.erase(p_name); + +} + +void VisualScript::rename_custom_signal(const StringName& p_name,const StringName& p_new_name) { + + ERR_FAIL_COND( instances.size() ); + ERR_FAIL_COND(!custom_signals.has(p_name)); + if (p_new_name==p_name) + return; + + ERR_FAIL_COND(!String(p_new_name).is_valid_identifier()); + + ERR_FAIL_COND(functions.has(p_new_name)); + ERR_FAIL_COND(variables.has(p_new_name)); + ERR_FAIL_COND(custom_signals.has(p_new_name)); + + custom_signals[p_new_name]=custom_signals[p_name]; + custom_signals.erase(p_name); + +} + +void VisualScript::get_custom_signal_list(List<StringName> *r_custom_signals) const { + + for (const Map<StringName,Vector<Argument> >::Element *E=custom_signals.front();E;E=E->next()) { + r_custom_signals->push_back(E->key()); + } + + r_custom_signals->sort_custom<StringName::AlphCompare>(); + +} + +int VisualScript::get_available_id() const { + + int max_id=0; + for (Map<StringName,Function>::Element *E=functions.front();E;E=E->next()) { + if (E->get().nodes.empty()) + continue; + + int last_id = E->get().nodes.back()->key(); + max_id=MAX(max_id,last_id+1); + } + + return max_id; +} + +///////////////////////////////// + + +bool VisualScript::can_instance() const { + + return true;//ScriptServer::is_scripting_enabled(); + +} + + +StringName VisualScript::get_instance_base_type() const { + + return base_type; +} + +Ref<Script> VisualScript::get_base_script() const { + return Ref<Script>(); // no inheritance in visual script +} + + +#ifdef TOOLS_ENABLED +void VisualScript::_placeholder_erased(PlaceHolderScriptInstance *p_placeholder) { + + + placeholders.erase(p_placeholder); +} + + +void VisualScript::_update_placeholders() { + + if (placeholders.size()==0) + return; //no bother if no placeholders + List<PropertyInfo> pinfo; + Map<StringName,Variant> values; + + for (Map<StringName,Variable>::Element *E=variables.front();E;E=E->next()) { + + if (!E->get()._export) + continue; + + PropertyInfo p = E->get().info; + p.name=String(E->key()); + pinfo.push_back(p); + values[p.name]=E->get().default_value; + } + + for (Set<PlaceHolderScriptInstance*>::Element *E=placeholders.front();E;E=E->next()) { + + E->get()->update(pinfo,values); + } + +} + +#endif + + +ScriptInstance* VisualScript::instance_create(Object *p_this) { + + + +#ifdef TOOLS_ENABLED + + if (!ScriptServer::is_scripting_enabled()) { + + + PlaceHolderScriptInstance *sins = memnew( PlaceHolderScriptInstance(VisualScriptLanguage::singleton,Ref<Script>((Script*)this),p_this)); + placeholders.insert(sins); + + List<PropertyInfo> pinfo; + Map<StringName,Variant> values; + + for (Map<StringName,Variable>::Element *E=variables.front();E;E=E->next()) { + + if (!E->get()._export) + continue; + + PropertyInfo p = E->get().info; + p.name=String(E->key()); + pinfo.push_back(p); + values[p.name]=E->get().default_value; + } + + sins->update(pinfo,values); + + return sins; + } +#endif + + + VisualScriptInstance *instance=memnew( VisualScriptInstance ); + instance->create(Ref<VisualScript>(this),p_this); + + + if (VisualScriptLanguage::singleton->lock) + VisualScriptLanguage::singleton->lock->lock(); + + instances[p_this]=instance; + + if (VisualScriptLanguage::singleton->lock) + VisualScriptLanguage::singleton->lock->unlock(); + + return instance; +} + +bool VisualScript::instance_has(const Object *p_this) const { + + return instances.has((Object*)p_this); +} + +bool VisualScript::has_source_code() const { + + return false; +} + +String VisualScript::get_source_code() const { + + return String(); +} + +void VisualScript::set_source_code(const String& p_code) { + +} + +Error VisualScript::reload(bool p_keep_state) { + + return OK; +} + + +bool VisualScript::is_tool() const { + + return false; +} + + +String VisualScript::get_node_type() const { + + return String(); +} + + +ScriptLanguage *VisualScript::get_language() const { + + return VisualScriptLanguage::singleton; +} + + +bool VisualScript::has_script_signal(const StringName& p_signal) const { + + return custom_signals.has(p_signal); +} + +void VisualScript::get_script_signal_list(List<MethodInfo> *r_signals) const { + + for (const Map<StringName,Vector<Argument> >::Element *E=custom_signals.front();E;E=E->next()) { + + MethodInfo mi; + mi.name=E->key(); + for(int i=0;i<E->get().size();i++) { + PropertyInfo arg; + arg.type=E->get()[i].type; + arg.name=E->get()[i].name; + mi.arguments.push_back(arg); + } + + + r_signals->push_back(mi); + } + + +} + + +bool VisualScript::get_property_default_value(const StringName& p_property,Variant& r_value) const { + + if (!variables.has(p_property)) + return false; + + r_value=variables[ p_property ].default_value; + return true; +} +void VisualScript::get_script_method_list(List<MethodInfo> *p_list) const { + + for (Map<StringName,Function>::Element *E=functions.front();E;E=E->next()) { + + MethodInfo mi; + mi.name=E->key(); + if (E->get().function_id>=0) { + + Ref<VisualScriptFunction> func=E->get().nodes[E->get().function_id].node; + if (func.is_valid()) { + + for(int i=0;i<func->get_argument_count();i++) { + PropertyInfo arg; + arg.name=func->get_argument_name(i); + arg.type=func->get_argument_type(i); + mi.arguments.push_back(arg); + } + } + } + + p_list->push_back(mi); + } +} + +bool VisualScript::has_method(const StringName& p_method) const { + + return functions.has(p_method); +} +MethodInfo VisualScript::get_method_info(const StringName& p_method) const{ + + const Map<StringName,Function>::Element *E=functions.find(p_method); + if (!E) + return MethodInfo(); + + MethodInfo mi; + mi.name=E->key(); + if (E->get().function_id>=0) { + + Ref<VisualScriptFunction> func=E->get().nodes[E->get().function_id].node; + if (func.is_valid()) { + + for(int i=0;i<func->get_argument_count();i++) { + PropertyInfo arg; + arg.name=func->get_argument_name(i); + arg.type=func->get_argument_type(i); + mi.arguments.push_back(arg); + } + } + } + + return mi; +} + +void VisualScript::get_script_property_list(List<PropertyInfo> *p_list) const { + + List<StringName> vars; + get_variable_list(&vars); + + for (List<StringName>::Element *E=vars.front();E;E=E->next()) { + if (!variables[E->get()]._export) + continue; + p_list->push_back(variables[E->get()].info); + } +} + +#ifdef TOOLS_ENABLED +bool VisualScript::are_subnodes_edited() const { + + for(const Map<StringName,Function>::Element *E=functions.front();E;E=E->next()) { + + for (const Map<int,Function::NodeData>::Element *F=E->get().nodes.front();F;F=F->next()) { + if (F->get().node->is_edited()) { + return true; + } + } + } + + return false; +} +#endif + +void VisualScript::_set_data(const Dictionary& p_data) { + + Dictionary d = p_data; + if (d.has("base_type")) + base_type=d["base_type"]; + + variables.clear(); + Array vars=d["variables"]; + for (int i=0;i<vars.size();i++) { + + Dictionary v=vars[i]; + StringName name = v["name"]; + add_variable(name); + _set_variable_info(name,v); + set_variable_default_value(name,v["default_value"]); + set_variable_export(name,v.has("export") && bool(v["export"])); + + } + + + custom_signals.clear(); + Array sigs=d["signals"]; + for (int i=0;i<sigs.size();i++) { + + Dictionary cs=sigs[i]; + add_custom_signal(cs["name"]); + + Array args=cs["arguments"]; + for(int j=0;j<args.size();j+=2) { + custom_signal_add_argument(cs["name"],Variant::Type(int(args[j+1])),args[j]); + } + } + + Array funcs=d["functions"]; + functions.clear(); + + for (int i=0;i<funcs.size();i++) { + + Dictionary func=funcs[i]; + + + StringName name=func["name"]; + //int id=func["function_id"]; + add_function(name); + + set_function_scroll(name,func["scroll"]); + + Array nodes = func["nodes"]; + + for(int i=0;i<nodes.size();i+=3) { + + add_node(name,nodes[i],nodes[i+2],nodes[i+1]); + } + + + Array sequence_connections=func["sequence_connections"]; + + for (int j=0;j<sequence_connections.size();j+=3) { + + sequence_connect(name,sequence_connections[j+0],sequence_connections[j+1],sequence_connections[j+2]); + } + + + Array data_connections=func["data_connections"]; + + for (int j=0;j<data_connections.size();j+=4) { + + data_connect(name,data_connections[j+0],data_connections[j+1],data_connections[j+2],data_connections[j+3]); + + } + + + } + +} + +Dictionary VisualScript::_get_data() const{ + + Dictionary d; + d["base_type"]=base_type; + Array vars; + for (const Map<StringName,Variable>::Element *E=variables.front();E;E=E->next()) { + + Dictionary var = _get_variable_info(E->key()); + var["name"]=E->key(); //make sure it's the right one + var["default_value"]=E->get().default_value; + var["export"]=E->get()._export; + vars.push_back(var); + } + d["variables"]=vars; + + Array sigs; + for (const Map<StringName,Vector<Argument> >::Element *E=custom_signals.front();E;E=E->next()) { + + Dictionary cs; + cs["name"]=E->key(); + Array args; + for(int i=0;i<E->get().size();i++) { + args.push_back(E->get()[i].name); + args.push_back(E->get()[i].type); + } + cs["arguments"]=args; + + sigs.push_back(cs); + } + + d["signals"]=sigs; + + Array funcs; + + for (const Map<StringName,Function>::Element *E=functions.front();E;E=E->next()) { + + Dictionary func; + func["name"]=E->key(); + func["function_id"]=E->get().function_id; + func["scroll"]=E->get().scroll; + + Array nodes; + + for (const Map<int,Function::NodeData>::Element *F=E->get().nodes.front();F;F=F->next()) { + + nodes.push_back(F->key()); + nodes.push_back(F->get().pos); + nodes.push_back(F->get().node); + + } + + func["nodes"]=nodes; + + Array sequence_connections; + + for (const Set<SequenceConnection>::Element *F=E->get().sequence_connections.front();F;F=F->next()) { + + sequence_connections.push_back(F->get().from_node); + sequence_connections.push_back(F->get().from_output); + sequence_connections.push_back(F->get().to_node); + + } + + + func["sequence_connections"]=sequence_connections; + + Array data_connections; + + for (const Set<DataConnection>::Element *F=E->get().data_connections.front();F;F=F->next()) { + + data_connections.push_back(F->get().from_node); + data_connections.push_back(F->get().from_port); + data_connections.push_back(F->get().to_node); + data_connections.push_back(F->get().to_port); + + } + + + func["data_connections"]=data_connections; + + funcs.push_back(func); + + } + + d["functions"]=funcs; + + + return d; + +} + +void VisualScript::_bind_methods() { + + + + ObjectTypeDB::bind_method(_MD("_node_ports_changed"),&VisualScript::_node_ports_changed); + + ObjectTypeDB::bind_method(_MD("add_function","name"),&VisualScript::add_function); + ObjectTypeDB::bind_method(_MD("has_function","name"),&VisualScript::has_function); + ObjectTypeDB::bind_method(_MD("remove_function","name"),&VisualScript::remove_function); + ObjectTypeDB::bind_method(_MD("rename_function","name","new_name"),&VisualScript::rename_function); + ObjectTypeDB::bind_method(_MD("set_function_scroll","ofs"),&VisualScript::set_function_scroll); + ObjectTypeDB::bind_method(_MD("get_function_scroll"),&VisualScript::get_function_scroll); + + ObjectTypeDB::bind_method(_MD("add_node","func","id","node","pos"),&VisualScript::add_node,DEFVAL(Point2())); + ObjectTypeDB::bind_method(_MD("remove_node","func","id"),&VisualScript::remove_node); + ObjectTypeDB::bind_method(_MD("get_function_node_id","name"),&VisualScript::get_function_node_id); + + ObjectTypeDB::bind_method(_MD("get_node","func","id"),&VisualScript::get_node); + ObjectTypeDB::bind_method(_MD("has_node","func","id"),&VisualScript::has_node); + ObjectTypeDB::bind_method(_MD("set_node_pos","func","id","pos"),&VisualScript::set_node_pos); + ObjectTypeDB::bind_method(_MD("get_node_pos","func","id"),&VisualScript::get_node_pos); + + ObjectTypeDB::bind_method(_MD("sequence_connect","func","from_node","from_output","to_node"),&VisualScript::sequence_connect); + ObjectTypeDB::bind_method(_MD("sequence_disconnect","func","from_node","from_output","to_node"),&VisualScript::sequence_disconnect); + ObjectTypeDB::bind_method(_MD("has_sequence_connection","func","from_node","from_output","to_node"),&VisualScript::has_sequence_connection); + + ObjectTypeDB::bind_method(_MD("data_connect","func","from_node","from_port","to_node","to_port"),&VisualScript::data_connect); + ObjectTypeDB::bind_method(_MD("data_disconnect","func","from_node","from_port","to_node","to_port"),&VisualScript::data_disconnect); + ObjectTypeDB::bind_method(_MD("has_data_connection","func","from_node","from_port","to_node","to_port"),&VisualScript::has_data_connection); + + ObjectTypeDB::bind_method(_MD("add_variable","name","default_value","export"),&VisualScript::add_variable,DEFVAL(Variant()),DEFVAL(false)); + ObjectTypeDB::bind_method(_MD("has_variable","name"),&VisualScript::has_variable); + ObjectTypeDB::bind_method(_MD("remove_variable","name"),&VisualScript::remove_variable); + ObjectTypeDB::bind_method(_MD("set_variable_default_value","name","value"),&VisualScript::set_variable_default_value); + ObjectTypeDB::bind_method(_MD("get_variable_default_value","name"),&VisualScript::get_variable_default_value); + ObjectTypeDB::bind_method(_MD("set_variable_info","name","value"),&VisualScript::_set_variable_info); + ObjectTypeDB::bind_method(_MD("get_variable_info","name"),&VisualScript::_get_variable_info); + ObjectTypeDB::bind_method(_MD("set_variable_export","name","enable"),&VisualScript::set_variable_export); + ObjectTypeDB::bind_method(_MD("get_variable_export","name"),&VisualScript::get_variable_export); + ObjectTypeDB::bind_method(_MD("rename_variable","name","new_name"),&VisualScript::rename_variable); + + ObjectTypeDB::bind_method(_MD("add_custom_signal","name"),&VisualScript::add_custom_signal); + ObjectTypeDB::bind_method(_MD("has_custom_signal","name"),&VisualScript::has_custom_signal); + ObjectTypeDB::bind_method(_MD("custom_signal_add_argument","name","type","argname","index"),&VisualScript::custom_signal_add_argument,DEFVAL(-1)); + ObjectTypeDB::bind_method(_MD("custom_signal_set_argument_type","name","argidx","type"),&VisualScript::custom_signal_set_argument_type); + ObjectTypeDB::bind_method(_MD("custom_signal_get_argument_type","name","argidx"),&VisualScript::custom_signal_get_argument_type); + ObjectTypeDB::bind_method(_MD("custom_signal_set_argument_name","name","argidx","argname"),&VisualScript::custom_signal_set_argument_name); + ObjectTypeDB::bind_method(_MD("custom_signal_get_argument_name","name","argidx"),&VisualScript::custom_signal_get_argument_name); + ObjectTypeDB::bind_method(_MD("custom_signal_remove_argument","argidx"),&VisualScript::custom_signal_remove_argument); + ObjectTypeDB::bind_method(_MD("custom_signal_get_argument_count","name"),&VisualScript::custom_signal_get_argument_count); + ObjectTypeDB::bind_method(_MD("custom_signal_swap_argument","name","argidx","withidx"),&VisualScript::custom_signal_swap_argument); + ObjectTypeDB::bind_method(_MD("remove_custom_signal","name"),&VisualScript::remove_custom_signal); + ObjectTypeDB::bind_method(_MD("rename_custom_signal","name","new_name"),&VisualScript::rename_custom_signal); + + //ObjectTypeDB::bind_method(_MD("set_variable_info","name","info"),&VScript::set_variable_info); + //ObjectTypeDB::bind_method(_MD("get_variable_info","name"),&VScript::set_variable_info); + + ObjectTypeDB::bind_method(_MD("set_instance_base_type","type"),&VisualScript::set_instance_base_type); + + ObjectTypeDB::bind_method(_MD("_set_data","data"),&VisualScript::_set_data); + ObjectTypeDB::bind_method(_MD("_get_data"),&VisualScript::_get_data); + + ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY,"data",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_data"),_SCS("_get_data")); + + ADD_SIGNAL(MethodInfo("node_ports_changed",PropertyInfo(Variant::STRING,"function"),PropertyInfo(Variant::INT,"id"))); +} + +VisualScript::VisualScript() { + + base_type="Object"; + +} + +VisualScript::~VisualScript() { + + while(!functions.empty()) { + remove_function(functions.front()->key()); + } + +} + +//////////////////////////////////////////// + + + +bool VisualScriptInstance::set(const StringName& p_name, const Variant& p_value) { + + + Map<StringName,Variant>::Element *E=variables.find(p_name); + if (!E) + return false; + + E->get()=p_value; + + return true; +} + + +bool VisualScriptInstance::get(const StringName& p_name, Variant &r_ret) const { + + const Map<StringName,Variant>::Element *E=variables.find(p_name); + if (!E) + return false; + + r_ret=E->get(); + return true; +} +void VisualScriptInstance::get_property_list(List<PropertyInfo> *p_properties) const{ + + for (const Map<StringName,VisualScript::Variable>::Element *E=script->variables.front();E;E=E->next()) { + + if (!E->get()._export) + continue; + PropertyInfo p = E->get().info; + p.name=String(E->key()); + p_properties->push_back(p); + + } +} +Variant::Type VisualScriptInstance::get_property_type(const StringName& p_name,bool *r_is_valid) const{ + + + const Map<StringName,VisualScript::Variable>::Element *E=script->variables.find(p_name); + if (!E) { + if (r_is_valid) + *r_is_valid=false; + ERR_FAIL_V(Variant::NIL); + } + + if (r_is_valid) + *r_is_valid=true; + + return E->get().info.type; + +} + +void VisualScriptInstance::get_method_list(List<MethodInfo> *p_list) const{ + + for (const Map<StringName,VisualScript::Function>::Element *E=script->functions.front();E;E=E->next()) { + + MethodInfo mi; + mi.name=E->key(); + if (E->get().function_id>=0 && E->get().nodes.has(E->get().function_id)) { + + Ref<VisualScriptFunction> vsf = E->get().nodes[E->get().function_id].node; + if (vsf.is_valid()) { + + for(int i=0;i<vsf->get_argument_count();i++) { + PropertyInfo arg; + arg.name=vsf->get_argument_name(i); + arg.type=vsf->get_argument_type(i); + + mi.arguments.push_back(arg); + } + + //vsf->Get_ for now at least it does not return.. + } + } + + p_list->push_back(mi); + } + +} +bool VisualScriptInstance::has_method(const StringName& p_method) const{ + + return script->functions.has(p_method); +} + + +//#define VSDEBUG(m_text) print_line(m_text) +#define VSDEBUG(m_text) + +void VisualScriptInstance::_dependency_step(VisualScriptNodeInstance* node,int p_pass,int *pass_stack,const Variant **input_args,Variant **output_args,Variant *variant_stack,Variant::CallError& r_error,String& error_str,VisualScriptNodeInstance** r_error_node) { + + ERR_FAIL_COND(node->pass_idx==-1); + + if (pass_stack[node->pass_idx]==p_pass) + return; + + pass_stack[node->pass_idx]=p_pass; + + if (!node->dependencies.empty()) { + + int dc = node->dependencies.size(); + VisualScriptNodeInstance **deps=node->dependencies.ptr(); + + for(int i=0;i<dc;i++) { + + _dependency_step(deps[i],p_pass,pass_stack,input_args,output_args,variant_stack,r_error,error_str,r_error_node); + if (r_error.error!=Variant::CallError::CALL_OK) + return; + + } + } + + + for(int i=0;i<node->input_port_count;i++) { + + int index = node->input_ports[i] & VisualScriptNodeInstance::INPUT_MASK; + + + if (node->input_ports[i] & VisualScriptNodeInstance::INPUT_DEFAULT_VALUE_BIT) { + //is a default value (unassigned input port) + input_args[i]=&default_values[index]; + } else { + //regular temporary in stack + input_args[i]=&variant_stack[index]; + + } + } + for(int i=0 ; i<node->output_port_count ; i++) { + output_args[i] = &variant_stack[ node->output_ports[i] ]; + } + + Variant *working_mem=node->working_mem_idx>=0 ? &variant_stack[node->working_mem_idx] : (Variant*)NULL; + + node->step(input_args,output_args,VisualScriptNodeInstance::START_MODE_BEGIN_SEQUENCE,working_mem,r_error,error_str); + //ignore return + if (r_error.error!=Variant::CallError::CALL_OK) { + *r_error_node=node; + } + +} + +Variant VisualScriptInstance::_call_internal(const StringName& p_method, void* p_stack, int p_stack_size, VisualScriptNodeInstance* p_node, int p_flow_stack_pos, int p_pass, bool p_resuming_yield, Variant::CallError &r_error) { + + Map<StringName,Function>::Element *F = functions.find(p_method); + ERR_FAIL_COND_V(!F,Variant()); + Function *f=&F->get(); + + //this call goes separate, so it can e yielded and suspended + Variant *variant_stack=(Variant*)p_stack; + bool *sequence_bits = (bool*)(variant_stack + f->max_stack); + const Variant **input_args=(const Variant**)(sequence_bits+f->node_count); + Variant **output_args=(Variant**)(input_args + max_input_args); + int flow_max = f->flow_stack_size; + int* flow_stack = flow_max? (int*)(output_args + max_output_args) : (int*)NULL; + int *pass_stack = flow_stack + flow_max; + + String error_str; + + VisualScriptNodeInstance* node=p_node; + bool error=false; + int current_node_id=f->node; + Variant return_value; + Variant *working_mem=NULL; + + int flow_stack_pos=p_flow_stack_pos; + +#ifdef DEBUG_ENABLED + if (ScriptDebugger::get_singleton()) { + VisualScriptLanguage::singleton->enter_function(this,&p_method,variant_stack,&working_mem,¤t_node_id); + } +#endif + + while(true) { + + p_pass++; //increment pass + current_node_id=node->get_id(); + + VSDEBUG("==========AT NODE: "+itos(current_node_id)+" base: "+node->get_base_node()->get_type()); + VSDEBUG("AT STACK POS: "+itos(flow_stack_pos)); + + + //setup working mem + working_mem=node->working_mem_idx>=0 ? &variant_stack[node->working_mem_idx] : (Variant*)NULL; + + VSDEBUG("WORKING MEM: "+itos(node->working_mem_idx)); + + if (current_node_id==f->node) { + //if function node, set up function arguments from begining of stack + + for(int i=0;i<f->argument_count;i++) { + input_args[i]=&variant_stack[i]; + } + } else { + + //run dependencies first + + + if (!node->dependencies.empty()) { + + int dc = node->dependencies.size(); + VisualScriptNodeInstance **deps=node->dependencies.ptr(); + + for(int i=0;i<dc;i++) { + + _dependency_step(deps[i],p_pass,pass_stack,input_args,output_args,variant_stack,r_error,error_str,&node); + if (r_error.error!=Variant::CallError::CALL_OK) { + error=true; + current_node_id=node->id; + break; + } + } + } + + if (!error) { + + //setup input pointers normally + VSDEBUG("INPUT PORTS: "+itos(node->input_port_count)); + + for(int i=0 ; i<node->input_port_count ; i++) { + + + int index = node->input_ports[i] & VisualScriptNodeInstance::INPUT_MASK; + + if (node->input_ports[i] & VisualScriptNodeInstance::INPUT_DEFAULT_VALUE_BIT) { + //is a default value (unassigned input port) + input_args[i]=&default_values[index]; + VSDEBUG("\tPORT "+itos(i)+" DEFAULT VAL"); + } else { + //regular temporary in stack + input_args[i]=&variant_stack[index]; + VSDEBUG("PORT "+itos(i)+" AT STACK "+itos(index)); + + } + } + } + } + + if (error) + break; + + //setup output pointers + + VSDEBUG("OUTPUT PORTS: "+itos(node->output_port_count)); + for(int i=0 ; i<node->output_port_count ; i++) { + output_args[i] = &variant_stack[ node->output_ports[i] ]; + VSDEBUG("PORT "+itos(i)+" AT STACK "+itos(node->output_ports[i])); + } + + //do step + + VisualScriptNodeInstance::StartMode start_mode; + { + if (p_resuming_yield) + start_mode=VisualScriptNodeInstance::START_MODE_RESUME_YIELD; + else if (!flow_stack || !(flow_stack[flow_stack_pos] & VisualScriptNodeInstance::FLOW_STACK_PUSHED_BIT)) //if there is a push bit, it means we are continuing a sequence + start_mode=VisualScriptNodeInstance::START_MODE_BEGIN_SEQUENCE; + else + start_mode=VisualScriptNodeInstance::START_MODE_CONTINUE_SEQUENCE; + } + + VSDEBUG("STEP - STARTSEQ: "+itos(start_mode)); + + int ret = node->step(input_args,output_args,start_mode,working_mem,r_error,error_str); + + if (r_error.error!=Variant::CallError::CALL_OK) { + //use error from step + error=true; + break; + } + + if (ret&VisualScriptNodeInstance::STEP_YIELD_BIT) { + //yielded! + if (node->get_working_memory_size()==0) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + error_str=RTR("A node yielded without working memory, please read the docs on how to yield properly!"); + error=true; + break; + + } else { + Ref<VisualScriptFunctionState> state = *working_mem; + if (!state.is_valid()) { + + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + error_str=RTR("Node yielded, but did not return a function state in the first working memory."); + error=true; + break; + + } + + //step 1, capture all state + state->instance_id=get_owner_ptr()->get_instance_ID(); + state->script_id=get_script()->get_instance_ID(); + state->instance=this; + state->function=p_method; + state->working_mem_index=node->working_mem_idx; + state->variant_stack_size=f->max_stack; + state->node=node; + state->flow_stack_pos=flow_stack_pos; + state->stack.resize(p_stack_size); + state->pass=p_pass; + copymem(state->stack.ptr(),p_stack,p_stack_size); + //step 2, run away, return directly + r_error.error=Variant::CallError::CALL_OK; + + +#ifdef DEBUG_ENABLED + //will re-enter later, so exiting + if (ScriptDebugger::get_singleton()) { + VisualScriptLanguage::singleton->exit_function(); + } +#endif + + return state; + + } + } + +#ifdef DEBUG_ENABLED + if (ScriptDebugger::get_singleton()) { + // line + bool do_break=false; + + if (ScriptDebugger::get_singleton()->get_lines_left()>0) { + + if (ScriptDebugger::get_singleton()->get_depth()<=0) + ScriptDebugger::get_singleton()->set_lines_left( ScriptDebugger::get_singleton()->get_lines_left() -1 ); + if (ScriptDebugger::get_singleton()->get_lines_left()<=0) + do_break=true; + } + + if (ScriptDebugger::get_singleton()->is_breakpoint(current_node_id,source)) + do_break=true; + + if (do_break) { + VisualScriptLanguage::singleton->debug_break("Breakpoint",true); + } + + ScriptDebugger::get_singleton()->line_poll(); + + } +#endif + int output = ret & VisualScriptNodeInstance::STEP_MASK; + + VSDEBUG("STEP RETURN: "+itos(ret)); + + if (ret & VisualScriptNodeInstance::STEP_EXIT_FUNCTION_BIT) { + if (node->get_working_memory_size()==0) { + + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + error_str=RTR("Return value must be assigned to first element of node working memory! Fix your node please."); + error=true; + } else { + //assign from working memory, first element + return_value=*working_mem; + } + + VSDEBUG("EXITING FUNCTION - VALUE "+String(return_value)); + break; //exit function requested, bye + } + + VisualScriptNodeInstance *next=NULL; //next node + + if ( (ret==output || ret&VisualScriptNodeInstance::STEP_FLAG_PUSH_STACK_BIT) && node->sequence_output_count) { + //if no exit bit was set, and has sequence outputs, guess next node + if (output<0 || output>=node->sequence_output_count) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + error_str=RTR("Node returned an invalid sequence output: ")+itos(output); + error=true; + break; + } + + next = node->sequence_outputs[output]; + if (next) { + VSDEBUG("GOT NEXT NODE - "+itos(next->get_id())); + } else { + VSDEBUG("GOT NEXT NODE - NULL"); + } + } + + if (flow_stack) { + + //update flow stack pos (may have changed) + flow_stack[flow_stack_pos] = current_node_id; + + //add stack push bit if requested + if (ret & VisualScriptNodeInstance::STEP_FLAG_PUSH_STACK_BIT) { + + flow_stack[flow_stack_pos] |= VisualScriptNodeInstance::FLOW_STACK_PUSHED_BIT; + sequence_bits[ node ->sequence_index ]=true; //remember sequence bit + VSDEBUG("NEXT SEQ - FLAG BIT"); + } else { + sequence_bits[ node ->sequence_index ]=false; //forget sequence bit + VSDEBUG("NEXT SEQ - NORMAL"); + } + + + if (ret & VisualScriptNodeInstance::STEP_FLAG_GO_BACK_BIT) { + //go back request + + if (flow_stack_pos>0) { + flow_stack_pos--; + node = instances[ flow_stack[flow_stack_pos] & VisualScriptNodeInstance::FLOW_STACK_MASK ]; + VSDEBUG("NEXT IS GO BACK"); + } else { + VSDEBUG("NEXT IS GO BACK, BUT NO NEXT SO EXIT"); + break; //simply exit without value or error + } + } else if (next) { + + + if (sequence_bits[next->sequence_index]) { + // what happened here is that we are entering a node that is in the middle of doing a sequence (pushed stack) from the front + // because each node has a working memory, we can't really do a sub-sequence + // as a result, the sequence will be restarted and the stack will roll back to find where this node + // started the sequence + + bool found = false; + + for(int i=flow_stack_pos;i>=0;i--) { + + + if ( (flow_stack[i] & VisualScriptNodeInstance::FLOW_STACK_MASK ) == next->get_id() ) { + flow_stack_pos=i; //roll back and remove bit + flow_stack[i]=next->get_id(); + sequence_bits[next->sequence_index]=false; + found=true; + } + } + + if (!found) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + error_str=RTR("Found sequence bit but not the node in the stack, report bug!"); + error=true; + break; + } + + node=next; + VSDEBUG("RE-ENTERED A LOOP, RETURNED STACK POS TO - "+itos(flow_stack_pos)); + + } else { + // check for stack overflow + if (flow_stack_pos+1 >= flow_max) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + error_str=RTR("Stack overflow with stack depth: ")+itos(output); + error=true; + break; + } + + node = next; + + flow_stack_pos++; + flow_stack[flow_stack_pos]=node->get_id(); + + VSDEBUG("INCREASE FLOW STACK"); + + } + + } else { + //no next node, try to go back in stack to pushed bit + + bool found = false; + + for(int i=flow_stack_pos;i>=0;i--) { + + VSDEBUG("FS "+itos(i)+" - "+itos(flow_stack[i])); + if (flow_stack[i] & VisualScriptNodeInstance::FLOW_STACK_PUSHED_BIT) { + + node = instances[ flow_stack[i] & VisualScriptNodeInstance::FLOW_STACK_MASK ]; + flow_stack_pos=i; + found=true; + break; + } + } + + if (!found) { + VSDEBUG("NO NEXT NODE, NO GO BACK, EXITING"); + break; //done, couldn't find a push stack bit + } + + VSDEBUG("NO NEXT NODE, GO BACK TO: "+itos(flow_stack_pos)); + + } + } else { + + node=next; //stackless mode, simply assign next node + } + + } + + + + if (error) { + + //error + // function, file, line, error, explanation + String err_file = script->get_path(); + String err_func = p_method; + int err_line=current_node_id; //not a line but it works as one + + if (node && (r_error.error!=Variant::CallError::CALL_ERROR_INVALID_METHOD || error_str==String())) { + + if (error_str!=String()) { + error_str+=" "; + } + + if (r_error.error==Variant::CallError::CALL_ERROR_INVALID_ARGUMENT) { + int errorarg=r_error.argument; + error_str+="Cannot convert argument "+itos(errorarg+1)+" to "+Variant::get_type_name(r_error.expected)+"."; + } else if (r_error.error==Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS) { + error_str+="Expected "+itos(r_error.argument)+" arguments."; + } else if (r_error.error==Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS) { + error_str+="Expected "+itos(r_error.argument)+" arguments."; + } else if (r_error.error==Variant::CallError::CALL_ERROR_INVALID_METHOD) { + error_str+="Invalid Call."; + } else if (r_error.error==Variant::CallError::CALL_ERROR_INSTANCE_IS_NULL) { + error_str+="Base Instance is null"; + } + } + + + //if (!GDScriptLanguage::get_singleton()->debug_break(err_text,false)) { + // debugger break did not happen + + if (!VisualScriptLanguage::singleton->debug_break(error_str,false)) { + + _err_print_error(err_func.utf8().get_data(),err_file.utf8().get_data(),err_line,error_str.utf8().get_data(),ERR_HANDLER_SCRIPT); + } + + //} + } else { + + + //return_value= + } + +#ifdef DEBUG_ENABLED + if (ScriptDebugger::get_singleton()) { + VisualScriptLanguage::singleton->exit_function(); + } +#endif + + //clean up variant stack + for(int i=0;i<f->max_stack;i++) { + variant_stack[i].~Variant(); + } + + + return return_value; +} + + +Variant VisualScriptInstance::call(const StringName& p_method, const Variant** p_args, int p_argcount, Variant::CallError &r_error){ + + r_error.error=Variant::CallError::CALL_OK; //ok by default + + Map<StringName,Function>::Element *F = functions.find(p_method); + if (!F) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + return Variant(); + } + + VSDEBUG("CALLING: "+String(p_method)); + + Function *f=&F->get(); + + int total_stack_size=0; + + total_stack_size+=f->max_stack*sizeof(Variant); //variants + total_stack_size+=f->node_count*sizeof(bool); + total_stack_size+=(max_input_args+max_output_args)*sizeof(Variant*); //arguments + total_stack_size+=f->flow_stack_size*sizeof(int); //flow + total_stack_size+=f->pass_stack_size*sizeof(int); + + VSDEBUG("STACK SIZE: "+itos(total_stack_size)); + VSDEBUG("STACK VARIANTS: : "+itos(f->max_stack)); + VSDEBUG("SEQBITS: : "+itos(f->node_count)); + VSDEBUG("MAX INPUT: "+itos(max_input_args)); + VSDEBUG("MAX OUTPUT: "+itos(max_output_args)); + VSDEBUG("FLOW STACK SIZE: "+itos(f->flow_stack_size)); + VSDEBUG("PASS STACK SIZE: "+itos(f->pass_stack_size)); + + void *stack = alloca(total_stack_size); + + Variant *variant_stack=(Variant*)stack; + bool *sequence_bits = (bool*)(variant_stack + f->max_stack); + const Variant **input_args=(const Variant**)(sequence_bits+f->node_count); + Variant **output_args=(Variant**)(input_args + max_input_args); + int flow_max = f->flow_stack_size; + int* flow_stack = flow_max? (int*)(output_args + max_output_args) : (int*)NULL; + int *pass_stack = flow_stack + flow_max; + + for(int i=0;i<f->node_count;i++) { + sequence_bits[i]=false; //all starts as false + } + + zeromem(pass_stack,f->pass_stack_size*sizeof(int)); + + Map<int,VisualScriptNodeInstance*>::Element *E = instances.find(f->node); + if (!E) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + + ERR_EXPLAIN("No VisualScriptFunction node in function!"); + ERR_FAIL_V(Variant()); + } + + VisualScriptNodeInstance *node = E->get(); + + + if (flow_stack) { + flow_stack[0]=node->get_id(); + } + + VSDEBUG("ARGUMENTS: "+itos(f->argument_count)=" RECEIVED: "+itos(p_argcount)); + + if (p_argcount<f->argument_count) { + r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument=node->get_input_port_count(); + + return Variant(); + } + + if (p_argcount>f->argument_count) { + r_error.error=Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS; + r_error.argument=node->get_input_port_count(); + + return Variant(); + } + + //allocate variant stack + for(int i=0;i<f->max_stack;i++) { + memnew_placement(&variant_stack[i],Variant); + } + + //allocate function arguments (must be copied for yield to work properly) + for(int i=0;i<p_argcount;i++) { + variant_stack[i]=*p_args[i]; + } + + return _call_internal(p_method,stack,total_stack_size,node,0,0,false,r_error); + + +} + +void VisualScriptInstance::notification(int p_notification){ + + //do nothing as this is called using virtual + + Variant what=p_notification; + const Variant*whatp=&what; + Variant::CallError ce; + call(VisualScriptLanguage::singleton->notification,&whatp,1,ce); //do as call + +} + +Ref<Script> VisualScriptInstance::get_script() const{ + + return script; +} + +ScriptInstance::RPCMode VisualScriptInstance::get_rpc_mode(const StringName& p_method) const { + + const Map<StringName,VisualScript::Function>::Element *E = script->functions.find(p_method); + if (!E) { + return RPC_MODE_DISABLED; + } + + if (E->get().function_id>=0 && E->get().nodes.has(E->get().function_id)) { + + Ref<VisualScriptFunction> vsf = E->get().nodes[E->get().function_id].node; + if (vsf.is_valid()) { + + return vsf->get_rpc_mode(); + } + } + + return RPC_MODE_DISABLED; +} + +ScriptInstance::RPCMode VisualScriptInstance::get_rset_mode(const StringName& p_variable) const { + + return RPC_MODE_DISABLED; +} + + +void VisualScriptInstance::create(const Ref<VisualScript>& p_script,Object *p_owner) { + + script=p_script; + owner=p_owner; + source=p_script->get_path(); + + max_input_args = 0; + max_output_args = 0; + + if (p_owner->cast_to<Node>()) { + //turn on these if they exist and base is a node + Node* node = p_owner->cast_to<Node>(); + if (p_script->functions.has("_process")) + node->set_process(true); + if (p_script->functions.has("_fixed_process")) + node->set_fixed_process(true); + if (p_script->functions.has("_input")) + node->set_process_input(true); + if (p_script->functions.has("_unhandled_input")) + node->set_process_unhandled_input(true); + if (p_script->functions.has("_unhandled_key_input")) + node->set_process_unhandled_key_input(true); + } + + for(const Map<StringName,VisualScript::Variable>::Element *E=script->variables.front();E;E=E->next()) { + variables[E->key()]=E->get().default_value; + //no hacer que todo exporte, solo las que queres! + } + + + for(const Map<StringName,VisualScript::Function>::Element *E=script->functions.front();E;E=E->next()) { + + Function function; + function.node=E->get().function_id; + function.max_stack=0; + function.flow_stack_size=0; + function.pass_stack_size=0; + function.node_count=0; + Map<StringName,int> local_var_indices; + + if (function.node<0) { + VisualScriptLanguage::singleton->debug_break_parse(get_script()->get_path(),0,"No start node in function: "+String(E->key())); + + ERR_CONTINUE( function.node < 0 ); + } + + { + Ref<VisualScriptFunction> func_node = script->get_node(E->key(),E->get().function_id); + + if (func_node.is_null()) { + VisualScriptLanguage::singleton->debug_break_parse(get_script()->get_path(),0,"No VisualScriptFunction typed start node in function: "+String(E->key())); + } + + ERR_CONTINUE( !func_node.is_valid() ); + + function.argument_count=func_node->get_argument_count(); + function.max_stack+=function.argument_count; + function.flow_stack_size= func_node->is_stack_less() ? 0 : func_node->get_stack_size(); + + } + + //multiple passes are required to set up this complex thing.. + + + + + //first create the nodes + for (const Map<int,VisualScript::Function::NodeData>::Element *F=E->get().nodes.front();F;F=F->next()) { + + Ref<VisualScriptNode> node = F->get().node; + VisualScriptNodeInstance *instance = node->instance(this); //create instance + ERR_FAIL_COND(!instance); + + instance->base=node.ptr(); + + instance->id=F->key(); + instance->input_port_count = node->get_input_value_port_count(); + instance->input_ports=NULL; + instance->output_port_count = node->get_output_value_port_count(); + instance->output_ports=NULL; + instance->sequence_output_count = node->get_output_sequence_port_count(); + instance->sequence_index=function.node_count++; + instance->sequence_outputs=NULL; + instance->pass_idx=-1; + + if (instance->input_port_count) { + instance->input_ports = memnew_arr(int,instance->input_port_count); + for(int i=0;i<instance->input_port_count;i++) { + + instance->input_ports[i]=-1; //if not assigned, will become default value + } + } + + if (instance->output_port_count) { + instance->output_ports = memnew_arr(int,instance->output_port_count); + for(int i=0;i<instance->output_port_count;i++) { + instance->output_ports[i]=-1; //if not assigned, will output to trash + } + } + + if (instance->sequence_output_count) { + instance->sequence_outputs = memnew_arr(VisualScriptNodeInstance*,instance->sequence_output_count); + for(int i=0;i<instance->sequence_output_count;i++) { + instance->sequence_outputs[i]=NULL; //if it remains null, flow ends here + } + } + + if (node->cast_to<VisualScriptLocalVar>() || node->cast_to<VisualScriptLocalVarSet>()) { + //working memory is shared only for this node, for the same variables + Ref<VisualScriptLocalVar> vslv = node; + + StringName var_name; + + if (node->cast_to<VisualScriptLocalVar>()) + var_name = String(node->cast_to<VisualScriptLocalVar>()->get_var_name()).strip_edges(); + else + var_name = String(node->cast_to<VisualScriptLocalVarSet>()->get_var_name()).strip_edges(); + + if (!local_var_indices.has(var_name)) { + local_var_indices[var_name]=function.max_stack; + function.max_stack++; + } + + instance->working_mem_idx=local_var_indices[var_name]; + + } else if (instance->get_working_memory_size()) { + instance->working_mem_idx = function.max_stack; + function.max_stack+=instance->get_working_memory_size(); + } else { + instance->working_mem_idx=-1; //no working mem + } + + max_input_args = MAX( max_input_args, instance->input_port_count ); + max_output_args = MAX( max_output_args, instance->output_port_count ); + + instances[F->key()]=instance; + + + } + + function.trash_pos = function.max_stack++; //create pos for trash + + //second pass, do data connections + + for(const Set<VisualScript::DataConnection>::Element *F=E->get().data_connections.front();F;F=F->next()) { + + VisualScript::DataConnection dc = F->get(); + ERR_CONTINUE(!instances.has(dc.from_node)); + VisualScriptNodeInstance *from = instances[dc.from_node]; + ERR_CONTINUE(!instances.has(dc.to_node)); + VisualScriptNodeInstance *to = instances[dc.to_node]; + ERR_CONTINUE(dc.from_port >= from->output_port_count); + ERR_CONTINUE(dc.to_port >= to->input_port_count); + + if (from->output_ports[dc.from_port]==-1) { + + int stack_pos = function.max_stack++; + from->output_ports[dc.from_port] = stack_pos; + } + + + if (from->get_sequence_output_count()==0 && to->dependencies.find(from)==-1) { + //if the node we are reading from has no output sequence, we must call step() before reading from it. + if (from->pass_idx==-1) { + from->pass_idx=function.pass_stack_size; + function.pass_stack_size++; + } + to->dependencies.push_back(from); + } + + to->input_ports[dc.to_port] = from->output_ports[dc.from_port]; //read from wherever the stack is + + } + + //third pass, do sequence connections + + for(const Set<VisualScript::SequenceConnection>::Element *F=E->get().sequence_connections.front();F;F=F->next()) { + + VisualScript::SequenceConnection sc = F->get(); + ERR_CONTINUE(!instances.has(sc.from_node)); + VisualScriptNodeInstance *from = instances[sc.from_node]; + ERR_CONTINUE(!instances.has(sc.to_node)); + VisualScriptNodeInstance *to = instances[sc.to_node]; + ERR_CONTINUE(sc.from_output >= from->sequence_output_count); + + from->sequence_outputs[sc.from_output]=to; + + } + + //fourth pass: + // 1) unassigned input ports to default values + // 2) connect unassigned output ports to trash + + + for (const Map<int,VisualScript::Function::NodeData>::Element *F=E->get().nodes.front();F;F=F->next()) { + + ERR_CONTINUE(!instances.has(F->key())); + + Ref<VisualScriptNode> node = F->get().node; + VisualScriptNodeInstance *instance = instances[F->key()]; + + // conect to default values + for(int i=0;i<instance->input_port_count;i++) { + if (instance->input_ports[i]==-1) { + + //unassigned, connect to default val + instance->input_ports[i] = default_values.size() | VisualScriptNodeInstance::INPUT_DEFAULT_VALUE_BIT; + default_values.push_back( node->get_default_input_value(i) ); + } + } + + // conect to trash + for(int i=0;i<instance->output_port_count;i++) { + if (instance->output_ports[i]==-1) { + instance->output_ports[i] = function.trash_pos; //trash is same for all + } + } + } + + + functions[E->key()]=function; + } +} + +ScriptLanguage *VisualScriptInstance::get_language(){ + + return VisualScriptLanguage::singleton; +} + + +VisualScriptInstance::VisualScriptInstance() { + + +} + +VisualScriptInstance::~VisualScriptInstance() { + + if (VisualScriptLanguage::singleton->lock) + VisualScriptLanguage::singleton->lock->lock(); + + script->instances.erase(owner); + + if (VisualScriptLanguage::singleton->lock) + VisualScriptLanguage::singleton->lock->unlock(); + + for (Map<int,VisualScriptNodeInstance*>::Element *E=instances.front();E;E=E->next()) { + memdelete(E->get()); + } +} + + + +///////////////////////////////////////////// + + +///////////////////// + + +Variant VisualScriptFunctionState::_signal_callback(const Variant** p_args, int p_argcount, Variant::CallError& r_error) { + + ERR_FAIL_COND_V(function==StringName(),Variant()); + +#ifdef DEBUG_ENABLED + if (instance_id && !ObjectDB::get_instance(instance_id)) { + ERR_EXPLAIN("Resumed after yield, but class instance is gone"); + ERR_FAIL_V(Variant()); + } + + if (script_id && !ObjectDB::get_instance(script_id)) { + ERR_EXPLAIN("Resumed after yield, but script is gone"); + ERR_FAIL_V(Variant()); + } +#endif + + r_error.error=Variant::CallError::CALL_OK; + + Array args; + + if (p_argcount==0) { + r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument=1; + return Variant(); + } else if (p_argcount==1) { + //noooneee, reserved for me, me and only me. + } else { + + for(int i=0;i<p_argcount-1;i++) { + args.push_back(*p_args[i]); + } + } + + Ref<VisualScriptFunctionState> self = *p_args[p_argcount-1]; //hi, I'm myself, needed this to remain alive. + + if (self.is_null()) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=p_argcount-1; + r_error.expected=Variant::OBJECT; + return Variant(); + } + + r_error.error=Variant::CallError::CALL_OK; + + Variant *working_mem = ((Variant*)stack.ptr()) + working_mem_index; + + *working_mem=args; //arguments go to working mem. + + Variant ret = instance->_call_internal(function,stack.ptr(),stack.size(),node,flow_stack_pos,pass,true,r_error); + function=StringName(); //invalidate + return ret; +} + +void VisualScriptFunctionState::connect_to_signal(Object* p_obj, const String& p_signal, Array p_binds) { + + Vector<Variant> binds; + for(int i=0;i<p_binds.size();i++) { + binds.push_back(p_binds[i]); + } + binds.push_back(Ref<VisualScriptFunctionState>(this)); //add myself on the back to avoid dying from unreferencing + p_obj->connect(p_signal,this,"_signal_callback",binds); +} + +bool VisualScriptFunctionState::is_valid() const { + + return function!=StringName(); +} + +Variant VisualScriptFunctionState::resume(Array p_args) { + + ERR_FAIL_COND_V(function==StringName(),Variant()); +#ifdef DEBUG_ENABLED + if (instance_id && !ObjectDB::get_instance(instance_id)) { + ERR_EXPLAIN("Resumed after yield, but class instance is gone"); + ERR_FAIL_V(Variant()); + } + + if (script_id && !ObjectDB::get_instance(script_id)) { + ERR_EXPLAIN("Resumed after yield, but script is gone"); + ERR_FAIL_V(Variant()); + } +#endif + + Variant::CallError r_error; + r_error.error=Variant::CallError::CALL_OK; + + Variant *working_mem = ((Variant*)stack.ptr()) + working_mem_index; + + *working_mem=p_args; //arguments go to working mem. + + Variant ret= instance->_call_internal(function,stack.ptr(),stack.size(),node,flow_stack_pos,pass,true,r_error); + function=StringName(); //invalidate + return ret; +} + + +void VisualScriptFunctionState::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("connect_to_signal","obj","signals","args"),&VisualScriptFunctionState::connect_to_signal); + ObjectTypeDB::bind_method(_MD("resume:Array","args"),&VisualScriptFunctionState::resume,DEFVAL(Variant())); + ObjectTypeDB::bind_method(_MD("is_valid"),&VisualScriptFunctionState::is_valid); + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"_signal_callback",&VisualScriptFunctionState::_signal_callback,MethodInfo("_signal_callback")); +} + +VisualScriptFunctionState::VisualScriptFunctionState() { + +} + +VisualScriptFunctionState::~VisualScriptFunctionState() { + + if (function!=StringName()) { + Variant *s = ((Variant*)stack.ptr()); + for(int i=0;i<variant_stack_size;i++) { + s[i].~Variant(); + } + } +} + + + + + +/////////////////////////////////////////////// + +String VisualScriptLanguage::get_name() const { + + return "VisualScript"; +} + +/* LANGUAGE FUNCTIONS */ +void VisualScriptLanguage::init() { + + +} +String VisualScriptLanguage::get_type() const { + + return "VisualScript"; +} +String VisualScriptLanguage::get_extension() const { + + return "vs"; +} +Error VisualScriptLanguage::execute_file(const String& p_path) { + + return OK; +} +void VisualScriptLanguage::finish() { + + +} + +/* EDITOR FUNCTIONS */ +void VisualScriptLanguage::get_reserved_words(List<String> *p_words) const { + + +} +void VisualScriptLanguage::get_comment_delimiters(List<String> *p_delimiters) const { + + +} +void VisualScriptLanguage::get_string_delimiters(List<String> *p_delimiters) const { + + +} +Ref<Script> VisualScriptLanguage::get_template(const String& p_class_name, const String& p_base_class_name) const { + + Ref<VisualScript> script; + script.instance(); + script->set_instance_base_type(p_base_class_name); + return script; +} +bool VisualScriptLanguage::validate(const String& p_script, int &r_line_error,int &r_col_error,String& r_test_error, const String& p_path,List<String> *r_functions) const { + + return false; +} +Script *VisualScriptLanguage::create_script() const { + + return memnew( VisualScript ); +} +bool VisualScriptLanguage::has_named_classes() const { + + return false; +} +int VisualScriptLanguage::find_function(const String& p_function,const String& p_code) const { + + return -1; +} +String VisualScriptLanguage::make_function(const String& p_class,const String& p_name,const StringArray& p_args) const { + + return String(); +} + +void VisualScriptLanguage::auto_indent_code(String& p_code,int p_from_line,int p_to_line) const { + + +} +void VisualScriptLanguage::add_global_constant(const StringName& p_variable,const Variant& p_value) { + + +} + + +/* DEBUGGER FUNCTIONS */ + + + +bool VisualScriptLanguage::debug_break_parse(const String& p_file, int p_node,const String& p_error) { + //break because of parse error + + if (ScriptDebugger::get_singleton() && Thread::get_caller_ID()==Thread::get_main_ID()) { + + _debug_parse_err_node=p_node; + _debug_parse_err_file=p_file; + _debug_error=p_error; + ScriptDebugger::get_singleton()->debug(this,false); + return true; + } else { + return false; + } + +} + +bool VisualScriptLanguage::debug_break(const String& p_error,bool p_allow_continue) { + + if (ScriptDebugger::get_singleton() && Thread::get_caller_ID()==Thread::get_main_ID()) { + + _debug_parse_err_node=-1; + _debug_parse_err_file=""; + _debug_error=p_error; + ScriptDebugger::get_singleton()->debug(this,p_allow_continue); + return true; + } else { + return false; + } + +} + + +String VisualScriptLanguage::debug_get_error() const { + + return _debug_error; +} + +int VisualScriptLanguage::debug_get_stack_level_count() const { + + if (_debug_parse_err_node>=0) + return 1; + + + return _debug_call_stack_pos; +} +int VisualScriptLanguage::debug_get_stack_level_line(int p_level) const { + + if (_debug_parse_err_node>=0) + return _debug_parse_err_node; + + ERR_FAIL_INDEX_V(p_level,_debug_call_stack_pos,-1); + + int l = _debug_call_stack_pos - p_level -1; + + return *(_call_stack[l].current_id); + +} +String VisualScriptLanguage::debug_get_stack_level_function(int p_level) const { + + if (_debug_parse_err_node>=0) + return ""; + + ERR_FAIL_INDEX_V(p_level,_debug_call_stack_pos,""); + int l = _debug_call_stack_pos - p_level -1; + return *_call_stack[l].function; +} +String VisualScriptLanguage::debug_get_stack_level_source(int p_level) const { + + if (_debug_parse_err_node>=0) + return _debug_parse_err_file; + + ERR_FAIL_INDEX_V(p_level,_debug_call_stack_pos,""); + int l = _debug_call_stack_pos - p_level -1; + return _call_stack[l].instance->get_script_ptr()->get_path(); + +} +void VisualScriptLanguage::debug_get_stack_level_locals(int p_level,List<String> *p_locals, List<Variant> *p_values, int p_max_subitems,int p_max_depth) { + + if (_debug_parse_err_node>=0) + return; + + ERR_FAIL_INDEX(p_level,_debug_call_stack_pos); + + int l = _debug_call_stack_pos - p_level -1; + const StringName *f = _call_stack[l].function; + + ERR_FAIL_COND(!_call_stack[l].instance->functions.has(*f)); +// VisualScriptInstance::Function *func = &_call_stack[l].instance->functions[*f]; + + VisualScriptNodeInstance *node =_call_stack[l].instance->instances[*_call_stack[l].current_id]; + ERR_FAIL_COND(!node); + + p_locals->push_back("node_name"); + p_values->push_back(node->get_base_node()->get_text()); + + for(int i=0;i<node->input_port_count;i++) { + String name = node->get_base_node()->get_input_value_port_info(i).name; + if (name==String()) { + name="in_"+itos(i); + } + + p_locals->push_back("input/"+name); + + //value is trickier + + int in_from = node->input_ports[i]; + int in_value = in_from&VisualScriptNodeInstance::INPUT_MASK; + + if (in_from&VisualScriptNodeInstance::INPUT_DEFAULT_VALUE_BIT) { + p_values->push_back(_call_stack[l].instance->default_values[in_value]); + } else { + p_values->push_back( _call_stack[l].stack[ in_value] ); + } + } + + for(int i=0;i<node->output_port_count;i++) { + + String name = node->get_base_node()->get_output_value_port_info(i).name; + if (name==String()) { + name="out_"+itos(i); + } + + p_locals->push_back("output/"+name); + + //value is trickier + + int in_from = node->output_ports[i]; + p_values->push_back( _call_stack[l].stack[ in_from] ); + + } + + for(int i=0;i<node->get_working_memory_size();i++) { + p_locals->push_back("working_mem/mem_"+itos(i)); + p_values->push_back( (*_call_stack[l].work_mem)[i]); + } + +/* + ERR_FAIL_INDEX(p_level,_debug_call_stack_pos); + + + VisualFunction *f = _call_stack[l].function; + + List<Pair<StringName,int> > locals; + + f->debug_get_stack_member_state(*_call_stack[l].line,&locals); + for( List<Pair<StringName,int> >::Element *E = locals.front();E;E=E->next() ) { + + p_locals->push_back(E->get().first); + p_values->push_back(_call_stack[l].stack[E->get().second]); + } +*/ +} +void VisualScriptLanguage::debug_get_stack_level_members(int p_level,List<String> *p_members, List<Variant> *p_values, int p_max_subitems,int p_max_depth) { + + if (_debug_parse_err_node>=0) + return; + + ERR_FAIL_INDEX(p_level,_debug_call_stack_pos); + int l = _debug_call_stack_pos - p_level -1; + + + Ref<VisualScript> vs = _call_stack[l].instance->get_script(); + if (vs.is_null()) + return; + + List<StringName> vars; + vs->get_variable_list(&vars); + for (List<StringName>::Element *E=vars.front();E;E=E->next()) { + Variant v; + if (_call_stack[l].instance->get_variable(E->get(),&v)) { + p_members->push_back("variables/"+E->get()); + p_values->push_back(v); + } + } +} + +void VisualScriptLanguage::debug_get_globals(List<String> *p_locals, List<Variant> *p_values, int p_max_subitems,int p_max_depth) { + + //no globals are really reachable in gdscript +} +String VisualScriptLanguage::debug_parse_stack_level_expression(int p_level,const String& p_expression,int p_max_subitems,int p_max_depth) { + + if (_debug_parse_err_node>=0) + return ""; + return ""; +} + + + +void VisualScriptLanguage::reload_all_scripts() { + + +} +void VisualScriptLanguage::reload_tool_script(const Ref<Script>& p_script,bool p_soft_reload) { + + +} +/* LOADER FUNCTIONS */ + +void VisualScriptLanguage::get_recognized_extensions(List<String> *p_extensions) const { + + p_extensions->push_back("vs"); + +} +void VisualScriptLanguage::get_public_functions(List<MethodInfo> *p_functions) const { + + +} +void VisualScriptLanguage::get_public_constants(List<Pair<String,Variant> > *p_constants) const { + + +} + +void VisualScriptLanguage::profiling_start() { + + +} +void VisualScriptLanguage::profiling_stop() { + + +} + +int VisualScriptLanguage::profiling_get_accumulated_data(ProfilingInfo *p_info_arr,int p_info_max) { + + return 0; +} + +int VisualScriptLanguage::profiling_get_frame_data(ProfilingInfo *p_info_arr,int p_info_max) { + + return 0; +} + + +VisualScriptLanguage* VisualScriptLanguage::singleton=NULL; + + +void VisualScriptLanguage::add_register_func(const String& p_name,VisualScriptNodeRegisterFunc p_func) { + + ERR_FAIL_COND(register_funcs.has(p_name)); + register_funcs[p_name]=p_func; +} + +Ref<VisualScriptNode> VisualScriptLanguage::create_node_from_name(const String& p_name) { + + ERR_FAIL_COND_V(!register_funcs.has(p_name),Ref<VisualScriptNode>()); + + return register_funcs[p_name](p_name); +} + +void VisualScriptLanguage::get_registered_node_names(List<String> *r_names) { + + for (Map<String,VisualScriptNodeRegisterFunc>::Element *E=register_funcs.front();E;E=E->next()) { + r_names->push_back(E->key()); + } +} + + +VisualScriptLanguage::VisualScriptLanguage() { + + notification="_notification"; + _step="_step"; + _subcall="_subcall"; + singleton=this; +#ifndef NO_THREADS + lock = Mutex::create(); +#endif + + + _debug_parse_err_node=-1; + _debug_parse_err_file=""; + _debug_call_stack_pos=0; + int dmcs=GLOBAL_DEF("debug/script_max_call_stack",1024); + if (ScriptDebugger::get_singleton()) { + //debugging enabled! + _debug_max_call_stack = dmcs; + if (_debug_max_call_stack<1024) + _debug_max_call_stack=1024; + _call_stack = memnew_arr( CallLevel, _debug_max_call_stack+1 ); + + } else { + _debug_max_call_stack=0; + _call_stack=NULL; + } + +} + +VisualScriptLanguage::~VisualScriptLanguage() { + + if (lock) + memdelete(lock); + + if (_call_stack) { + memdelete_arr(_call_stack); + } + singleton=NULL; +} diff --git a/modules/visual_script/visual_script.h b/modules/visual_script/visual_script.h new file mode 100644 index 0000000000..63b018b0c2 --- /dev/null +++ b/modules/visual_script/visual_script.h @@ -0,0 +1,618 @@ +#ifndef VSCRIPT_H +#define VSCRIPT_H + +#include "script_language.h" +#include "os/thread.h" + +class VisualScriptInstance; +class VisualScriptNodeInstance; +class VisualScript; + +class VisualScriptNode : public Resource { + OBJ_TYPE(VisualScriptNode,Resource) + +friend class VisualScript; + + Set<VisualScript*> scripts_used; + + Array default_input_values; + bool breakpoint; + + void _set_default_input_values(Array p_values); + Array _get_default_input_values() const; + + void validate_input_default_values(); +protected: + + virtual bool _use_builtin_script() const { return false; } + + void _notification(int p_what); + void ports_changed_notify(); + static void _bind_methods(); +public: + + Ref<VisualScript> get_visual_script() const; + + virtual int get_output_sequence_port_count() const=0; + virtual bool has_input_sequence_port() const=0; + + virtual String get_output_sequence_port_text(int p_port) const=0; + + virtual bool has_mixed_input_and_sequence_ports() const { return false; } + + virtual int get_input_value_port_count() const=0; + virtual int get_output_value_port_count() const=0; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const=0; + virtual PropertyInfo get_output_value_port_info(int p_idx) const=0; + + void set_default_input_value(int p_port,const Variant& p_value); + Variant get_default_input_value(int p_port) const; + + virtual String get_caption() const=0; + virtual String get_text() const=0; + virtual String get_category() const=0; + + //used by editor, this is not really saved + void set_breakpoint(bool p_breakpoint); + bool is_breakpoint() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance)=0; + + struct TypeGuess { + + Variant::Type type; + InputEvent::Type ev_type; + StringName obj_type; + Ref<Script> script; + + TypeGuess() { type=Variant::NIL; ev_type=InputEvent::NONE; } + }; + + virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const; + + VisualScriptNode(); +}; + + +class VisualScriptNodeInstance { +friend class VisualScriptInstance; +friend class VisualScriptLanguage; //for debugger + + + enum { //input argument addressing + INPUT_SHIFT=1<<24, + INPUT_MASK=INPUT_SHIFT-1, + INPUT_DEFAULT_VALUE_BIT=INPUT_SHIFT, // from unassigned input port, using default value (edited by user) + }; + + + int id; + int sequence_index; + VisualScriptNodeInstance **sequence_outputs; + int sequence_output_count; + Vector<VisualScriptNodeInstance*> dependencies; + int *input_ports; + int input_port_count; + int *output_ports; + int output_port_count; + int working_mem_idx; + int pass_idx; + + VisualScriptNode *base; + +public: + + enum StartMode { + START_MODE_BEGIN_SEQUENCE, + START_MODE_CONTINUE_SEQUENCE, + START_MODE_RESUME_YIELD + }; + + enum { + STEP_SHIFT=1<<24, + STEP_MASK=STEP_SHIFT-1, + STEP_FLAG_PUSH_STACK_BIT=STEP_SHIFT, //push bit to stack + STEP_FLAG_GO_BACK_BIT=STEP_SHIFT<<1, //go back to previous node + STEP_NO_ADVANCE_BIT=STEP_SHIFT<<2, //do not advance past this node + STEP_EXIT_FUNCTION_BIT=STEP_SHIFT<<3, //return from function + STEP_YIELD_BIT=STEP_SHIFT<<4, //yield (will find VisualScriptFunctionState state in first working memory) + + FLOW_STACK_PUSHED_BIT=1<<30, //in flow stack, means bit was pushed (must go back here if end of sequence) + FLOW_STACK_MASK=FLOW_STACK_PUSHED_BIT-1 + + }; + + _FORCE_INLINE_ int get_input_port_count() const { return input_port_count; } + _FORCE_INLINE_ int get_output_port_count() const { return output_port_count; } + _FORCE_INLINE_ int get_sequence_output_count() const { return sequence_output_count; } + + _FORCE_INLINE_ int get_id() const { return id; } + + virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str)=0; //do a step, return which sequence port to go out + + Ref<VisualScriptNode> get_base_node() { return Ref<VisualScriptNode>( base ); } + + VisualScriptNodeInstance(); + virtual ~VisualScriptNodeInstance(); +}; + + +class VisualScript : public Script { + + OBJ_TYPE( VisualScript, Script ) + + RES_BASE_EXTENSION("vs"); + +public: + + struct SequenceConnection { + + union { + + struct { + uint64_t from_node : 24; + uint64_t from_output : 16; + uint64_t to_node : 24; + }; + uint64_t id; + }; + + bool operator<(const SequenceConnection& p_connection) const { + + return id<p_connection.id; + } + }; + + struct DataConnection { + + union { + + struct { + uint64_t from_node : 24; + uint64_t from_port : 8; + uint64_t to_node : 24; + uint64_t to_port : 8; + }; + uint64_t id; + }; + + bool operator<(const DataConnection& p_connection) const { + + return id<p_connection.id; + } + }; + + +private: +friend class VisualScriptInstance; + + StringName base_type; + struct Argument { + String name; + Variant::Type type; + }; + + struct Function { + struct NodeData { + Point2 pos; + Ref<VisualScriptNode> node; + }; + + Map<int,NodeData> nodes; + + Set<SequenceConnection> sequence_connections; + + Set<DataConnection> data_connections; + + int function_id; + + Vector2 scroll; + + + Function() { function_id=-1; } + + }; + + struct Variable { + PropertyInfo info; + Variant default_value; + bool _export; + }; + + + + Map<StringName,Function> functions; + Map<StringName,Variable> variables; + Map<StringName,Vector<Argument> > custom_signals; + + Map<Object*,VisualScriptInstance*> instances; + +#ifdef TOOLS_ENABLED + Set<PlaceHolderScriptInstance*> placeholders; + //void _update_placeholder(PlaceHolderScriptInstance *p_placeholder); + virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder); + void _update_placeholders(); +#endif + + void _set_variable_info(const StringName& p_name,const Dictionary& p_info); + Dictionary _get_variable_info(const StringName& p_name) const; + + + void _set_data(const Dictionary& p_data); + Dictionary _get_data() const; + +protected: + + void _node_ports_changed(int p_id); + static void _bind_methods(); +public: + + + void add_function(const StringName& p_name); + bool has_function(const StringName& p_name) const; + void remove_function(const StringName& p_name); + void rename_function(const StringName& p_name,const StringName& p_new_name); + void set_function_scroll(const StringName& p_name, const Vector2& p_scroll); + Vector2 get_function_scroll(const StringName& p_name) const; + void get_function_list(List<StringName> *r_functions) const; + int get_function_node_id(const StringName& p_name) const; + + + void add_node(const StringName& p_func,int p_id,const Ref<VisualScriptNode>& p_node,const Point2& p_pos=Point2()); + void remove_node(const StringName& p_func,int p_id); + bool has_node(const StringName& p_func,int p_id) const; + Ref<VisualScriptNode> get_node(const StringName& p_func,int p_id) const; + void set_node_pos(const StringName& p_func,int p_id,const Point2& p_pos); + Point2 get_node_pos(const StringName& p_func,int p_id) const; + void get_node_list(const StringName& p_func,List<int> *r_nodes) const; + + void sequence_connect(const StringName& p_func,int p_from_node,int p_from_output,int p_to_node); + void sequence_disconnect(const StringName& p_func,int p_from_node,int p_from_output,int p_to_node); + bool has_sequence_connection(const StringName& p_func,int p_from_node,int p_from_output,int p_to_node) const; + void get_sequence_connection_list(const StringName& p_func,List<SequenceConnection> *r_connection) const; + + void data_connect(const StringName& p_func,int p_from_node,int p_from_port,int p_to_node,int p_to_port); + void data_disconnect(const StringName& p_func,int p_from_node,int p_from_port,int p_to_node,int p_to_port); + bool has_data_connection(const StringName& p_func,int p_from_node,int p_from_port,int p_to_node,int p_to_port) const; + void get_data_connection_list(const StringName& p_func,List<DataConnection> *r_connection) const; + bool is_input_value_port_connected(const StringName& p_name,int p_node,int p_port) const; + bool get_input_value_port_connection_source(const StringName& p_name,int p_node,int p_port,int *r_node,int *r_port) const; + + void add_variable(const StringName& p_name,const Variant& p_default_value=Variant(),bool p_export=false); + bool has_variable(const StringName& p_name) const; + void remove_variable(const StringName& p_name); + void set_variable_default_value(const StringName& p_name,const Variant& p_value); + Variant get_variable_default_value(const StringName& p_name) const; + void set_variable_info(const StringName& p_name,const PropertyInfo& p_info); + PropertyInfo get_variable_info(const StringName& p_name) const; + void set_variable_export(const StringName& p_name,bool p_export); + bool get_variable_export(const StringName& p_name) const; + void get_variable_list(List<StringName> *r_variables) const; + void rename_variable(const StringName& p_name,const StringName& p_new_name); + + + void add_custom_signal(const StringName& p_name); + bool has_custom_signal(const StringName& p_name) const; + void custom_signal_add_argument(const StringName& p_func,Variant::Type p_type,const String& p_name,int p_index=-1); + void custom_signal_set_argument_type(const StringName& p_func,int p_argidx,Variant::Type p_type); + Variant::Type custom_signal_get_argument_type(const StringName& p_func,int p_argidx) const; + void custom_signal_set_argument_name(const StringName& p_func,int p_argidx,const String& p_name); + String custom_signal_get_argument_name(const StringName& p_func,int p_argidx) const; + void custom_signal_remove_argument(const StringName& p_func,int p_argidx); + int custom_signal_get_argument_count(const StringName& p_func) const; + void custom_signal_swap_argument(const StringName& p_func,int p_argidx,int p_with_argidx); + void remove_custom_signal(const StringName& p_name); + void rename_custom_signal(const StringName& p_name,const StringName& p_new_name); + + void get_custom_signal_list(List<StringName> *r_custom_signals) const; + + int get_available_id() const; + + void set_instance_base_type(const StringName& p_type); + + virtual bool can_instance() const; + + virtual Ref<Script> get_base_script() const; + virtual StringName get_instance_base_type() const; + virtual ScriptInstance* instance_create(Object *p_this); + virtual bool instance_has(const Object *p_this) const; + + + virtual bool has_source_code() const; + virtual String get_source_code() const; + virtual void set_source_code(const String& p_code); + virtual Error reload(bool p_keep_state=false); + + virtual bool is_tool() const; + + virtual String get_node_type() const; + + virtual ScriptLanguage *get_language() const; + + virtual bool has_script_signal(const StringName& p_signal) const; + virtual void get_script_signal_list(List<MethodInfo> *r_signals) const; + + virtual bool get_property_default_value(const StringName& p_property,Variant& r_value) const; + virtual void get_script_method_list(List<MethodInfo> *p_list) const; + + virtual bool has_method(const StringName& p_method) const; + virtual MethodInfo get_method_info(const StringName& p_method) const; + + virtual void get_script_property_list(List<PropertyInfo> *p_list) const; + +#ifdef TOOLS_ENABLED + virtual bool are_subnodes_edited() const; +#endif + + VisualScript(); + ~VisualScript(); +}; + + +class VisualScriptInstance : public ScriptInstance { + Object *owner; + Ref<VisualScript> script; + + Map<StringName,Variant> variables; //using variable path, not script + Map<int,VisualScriptNodeInstance*> instances; + + struct Function { + int node; + int max_stack; + int trash_pos; + int return_pos; + int flow_stack_size; + int pass_stack_size; + int node_count; + int argument_count; + bool valid; + }; + + Map<StringName,Function> functions; + + Vector<Variant> default_values; + int max_input_args,max_output_args; + + StringName source; + + void _dependency_step(VisualScriptNodeInstance* node, int p_pass, int *pass_stack, const Variant **input_args, Variant **output_args, Variant *variant_stack, Variant::CallError& r_error, String& error_str, VisualScriptNodeInstance **r_error_node); + Variant _call_internal(const StringName& p_method, void* p_stack,int p_stack_size, VisualScriptNodeInstance* p_node, int p_flow_stack_pos, int p_pass, bool p_resuming_yield,Variant::CallError &r_error); + + + //Map<StringName,Function> functions; +friend class VisualScriptFunctionState; //for yield +friend class VisualScriptLanguage; //for debugger +public: + virtual bool set(const StringName& p_name, const Variant& p_value); + virtual bool get(const StringName& p_name, Variant &r_ret) const; + virtual void get_property_list(List<PropertyInfo> *p_properties) const; + virtual Variant::Type get_property_type(const StringName& p_name,bool *r_is_valid=NULL) const; + + virtual void get_method_list(List<MethodInfo> *p_list) const; + virtual bool has_method(const StringName& p_method) const; + virtual Variant call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error); + virtual void notification(int p_notification); + + bool set_variable(const StringName& p_variable,const Variant& p_value) { + + Map<StringName,Variant>::Element *E=variables.find(p_variable); + if (!E) + return false; + + E->get()=p_value; + return true; + } + + bool get_variable(const StringName& p_variable,Variant* r_variable) const { + + const Map<StringName,Variant>::Element *E=variables.find(p_variable); + if (!E) + return false; + + *r_variable=E->get(); + return true; + + } + + virtual Ref<Script> get_script() const; + + _FORCE_INLINE_ VisualScript *get_script_ptr() { return script.ptr(); } + _FORCE_INLINE_ Object *get_owner_ptr() { return owner; } + + void create(const Ref<VisualScript>& p_script,Object *p_owner); + + virtual ScriptLanguage *get_language(); + + virtual RPCMode get_rpc_mode(const StringName& p_method) const; + virtual RPCMode get_rset_mode(const StringName& p_variable) const; + + VisualScriptInstance(); + ~VisualScriptInstance(); +}; + + +class VisualScriptFunctionState : public Reference { + + OBJ_TYPE(VisualScriptFunctionState,Reference); +friend class VisualScriptInstance; + + ObjectID instance_id; + ObjectID script_id; + VisualScriptInstance *instance; + StringName function; + Vector<uint8_t> stack; + int working_mem_index; + int variant_stack_size; + VisualScriptNodeInstance *node; + int flow_stack_pos; + int pass; + + Variant _signal_callback(const Variant** p_args, int p_argcount, Variant::CallError& r_error); +protected: + static void _bind_methods(); +public: + + void connect_to_signal(Object* p_obj,const String& p_signal,Array p_binds); + bool is_valid() const; + Variant resume(Array p_args); + VisualScriptFunctionState(); + ~VisualScriptFunctionState(); +}; + + +typedef Ref<VisualScriptNode> (*VisualScriptNodeRegisterFunc)(const String& p_type); + +class VisualScriptLanguage : public ScriptLanguage { + + Map<String,VisualScriptNodeRegisterFunc> register_funcs; + + struct CallLevel { + + Variant *stack; + Variant **work_mem; + const StringName *function; + VisualScriptInstance *instance; + int *current_id; + + }; + + + int _debug_parse_err_node; + String _debug_parse_err_file; + String _debug_error; + int _debug_call_stack_pos; + int _debug_max_call_stack; + CallLevel *_call_stack; + +public: + StringName notification; + StringName _get_output_port_unsequenced; + StringName _step; + StringName _subcall; + + static VisualScriptLanguage* singleton; + + Mutex *lock; + + bool debug_break(const String& p_error,bool p_allow_continue=true); + bool debug_break_parse(const String& p_file, int p_node,const String& p_error); + + _FORCE_INLINE_ void enter_function(VisualScriptInstance *p_instance,const StringName* p_function, Variant *p_stack, Variant **p_work_mem,int *current_id) { + + if (Thread::get_main_ID()!=Thread::get_caller_ID()) + return; //no support for other threads than main for now + + if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0) + ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() +1 ); + + if (_debug_call_stack_pos >= _debug_max_call_stack) { + //stack overflow + _debug_error="Stack Overflow (Stack Size: "+itos(_debug_max_call_stack)+")"; + ScriptDebugger::get_singleton()->debug(this); + return; + } + + _call_stack[_debug_call_stack_pos].stack=p_stack; + _call_stack[_debug_call_stack_pos].instance=p_instance; + _call_stack[_debug_call_stack_pos].function=p_function; + _call_stack[_debug_call_stack_pos].work_mem=p_work_mem; + _call_stack[_debug_call_stack_pos].current_id=current_id; + _debug_call_stack_pos++; + } + + _FORCE_INLINE_ void exit_function() { + + if (Thread::get_main_ID()!=Thread::get_caller_ID()) + return; //no support for other threads than main for now + + if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0) + ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() -1 ); + + if (_debug_call_stack_pos==0) { + + _debug_error="Stack Underflow (Engine Bug)"; + ScriptDebugger::get_singleton()->debug(this); + return; + } + + _debug_call_stack_pos--; + } + + ////////////////////////////////////// + + virtual String get_name() const; + + /* LANGUAGE FUNCTIONS */ + virtual void init(); + virtual String get_type() const; + virtual String get_extension() const; + virtual Error execute_file(const String& p_path) ; + virtual void finish(); + + /* EDITOR FUNCTIONS */ + virtual void get_reserved_words(List<String> *p_words) const; + virtual void get_comment_delimiters(List<String> *p_delimiters) const; + virtual void get_string_delimiters(List<String> *p_delimiters) const; + virtual Ref<Script> get_template(const String& p_class_name, const String& p_base_class_name) const; + virtual bool validate(const String& p_script, int &r_line_error,int &r_col_error,String& r_test_error, const String& p_path="",List<String> *r_functions=NULL) const; + virtual Script *create_script() const; + virtual bool has_named_classes() const; + virtual int find_function(const String& p_function,const String& p_code) const; + virtual String make_function(const String& p_class,const String& p_name,const StringArray& p_args) const; + virtual void auto_indent_code(String& p_code,int p_from_line,int p_to_line) const; + virtual void add_global_constant(const StringName& p_variable,const Variant& p_value); + + + /* DEBUGGER FUNCTIONS */ + + virtual String debug_get_error() const; + virtual int debug_get_stack_level_count() const; + virtual int debug_get_stack_level_line(int p_level) const; + virtual String debug_get_stack_level_function(int p_level) const; + virtual String debug_get_stack_level_source(int p_level) const; + virtual void debug_get_stack_level_locals(int p_level,List<String> *p_locals, List<Variant> *p_values, int p_max_subitems=-1,int p_max_depth=-1); + virtual void debug_get_stack_level_members(int p_level,List<String> *p_members, List<Variant> *p_values, int p_max_subitems=-1,int p_max_depth=-1); + virtual void debug_get_globals(List<String> *p_locals, List<Variant> *p_values, int p_max_subitems=-1,int p_max_depth=-1); + virtual String debug_parse_stack_level_expression(int p_level,const String& p_expression,int p_max_subitems=-1,int p_max_depth=-1); + + + virtual void reload_all_scripts(); + virtual void reload_tool_script(const Ref<Script>& p_script,bool p_soft_reload); + /* LOADER FUNCTIONS */ + + virtual void get_recognized_extensions(List<String> *p_extensions) const; + virtual void get_public_functions(List<MethodInfo> *p_functions) const; + virtual void get_public_constants(List<Pair<String,Variant> > *p_constants) const; + + virtual void profiling_start(); + virtual void profiling_stop(); + + virtual int profiling_get_accumulated_data(ProfilingInfo *p_info_arr,int p_info_max); + virtual int profiling_get_frame_data(ProfilingInfo *p_info_arr,int p_info_max); + + void add_register_func(const String& p_name,VisualScriptNodeRegisterFunc p_func); + Ref<VisualScriptNode> create_node_from_name(const String& p_name); + void get_registered_node_names(List<String> *r_names); + + + VisualScriptLanguage(); + ~VisualScriptLanguage(); + +}; + +//aid for registering +template<class T> +static Ref<VisualScriptNode> create_node_generic(const String& p_name) { + + Ref<T> node; + node.instance(); + return node; +} + + + +#endif // VSCRIPT_H diff --git a/modules/visual_script/visual_script_builtin_funcs.cpp b/modules/visual_script/visual_script_builtin_funcs.cpp new file mode 100644 index 0000000000..24a44d3506 --- /dev/null +++ b/modules/visual_script/visual_script_builtin_funcs.cpp @@ -0,0 +1,1225 @@ +#include "visual_script_builtin_funcs.h" +#include "math_funcs.h" +#include "object_type_db.h" +#include "reference.h" +#include "func_ref.h" +#include "os/os.h" +#include "variant_parser.h" +#include "io/marshalls.h" + +const char* VisualScriptBuiltinFunc::func_name[VisualScriptBuiltinFunc::FUNC_MAX]={ + "sin", + "cos", + "tan", + "sinh", + "cosh", + "tanh", + "asin", + "acos", + "atan", + "atan2", + "sqrt", + "fmod", + "fposmod", + "floor", + "ceil", + "round", + "abs", + "sign", + "pow", + "log", + "exp", + "is_nan", + "is_inf", + "ease", + "decimals", + "stepify", + "lerp", + "dectime", + "randomize", + "randi", + "randf", + "rand_range", + "seed", + "rand_seed", + "deg2rad", + "rad2deg", + "linear2db", + "db2linear", + "max", + "min", + "clamp", + "nearest_po2", + "weakref", + "funcref", + "convert", + "typeof", + "type_exists", + "str", + "print", + "printerr", + "printraw", + "var2str", + "str2var", + "var2bytes", + "bytes2var", +}; + +VisualScriptBuiltinFunc::BuiltinFunc VisualScriptBuiltinFunc::find_function(const String& p_string) { + + for(int i=0;i<FUNC_MAX;i++) { + if (p_string==func_name[i]) + return BuiltinFunc(i); + } + + return FUNC_MAX; +} + +String VisualScriptBuiltinFunc::get_func_name(BuiltinFunc p_func) { + + ERR_FAIL_INDEX_V(p_func,FUNC_MAX,String()); + return func_name[p_func]; +} + + +int VisualScriptBuiltinFunc::get_output_sequence_port_count() const { + + return has_input_sequence_port() ? 1 : 0; +} + +bool VisualScriptBuiltinFunc::has_input_sequence_port() const{ + + switch(func) { + + case MATH_RANDOMIZE: + case TEXT_PRINT: + case TEXT_PRINTERR: + case TEXT_PRINTRAW: + return true; + default: + return false; + + } + +} + +int VisualScriptBuiltinFunc::get_func_argument_count(BuiltinFunc p_func) { + + + switch(p_func) { + + case MATH_RANDOMIZE: + case MATH_RAND: + case MATH_RANDF: + return 0; + case MATH_SIN: + case MATH_COS: + case MATH_TAN: + case MATH_SINH: + case MATH_COSH: + case MATH_TANH: + case MATH_ASIN: + case MATH_ACOS: + case MATH_ATAN: + case MATH_SQRT: + case MATH_FLOOR: + case MATH_CEIL: + case MATH_ROUND: + case MATH_ABS: + case MATH_SIGN: + case MATH_LOG: + case MATH_EXP: + case MATH_ISNAN: + case MATH_ISINF: + case MATH_DECIMALS: + case MATH_SEED: + case MATH_RANDSEED: + case MATH_DEG2RAD: + case MATH_RAD2DEG: + case MATH_LINEAR2DB: + case MATH_DB2LINEAR: + case LOGIC_NEAREST_PO2: + case OBJ_WEAKREF: + case TYPE_OF: + case TEXT_STR: + case TEXT_PRINT: + case TEXT_PRINTERR: + case TEXT_PRINTRAW: + case VAR_TO_STR: + case STR_TO_VAR: + case VAR_TO_BYTES: + case BYTES_TO_VAR: + case TYPE_EXISTS: + return 1; + case MATH_ATAN2: + case MATH_FMOD: + case MATH_FPOSMOD: + case MATH_POW: + case MATH_EASE: + case MATH_STEPIFY: + case MATH_RANDOM: + case LOGIC_MAX: + case LOGIC_MIN: + case FUNC_FUNCREF: + case TYPE_CONVERT: + return 2; + case MATH_LERP: + case MATH_DECTIME: + case LOGIC_CLAMP: + return 3; + case FUNC_MAX:{} + + } + return 0; +} + +int VisualScriptBuiltinFunc::get_input_value_port_count() const{ + + return get_func_argument_count(func); +} +int VisualScriptBuiltinFunc::get_output_value_port_count() const{ + + switch(func) { + case MATH_RANDOMIZE: + case TEXT_PRINT: + case TEXT_PRINTERR: + case TEXT_PRINTRAW: + case MATH_SEED: + return 0; + case MATH_RANDSEED: + return 2; + default: + return 1; + } + + return 1; +} + +String VisualScriptBuiltinFunc::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const{ + + switch(func) { + + case MATH_SIN: + case MATH_COS: + case MATH_TAN: + case MATH_SINH: + case MATH_COSH: + case MATH_TANH: + case MATH_ASIN: + case MATH_ACOS: + case MATH_ATAN: + case MATH_ATAN2: + case MATH_SQRT: { + return PropertyInfo(Variant::REAL,"num"); + } break; + case MATH_FMOD: + case MATH_FPOSMOD: { + if (p_idx==0) + return PropertyInfo(Variant::REAL,"x"); + else + return PropertyInfo(Variant::REAL,"y"); + } break; + case MATH_FLOOR: + case MATH_CEIL: + case MATH_ROUND: + case MATH_ABS: + case MATH_SIGN: { + return PropertyInfo(Variant::REAL,"num"); + + } break; + + case MATH_POW: { + if (p_idx==0) + return PropertyInfo(Variant::REAL,"x"); + else + return PropertyInfo(Variant::REAL,"y"); + } break; + case MATH_LOG: + case MATH_EXP: + case MATH_ISNAN: + case MATH_ISINF: { + return PropertyInfo(Variant::REAL,"num"); + } break; + case MATH_EASE: { + if (p_idx==0) + return PropertyInfo(Variant::REAL,"s"); + else + return PropertyInfo(Variant::REAL,"curve"); + } break; + case MATH_DECIMALS: { + return PropertyInfo(Variant::REAL,"step"); + } break; + case MATH_STEPIFY: { + if (p_idx==0) + return PropertyInfo(Variant::REAL,"s"); + else + return PropertyInfo(Variant::REAL,"steps"); + } break; + case MATH_LERP: { + if (p_idx==0) + return PropertyInfo(Variant::REAL,"from"); + else if (p_idx==1) + return PropertyInfo(Variant::REAL,"to"); + else + return PropertyInfo(Variant::REAL,"weight"); + + } break; + case MATH_DECTIME: { + if (p_idx==0) + return PropertyInfo(Variant::REAL,"value"); + else if (p_idx==1) + return PropertyInfo(Variant::REAL,"amount"); + else + return PropertyInfo(Variant::REAL,"step"); + } break; + case MATH_RANDOMIZE: { + + } break; + case MATH_RAND: { + + } break; + case MATH_RANDF: { + + } break; + case MATH_RANDOM: { + if (p_idx==0) + return PropertyInfo(Variant::REAL,"from"); + else + return PropertyInfo(Variant::REAL,"to"); + } break; + case MATH_SEED: { + return PropertyInfo(Variant::INT,"seed"); + } break; + case MATH_RANDSEED: { + return PropertyInfo(Variant::INT,"seed"); + } break; + case MATH_DEG2RAD: { + return PropertyInfo(Variant::REAL,"deg"); + } break; + case MATH_RAD2DEG: { + return PropertyInfo(Variant::REAL,"rad"); + } break; + case MATH_LINEAR2DB: { + return PropertyInfo(Variant::REAL,"nrg"); + } break; + case MATH_DB2LINEAR: { + return PropertyInfo(Variant::REAL,"db"); + } break; + case LOGIC_MAX: { + if (p_idx==0) + return PropertyInfo(Variant::REAL,"a"); + else + return PropertyInfo(Variant::REAL,"b"); + } break; + case LOGIC_MIN: { + if (p_idx==0) + return PropertyInfo(Variant::REAL,"a"); + else + return PropertyInfo(Variant::REAL,"b"); + } break; + case LOGIC_CLAMP: { + if (p_idx==0) + return PropertyInfo(Variant::REAL,"a"); + else if (p_idx==0) + return PropertyInfo(Variant::REAL,"min"); + else + return PropertyInfo(Variant::REAL,"max"); + } break; + case LOGIC_NEAREST_PO2: { + return PropertyInfo(Variant::INT,"num"); + } break; + case OBJ_WEAKREF: { + + return PropertyInfo(Variant::OBJECT,"source"); + + } break; + case FUNC_FUNCREF: { + + if (p_idx==0) + return PropertyInfo(Variant::OBJECT,"instance"); + else + return PropertyInfo(Variant::STRING,"funcname"); + + } break; + case TYPE_CONVERT: { + + if (p_idx==0) + return PropertyInfo(Variant::NIL,"what"); + else + return PropertyInfo(Variant::STRING,"type"); + } break; + case TYPE_OF: { + return PropertyInfo(Variant::NIL,"what"); + + } break; + case TYPE_EXISTS: { + + return PropertyInfo(Variant::STRING,"type"); + + } break; + case TEXT_STR: { + + return PropertyInfo(Variant::NIL,"value"); + + + } break; + case TEXT_PRINT: { + + return PropertyInfo(Variant::NIL,"value"); + + } break; + case TEXT_PRINTERR: { + return PropertyInfo(Variant::NIL,"value"); + + } break; + case TEXT_PRINTRAW: { + + return PropertyInfo(Variant::NIL,"value"); + + } break; + case VAR_TO_STR: { + return PropertyInfo(Variant::NIL,"var"); + + } break; + case STR_TO_VAR: { + + return PropertyInfo(Variant::STRING,"string"); + } break; + case VAR_TO_BYTES: { + return PropertyInfo(Variant::NIL,"var"); + + } break; + case BYTES_TO_VAR: { + + return PropertyInfo(Variant::RAW_ARRAY,"bytes"); + } break; + case FUNC_MAX:{} + } + + return PropertyInfo(); +} + +PropertyInfo VisualScriptBuiltinFunc::get_output_value_port_info(int p_idx) const{ + + Variant::Type t=Variant::NIL; + switch(func) { + + case MATH_SIN: + case MATH_COS: + case MATH_TAN: + case MATH_SINH: + case MATH_COSH: + case MATH_TANH: + case MATH_ASIN: + case MATH_ACOS: + case MATH_ATAN: + case MATH_ATAN2: + case MATH_SQRT: + case MATH_FMOD: + case MATH_FPOSMOD: + case MATH_FLOOR: + case MATH_CEIL: { + t=Variant::REAL; + } break; + case MATH_ROUND: { + t=Variant::INT; + } break; + case MATH_ABS: { + t=Variant::NIL; + } break; + case MATH_SIGN: { + t=Variant::NIL; + } break; + case MATH_POW: + case MATH_LOG: + case MATH_EXP: { + t=Variant::REAL; + } break; + case MATH_ISNAN: + case MATH_ISINF: { + t=Variant::BOOL; + } break; + case MATH_EASE: { + t=Variant::REAL; + } break; + case MATH_DECIMALS: { + t=Variant::INT; + } break; + case MATH_STEPIFY: + case MATH_LERP: + case MATH_DECTIME: { + t=Variant::REAL; + + } break; + case MATH_RANDOMIZE: { + + } break; + case MATH_RAND: { + + t=Variant::INT; + } break; + case MATH_RANDF: + case MATH_RANDOM: { + t=Variant::REAL; + } break; + case MATH_SEED: { + + } break; + case MATH_RANDSEED: { + + if (p_idx==0) + return PropertyInfo(Variant::INT,"rnd"); + else + return PropertyInfo(Variant::INT,"seed"); + } break; + case MATH_DEG2RAD: + case MATH_RAD2DEG: + case MATH_LINEAR2DB: + case MATH_DB2LINEAR: { + t=Variant::REAL; + } break; + case LOGIC_MAX: + case LOGIC_MIN: + case LOGIC_CLAMP: { + + + } break; + + case LOGIC_NEAREST_PO2: { + t=Variant::NIL; + } break; + case OBJ_WEAKREF: { + + t=Variant::OBJECT; + + } break; + case FUNC_FUNCREF: { + + t=Variant::OBJECT; + + } break; + case TYPE_CONVERT: { + + + + } break; + case TYPE_OF: { + t=Variant::INT; + + } break; + case TYPE_EXISTS: { + + t=Variant::BOOL; + + } break; + case TEXT_STR: { + + t=Variant::STRING; + + } break; + case TEXT_PRINT: { + + + } break; + case TEXT_PRINTERR: { + + } break; + case TEXT_PRINTRAW: { + + } break; + case VAR_TO_STR: { + t=Variant::STRING; + } break; + case STR_TO_VAR: { + + } break; + case VAR_TO_BYTES: { + t=Variant::RAW_ARRAY; + + } break; + case BYTES_TO_VAR: { + + + } break; + case FUNC_MAX:{} + } + + return PropertyInfo(t,""); +} + +String VisualScriptBuiltinFunc::get_caption() const { + + return "BuiltinFunc"; +} + +String VisualScriptBuiltinFunc::get_text() const { + + return func_name[func]; +} + +void VisualScriptBuiltinFunc::set_func(BuiltinFunc p_which) { + + ERR_FAIL_INDEX(p_which,FUNC_MAX); + func=p_which; + _change_notify(); + ports_changed_notify(); +} + +VisualScriptBuiltinFunc::BuiltinFunc VisualScriptBuiltinFunc::get_func() { + return func; +} + + +#define VALIDATE_ARG_NUM(m_arg) \ + if (!p_inputs[m_arg]->is_num()) {\ + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;\ + r_error.argument=m_arg;\ + r_error.expected=Variant::REAL;\ + return;\ + } + + +void VisualScriptBuiltinFunc::exec_func(BuiltinFunc p_func,const Variant** p_inputs,Variant* r_return,Variant::CallError& r_error,String& r_error_str) { + + switch(p_func) { + case VisualScriptBuiltinFunc::MATH_SIN: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::sin(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_COS: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::cos(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_TAN: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::tan(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_SINH: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::sinh(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_COSH: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::cosh(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_TANH: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::tanh(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_ASIN: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::asin(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_ACOS: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::acos(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_ATAN: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::atan(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_ATAN2: { + + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + *r_return=Math::atan2(*p_inputs[0],*p_inputs[1]); + } break; + case VisualScriptBuiltinFunc::MATH_SQRT: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::sqrt(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_FMOD: { + + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + *r_return=Math::fmod(*p_inputs[0],*p_inputs[1]); + } break; + case VisualScriptBuiltinFunc::MATH_FPOSMOD: { + + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + *r_return=Math::fposmod(*p_inputs[0],*p_inputs[1]); + } break; + case VisualScriptBuiltinFunc::MATH_FLOOR: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::floor(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_CEIL: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::ceil(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_ROUND: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::round(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_ABS: { + + if (p_inputs[0]->get_type()==Variant::INT) { + + int64_t i = *p_inputs[0]; + *r_return=ABS(i); + } else if (p_inputs[0]->get_type()==Variant::REAL) { + + real_t r = *p_inputs[0]; + *r_return=Math::abs(r); + } else { + + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::REAL; + + } + } break; + case VisualScriptBuiltinFunc::MATH_SIGN: { + + if (p_inputs[0]->get_type()==Variant::INT) { + + int64_t i = *p_inputs[0]; + *r_return= i < 0 ? -1 : ( i > 0 ? +1 : 0); + } else if (p_inputs[0]->get_type()==Variant::REAL) { + + real_t r = *p_inputs[0]; + *r_return= r < 0.0 ? -1.0 : ( r > 0.0 ? +1.0 : 0.0); + } else { + + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::REAL; + + } + } break; + case VisualScriptBuiltinFunc::MATH_POW: { + + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + *r_return=Math::pow(*p_inputs[0],*p_inputs[1]); + } break; + case VisualScriptBuiltinFunc::MATH_LOG: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::log(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_EXP: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::exp(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_ISNAN: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::is_nan(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_ISINF: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::is_inf(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_EASE: { + + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + *r_return=Math::ease(*p_inputs[0],*p_inputs[1]); + } break; + case VisualScriptBuiltinFunc::MATH_DECIMALS: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::step_decimals(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_STEPIFY: { + + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + *r_return=Math::stepify(*p_inputs[0],*p_inputs[1]); + } break; + case VisualScriptBuiltinFunc::MATH_LERP: { + + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + VALIDATE_ARG_NUM(2); + *r_return=Math::lerp(*p_inputs[0],*p_inputs[1],*p_inputs[2]); + } break; + case VisualScriptBuiltinFunc::MATH_DECTIME: { + + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + VALIDATE_ARG_NUM(2); + *r_return=Math::dectime(*p_inputs[0],*p_inputs[1],*p_inputs[2]); + } break; + case VisualScriptBuiltinFunc::MATH_RANDOMIZE: { + Math::randomize(); + + } break; + case VisualScriptBuiltinFunc::MATH_RAND: { + *r_return=Math::rand(); + } break; + case VisualScriptBuiltinFunc::MATH_RANDF: { + *r_return=Math::randf(); + } break; + case VisualScriptBuiltinFunc::MATH_RANDOM: { + + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + *r_return=Math::random(*p_inputs[0],*p_inputs[1]); + } break; + case VisualScriptBuiltinFunc::MATH_SEED: { + + VALIDATE_ARG_NUM(0); + uint32_t seed=*p_inputs[0]; + Math::seed(seed); + + } break; + case VisualScriptBuiltinFunc::MATH_RANDSEED: { + + VALIDATE_ARG_NUM(0); + uint32_t seed=*p_inputs[0]; + int ret = Math::rand_from_seed(&seed); + Array reta; + reta.push_back(ret); + reta.push_back(seed); + *r_return=reta; + + } break; + case VisualScriptBuiltinFunc::MATH_DEG2RAD: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::deg2rad(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_RAD2DEG: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::rad2deg(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_LINEAR2DB: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::linear2db(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::MATH_DB2LINEAR: { + + VALIDATE_ARG_NUM(0); + *r_return=Math::db2linear(*p_inputs[0]); + } break; + case VisualScriptBuiltinFunc::LOGIC_MAX: { + + if (p_inputs[0]->get_type()==Variant::INT && p_inputs[1]->get_type()==Variant::INT) { + + int64_t a = *p_inputs[0]; + int64_t b = *p_inputs[1]; + *r_return=MAX(a,b); + } else { + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + + real_t a = *p_inputs[0]; + real_t b = *p_inputs[1]; + + *r_return=MAX(a,b); + } + + } break; + case VisualScriptBuiltinFunc::LOGIC_MIN: { + + if (p_inputs[0]->get_type()==Variant::INT && p_inputs[1]->get_type()==Variant::INT) { + + int64_t a = *p_inputs[0]; + int64_t b = *p_inputs[1]; + *r_return=MIN(a,b); + } else { + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + + real_t a = *p_inputs[0]; + real_t b = *p_inputs[1]; + + *r_return=MIN(a,b); + } + } break; + case VisualScriptBuiltinFunc::LOGIC_CLAMP: { + + if (p_inputs[0]->get_type()==Variant::INT && p_inputs[1]->get_type()==Variant::INT && p_inputs[2]->get_type()==Variant::INT) { + + int64_t a = *p_inputs[0]; + int64_t b = *p_inputs[1]; + int64_t c = *p_inputs[2]; + *r_return=CLAMP(a,b,c); + } else { + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + VALIDATE_ARG_NUM(2); + + real_t a = *p_inputs[0]; + real_t b = *p_inputs[1]; + real_t c = *p_inputs[2]; + + *r_return=CLAMP(a,b,c); + } + } break; + case VisualScriptBuiltinFunc::LOGIC_NEAREST_PO2: { + + VALIDATE_ARG_NUM(0); + int64_t num = *p_inputs[0]; + *r_return = nearest_power_of_2(num); + } break; + case VisualScriptBuiltinFunc::OBJ_WEAKREF: { + + if (p_inputs[0]->get_type()!=Variant::OBJECT) { + + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::OBJECT; + + return; + + } + + if (p_inputs[0]->is_ref()) { + + REF r = *p_inputs[0]; + if (!r.is_valid()) { + + return; + } + + Ref<WeakRef> wref = memnew( WeakRef ); + wref->set_ref(r); + *r_return=wref; + } else { + Object *obj = *p_inputs[0]; + if (!obj) { + + return; + } + Ref<WeakRef> wref = memnew( WeakRef ); + wref->set_obj(obj); + *r_return=wref; + } + + + + + } break; + case VisualScriptBuiltinFunc::FUNC_FUNCREF: { + + if (p_inputs[0]->get_type()!=Variant::OBJECT) { + + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::OBJECT; + + return; + + } + if (p_inputs[1]->get_type()!=Variant::STRING && p_inputs[1]->get_type()!=Variant::NODE_PATH) { + + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=1; + r_error.expected=Variant::STRING; + + return; + + } + + Ref<FuncRef> fr = memnew( FuncRef); + + fr->set_instance(*p_inputs[0]); + fr->set_function(*p_inputs[1]); + + *r_return=fr; + + } break; + case VisualScriptBuiltinFunc::TYPE_CONVERT: { + + VALIDATE_ARG_NUM(1); + int type=*p_inputs[1]; + if (type<0 || type>=Variant::VARIANT_MAX) { + + r_error_str=RTR("Invalid type argument to convert(), use TYPE_* constants."); + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::INT; + return; + + } else { + + + *r_return=Variant::construct(Variant::Type(type),p_inputs,1,r_error); + } + } break; + case VisualScriptBuiltinFunc::TYPE_OF: { + + + *r_return = p_inputs[0]->get_type(); + + } break; + case VisualScriptBuiltinFunc::TYPE_EXISTS: { + + + *r_return = ObjectTypeDB::type_exists(*p_inputs[0]); + + } break; + case VisualScriptBuiltinFunc::TEXT_STR: { + + String str = *p_inputs[0]; + + *r_return=str; + + } break; + case VisualScriptBuiltinFunc::TEXT_PRINT: { + + String str = *p_inputs[0]; + print_line(str); + + + } break; + + case VisualScriptBuiltinFunc::TEXT_PRINTERR: { + + String str = *p_inputs[0]; + + //str+="\n"; + OS::get_singleton()->printerr("%s\n",str.utf8().get_data()); + + + } break; + case VisualScriptBuiltinFunc::TEXT_PRINTRAW: { + String str = *p_inputs[0]; + + //str+="\n"; + OS::get_singleton()->print("%s",str.utf8().get_data()); + + + } break; + case VisualScriptBuiltinFunc::VAR_TO_STR: { + + String vars; + VariantWriter::write_to_string(*p_inputs[0],vars); + *r_return=vars; + } break; + case VisualScriptBuiltinFunc::STR_TO_VAR: { + + if (p_inputs[0]->get_type()!=Variant::STRING) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::STRING; + + return; + } + + VariantParser::StreamString ss; + ss.s=*p_inputs[0]; + + String errs; + int line; + Error err = VariantParser::parse(&ss,*r_return,errs,line); + + if (err!=OK) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::STRING; + *r_return="Parse error at line "+itos(line)+": "+errs; + return; + } + + } break; + case VisualScriptBuiltinFunc::VAR_TO_BYTES: { + + + ByteArray barr; + int len; + Error err = encode_variant(*p_inputs[0],NULL,len); + if (err) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::NIL; + r_error_str="Unexpected error encoding variable to bytes, likely unserializable type found (Object or RID)."; + return; + } + + barr.resize(len); + { + ByteArray::Write w = barr.write(); + encode_variant(*p_inputs[0],w.ptr(),len); + + } + *r_return=barr; + } break; + case VisualScriptBuiltinFunc::BYTES_TO_VAR: { + + if (p_inputs[0]->get_type()!=Variant::RAW_ARRAY) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::RAW_ARRAY; + + return; + } + + ByteArray varr=*p_inputs[0]; + Variant ret; + { + ByteArray::Read r=varr.read(); + Error err = decode_variant(ret,r.ptr(),varr.size(),NULL); + if (err!=OK) { + r_error_str=RTR("Not enough bytes for decoding bytes, or invalid format."); + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::RAW_ARRAY; + return; + } + + } + + *r_return=ret; + + } break; + default: {} + } + +} + + +class VisualScriptNodeInstanceBuiltinFunc : public VisualScriptNodeInstance { +public: + + VisualScriptBuiltinFunc *node; + VisualScriptInstance *instance; + + VisualScriptBuiltinFunc::BuiltinFunc func; + + + //virtual int get_working_memory_size() const { return 0; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + VisualScriptBuiltinFunc::exec_func(func,p_inputs,p_outputs[0],r_error,r_error_str); + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptBuiltinFunc::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceBuiltinFunc * instance = memnew(VisualScriptNodeInstanceBuiltinFunc ); + instance->node=this; + instance->instance=p_instance; + instance->func=func; + return instance; +} + + +void VisualScriptBuiltinFunc::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_func","which"),&VisualScriptBuiltinFunc::set_func); + ObjectTypeDB::bind_method(_MD("get_func"),&VisualScriptBuiltinFunc::get_func); + + String cc; + + for(int i=0;i<FUNC_MAX;i++) { + + if (i>0) + cc+=","; + cc+=func_name[i]; + } + ADD_PROPERTY(PropertyInfo(Variant::INT,"function",PROPERTY_HINT_ENUM,cc),_SCS("set_func"),_SCS("get_func")); +} + +VisualScriptBuiltinFunc::VisualScriptBuiltinFunc() { + + func=MATH_SIN; +} + +template<VisualScriptBuiltinFunc::BuiltinFunc func> +static Ref<VisualScriptNode> create_builtin_func_node(const String& p_name) { + + Ref<VisualScriptBuiltinFunc> node; + node.instance(); + node->set_func(func); + return node; +} + +void register_visual_script_builtin_func_node() { + + + VisualScriptLanguage::singleton->add_register_func("functions/built_in/sin",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SIN>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/cos",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_COS>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/tan",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_TAN>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/sinh",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SINH>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/cosh",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_COSH>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/tanh",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_TANH>); + + VisualScriptLanguage::singleton->add_register_func("functions/built_in/asin",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ASIN>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/acos",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ACOS>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/atan",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ATAN>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/atan2",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ATAN2>); + + VisualScriptLanguage::singleton->add_register_func("functions/built_in/sqrt",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SQRT>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/fmod",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_FMOD>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/fposmod",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_FPOSMOD>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/floor",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_FLOOR>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/ceil",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_CEIL>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/round",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ROUND>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/abs",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ABS>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/sign",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SIGN>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/pow",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_POW>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/log",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_LOG>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/exp",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_EXP>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/isnan",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ISNAN>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/isinf",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ISINF>); + + VisualScriptLanguage::singleton->add_register_func("functions/built_in/ease",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_EASE>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/decimals",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_DECIMALS>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/stepify",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_STEPIFY>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/lerp",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_LERP>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/dectime",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_DECTIME>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/randomize",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDOMIZE>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/rand",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RAND>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/randf",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDF>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/random",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDOM>); + + VisualScriptLanguage::singleton->add_register_func("functions/built_in/seed",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SEED>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/randseed",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDSEED>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/deg2rad",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_DEG2RAD>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/rad2deg",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RAD2DEG>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/linear2db",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_LINEAR2DB>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/db2linear",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_DB2LINEAR>); + + VisualScriptLanguage::singleton->add_register_func("functions/built_in/max",create_builtin_func_node<VisualScriptBuiltinFunc::LOGIC_MAX>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/min",create_builtin_func_node<VisualScriptBuiltinFunc::LOGIC_MIN>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/clamp",create_builtin_func_node<VisualScriptBuiltinFunc::LOGIC_CLAMP>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/nearest_po2",create_builtin_func_node<VisualScriptBuiltinFunc::LOGIC_NEAREST_PO2>); + + VisualScriptLanguage::singleton->add_register_func("functions/built_in/weakref",create_builtin_func_node<VisualScriptBuiltinFunc::OBJ_WEAKREF>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/funcref",create_builtin_func_node<VisualScriptBuiltinFunc::FUNC_FUNCREF>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/convert",create_builtin_func_node<VisualScriptBuiltinFunc::TYPE_CONVERT>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/typeof",create_builtin_func_node<VisualScriptBuiltinFunc::TYPE_OF>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/type_exists",create_builtin_func_node<VisualScriptBuiltinFunc::TYPE_EXISTS>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/str",create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_STR>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/print",create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINT>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/printerr",create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINTERR>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/printraw",create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINTRAW>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/var2str",create_builtin_func_node<VisualScriptBuiltinFunc::VAR_TO_STR>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/str2var",create_builtin_func_node<VisualScriptBuiltinFunc::STR_TO_VAR>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/var2bytes",create_builtin_func_node<VisualScriptBuiltinFunc::VAR_TO_BYTES>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/bytes2var",create_builtin_func_node<VisualScriptBuiltinFunc::BYTES_TO_VAR>); + +} diff --git a/modules/visual_script/visual_script_builtin_funcs.h b/modules/visual_script/visual_script_builtin_funcs.h new file mode 100644 index 0000000000..000230d84f --- /dev/null +++ b/modules/visual_script/visual_script_builtin_funcs.h @@ -0,0 +1,115 @@ +#ifndef VISUAL_SCRIPT_BUILTIN_FUNCS_H +#define VISUAL_SCRIPT_BUILTIN_FUNCS_H + +#include "visual_script.h" + + +class VisualScriptBuiltinFunc : public VisualScriptNode { + + OBJ_TYPE(VisualScriptBuiltinFunc,VisualScriptNode) +public: + + enum BuiltinFunc { + MATH_SIN, + MATH_COS, + MATH_TAN, + MATH_SINH, + MATH_COSH, + MATH_TANH, + MATH_ASIN, + MATH_ACOS, + MATH_ATAN, + MATH_ATAN2, + MATH_SQRT, + MATH_FMOD, + MATH_FPOSMOD, + MATH_FLOOR, + MATH_CEIL, + MATH_ROUND, + MATH_ABS, + MATH_SIGN, + MATH_POW, + MATH_LOG, + MATH_EXP, + MATH_ISNAN, + MATH_ISINF, + MATH_EASE, + MATH_DECIMALS, + MATH_STEPIFY, + MATH_LERP, + MATH_DECTIME, + MATH_RANDOMIZE, + MATH_RAND, + MATH_RANDF, + MATH_RANDOM, + MATH_SEED, + MATH_RANDSEED, + MATH_DEG2RAD, + MATH_RAD2DEG, + MATH_LINEAR2DB, + MATH_DB2LINEAR, + LOGIC_MAX, + LOGIC_MIN, + LOGIC_CLAMP, + LOGIC_NEAREST_PO2, + OBJ_WEAKREF, + FUNC_FUNCREF, + TYPE_CONVERT, + TYPE_OF, + TYPE_EXISTS, + TEXT_STR, + TEXT_PRINT, + TEXT_PRINTERR, + TEXT_PRINTRAW, + VAR_TO_STR, + STR_TO_VAR, + VAR_TO_BYTES, + BYTES_TO_VAR, + FUNC_MAX + }; + + static int get_func_argument_count(BuiltinFunc p_func); + static String get_func_name(BuiltinFunc p_func); + static void exec_func(BuiltinFunc p_func, const Variant** p_inputs, Variant* r_return, Variant::CallError& r_error, String& r_error_str); + static BuiltinFunc find_function(const String& p_string); + +private: + static const char* func_name[FUNC_MAX]; + BuiltinFunc func; +protected: + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "functions"; } + + void set_func(BuiltinFunc p_which); + BuiltinFunc get_func(); + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptBuiltinFunc(); +}; + +VARIANT_ENUM_CAST(VisualScriptBuiltinFunc::BuiltinFunc) + + +void register_visual_script_builtin_func_node(); + + +#endif // VISUAL_SCRIPT_BUILTIN_FUNCS_H diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp new file mode 100644 index 0000000000..76f6f47ad8 --- /dev/null +++ b/modules/visual_script/visual_script_editor.cpp @@ -0,0 +1,3528 @@ +#include "visual_script_editor.h" +#include "tools/editor/editor_node.h" +#include "visual_script_nodes.h" +#include "visual_script_flow_control.h" +#include "visual_script_func_nodes.h" +#include "visual_script_expression.h" +#include "os/input.h" +#include "tools/editor/editor_resource_preview.h" +#include "os/keyboard.h" + +#ifdef TOOLS_ENABLED +class VisualScriptEditorSignalEdit : public Object { + + OBJ_TYPE(VisualScriptEditorSignalEdit,Object) + + StringName sig; +public: + UndoRedo *undo_redo; + Ref<VisualScript> script; + + +protected: + + static void _bind_methods() { + ObjectTypeDB::bind_method("_sig_changed",&VisualScriptEditorSignalEdit::_sig_changed); + } + + void _sig_changed() { + + _change_notify(); + } + + bool _set(const StringName& p_name, const Variant& p_value) { + + if (sig==StringName()) + return false; + + if (p_name=="argument_count") { + + int new_argc=p_value; + int argc = script->custom_signal_get_argument_count(sig); + if (argc==new_argc) + return true; + + undo_redo->create_action("Change Signal Arguments"); + + + + if (new_argc < argc) { + for(int i=new_argc;i<argc;i++) { + undo_redo->add_do_method(script.ptr(),"custom_signal_remove_argument",sig,new_argc); + undo_redo->add_undo_method(script.ptr(),"custom_signal_add_argument",sig,script->custom_signal_get_argument_name(sig,i),script->custom_signal_get_argument_type(sig,i),-1); + } + } else if (new_argc>argc) { + + for(int i=argc;i<new_argc;i++) { + + undo_redo->add_do_method(script.ptr(),"custom_signal_add_argument",sig,Variant::NIL,"arg"+itos(i+1),-1); + undo_redo->add_undo_method(script.ptr(),"custom_signal_remove_argument",sig,argc); + } + } + + undo_redo->add_do_method(this,"_sig_changed"); + undo_redo->add_undo_method(this,"_sig_changed"); + + undo_redo->commit_action(); + + return true; + } + if (String(p_name).begins_with("argument/")) { + int idx = String(p_name).get_slice("/",1).to_int()-1; + ERR_FAIL_INDEX_V(idx,script->custom_signal_get_argument_count(sig),false); + String what = String(p_name).get_slice("/",2); + if (what=="type") { + + int old_type = script->custom_signal_get_argument_type(sig,idx); + int new_type=p_value; + undo_redo->create_action("Change Argument Type"); + undo_redo->add_do_method(script.ptr(),"custom_signal_set_argument_type",sig,idx,new_type); + undo_redo->add_undo_method(script.ptr(),"custom_signal_set_argument_type",sig,idx,old_type); + undo_redo->commit_action(); + + return true; + } + + if (what=="name") { + + String old_name = script->custom_signal_get_argument_name(sig,idx); + String new_name=p_value; + undo_redo->create_action("Change Argument name"); + undo_redo->add_do_method(script.ptr(),"custom_signal_set_argument_name",sig,idx,new_name); + undo_redo->add_undo_method(script.ptr(),"custom_signal_set_argument_name",sig,idx,old_name); + undo_redo->commit_action(); + return true; + } + + + } + + + return false; + } + + bool _get(const StringName& p_name,Variant &r_ret) const { + + if (sig==StringName()) + return false; + + if (p_name=="argument_count") { + r_ret = script->custom_signal_get_argument_count(sig); + return true; + } + if (String(p_name).begins_with("argument/")) { + int idx = String(p_name).get_slice("/",1).to_int()-1; + ERR_FAIL_INDEX_V(idx,script->custom_signal_get_argument_count(sig),false); + String what = String(p_name).get_slice("/",2); + if (what=="type") { + r_ret = script->custom_signal_get_argument_type(sig,idx); + return true; + } + if (what=="name") { + r_ret = script->custom_signal_get_argument_name(sig,idx); + return true; + } + + + + } + + return false; + } + void _get_property_list( List<PropertyInfo> *p_list) const { + + if (sig==StringName()) + return; + + p_list->push_back(PropertyInfo(Variant::INT,"argument_count",PROPERTY_HINT_RANGE,"0,256")); + String argt="Variant"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + + for(int i=0;i<script->custom_signal_get_argument_count(sig);i++) { + p_list->push_back(PropertyInfo(Variant::INT,"argument/"+itos(i+1)+"/type",PROPERTY_HINT_ENUM,argt)); + p_list->push_back(PropertyInfo(Variant::STRING,"argument/"+itos(i+1)+"/name")); + } + } + +public: + + + void edit(const StringName& p_sig) { + + sig=p_sig; + _change_notify(); + } + + VisualScriptEditorSignalEdit() { undo_redo=NULL; } +}; + +class VisualScriptEditorVariableEdit : public Object { + + OBJ_TYPE(VisualScriptEditorVariableEdit,Object) + + StringName var; +public: + UndoRedo *undo_redo; + Ref<VisualScript> script; + + +protected: + + static void _bind_methods() { + ObjectTypeDB::bind_method("_var_changed",&VisualScriptEditorVariableEdit::_var_changed); + ObjectTypeDB::bind_method("_var_value_changed",&VisualScriptEditorVariableEdit::_var_value_changed); + } + + void _var_changed() { + + _change_notify(); + } + void _var_value_changed() { + + _change_notify("value"); //so the whole tree is not redrawn, makes editing smoother in general + } + + bool _set(const StringName& p_name, const Variant& p_value) { + + if (var==StringName()) + return false; + + + + if (String(p_name)=="value") { + undo_redo->create_action("Set Variable Default Value"); + Variant current=script->get_variable_default_value(var); + undo_redo->add_do_method(script.ptr(),"set_variable_default_value",var,p_value); + undo_redo->add_undo_method(script.ptr(),"set_variable_default_value",var,current); + undo_redo->add_do_method(this,"_var_value_changed"); + undo_redo->add_undo_method(this,"_var_value_changed"); + undo_redo->commit_action(); + return true; + } + + Dictionary d = script->call("get_variable_info",var); + + if (String(p_name)=="type") { + + Dictionary dc=d.copy(); + dc["type"]=p_value; + undo_redo->create_action("Set Variable Type"); + undo_redo->add_do_method(script.ptr(),"set_variable_info",var,dc); + undo_redo->add_undo_method(script.ptr(),"set_variable_info",var,d); + undo_redo->add_do_method(this,"_var_changed"); + undo_redo->add_undo_method(this,"_var_changed"); + undo_redo->commit_action(); + return true; + } + + if (String(p_name)=="hint") { + + Dictionary dc=d.copy(); + dc["hint"]=p_value; + undo_redo->create_action("Set Variable Type"); + undo_redo->add_do_method(script.ptr(),"set_variable_info",var,dc); + undo_redo->add_undo_method(script.ptr(),"set_variable_info",var,d); + undo_redo->add_do_method(this,"_var_changed"); + undo_redo->add_undo_method(this,"_var_changed"); + undo_redo->commit_action(); + return true; + } + + if (String(p_name)=="hint_string") { + + Dictionary dc=d.copy(); + dc["hint_string"]=p_value; + undo_redo->create_action("Set Variable Type"); + undo_redo->add_do_method(script.ptr(),"set_variable_info",var,dc); + undo_redo->add_undo_method(script.ptr(),"set_variable_info",var,d); + undo_redo->add_do_method(this,"_var_changed"); + undo_redo->add_undo_method(this,"_var_changed"); + undo_redo->commit_action(); + return true; + } + + if (String(p_name)=="export") { + script->set_variable_export(var,p_value); + return true; + } + + + return false; + } + + bool _get(const StringName& p_name,Variant &r_ret) const { + + if (var==StringName()) + return false; + + if (String(p_name)=="value") { + r_ret=script->get_variable_default_value(var); + return true; + } + + PropertyInfo pinfo = script->get_variable_info(var); + + if (String(p_name)=="type") { + r_ret=pinfo.type; + return true; + } + if (String(p_name)=="hint") { + r_ret=pinfo.hint; + return true; + } + if (String(p_name)=="hint_string") { + r_ret=pinfo.hint_string; + return true; + } + + if (String(p_name)=="export") { + r_ret=script->get_variable_export(var); + return true; + } + + return false; + } + void _get_property_list( List<PropertyInfo> *p_list) const { + + if (var==StringName()) + return; + + String argt="Variant"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + p_list->push_back(PropertyInfo(Variant::INT,"type",PROPERTY_HINT_ENUM,argt)); + p_list->push_back(PropertyInfo(script->get_variable_info(var).type,"value",script->get_variable_info(var).hint,script->get_variable_info(var).hint_string,PROPERTY_USAGE_DEFAULT)); + p_list->push_back(PropertyInfo(Variant::INT,"hint",PROPERTY_HINT_ENUM,"None,Range,ExpRange,Enum,ExpEasing,Length,SpriteFrame,KeyAccel,BitFlags,AllFlags,File,Dir,GlobalFile,GlobalDir,ResourceType,MultilineText")); + p_list->push_back(PropertyInfo(Variant::STRING,"hint_string")); + p_list->push_back(PropertyInfo(Variant::BOOL,"export")); + + } + +public: + + + void edit(const StringName& p_var) { + + var=p_var; + _change_notify(); + } + + VisualScriptEditorVariableEdit() { undo_redo=NULL; } +}; + +static Color _color_from_type(Variant::Type p_type) { + Color color; + switch(p_type) { + case Variant::NIL: color = Color::html("69ecbd"); break; + + case Variant::BOOL: color = Color::html("8da6f0"); break; + case Variant::INT: color = Color::html("7dc6ef"); break; + case Variant::REAL: color = Color::html("61daf4"); break; + case Variant::STRING: color = Color::html("6ba7ec"); break; + + case Variant::VECTOR2: color = Color::html("bd91f1"); break; + case Variant::RECT2: color = Color::html("f191a5"); break; + case Variant::VECTOR3: color = Color::html("d67dee"); break; + case Variant::MATRIX32: color = Color::html("c4ec69"); break; + case Variant::PLANE: color = Color::html("f77070"); break; + case Variant::QUAT: color = Color::html("ec69a3"); break; + case Variant::_AABB: color = Color::html("ee7991"); break; + case Variant::MATRIX3: color = Color::html("e3ec69"); break; + case Variant::TRANSFORM: color = Color::html("f6a86e"); break; + + case Variant::COLOR: color = Color::html("9dff70"); break; + case Variant::IMAGE: color = Color::html("93f1b9"); break; + case Variant::NODE_PATH: color = Color::html("6993ec"); break; + case Variant::_RID: color = Color::html("69ec9a"); break; + case Variant::OBJECT: color = Color::html("79f3e8"); break; + case Variant::INPUT_EVENT: color = Color::html("adf18f"); break; + case Variant::DICTIONARY: color = Color::html("77edb1"); break; + + case Variant::ARRAY: color = Color::html("e0e0e0"); break; + case Variant::RAW_ARRAY: color = Color::html("aaf4c8"); break; + case Variant::INT_ARRAY: color = Color::html("afdcf5"); break; + case Variant::REAL_ARRAY: color = Color::html("97e7f8"); break; + case Variant::STRING_ARRAY: color = Color::html("9dc4f2"); break; + case Variant::VECTOR2_ARRAY: color = Color::html("d1b3f5"); break; + case Variant::VECTOR3_ARRAY: color = Color::html("df9bf2"); break; + case Variant::COLOR_ARRAY: color = Color::html("e9ff97"); break; + + default: + color.set_hsv(p_type/float(Variant::VARIANT_MAX),0.7,0.7); + } + return color; +} + + + +void VisualScriptEditor::_update_graph_connections() { + + graph->clear_connections(); + + List<VisualScript::SequenceConnection> sequence_conns; + script->get_sequence_connection_list(edited_func,&sequence_conns); + + + for (List<VisualScript::SequenceConnection>::Element *E=sequence_conns.front();E;E=E->next()) { + + graph->connect_node(itos(E->get().from_node),E->get().from_output,itos(E->get().to_node),0); + } + + List<VisualScript::DataConnection> data_conns; + script->get_data_connection_list(edited_func,&data_conns); + + for (List<VisualScript::DataConnection>::Element *E=data_conns.front();E;E=E->next()) { + + VisualScript::DataConnection dc=E->get(); + + + Ref<VisualScriptNode> from_node = script->get_node(edited_func,E->get().from_node); + Ref<VisualScriptNode> to_node = script->get_node(edited_func,E->get().to_node); + + if (to_node->has_input_sequence_port()) { + dc.to_port++; + } + + dc.from_port+=from_node->get_output_sequence_port_count(); + + graph->connect_node(itos(E->get().from_node),dc.from_port,itos(E->get().to_node),dc.to_port); + } + +} + + +void VisualScriptEditor::_update_graph(int p_only_id) { + + if (updating_graph) + return; + + updating_graph=true; + + //byebye all nodes + if (p_only_id>=0) { + if (graph->has_node(itos(p_only_id))) { + Node* gid = graph->get_node(itos(p_only_id)); + if (gid) + memdelete(gid); + } + } else { + + for(int i=0;i<graph->get_child_count();i++) { + + if (graph->get_child(i)->cast_to<GraphNode>()) { + memdelete(graph->get_child(i)); + i--; + } + } + } + + if (!script->has_function(edited_func)) { + graph->hide(); + select_func_text->show(); + updating_graph=false; + return; + } + + graph->show(); + select_func_text->hide(); + + Ref<Texture> type_icons[Variant::VARIANT_MAX]={ + Control::get_icon("MiniVariant","EditorIcons"), + Control::get_icon("MiniBoolean","EditorIcons"), + Control::get_icon("MiniInteger","EditorIcons"), + Control::get_icon("MiniFloat","EditorIcons"), + Control::get_icon("MiniString","EditorIcons"), + Control::get_icon("MiniVector2","EditorIcons"), + Control::get_icon("MiniRect2","EditorIcons"), + Control::get_icon("MiniVector3","EditorIcons"), + Control::get_icon("MiniMatrix32","EditorIcons"), + Control::get_icon("MiniPlane","EditorIcons"), + Control::get_icon("MiniQuat","EditorIcons"), + Control::get_icon("MiniAabb","EditorIcons"), + Control::get_icon("MiniMatrix3","EditorIcons"), + Control::get_icon("MiniTransform","EditorIcons"), + Control::get_icon("MiniColor","EditorIcons"), + Control::get_icon("MiniImage","EditorIcons"), + Control::get_icon("MiniPath","EditorIcons"), + Control::get_icon("MiniRid","EditorIcons"), + Control::get_icon("MiniObject","EditorIcons"), + Control::get_icon("MiniInput","EditorIcons"), + Control::get_icon("MiniDictionary","EditorIcons"), + Control::get_icon("MiniArray","EditorIcons"), + Control::get_icon("MiniRawArray","EditorIcons"), + Control::get_icon("MiniIntArray","EditorIcons"), + Control::get_icon("MiniFloatArray","EditorIcons"), + Control::get_icon("MiniStringArray","EditorIcons"), + Control::get_icon("MiniVector2Array","EditorIcons"), + Control::get_icon("MiniVector3Array","EditorIcons"), + Control::get_icon("MiniColorArray","EditorIcons") + }; + + + + Ref<Texture> seq_port = Control::get_icon("VisualShaderPort","EditorIcons"); + + List<int> ids; + script->get_node_list(edited_func,&ids); + StringName editor_icons="EditorIcons"; + + for(List<int>::Element *E=ids.front();E;E=E->next()) { + + if (p_only_id>=0 && p_only_id!=E->get()) + continue; + + Ref<VisualScriptNode> node = script->get_node(edited_func,E->get()); + Vector2 pos = script->get_node_pos(edited_func,E->get()); + + GraphNode *gnode = memnew( GraphNode ); + gnode->set_title(node->get_caption()); + if (error_line==E->get()) { + gnode->set_overlay(GraphNode::OVERLAY_POSITION); + } else if (node->is_breakpoint()) { + gnode->set_overlay(GraphNode::OVERLAY_BREAKPOINT); + } + + if (EditorSettings::get_singleton()->has("visual_script_editor/color_"+node->get_category())) { + gnode->set_modulate(EditorSettings::get_singleton()->get("visual_script_editor/color_"+node->get_category())); + } + + + + gnode->set_meta("__vnode",node); + gnode->set_name(itos(E->get())); + gnode->connect("dragged",this,"_node_moved",varray(E->get())); + gnode->connect("close_request",this,"_remove_node",varray(E->get()),CONNECT_DEFERRED); + + + if (E->get()!=script->get_function_node_id(edited_func)) { + //function can't be erased + gnode->set_show_close_button(true); + } + + + if (node->cast_to<VisualScriptExpression>()) { + + LineEdit *line_edit = memnew( LineEdit ); + line_edit->set_text(node->get_text()); + line_edit->set_expand_to_text_length(true); + line_edit->add_font_override("font",get_font("source","EditorFonts")); + gnode->add_child(line_edit); + line_edit->connect("text_changed",this,"_expression_text_changed",varray(E->get())); + } else { + Label *text = memnew( Label ); + text->set_text(node->get_text()); + gnode->add_child(text); + } + + + if (node->cast_to<VisualScriptComment>()) { + Ref<VisualScriptComment> vsc=node; + gnode->set_comment(true); + gnode->set_resizeable(true); + gnode->set_custom_minimum_size(vsc->get_size()*EDSCALE); + gnode->connect("resize_request",this,"_comment_node_resized",varray(E->get())); + + } + + + int slot_idx=0; + + bool single_seq_output = node->get_output_sequence_port_count()==1 && node->get_output_sequence_port_text(0)==String(); + gnode->set_slot(0,node->has_input_sequence_port(),TYPE_SEQUENCE,Color(1,1,1,1),single_seq_output,TYPE_SEQUENCE,Color(1,1,1,1),seq_port,seq_port); + gnode->set_offset(pos*EDSCALE); + slot_idx++; + + + int mixed_seq_ports=0; + + if (!single_seq_output) { + + if (node->has_mixed_input_and_sequence_ports()) { + mixed_seq_ports=node->get_output_sequence_port_count(); + } else { + for(int i=0;i<node->get_output_sequence_port_count();i++) { + + Label *text2 = memnew( Label ); + text2->set_text(node->get_output_sequence_port_text(i)); + text2->set_align(Label::ALIGN_RIGHT); + gnode->add_child(text2); + gnode->set_slot(slot_idx,false,0,Color(),true,TYPE_SEQUENCE,Color(1,1,1,1),seq_port,seq_port); + slot_idx++; + } + } + } + + for(int i=0;i<MAX(node->get_output_value_port_count(),MAX(mixed_seq_ports,node->get_input_value_port_count()));i++) { + + bool left_ok=false; + Variant::Type left_type=Variant::NIL; + String left_name; + + + + if (i<node->get_input_value_port_count()) { + PropertyInfo pi = node->get_input_value_port_info(i); + left_ok=true; + left_type=pi.type; + left_name=pi.name; + } + + bool right_ok=false; + Variant::Type right_type=Variant::NIL; + String right_name; + + if (i>=mixed_seq_ports && i<node->get_output_value_port_count()+mixed_seq_ports) { + PropertyInfo pi = node->get_output_value_port_info(i-mixed_seq_ports); + right_ok=true; + right_type=pi.type; + right_name=pi.name; + } + + HBoxContainer *hbc = memnew( HBoxContainer); + + if (left_ok) { + + Ref<Texture> t; + if (left_type>=0 && left_type<Variant::VARIANT_MAX) { + t=type_icons[left_type]; + } + if (t.is_valid()) { + TextureFrame *tf = memnew(TextureFrame); + tf->set_texture(t); + tf->set_stretch_mode(TextureFrame::STRETCH_KEEP_CENTERED); + hbc->add_child(tf); + } + + hbc->add_child(memnew(Label(left_name))); + + if (left_type!=Variant::NIL && !script->is_input_value_port_connected(edited_func,E->get(),i)) { + + PropertyInfo pi = node->get_input_value_port_info(i); + Button *button = memnew( Button ); + Variant value = node->get_default_input_value(i); + if (value.get_type()!=left_type) { + //different type? for now convert + //not the same, reconvert + Variant::CallError ce; + const Variant *existingp=&value; + value = Variant::construct(left_type,&existingp,1,ce,false); + } + + if (left_type==Variant::COLOR) { + button->set_custom_minimum_size(Size2(30,0)*EDSCALE); + button->connect("draw",this,"_draw_color_over_button",varray(button,value)); + } else if (left_type==Variant::OBJECT && Ref<Resource>(value).is_valid()) { + + Ref<Resource> res = value; + Array arr; + arr.push_back(button->get_instance_ID()); + arr.push_back(String(value)); + EditorResourcePreview::get_singleton()->queue_edited_resource_preview(res,this,"_button_resource_previewed",arr); + + } else if (pi.type==Variant::INT && pi.hint==PROPERTY_HINT_ENUM){ + + button->set_text(pi.hint_string.get_slice(",",value)); + } else { + + button->set_text(value); + } + button->connect("pressed",this,"_default_value_edited",varray(button,E->get(),i)); + hbc->add_child(button); + } + } else { + Control *c = memnew(Control); + c->set_custom_minimum_size(Size2(10,0)*EDSCALE); + hbc->add_child(c); + } + + hbc->add_spacer(); + + if (i<mixed_seq_ports) { + + Label *text2 = memnew( Label ); + text2->set_text(node->get_output_sequence_port_text(i)); + text2->set_align(Label::ALIGN_RIGHT); + hbc->add_child(text2); + } + + if (right_ok) { + + hbc->add_child(memnew(Label(right_name))); + + Ref<Texture> t; + if (right_type>=0 && right_type<Variant::VARIANT_MAX) { + t=type_icons[right_type]; + } + if (t.is_valid()) { + TextureFrame *tf = memnew(TextureFrame); + tf->set_texture(t); + tf->set_stretch_mode(TextureFrame::STRETCH_KEEP_CENTERED); + hbc->add_child(tf); + } + + } + + gnode->add_child(hbc); + + if (i<mixed_seq_ports) { + gnode->set_slot(slot_idx,left_ok,left_type,_color_from_type(left_type),true,TYPE_SEQUENCE,Color(1,1,1,1),Ref<Texture>(),seq_port); + } else { + gnode->set_slot(slot_idx,left_ok,left_type,_color_from_type(left_type),right_ok,right_type,_color_from_type(right_type)); + } + + slot_idx++; + } + + graph->add_child(gnode); + + if (gnode->is_comment()) { + graph->move_child(gnode,0); + } + } + + _update_graph_connections(); + graph->call_deferred("set_scroll_ofs",script->get_function_scroll(edited_func)*EDSCALE); //may need to adapt a bit, let it do so + updating_graph=false; + +} + +void VisualScriptEditor::_update_members() { + + + updating_members=true; + + members->clear(); + TreeItem *root = members->create_item(); + + TreeItem *functions = members->create_item(root); + functions->set_selectable(0,false); + functions->set_text(0,TTR("Functions:")); + functions->add_button(0,Control::get_icon("Override","EditorIcons"),1); + functions->add_button(0,Control::get_icon("Add","EditorIcons"),0); + functions->set_custom_bg_color(0,Control::get_color("prop_section","Editor")); + + List<StringName> func_names; + script->get_function_list(&func_names); + for (List<StringName>::Element *E=func_names.front();E;E=E->next()) { + TreeItem *ti = members->create_item(functions) ; + ti->set_text(0,E->get()); + ti->set_selectable(0,true); + ti->set_editable(0,true); + //ti->add_button(0,Control::get_icon("Edit","EditorIcons"),0); function arguments are in the node now + ti->add_button(0,Control::get_icon("Del","EditorIcons"),1); + ti->set_metadata(0,E->get()); + if (E->get()==edited_func) { + ti->set_custom_bg_color(0,get_color("prop_category","Editor")); + ti->set_custom_color(0,Color(1,1,1,1)); + } + if (selected==E->get()) + ti->select(0); + } + + TreeItem *variables = members->create_item(root); + variables->set_selectable(0,false); + variables->set_text(0,TTR("Variables:")); + variables->add_button(0,Control::get_icon("Add","EditorIcons")); + variables->set_custom_bg_color(0,Control::get_color("prop_section","Editor")); + + Ref<Texture> type_icons[Variant::VARIANT_MAX]={ + Control::get_icon("MiniVariant","EditorIcons"), + Control::get_icon("MiniBoolean","EditorIcons"), + Control::get_icon("MiniInteger","EditorIcons"), + Control::get_icon("MiniFloat","EditorIcons"), + Control::get_icon("MiniString","EditorIcons"), + Control::get_icon("MiniVector2","EditorIcons"), + Control::get_icon("MiniRect2","EditorIcons"), + Control::get_icon("MiniVector3","EditorIcons"), + Control::get_icon("MiniMatrix32","EditorIcons"), + Control::get_icon("MiniPlane","EditorIcons"), + Control::get_icon("MiniQuat","EditorIcons"), + Control::get_icon("MiniAabb","EditorIcons"), + Control::get_icon("MiniMatrix3","EditorIcons"), + Control::get_icon("MiniTransform","EditorIcons"), + Control::get_icon("MiniColor","EditorIcons"), + Control::get_icon("MiniImage","EditorIcons"), + Control::get_icon("MiniPath","EditorIcons"), + Control::get_icon("MiniRid","EditorIcons"), + Control::get_icon("MiniObject","EditorIcons"), + Control::get_icon("MiniInput","EditorIcons"), + Control::get_icon("MiniDictionary","EditorIcons"), + Control::get_icon("MiniArray","EditorIcons"), + Control::get_icon("MiniRawArray","EditorIcons"), + Control::get_icon("MiniIntArray","EditorIcons"), + Control::get_icon("MiniFloatArray","EditorIcons"), + Control::get_icon("MiniStringArray","EditorIcons"), + Control::get_icon("MiniVector2Array","EditorIcons"), + Control::get_icon("MiniVector3Array","EditorIcons"), + Control::get_icon("MiniColorArray","EditorIcons") + }; + + List<StringName> var_names; + script->get_variable_list(&var_names); + for (List<StringName>::Element *E=var_names.front();E;E=E->next()) { + TreeItem *ti = members->create_item(variables); + + ti->set_text(0,E->get()); + Variant var = script->get_variable_default_value(E->get()); + ti->set_suffix(0,"="+String(var)); + ti->set_icon(0,type_icons[script->get_variable_info(E->get()).type]); + + ti->set_selectable(0,true); + ti->set_editable(0,true); + ti->add_button(0,Control::get_icon("Edit","EditorIcons"),0); + ti->add_button(0,Control::get_icon("Del","EditorIcons"),1); + ti->set_metadata(0,E->get()); + if (selected==E->get()) + ti->select(0); + } + + TreeItem *_signals = members->create_item(root); + _signals->set_selectable(0,false); + _signals->set_text(0,TTR("Signals:")); + _signals->add_button(0,Control::get_icon("Add","EditorIcons")); + _signals->set_custom_bg_color(0,Control::get_color("prop_section","Editor")); + + List<StringName> signal_names; + script->get_custom_signal_list(&signal_names); + for (List<StringName>::Element *E=signal_names.front();E;E=E->next()) { + TreeItem *ti = members->create_item(_signals); + ti->set_text(0,E->get()); + ti->set_selectable(0,true); + ti->set_editable(0,true); + ti->add_button(0,Control::get_icon("Edit","EditorIcons"),0); + ti->add_button(0,Control::get_icon("Del","EditorIcons"),1); + ti->set_metadata(0,E->get()); + if (selected==E->get()) + ti->select(0); + } + + String base_type=script->get_instance_base_type(); + String icon_type=base_type; + if (!Control::has_icon(base_type,"EditorIcons")) { + icon_type="Object"; + } + + base_type_select->set_text(base_type); + base_type_select->set_icon(Control::get_icon(icon_type,"EditorIcons")); + + updating_members=false; + +} + +void VisualScriptEditor::_member_selected() { + + if (updating_members) + return; + + TreeItem *ti=members->get_selected(); + ERR_FAIL_COND(!ti); + + + selected=ti->get_metadata(0); +// print_line("selected: "+String(selected)); + + + if (ti->get_parent()==members->get_root()->get_children()) { + + if (edited_func!=selected) { + + revert_on_drag=edited_func; + edited_func=selected; + _update_members(); + _update_graph(); + } + + return; //or crash because it will become invalid + + } + + + +} + +void VisualScriptEditor::_member_edited() { + + if (updating_members) + return; + + TreeItem *ti=members->get_edited(); + ERR_FAIL_COND(!ti); + + String name = ti->get_metadata(0); + String new_name = ti->get_text(0); + + if (name==new_name) + return; + + if (!new_name.is_valid_identifier()) { + + EditorNode::get_singleton()->show_warning(TTR("Name is not a valid identifier:")+" "+new_name); + updating_members=true; + ti->set_text(0,name); + updating_members=false; + return; + + } + + if (script->has_function(new_name) || script->has_variable(new_name) || script->has_custom_signal(new_name)) { + + EditorNode::get_singleton()->show_warning(TTR("Name already in use by another func/var/signal:")+" "+new_name); + updating_members=true; + ti->set_text(0,name); + updating_members=false; + return; + } + + TreeItem *root=members->get_root(); + + if (ti->get_parent()==root->get_children()) { + + if (edited_func==selected) { + edited_func=new_name; + } + selected=new_name; + + + _update_graph(); + + undo_redo->create_action(TTR("Rename Function")); + undo_redo->add_do_method(script.ptr(),"rename_function",name,new_name); + undo_redo->add_undo_method(script.ptr(),"rename_function",new_name,name); + undo_redo->add_do_method(this,"_update_members"); + undo_redo->add_undo_method(this,"_update_members"); + undo_redo->commit_action(); + + return; //or crash because it will become invalid + + } + + if (ti->get_parent()==root->get_children()->get_next()) { + + selected=new_name; + undo_redo->create_action(TTR("Rename Variable")); + undo_redo->add_do_method(script.ptr(),"rename_variable",name,new_name); + undo_redo->add_undo_method(script.ptr(),"rename_variable",new_name,name); + undo_redo->add_do_method(this,"_update_members"); + undo_redo->add_undo_method(this,"_update_members"); + undo_redo->commit_action(); + + return; //or crash because it will become invalid + } + + if (ti->get_parent()==root->get_children()->get_next()->get_next()) { + + selected=new_name; + undo_redo->create_action(TTR("Rename Signal")); + undo_redo->add_do_method(script.ptr(),"rename_custom_signal",name,new_name); + undo_redo->add_undo_method(script.ptr(),"rename_custom_signal",new_name,name); + undo_redo->add_do_method(this,"_update_members"); + undo_redo->add_undo_method(this,"_update_members"); + undo_redo->commit_action(); + + return; //or crash because it will become invalid + } +} + +void VisualScriptEditor::_override_pressed(int p_id) { + + //override a virtual function or method from base type + + ERR_FAIL_COND(!virtuals_in_menu.has(p_id)); + + VirtualInMenu vim=virtuals_in_menu[p_id]; + + String name = _validate_name(vim.name); + selected=name; + edited_func=selected; + Ref<VisualScriptFunction> func_node; + func_node.instance(); + func_node->set_name(vim.name); + + undo_redo->create_action(TTR("Add Function")); + undo_redo->add_do_method(script.ptr(),"add_function",name); + for(int i=0;i<vim.args.size();i++) { + func_node->add_argument(vim.args[i].first,vim.args[i].second); + } + + + undo_redo->add_do_method(script.ptr(),"add_node",name,script->get_available_id(),func_node); + if (vim.ret!=Variant::NIL || vim.ret_variant) { + Ref<VisualScriptReturn> ret_node; + ret_node.instance(); + ret_node->set_return_type(vim.ret); + ret_node->set_enable_return_value(true); + ret_node->set_name(vim.name); + undo_redo->add_do_method(script.ptr(),"add_node",name,script->get_available_id()+1,ret_node,Vector2(500,0)); + + } + + undo_redo->add_undo_method(script.ptr(),"remove_function",name); + undo_redo->add_do_method(this,"_update_members"); + undo_redo->add_undo_method(this,"_update_members"); + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + + undo_redo->commit_action(); + + + _update_graph(); +} + +void VisualScriptEditor::_member_button(Object *p_item, int p_column, int p_button) { + + TreeItem *ti=p_item->cast_to<TreeItem>(); + + TreeItem *root=members->get_root(); + + if (ti->get_parent()==root) { + //main buttons + if (ti==root->get_children()) { + //add function, this one uses menu + + if (p_button==1) { + new_function_menu->clear(); + new_function_menu->set_size(Size2(0,0)); + int idx=0; + + virtuals_in_menu.clear(); + + List<MethodInfo> mi; + ObjectTypeDB::get_method_list(script->get_instance_base_type(),&mi); + for (List<MethodInfo>::Element *E=mi.front();E;E=E->next()) { + MethodInfo mi=E->get(); + if (mi.flags&METHOD_FLAG_VIRTUAL) { + + VirtualInMenu vim; + vim.name=mi.name; + vim.ret=mi.return_val.type; + if (mi.return_val.name!=String()) + vim.ret_variant=true; + else + vim.ret_variant=false; + + String desc; + + if (mi.return_val.type==Variant::NIL) + desc="var"; + else + desc=Variant::get_type_name(mi.return_val.type); + desc+=" "+mi.name+" ( "; + + + for(int i=0;i<mi.arguments.size();i++) { + + if (i>0) + desc+=", "; + + if (mi.arguments[i].type==Variant::NIL) + desc+="var "; + else + desc+=Variant::get_type_name(mi.arguments[i].type)+" "; + + desc+=mi.arguments[i].name; + + Pair<Variant::Type,String> p; + p.first=mi.arguments[i].type; + p.second=mi.arguments[i].name; + vim.args.push_back( p ); + + } + + desc+=" )"; + + virtuals_in_menu[idx]=vim; + + new_function_menu->add_item(desc,idx); + idx++; + } + } + + Rect2 pos = members->get_item_rect(ti); + new_function_menu->set_pos(members->get_global_pos()+pos.pos+Vector2(0,pos.size.y)); + new_function_menu->popup(); + return; + } else if (p_button==0) { + + + String name = _validate_name("new_function"); + selected=name; + edited_func=selected; + + Ref<VisualScriptFunction> func_node; + func_node.instance(); + func_node->set_name(name); + + undo_redo->create_action(TTR("Add Function")); + undo_redo->add_do_method(script.ptr(),"add_function",name); + undo_redo->add_do_method(script.ptr(),"add_node",name,script->get_available_id(),func_node); + undo_redo->add_undo_method(script.ptr(),"remove_function",name); + undo_redo->add_do_method(this,"_update_members"); + undo_redo->add_undo_method(this,"_update_members"); + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + + undo_redo->commit_action(); + + _update_graph(); + } + + return; //or crash because it will become invalid + + } + + if (ti==root->get_children()->get_next()) { + //add variable + String name = _validate_name("new_variable"); + selected=name; + + undo_redo->create_action(TTR("Add Variable")); + undo_redo->add_do_method(script.ptr(),"add_variable",name); + undo_redo->add_undo_method(script.ptr(),"remove_variable",name); + undo_redo->add_do_method(this,"_update_members"); + undo_redo->add_undo_method(this,"_update_members"); + undo_redo->commit_action(); + return; //or crash because it will become invalid + + } + + if (ti==root->get_children()->get_next()->get_next()) { + //add variable + String name = _validate_name("new_signal"); + selected=name; + + undo_redo->create_action(TTR("Add Signal")); + undo_redo->add_do_method(script.ptr(),"add_custom_signal",name); + undo_redo->add_undo_method(script.ptr(),"remove_custom_signal",name); + undo_redo->add_do_method(this,"_update_members"); + undo_redo->add_undo_method(this,"_update_members"); + undo_redo->commit_action(); + return; //or crash because it will become invalid + + } + + } else { + + if (ti->get_parent()==root->get_children()) { + //edit/remove function + String name = ti->get_metadata(0); + + if (p_button==1) { + //delete the function + undo_redo->create_action(TTR("Remove Function")); + undo_redo->add_do_method(script.ptr(),"remove_function",name); + undo_redo->add_undo_method(script.ptr(),"add_function",name); + List<int> nodes; + script->get_node_list(name,&nodes); + for (List<int>::Element *E=nodes.front();E;E=E->next()) { + undo_redo->add_undo_method(script.ptr(),"add_node",name,E->get(),script->get_node(name,E->get()),script->get_node_pos(name,E->get())); + } + + List<VisualScript::SequenceConnection> seq_connections; + + script->get_sequence_connection_list(name,&seq_connections); + + for (List<VisualScript::SequenceConnection>::Element *E=seq_connections.front();E;E=E->next()) { + undo_redo->add_undo_method(script.ptr(),"sequence_connect",name,E->get().from_node,E->get().from_output,E->get().to_node); + } + + List<VisualScript::DataConnection> data_connections; + + script->get_data_connection_list(name,&data_connections); + + for (List<VisualScript::DataConnection>::Element *E=data_connections.front();E;E=E->next()) { + undo_redo->add_undo_method(script.ptr(),"data_connect",name,E->get().from_node,E->get().from_port,E->get().to_node,E->get().to_port); + } + + //for(int i=0;i<script->function_get_argument_count(name);i++) { + //// undo_redo->add_undo_method(script.ptr(),"function_add_argument",name,script->function_get_argument_name(name,i),script->function_get_argument_type(name,i)); + //} + undo_redo->add_do_method(this,"_update_members"); + undo_redo->add_undo_method(this,"_update_members"); + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + undo_redo->commit_action(); + + } else if (p_button==0) { + + } + return; //or crash because it will become invalid + + } + + if (ti->get_parent()==root->get_children()->get_next()) { + //edit/remove variable + + String name = ti->get_metadata(0); + + if (p_button==1) { + + + undo_redo->create_action(TTR("Remove Variable")); + undo_redo->add_do_method(script.ptr(),"remove_variable",name); + undo_redo->add_undo_method(script.ptr(),"add_variable",name,script->get_variable_default_value(name)); + undo_redo->add_undo_method(script.ptr(),"set_variable_info",name,script->call("get_variable_info",name)); //return as dict + undo_redo->add_do_method(this,"_update_members"); + undo_redo->add_undo_method(this,"_update_members"); + undo_redo->commit_action(); + return; //or crash because it will become invalid + } else if (p_button==0) { + + variable_editor->edit(name); + edit_variable_dialog->set_title(TTR("Editing Variable:")+" "+name); + edit_variable_dialog->popup_centered_minsize(Size2(400,200)*EDSCALE); + } + + } + + if (ti->get_parent()==root->get_children()->get_next()->get_next()) { + //edit/remove variable + String name = ti->get_metadata(0); + + if (p_button==1) { + + undo_redo->create_action(TTR("Remove Signal")); + undo_redo->add_do_method(script.ptr(),"remove_custom_signal",name); + undo_redo->add_undo_method(script.ptr(),"add_custom_signal",name); + + for(int i=0;i<script->custom_signal_get_argument_count(name);i++) { + undo_redo->add_undo_method(script.ptr(),"custom_signal_add_argument",name,script->custom_signal_get_argument_name(name,i),script->custom_signal_get_argument_type(name,i)); + } + + undo_redo->add_do_method(this,"_update_members"); + undo_redo->add_undo_method(this,"_update_members"); + undo_redo->commit_action(); + } else if (p_button==0) { + + signal_editor->edit(name); + edit_signal_dialog->set_title(TTR("Editing Signal:")+" "+name); + edit_signal_dialog->popup_centered_minsize(Size2(400,300)*EDSCALE); + } + + return; //or crash because it will become invalid + + } + + + } +} + +void VisualScriptEditor::_expression_text_changed(const String& p_text,int p_id) { + + Ref<VisualScriptExpression> vse = script->get_node(edited_func,p_id); + if (!vse.is_valid()) + return; + + + updating_graph=true; + + undo_redo->create_action(TTR("Change Expression"),UndoRedo::MERGE_ENDS); + undo_redo->add_do_property(vse.ptr(),"expression",p_text); + undo_redo->add_undo_property(vse.ptr(),"expression",vse->get("expression")); + undo_redo->add_do_method(this,"_update_graph",p_id); + undo_redo->add_undo_method(this,"_update_graph",p_id); + undo_redo->commit_action(); + + Node *node = graph->get_node(itos(p_id)); + if (node->cast_to<Control>()) + node->cast_to<Control>()->set_size(Vector2(1,1)); //shrink if text is smaller + + updating_graph=false; + +} + +void VisualScriptEditor::_available_node_doubleclicked() { + + TreeItem *item = nodes->get_selected(); + + if (!item) + return; + + String which = item->get_metadata(0); + if (which==String()) + return; + + Vector2 ofs = graph->get_scroll_ofs() + graph->get_size() * 0.5; + + if (graph->is_using_snap()) { + int snap = graph->get_snap(); + ofs = ofs.snapped(Vector2(snap,snap)); + } + + ofs/=EDSCALE; + + while(true) { + bool exists=false; + List<int> existing; + script->get_node_list(edited_func,&existing); + for (List<int>::Element *E=existing.front();E;E=E->next()) { + Point2 pos = script->get_node_pos(edited_func,E->get()); + if (pos.distance_to(ofs)<15) { + ofs+=Vector2(graph->get_snap(),graph->get_snap()); + exists=true; + break; + } + } + + if (exists) + continue; + break; + + } + + + Ref<VisualScriptNode> vnode = VisualScriptLanguage::singleton->create_node_from_name(which); + int new_id = script->get_available_id(); + + undo_redo->create_action(TTR("Add Node")); + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,vnode,ofs); + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id); + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + undo_redo->commit_action(); + + Node* node = graph->get_node(itos(new_id)); + if (node) { + graph->set_selected(node); + _node_selected(node); + } + +} + +void VisualScriptEditor::_update_available_nodes() { + + nodes->clear(); + + TreeItem *root = nodes->create_item(); + + Map<String,TreeItem*> path_cache; + + String filter = node_filter->get_text(); + + List<String> fnodes; + VisualScriptLanguage::singleton->get_registered_node_names(&fnodes); + + for (List<String>::Element *E=fnodes.front();E;E=E->next()) { + + + Vector<String> path = E->get().split("/"); + + if (filter!=String() && path.size() && path[path.size()-1].findn(filter)==-1) + continue; + + String sp; + TreeItem* parent=root; + + for(int i=0;i<path.size()-1;i++) { + + if (i>0) + sp+=","; + sp+=path[i]; + if (!path_cache.has(sp)) { + TreeItem* pathn = nodes->create_item(parent); + pathn->set_selectable(0,false); + pathn->set_text(0,path[i].capitalize()); + path_cache[sp]=pathn; + parent=pathn; + if (filter==String()) { + pathn->set_collapsed(true); //should remember state + } + } else { + parent=path_cache[sp]; + } + } + + TreeItem *item = nodes->create_item(parent); + item->set_text(0,path[path.size()-1].capitalize()); + item->set_selectable(0,true); + item->set_metadata(0,E->get()); + } + +} + +String VisualScriptEditor::_validate_name(const String& p_name) const { + + String valid=p_name; + + int counter=1; + while(true) { + + bool exists = script->has_function(valid) || script->has_variable(valid) || script->has_custom_signal(valid); + + if (exists) { + counter++; + valid=p_name+"_"+itos(counter); + continue; + } + + break; + } + + return valid; +} + +void VisualScriptEditor::_on_nodes_delete() { + + + List<int> to_erase; + + for(int i=0;i<graph->get_child_count();i++) { + GraphNode *gn = graph->get_child(i)->cast_to<GraphNode>(); + if (gn) { + if (gn->is_selected() && gn->is_close_button_visible()) { + to_erase.push_back(gn->get_name().operator String().to_int()); + } + } + } + + if (to_erase.empty()) + return; + + undo_redo->create_action("Remove VisualScript Nodes"); + + for(List<int>::Element*F=to_erase.front();F;F=F->next()) { + + + undo_redo->add_do_method(script.ptr(),"remove_node",edited_func,F->get()); + undo_redo->add_undo_method(script.ptr(),"add_node",edited_func,F->get(),script->get_node(edited_func,F->get()),script->get_node_pos(edited_func,F->get())); + + + List<VisualScript::SequenceConnection> sequence_conns; + script->get_sequence_connection_list(edited_func,&sequence_conns); + + + for (List<VisualScript::SequenceConnection>::Element *E=sequence_conns.front();E;E=E->next()) { + + if (E->get().from_node==F->get() || E->get().to_node==F->get()) { + undo_redo->add_undo_method(script.ptr(),"sequence_connect",edited_func,E->get().from_node,E->get().from_output,E->get().to_node); + } + } + + List<VisualScript::DataConnection> data_conns; + script->get_data_connection_list(edited_func,&data_conns); + + for (List<VisualScript::DataConnection>::Element *E=data_conns.front();E;E=E->next()) { + + if (E->get().from_node==F->get() || E->get().to_node==F->get()) { + undo_redo->add_undo_method(script.ptr(),"data_connect",edited_func,E->get().from_node,E->get().from_port,E->get().to_node,E->get().to_port); + } + } + + } + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + + undo_redo->commit_action(); +} + + +void VisualScriptEditor::_on_nodes_duplicate() { + + + List<int> to_duplicate; + + for(int i=0;i<graph->get_child_count();i++) { + GraphNode *gn = graph->get_child(i)->cast_to<GraphNode>(); + if (gn) { + if (gn->is_selected() && gn->is_close_button_visible()) { + to_duplicate.push_back(gn->get_name().operator String().to_int()); + } + } + } + + if (to_duplicate.empty()) + return; + + undo_redo->create_action("Duplicate VisualScript Nodes"); + int idc=script->get_available_id()+1; + + Set<int> to_select; + + for(List<int>::Element*F=to_duplicate.front();F;F=F->next()) { + + Ref<VisualScriptNode> node = script->get_node(edited_func,F->get()); + + Ref<VisualScriptNode> dupe = node->duplicate(); + + int new_id = idc++; + to_select.insert(new_id); + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,dupe,script->get_node_pos(edited_func,F->get())+Vector2(20,20)); + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id); + + } + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + + undo_redo->commit_action(); + + for(int i=0;i<graph->get_child_count();i++) { + GraphNode *gn = graph->get_child(i)->cast_to<GraphNode>(); + if (gn) { + int id = gn->get_name().operator String().to_int(); + gn->set_selected(to_select.has(id)); + + } + } + + if (to_select.size()) { + EditorNode::get_singleton()->push_item(script->get_node(edited_func,to_select.front()->get()).ptr()); + } + +} + +void VisualScriptEditor::_input(const InputEvent& p_event) { + + if (p_event.type==InputEvent::MOUSE_BUTTON && !p_event.mouse_button.pressed && p_event.mouse_button.button_index==BUTTON_LEFT) { + revert_on_drag=String(); //so we can still drag functions + } +} + +Variant VisualScriptEditor::get_drag_data_fw(const Point2& p_point,Control* p_from) { + + + if (p_from==nodes) { + + TreeItem *it = nodes->get_item_at_pos(p_point); + if (!it) + return Variant(); + String type=it->get_metadata(0); + if (type==String()) + return Variant(); + + Dictionary dd; + dd["type"]="visual_script_node_drag"; + dd["node_type"]=type; + + Label *label = memnew(Label); + label->set_text(it->get_text(0)); + set_drag_preview(label); + return dd; + } + + if (p_from==members) { + + + TreeItem *it = members->get_item_at_pos(p_point); + if (!it) + return Variant(); + + String type=it->get_metadata(0); + + if (type==String()) + return Variant(); + + + Dictionary dd; + TreeItem *root=members->get_root(); + + if (it->get_parent()==root->get_children()) { + + dd["type"]="visual_script_function_drag"; + dd["function"]=type; + if (revert_on_drag!=String()) { + edited_func=revert_on_drag; //revert so function does not change + revert_on_drag=String(); + _update_graph(); + } + } else if (it->get_parent()==root->get_children()->get_next()) { + + dd["type"]="visual_script_variable_drag"; + dd["variable"]=type; + } else if (it->get_parent()==root->get_children()->get_next()->get_next()) { + + dd["type"]="visual_script_signal_drag"; + dd["signal"]=type; + + } else { + return Variant(); + } + + + + + + + Label *label = memnew(Label); + label->set_text(it->get_text(0)); + set_drag_preview(label); + return dd; + } + return Variant(); +} + +bool VisualScriptEditor::can_drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from) const{ + + if (p_from==graph) { + + + Dictionary d = p_data; + if (d.has("type") && + ( + String(d["type"])=="visual_script_node_drag" || + String(d["type"])=="visual_script_function_drag" || + String(d["type"])=="visual_script_variable_drag" || + String(d["type"])=="visual_script_signal_drag" || + String(d["type"])=="obj_property" || + String(d["type"])=="resource" || + String(d["type"])=="files" || + String(d["type"])=="nodes" + ) ) { + + + if (String(d["type"])=="obj_property") { + +#ifdef OSX_ENABLED + const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Meta to drop a Getter. Hold Shift to drop a generic signature.")); +#else + const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature.")); +#endif + } + + if (String(d["type"])=="nodes") { + +#ifdef OSX_ENABLED + const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Meta to drop a simple reference to the node.")); +#else + const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Ctrl to drop a simple reference to the node.")); +#endif + } + + if (String(d["type"])=="visual_script_variable_drag") { + +#ifdef OSX_ENABLED + const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Meta to drop a Variable Setter.")); +#else + const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Ctrl to drop a Variable Setter.")); +#endif + } + + return true; + + } + + + + } + + + return false; +} + +#ifdef TOOLS_ENABLED + +static Node* _find_script_node(Node* p_edited_scene,Node* p_current_node,const Ref<Script> &script) { + + if (p_edited_scene!=p_current_node && p_current_node->get_owner()!=p_edited_scene) + return NULL; + + Ref<Script> scr = p_current_node->get_script(); + + if (scr.is_valid() && scr==script) + return p_current_node; + + for(int i=0;i<p_current_node->get_child_count();i++) { + Node *n = _find_script_node(p_edited_scene,p_current_node->get_child(i),script); + if (n) + return n; + } + + return NULL; +} + +#endif + + + +void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from){ + + if (p_from==graph) { + + Dictionary d = p_data; + if (d.has("type") && String(d["type"])=="visual_script_node_drag") { + + Vector2 ofs = graph->get_scroll_ofs() + p_point; + + if (graph->is_using_snap()) { + int snap = graph->get_snap(); + ofs = ofs.snapped(Vector2(snap,snap)); + } + + + ofs/=EDSCALE; + + Ref<VisualScriptNode> vnode = VisualScriptLanguage::singleton->create_node_from_name(d["node_type"]); + int new_id = script->get_available_id(); + + undo_redo->create_action(TTR("Add Node")); + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,vnode,ofs); + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id); + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + undo_redo->commit_action(); + + Node* node = graph->get_node(itos(new_id)); + if (node) { + graph->set_selected(node); + _node_selected(node); + } + } + + if (d.has("type") && String(d["type"])=="visual_script_variable_drag") { + +#ifdef OSX_ENABLED + bool use_set = Input::get_singleton()->is_key_pressed(KEY_META); +#else + bool use_set = Input::get_singleton()->is_key_pressed(KEY_CONTROL); +#endif + Vector2 ofs = graph->get_scroll_ofs() + p_point; + if (graph->is_using_snap()) { + int snap = graph->get_snap(); + ofs = ofs.snapped(Vector2(snap,snap)); + } + + ofs/=EDSCALE; + + Ref<VisualScriptNode> vnode; + if (use_set) { + Ref<VisualScriptVariableSet> vnodes; + vnodes.instance(); + vnodes->set_variable(d["variable"]); + vnode=vnodes; + } else { + + Ref<VisualScriptVariableGet> vnodeg; + vnodeg.instance(); + vnodeg->set_variable(d["variable"]); + vnode=vnodeg; + } + + int new_id = script->get_available_id(); + + undo_redo->create_action(TTR("Add Node")); + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,vnode,ofs); + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id); + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + undo_redo->commit_action(); + + Node* node = graph->get_node(itos(new_id)); + if (node) { + graph->set_selected(node); + _node_selected(node); + } + } + + if (d.has("type") && String(d["type"])=="visual_script_function_drag") { + + Vector2 ofs = graph->get_scroll_ofs() + p_point; + if (graph->is_using_snap()) { + int snap = graph->get_snap(); + ofs = ofs.snapped(Vector2(snap,snap)); + } + + ofs/=EDSCALE; + + Ref<VisualScriptFunctionCall> vnode; + vnode.instance(); + vnode->set_call_mode(VisualScriptFunctionCall::CALL_MODE_SELF); + + int new_id = script->get_available_id(); + + undo_redo->create_action(TTR("Add Node")); + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,vnode,ofs); + undo_redo->add_do_method(vnode.ptr(),"set_base_type",script->get_instance_base_type()); + undo_redo->add_do_method(vnode.ptr(),"set_function",d["function"]); + + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id); + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + undo_redo->commit_action(); + + Node* node = graph->get_node(itos(new_id)); + if (node) { + graph->set_selected(node); + _node_selected(node); + } + + } + + + if (d.has("type") && String(d["type"])=="visual_script_signal_drag") { + + Vector2 ofs = graph->get_scroll_ofs() + p_point; + if (graph->is_using_snap()) { + int snap = graph->get_snap(); + ofs = ofs.snapped(Vector2(snap,snap)); + } + + ofs/=EDSCALE; + + Ref<VisualScriptEmitSignal> vnode; + vnode.instance(); + vnode->set_signal(d["signal"]); + + int new_id = script->get_available_id(); + + undo_redo->create_action(TTR("Add Node")); + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,vnode,ofs); + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id); + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + undo_redo->commit_action(); + + Node* node = graph->get_node(itos(new_id)); + if (node) { + graph->set_selected(node); + _node_selected(node); + } + } + + if (d.has("type") && String(d["type"])=="resource") { + + Vector2 ofs = graph->get_scroll_ofs() + p_point; + if (graph->is_using_snap()) { + int snap = graph->get_snap(); + ofs = ofs.snapped(Vector2(snap,snap)); + } + + ofs/=EDSCALE; + + Ref<VisualScriptPreload> prnode; + prnode.instance(); + prnode->set_preload(d["resource"]); + + int new_id = script->get_available_id(); + + undo_redo->create_action(TTR("Add Preload Node")); + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,prnode,ofs); + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id); + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + undo_redo->commit_action(); + + Node* node = graph->get_node(itos(new_id)); + if (node) { + graph->set_selected(node); + _node_selected(node); + } + } + + if (d.has("type") && String(d["type"])=="files") { + + Vector2 ofs = graph->get_scroll_ofs() + p_point; + if (graph->is_using_snap()) { + int snap = graph->get_snap(); + ofs = ofs.snapped(Vector2(snap,snap)); + } + + ofs/=EDSCALE; + + Array files = d["files"]; + + List<int> new_ids; + int new_id = script->get_available_id(); + + if (files.size()) { + undo_redo->create_action(TTR("Add Preload Node")); + + for(int i=0;i<files.size();i++) { + + Ref<Resource> res = ResourceLoader::load(files[i]); + if (!res.is_valid()) + continue; + + Ref<VisualScriptPreload> prnode; + prnode.instance(); + prnode->set_preload(res); + + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,prnode,ofs); + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id); + new_ids.push_back(new_id); + new_id++; + ofs+=Vector2(20,20)*EDSCALE; + } + + + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + undo_redo->commit_action(); + } + + for(List<int>::Element *E=new_ids.front();E;E=E->next()) { + + Node* node = graph->get_node(itos(E->get())); + if (node) { + graph->set_selected(node); + _node_selected(node); + } + } + } + + if (d.has("type") && String(d["type"])=="nodes") { + + Node* sn = _find_script_node(get_tree()->get_edited_scene_root(),get_tree()->get_edited_scene_root(),script); + + + if (!sn) { + EditorNode::get_singleton()->show_warning("Can't drop nodes because script '"+get_name()+"' is not used in this scene."); + return; + } + + +#ifdef OSX_ENABLED + bool use_node = Input::get_singleton()->is_key_pressed(KEY_META); +#else + bool use_node = Input::get_singleton()->is_key_pressed(KEY_CONTROL); +#endif + + + Array nodes = d["nodes"]; + + Vector2 ofs = graph->get_scroll_ofs() + p_point; + + if (graph->is_using_snap()) { + int snap = graph->get_snap(); + ofs = ofs.snapped(Vector2(snap,snap)); + } + ofs/=EDSCALE; + + undo_redo->create_action(TTR("Add Node(s) From Tree")); + int base_id = script->get_available_id(); + + if (nodes.size()>1) { + use_node=true; + } + + for(int i=0;i<nodes.size();i++) { + + NodePath np = nodes[i]; + Node *node = get_node(np); + if (!node) { + continue; + } + + Ref<VisualScriptNode> n; + + if (use_node) { + Ref<VisualScriptSceneNode> scene_node; + scene_node.instance(); + scene_node->set_node_path(sn->get_path_to(node)); + n=scene_node; + + + } else { + Ref<VisualScriptFunctionCall> call; + call.instance(); + call->set_call_mode(VisualScriptFunctionCall::CALL_MODE_NODE_PATH); + call->set_base_path(sn->get_path_to(node));; + call->set_base_type(node->get_type()); + n=call; + + method_select->select_method_from_instance(node); + selecting_method_id=base_id; + + } + + + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,base_id,n,ofs); + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,base_id); + + base_id++; + ofs+=Vector2(25,25); + } + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + undo_redo->commit_action(); + + + } + + if (d.has("type") && String(d["type"])=="obj_property") { + + Node* sn = _find_script_node(get_tree()->get_edited_scene_root(),get_tree()->get_edited_scene_root(),script); + + + if (!sn && !Input::get_singleton()->is_key_pressed(KEY_SHIFT)) { + EditorNode::get_singleton()->show_warning("Can't drop properties because script '"+get_name()+"' is not used in this scene.\nDrop holding 'Shift' to just copy the signature."); + return; + } + + Object *obj=d["object"]; + + if (!obj) + return; + + Node *node = obj->cast_to<Node>(); + Vector2 ofs = graph->get_scroll_ofs() + p_point; + + if (graph->is_using_snap()) { + int snap = graph->get_snap(); + ofs = ofs.snapped(Vector2(snap,snap)); + } + + ofs/=EDSCALE; +#ifdef OSX_ENABLED + bool use_get = Input::get_singleton()->is_key_pressed(KEY_META); +#else + bool use_get = Input::get_singleton()->is_key_pressed(KEY_CONTROL); +#endif + + if (!node || Input::get_singleton()->is_key_pressed(KEY_SHIFT)) { + + + if (use_get) + undo_redo->create_action(TTR("Add Getter Property")); + else + undo_redo->create_action(TTR("Add Setter Property")); + + int base_id = script->get_available_id(); + + Ref<VisualScriptNode> vnode; + + if (!use_get) { + + Ref<VisualScriptPropertySet> pset; + pset.instance(); + pset->set_call_mode(VisualScriptPropertySet::CALL_MODE_INSTANCE); + pset->set_base_type(obj->get_type()); + /*if (use_value) { + pset->set_use_builtin_value(true); + pset->set_builtin_value(d["value"]); + }*/ + vnode=pset; + } else { + + Ref<VisualScriptPropertyGet> pget; + pget.instance(); + pget->set_call_mode(VisualScriptPropertyGet::CALL_MODE_INSTANCE); + pget->set_base_type(obj->get_type()); + + vnode=pget; + + } + + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,base_id,vnode,ofs); + undo_redo->add_do_method(vnode.ptr(),"set_property",d["property"]); + if (!use_get) { + undo_redo->add_do_method(vnode.ptr(),"set_default_input_value",0,d["value"]); + } + + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,base_id); + + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + undo_redo->commit_action(); + + } else { + + + + if (use_get) + undo_redo->create_action(TTR("Add Getter Property")); + else + undo_redo->create_action(TTR("Add Setter Property")); + + int base_id = script->get_available_id(); + + Ref<VisualScriptNode> vnode; + + if (!use_get) { + + Ref<VisualScriptPropertySet> pset; + pset.instance(); + if (sn==node) { + pset->set_call_mode(VisualScriptPropertySet::CALL_MODE_SELF); + } else { + pset->set_call_mode(VisualScriptPropertySet::CALL_MODE_NODE_PATH); + pset->set_base_path(sn->get_path_to(node)); + } + + vnode=pset; + } else { + + Ref<VisualScriptPropertyGet> pget; + pget.instance(); + if (sn==node) { + pget->set_call_mode(VisualScriptPropertyGet::CALL_MODE_SELF); + } else { + pget->set_call_mode(VisualScriptPropertyGet::CALL_MODE_NODE_PATH); + pget->set_base_path(sn->get_path_to(node)); + } + vnode=pget; + + } + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,base_id,vnode,ofs); + undo_redo->add_do_method(vnode.ptr(),"set_property",d["property"]); + if (!use_get) { + undo_redo->add_do_method(vnode.ptr(),"set_default_input_value",0,d["value"]); + } + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,base_id); + + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + undo_redo->commit_action(); + } + + + } + + + } + + +} + + +void VisualScriptEditor::_selected_method(const String& p_method) { + + Ref<VisualScriptFunctionCall> vsfc = script->get_node(edited_func,selecting_method_id); + if (!vsfc.is_valid()) + return; + vsfc->set_function(p_method); + +} + +void VisualScriptEditor::_draw_color_over_button(Object* obj,Color p_color) { + + Button *button = obj->cast_to<Button>(); + if (!button) + return; + + Ref<StyleBox> normal = get_stylebox("normal","Button" ); + button->draw_rect(Rect2(normal->get_offset(),button->get_size()-normal->get_minimum_size()),p_color); + +} + +void VisualScriptEditor::_button_resource_previewed(const String& p_path,const Ref<Texture>& p_preview,Variant p_ud) { + + + Array ud=p_ud; + ERR_FAIL_COND(ud.size()!=2); + + ObjectID id = ud[0]; + Object *obj = ObjectDB::get_instance(id); + + if (!obj) + return; + + Button *b = obj->cast_to<Button>(); + ERR_FAIL_COND(!b); + + if (p_preview.is_null()) { + b->set_text(ud[1]); + } else { + + b->set_icon(p_preview); + } + +} + +///////////////////////// + + + +void VisualScriptEditor::apply_code() { + + +} + +Ref<Script> VisualScriptEditor::get_edited_script() const{ + + return script; +} + +Vector<String> VisualScriptEditor::get_functions(){ + + return Vector<String>(); +} + +void VisualScriptEditor::set_edited_script(const Ref<Script>& p_script){ + + script=p_script; + signal_editor->script=p_script; + signal_editor->undo_redo=undo_redo; + variable_editor->script=p_script; + variable_editor->undo_redo=undo_redo; + + + script->connect("node_ports_changed",this,"_node_ports_changed"); + + _update_members(); + _update_available_nodes(); +} + +void VisualScriptEditor::reload_text(){ + + +} + +String VisualScriptEditor::get_name(){ + + String name; + + if (script->get_path().find("local://")==-1 && script->get_path().find("::")==-1) { + name=script->get_path().get_file(); + if (is_unsaved()) { + name+="(*)"; + } + } else if (script->get_name()!="") + name=script->get_name(); + else + name=script->get_type()+"("+itos(script->get_instance_ID())+")"; + + return name; + +} + +Ref<Texture> VisualScriptEditor::get_icon(){ + + return Control::get_icon("VisualScript","EditorIcons"); +} + +bool VisualScriptEditor::is_unsaved(){ +#ifdef TOOLS_ENABLED + + return script->is_edited() || script->are_subnodes_edited(); +#else + return false; +#endif +} + +Variant VisualScriptEditor::get_edit_state(){ + + Dictionary d; + d["function"]=edited_func; + d["scroll"]=graph->get_scroll_ofs(); + d["zoom"]=graph->get_zoom(); + d["using_snap"]=graph->is_using_snap(); + d["snap"]=graph->get_snap(); + return d; +} + +void VisualScriptEditor::set_edit_state(const Variant& p_state){ + + Dictionary d = p_state; + if (d.has("function")) { + edited_func=p_state; + selected=edited_func; + + } + + _update_graph(); + _update_members(); + + if (d.has("scroll")) { + graph->set_scroll_ofs(d["scroll"]); + } + if (d.has("zoom")) { + graph->set_zoom(d["zoom"]); + } + if (d.has("snap")) { + graph->set_snap(d["snap"]); + } + if (d.has("snap_enabled")) { + graph->set_use_snap(d["snap_enabled"]); + } + +} + + +void VisualScriptEditor::_center_on_node(int p_id) { + + Node *n = graph->get_node(itos(p_id)); + if (!n) + return; + GraphNode *gn = n->cast_to<GraphNode>(); + if (gn) { + gn->set_selected(true); + Vector2 new_scroll = gn->get_offset() - graph->get_size()*0.5 + gn->get_size()*0.5; + graph->set_scroll_ofs( new_scroll ); + script->set_function_scroll(edited_func,new_scroll/EDSCALE); + script->set_edited(true); //so it's saved + + } +} + +void VisualScriptEditor::goto_line(int p_line, bool p_with_error){ + + p_line+=1; //add one because script lines begin from 0. + + if (p_with_error) + error_line=p_line; + + List<StringName> functions; + script->get_function_list(&functions); + for (List<StringName>::Element *E=functions.front();E;E=E->next()) { + + if (script->has_node(E->get(),p_line)) { + + edited_func=E->get(); + selected=edited_func; + _update_graph(); + _update_members(); + + call_deferred("_center_on_node",p_line); //editor might be just created and size might not exist yet + + return; + } + } +} + +void VisualScriptEditor::trim_trailing_whitespace(){ + + +} + +void VisualScriptEditor::ensure_focus(){ + + graph->grab_focus(); +} + +void VisualScriptEditor::tag_saved_version(){ + + +} + +void VisualScriptEditor::reload(bool p_soft){ + + +} + +void VisualScriptEditor::get_breakpoints(List<int> *p_breakpoints){ + + List<StringName> functions; + script->get_function_list(&functions); + for (List<StringName>::Element *E=functions.front();E;E=E->next()) { + + List<int> nodes; + script->get_node_list(E->get(),&nodes); + for (List<int>::Element *F=nodes.front();F;F=F->next()) { + + Ref<VisualScriptNode> vsn = script->get_node(E->get(),F->get()); + if (vsn->is_breakpoint()) { + p_breakpoints->push_back(F->get()-1); //subtract 1 because breakpoints in text start from zero + } + } + } +} + +bool VisualScriptEditor::goto_method(const String& p_method){ + + if (!script->has_function(p_method)) + return false; + + edited_func=p_method; + selected=edited_func; + _update_members(); + _update_graph(); + return true; +} + +void VisualScriptEditor::add_callback(const String& p_function,StringArray p_args){ + + if (script->has_function(p_function)) { + edited_func=p_function; + selected=edited_func; + _update_members(); + _update_graph(); + return; + } + + Ref<VisualScriptFunction> func; + func.instance(); + for(int i=0;i<p_args.size();i++) { + + String name = p_args[i]; + Variant::Type type=Variant::NIL; + + if (name.find(":")!=-1) { + String tt = name.get_slice(":",1); + name=name.get_slice(":",0); + for(int j=0;j<Variant::VARIANT_MAX;j++) { + + String tname = Variant::get_type_name(Variant::Type(j)); + if (tname==tt) { + type=Variant::Type(j); + break; + } + } + } + + func->add_argument(type,name); + } + + func->set_name(p_function); + script->add_function(p_function); + script->add_node(p_function,script->get_available_id(),func); + + edited_func=p_function; + selected=edited_func; + _update_members(); + _update_graph(); + graph->call_deferred("set_scroll_ofs",script->get_function_scroll(edited_func)); //for first time it might need to be later + + //undo_redo->clear_history(); + +} + +void VisualScriptEditor::update_settings(){ + + _update_graph(); +} + +void VisualScriptEditor::set_debugger_active(bool p_active) { + if (!p_active) { + error_line=-1; + _update_graph(); //clear line break + } +} + +void VisualScriptEditor::set_tooltip_request_func(String p_method,Object* p_obj){ + + +} + +Control *VisualScriptEditor::get_edit_menu(){ + + return edit_menu; +} + +void VisualScriptEditor::_change_base_type() { + + select_base_type->popup(true); +} + +void VisualScriptEditor::_change_base_type_callback() { + + String bt = select_base_type->get_selected_type(); + + ERR_FAIL_COND(bt==String()); + undo_redo->create_action("Change Base Type"); + undo_redo->add_do_method(script.ptr(),"set_instance_base_type",bt); + undo_redo->add_undo_method(script.ptr(),"set_instance_base_type",script->get_instance_base_type()); + undo_redo->add_do_method(this,"_update_members"); + undo_redo->add_undo_method(this,"_update_members"); + undo_redo->commit_action(); + +} + +void VisualScriptEditor::_node_selected(Node* p_node) { + + Ref<VisualScriptNode> vnode = p_node->get_meta("__vnode"); + if (vnode.is_null()) + return; + + EditorNode::get_singleton()->push_item(vnode.ptr()); //edit node in inspector +} + +static bool _get_out_slot(const Ref<VisualScriptNode>& p_node,int p_slot,int& r_real_slot,bool& r_sequence) { + + if (p_slot<p_node->get_output_sequence_port_count()) { + r_sequence=true; + r_real_slot=p_slot; + + return true; + } + + r_real_slot=p_slot-p_node->get_output_sequence_port_count(); + r_sequence=false; + + return (r_real_slot<p_node->get_output_value_port_count()); + +} + +static bool _get_in_slot(const Ref<VisualScriptNode>& p_node,int p_slot,int& r_real_slot,bool& r_sequence) { + + if (p_slot==0 && p_node->has_input_sequence_port()) { + r_sequence=true; + r_real_slot=0; + return true; + } + + + r_real_slot=p_slot-(p_node->has_input_sequence_port()?1:0); + r_sequence=false; + + return r_real_slot<p_node->get_input_value_port_count(); + +} + + +void VisualScriptEditor::_begin_node_move() { + + undo_redo->create_action("Move Node(s)"); +} + +void VisualScriptEditor::_end_node_move() { + + undo_redo->commit_action(); +} + +void VisualScriptEditor::_move_node(String func,int p_id,const Vector2& p_to) { + + + + if (func==String(edited_func)) { + Node* node = graph->get_node(itos(p_id)); + if (node && node->cast_to<GraphNode>()) + node->cast_to<GraphNode>()->set_offset(p_to); + } + script->set_node_pos(edited_func,p_id,p_to/EDSCALE); +} + +void VisualScriptEditor::_node_moved(Vector2 p_from,Vector2 p_to, int p_id) { + + undo_redo->add_do_method(this,"_move_node",String(edited_func),p_id,p_to); + undo_redo->add_undo_method(this,"_move_node",String(edited_func),p_id,p_from); +} + +void VisualScriptEditor::_remove_node(int p_id) { + + + undo_redo->create_action("Remove VisualScript Node"); + + undo_redo->add_do_method(script.ptr(),"remove_node",edited_func,p_id); + undo_redo->add_undo_method(script.ptr(),"add_node",edited_func,p_id,script->get_node(edited_func,p_id),script->get_node_pos(edited_func,p_id)); + + + List<VisualScript::SequenceConnection> sequence_conns; + script->get_sequence_connection_list(edited_func,&sequence_conns); + + + for (List<VisualScript::SequenceConnection>::Element *E=sequence_conns.front();E;E=E->next()) { + + if (E->get().from_node==p_id || E->get().to_node==p_id) { + undo_redo->add_undo_method(script.ptr(),"sequence_connect",edited_func,E->get().from_node,E->get().from_output,E->get().to_node); + } + } + + List<VisualScript::DataConnection> data_conns; + script->get_data_connection_list(edited_func,&data_conns); + + for (List<VisualScript::DataConnection>::Element *E=data_conns.front();E;E=E->next()) { + + if (E->get().from_node==p_id || E->get().to_node==p_id) { + undo_redo->add_undo_method(script.ptr(),"data_connect",edited_func,E->get().from_node,E->get().from_port,E->get().to_node,E->get().to_port); + } + } + + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + + undo_redo->commit_action(); +} + + +void VisualScriptEditor::_node_ports_changed(const String& p_func,int p_id) { + + if (p_func!=String(edited_func)) + return; + + _update_graph(p_id); +} + +void VisualScriptEditor::_graph_connected(const String& p_from,int p_from_slot,const String& p_to,int p_to_slot) { + + Ref<VisualScriptNode> from_node = script->get_node(edited_func,p_from.to_int()); + ERR_FAIL_COND(!from_node.is_valid()); + + bool from_seq; + int from_port; + + if (!_get_out_slot(from_node,p_from_slot,from_port,from_seq)) + return; //can't connect this, it' s invalid + + Ref<VisualScriptNode> to_node = script->get_node(edited_func,p_to.to_int()); + ERR_FAIL_COND(!to_node.is_valid()); + + bool to_seq; + int to_port; + + if (!_get_in_slot(to_node,p_to_slot,to_port,to_seq)) + return; //can't connect this, it' s invalid + + + ERR_FAIL_COND(from_seq!=to_seq); + + + undo_redo->create_action("Connect Nodes"); + + if (from_seq) { + undo_redo->add_do_method(script.ptr(),"sequence_connect",edited_func,p_from.to_int(),from_port,p_to.to_int()); + undo_redo->add_undo_method(script.ptr(),"sequence_disconnect",edited_func,p_from.to_int(),from_port,p_to.to_int()); + } else { + undo_redo->add_do_method(script.ptr(),"data_connect",edited_func,p_from.to_int(),from_port,p_to.to_int(),to_port); + undo_redo->add_undo_method(script.ptr(),"data_disconnect",edited_func,p_from.to_int(),from_port,p_to.to_int(),to_port); + //update nodes in sgraph + undo_redo->add_do_method(this,"_update_graph",p_from.to_int()); + undo_redo->add_do_method(this,"_update_graph",p_to.to_int()); + undo_redo->add_undo_method(this,"_update_graph",p_from.to_int()); + undo_redo->add_undo_method(this,"_update_graph",p_to.to_int()); + } + + undo_redo->add_do_method(this,"_update_graph_connections"); + undo_redo->add_undo_method(this,"_update_graph_connections"); + + undo_redo->commit_action(); + +} + +void VisualScriptEditor::_graph_disconnected(const String& p_from,int p_from_slot,const String& p_to,int p_to_slot){ + + Ref<VisualScriptNode> from_node = script->get_node(edited_func,p_from.to_int()); + ERR_FAIL_COND(!from_node.is_valid()); + + bool from_seq; + int from_port; + + if (!_get_out_slot(from_node,p_from_slot,from_port,from_seq)) + return; //can't connect this, it' s invalid + + Ref<VisualScriptNode> to_node = script->get_node(edited_func,p_to.to_int()); + ERR_FAIL_COND(!to_node.is_valid()); + + bool to_seq; + int to_port; + + if (!_get_in_slot(to_node,p_to_slot,to_port,to_seq)) + return; //can't connect this, it' s invalid + + + ERR_FAIL_COND(from_seq!=to_seq); + + + undo_redo->create_action("Connect Nodes"); + + if (from_seq) { + undo_redo->add_do_method(script.ptr(),"sequence_disconnect",edited_func,p_from.to_int(),from_port,p_to.to_int()); + undo_redo->add_undo_method(script.ptr(),"sequence_connect",edited_func,p_from.to_int(),from_port,p_to.to_int()); + } else { + undo_redo->add_do_method(script.ptr(),"data_disconnect",edited_func,p_from.to_int(),from_port,p_to.to_int(),to_port); + undo_redo->add_undo_method(script.ptr(),"data_connect",edited_func,p_from.to_int(),from_port,p_to.to_int(),to_port); + //update nodes in sgraph + undo_redo->add_do_method(this,"_update_graph",p_from.to_int()); + undo_redo->add_do_method(this,"_update_graph",p_to.to_int()); + undo_redo->add_undo_method(this,"_update_graph",p_from.to_int()); + undo_redo->add_undo_method(this,"_update_graph",p_to.to_int()); + } + undo_redo->add_do_method(this,"_update_graph_connections"); + undo_redo->add_undo_method(this,"_update_graph_connections"); + + undo_redo->commit_action(); +} + + + +void VisualScriptEditor::_graph_connect_to_empty(const String& p_from,int p_from_slot,const Vector2& p_release_pos) { + + Node* node = graph->get_node(p_from); + if (!node) + return; + + GraphNode *gn = node->cast_to<GraphNode>(); + if (!gn) + return; + + Ref<VisualScriptNode> vsn = script->get_node(edited_func,p_from.to_int()); + if (!vsn.is_valid()) + return; + + if (p_from_slot<vsn->get_output_sequence_port_count()) { + + port_action_popup->clear(); + port_action_popup->add_item(TTR("Condition"),CREATE_COND); + port_action_popup->add_item(TTR("Sequence"),CREATE_SEQUENCE); + port_action_popup->add_item(TTR("Switch"),CREATE_SWITCH); + port_action_popup->add_item(TTR("Iterator"),CREATE_ITERATOR); + port_action_popup->add_item(TTR("While"),CREATE_WHILE); + port_action_popup->add_item(TTR("Return"),CREATE_RETURN); + + port_action_node=p_from.to_int(); + port_action_output=p_from_slot; + + } else { + port_action_popup->clear(); + port_action_popup->add_item(TTR("Call"),CREATE_CALL); + port_action_popup->add_item(TTR("Get"),CREATE_GET); + port_action_popup->add_item(TTR("Set"),CREATE_SET); + + + port_action_output=p_from_slot-vsn->get_output_sequence_port_count(); + port_action_node=p_from.to_int(); + + + } + + port_action_pos=p_release_pos; + port_action_popup->set_size(Size2(1,1)); + port_action_popup->set_pos(graph->get_global_pos()+p_release_pos); + port_action_popup->popup(); +} + +VisualScriptNode::TypeGuess VisualScriptEditor::_guess_output_type(int p_node,int p_output,Set<int> &visited_nodes) { + + + VisualScriptNode::TypeGuess tg; + tg.type=Variant::NIL; + + if (visited_nodes.has(p_node)) + return tg; //no loop + + visited_nodes.insert(p_node); + + Ref<VisualScriptNode> node = script->get_node(edited_func,p_node); + + if (!node.is_valid()) { + + return tg; + } + + Vector<VisualScriptNode::TypeGuess> in_guesses; + + for(int i=0;i<node->get_input_value_port_count();i++) { + PropertyInfo pi = node->get_input_value_port_info(i); + VisualScriptNode::TypeGuess g; + g.type=pi.type; + + if (g.type==Variant::NIL || g.type==Variant::OBJECT) { + //any or object input, must further guess what this is + int from_node; + int from_port; + + if (script->get_input_value_port_connection_source(edited_func,p_node,i,&from_node,&from_port)) { + + g = _guess_output_type(from_node,from_port,visited_nodes); + } else { + Variant defval = node->get_default_input_value(i); + if (defval.get_type()==Variant::OBJECT) { + + Object *obj = defval; + + if (obj) { + + g.type=Variant::OBJECT; + g.obj_type=obj->get_type(); + g.script=obj->get_script(); + } + } + } + + } + + in_guesses.push_back(g); + } + + return node->guess_output_type(in_guesses.ptr(),p_output); +} + +void VisualScriptEditor::_port_action_menu(int p_option) { + + Vector2 ofs = graph->get_scroll_ofs() + port_action_pos; + if (graph->is_using_snap()) { + int snap = graph->get_snap(); + ofs = ofs.snapped(Vector2(snap,snap)); + } + ofs/=EDSCALE; + + bool seq_connect=false; + + Ref<VisualScriptNode> vnode; + Set<int> vn; + + switch(p_option) { + + case CREATE_CALL: { + + Ref<VisualScriptFunctionCall> n; + n.instance(); + vnode=n; + + VisualScriptNode::TypeGuess tg = _guess_output_type(port_action_node,port_action_output,vn); + + if (tg.type==Variant::OBJECT) { + n->set_call_mode(VisualScriptFunctionCall::CALL_MODE_INSTANCE); + + if (tg.obj_type!=StringName()) { + n->set_base_type(tg.obj_type); + } else { + n->set_base_type("Object"); + } + + if (tg.script.is_valid()) { + n->set_base_script(tg.script->get_path()); + new_connect_node_select->select_method_from_script(tg.script); + } else { + new_connect_node_select->select_method_from_base_type(n->get_base_type()); + } + + + } else { + n->set_call_mode(VisualScriptFunctionCall::CALL_MODE_BASIC_TYPE); + n->set_basic_type(tg.type); + new_connect_node_select->select_method_from_basic_type(tg.type); + } + + + + } break; + case CREATE_SET: { + + Ref<VisualScriptPropertySet> n; + n.instance(); + vnode=n; + + + VisualScriptNode::TypeGuess tg = _guess_output_type(port_action_node,port_action_output,vn); + + if (tg.type==Variant::OBJECT) { + n->set_call_mode(VisualScriptPropertySet::CALL_MODE_INSTANCE); + + if (tg.obj_type!=StringName()) { + n->set_base_type(tg.obj_type); + } else { + n->set_base_type("Object"); + } + + if (tg.script.is_valid()) { + n->set_base_script(tg.script->get_path()); + new_connect_node_select->select_property_from_script(tg.script); + } else { + new_connect_node_select->select_property_from_base_type(n->get_base_type()); + } + + + } else { + n->set_call_mode(VisualScriptPropertySet::CALL_MODE_BASIC_TYPE); + n->set_basic_type(tg.type); + new_connect_node_select->select_property_from_basic_type(tg.type,tg.ev_type); + } + } break; + case CREATE_GET: { + + Ref<VisualScriptPropertyGet> n; + n.instance(); + vnode=n; + + VisualScriptNode::TypeGuess tg = _guess_output_type(port_action_node,port_action_output,vn); + + if (tg.type==Variant::OBJECT) { + n->set_call_mode(VisualScriptPropertyGet::CALL_MODE_INSTANCE); + + if (tg.obj_type!=StringName()) { + n->set_base_type(tg.obj_type); + } else { + n->set_base_type("Object"); + } + + if (tg.script.is_valid()) { + n->set_base_script(tg.script->get_path()); + new_connect_node_select->select_property_from_script(tg.script); + } else { + new_connect_node_select->select_property_from_base_type(n->get_base_type()); + } + + + } else { + n->set_call_mode(VisualScriptPropertyGet::CALL_MODE_BASIC_TYPE); + n->set_basic_type(tg.type); + new_connect_node_select->select_property_from_basic_type(tg.type,tg.ev_type); + } + + } break; + case CREATE_COND: { + + Ref<VisualScriptCondition> n; + n.instance(); + vnode=n; + seq_connect=true; + + } break; + case CREATE_SEQUENCE: { + + Ref<VisualScriptSequence> n; + n.instance(); + vnode=n; + seq_connect=true; + + } break; + case CREATE_SWITCH: { + + Ref<VisualScriptSwitch> n; + n.instance(); + vnode=n; + seq_connect=true; + + } break; + case CREATE_ITERATOR: { + + Ref<VisualScriptIterator> n; + n.instance(); + vnode=n; + seq_connect=true; + + } break; + case CREATE_WHILE: { + + Ref<VisualScriptWhile> n; + n.instance(); + vnode=n; + seq_connect=true; + + } break; + case CREATE_RETURN: { + + Ref<VisualScriptReturn> n; + n.instance(); + vnode=n; + seq_connect=true; + + } break; + + } + + int new_id = script->get_available_id(); + undo_redo->create_action(TTR("Add Node")); + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,vnode,ofs); + if (seq_connect) { + undo_redo->add_do_method(script.ptr(),"sequence_connect",edited_func,port_action_node,port_action_output,new_id); + } + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id); + undo_redo->add_do_method(this,"_update_graph",new_id); + undo_redo->add_undo_method(this,"_update_graph",new_id); + undo_redo->commit_action(); + + port_action_new_node=new_id; + +} + +void VisualScriptEditor::_selected_connect_node_method_or_setget(const String& p_text) { + + Ref<VisualScriptNode> vsn = script->get_node(edited_func,port_action_new_node); + + if (vsn->cast_to<VisualScriptFunctionCall>()) { + + Ref<VisualScriptFunctionCall> vsfc = vsn; + vsfc->set_function(p_text); + script->data_connect(edited_func,port_action_node,port_action_output,port_action_new_node,0); + } + + if (vsn->cast_to<VisualScriptPropertySet>()) { + + Ref<VisualScriptPropertySet> vsp = vsn; + vsp->set_property(p_text); + script->data_connect(edited_func,port_action_node,port_action_output,port_action_new_node,0); + } + + if (vsn->cast_to<VisualScriptPropertyGet>()) { + + Ref<VisualScriptPropertyGet> vsp = vsn; + vsp->set_property(p_text); + script->data_connect(edited_func,port_action_node,port_action_output,port_action_new_node,0); + } + + _update_graph(port_action_new_node); + _update_graph_connections(); + +} + + +void VisualScriptEditor::_default_value_changed() { + + + Ref<VisualScriptNode> vsn = script->get_node(edited_func,editing_id); + if (vsn.is_null()) + return; + + undo_redo->create_action("Change Input Value"); + undo_redo->add_do_method(vsn.ptr(),"set_default_input_value",editing_input,default_value_edit->get_variant()); + undo_redo->add_undo_method(vsn.ptr(),"set_default_input_value",editing_input,vsn->get_default_input_value(editing_input)); + + undo_redo->add_do_method(this,"_update_graph",editing_id); + undo_redo->add_undo_method(this,"_update_graph",editing_id); + undo_redo->commit_action(); + +} + +void VisualScriptEditor::_default_value_edited(Node * p_button,int p_id,int p_input_port) { + + Ref<VisualScriptNode> vsn = script->get_node(edited_func,p_id); + if (vsn.is_null()) + return; + + PropertyInfo pinfo = vsn->get_input_value_port_info(p_input_port); + Variant existing = vsn->get_default_input_value(p_input_port); + if (pinfo.type!=Variant::NIL && existing.get_type()!=pinfo.type) { + + Variant::CallError ce; + const Variant *existingp=&existing; + existing = Variant::construct(pinfo.type,&existingp,1,ce,false); + + } + + default_value_edit->set_pos(p_button->cast_to<Control>()->get_global_pos()+Vector2(0,p_button->cast_to<Control>()->get_size().y)); + default_value_edit->set_size(Size2(1,1)); + if (default_value_edit->edit(NULL,pinfo.name,pinfo.type,existing,pinfo.hint,pinfo.hint_string)) { + if (pinfo.hint==PROPERTY_HINT_MULTILINE_TEXT) + default_value_edit->popup_centered_ratio(); + else + default_value_edit->popup(); + } + + editing_id = p_id; + editing_input=p_input_port; + +} + +void VisualScriptEditor::_show_hint(const String& p_hint) { + + hint_text->set_text(p_hint); + hint_text->show(); + hint_text_timer->start(); +} + +void VisualScriptEditor::_hide_timer() { + + hint_text->hide(); +} + +void VisualScriptEditor::_node_filter_changed(const String& p_text) { + + _update_available_nodes(); +} + +void VisualScriptEditor::_notification(int p_what) { + + if (p_what==NOTIFICATION_READY) { + node_filter_icon->set_texture(Control::get_icon("Zoom","EditorIcons")); + } +} + +void VisualScriptEditor::_graph_ofs_changed(const Vector2& p_ofs) { + + if (updating_graph) + return; + + updating_graph=true; + + if (script->has_function(edited_func)) { + script->set_function_scroll(edited_func,graph->get_scroll_ofs()/EDSCALE); + script->set_edited(true); + } + updating_graph=false; +} + +void VisualScriptEditor::_comment_node_resized(const Vector2& p_new_size,int p_node) { + + if (updating_graph) + return; + + Ref<VisualScriptComment> vsc = script->get_node(edited_func,p_node); + if (vsc.is_null()) + return; + + Node *node = graph->get_node(itos(p_node)); + if (!node) + return; + GraphNode *gn = node->cast_to<GraphNode>(); + if (!gn) + return; + + updating_graph=true; + + graph->set_block_minimum_size_adjust(true); //faster resize + + undo_redo->create_action("Resize Comment",UndoRedo::MERGE_ENDS); + undo_redo->add_do_method(vsc.ptr(),"set_size",p_new_size/EDSCALE); + undo_redo->add_undo_method(vsc.ptr(),"set_size",vsc->get_size()); + undo_redo->commit_action(); + + gn->set_custom_minimum_size(p_new_size); //for this time since graph update is blocked + gn->set_size(Size2(1,1)); + graph->set_block_minimum_size_adjust(false); + updating_graph=false; + + +} + +void VisualScriptEditor::_menu_option(int p_what) { + + switch(p_what) { + case EDIT_DELETE_NODES: { + _on_nodes_delete(); + } break; + case EDIT_TOGGLE_BREAKPOINT: { + + List<String> reselect; + for(int i=0;i<graph->get_child_count();i++) { + GraphNode *gn = graph->get_child(i)->cast_to<GraphNode>(); + if (gn) { + if (gn->is_selected()) { + int id = String(gn->get_name()).to_int(); + Ref<VisualScriptNode> vsn = script->get_node(edited_func,id); + if (vsn.is_valid()) { + vsn->set_breakpoint(!vsn->is_breakpoint()); + reselect.push_back(gn->get_name()); + } + } + } + } + + _update_graph(); + + for(List<String>::Element *E=reselect.front();E;E=E->next()) { + GraphNode *gn = graph->get_node(E->get())->cast_to<GraphNode>(); + gn->set_selected(true); + } + + } break; + case EDIT_FIND_NODE_TYPE: { + //popup disappearing grabs focus to owner, so use call deferred + node_filter->call_deferred("grab_focus"); + node_filter->call_deferred("select_all"); + } break; + case EDIT_COPY_NODES: + case EDIT_CUT_NODES: { + + if (!script->has_function(edited_func)) + break; + + clipboard->nodes.clear(); + clipboard->data_connections.clear(); + clipboard->sequence_connections.clear(); + + for(int i=0;i<graph->get_child_count();i++) { + GraphNode *gn = graph->get_child(i)->cast_to<GraphNode>(); + if (gn) { + if (gn->is_selected()) { + + int id = String(gn->get_name()).to_int(); + Ref<VisualScriptNode> node = script->get_node(edited_func,id); + if (node->cast_to<VisualScriptFunction>()) { + EditorNode::get_singleton()->show_warning("Can't copy the function node."); + return; + } + if (node.is_valid()) { + clipboard->nodes[id]=node->duplicate(); + clipboard->nodes_positions[id]=script->get_node_pos(edited_func,id); + } + + } + } + } + + if (clipboard->nodes.empty()) + break; + + List<VisualScript::SequenceConnection> sequence_connections; + + script->get_sequence_connection_list(edited_func,&sequence_connections); + + for (List<VisualScript::SequenceConnection>::Element *E=sequence_connections.front();E;E=E->next()) { + + if (clipboard->nodes.has(E->get().from_node) && clipboard->nodes.has(E->get().to_node)) { + + clipboard->sequence_connections.insert(E->get()); + } + } + + List<VisualScript::DataConnection> data_connections; + + script->get_data_connection_list(edited_func,&data_connections); + + for (List<VisualScript::DataConnection>::Element *E=data_connections.front();E;E=E->next()) { + + if (clipboard->nodes.has(E->get().from_node) && clipboard->nodes.has(E->get().to_node)) { + + clipboard->data_connections.insert(E->get()); + } + } + + if (p_what==EDIT_CUT_NODES) { + _on_nodes_delete(); // oh yeah, also delete on cut + } + + + } break; + case EDIT_PASTE_NODES: { + if (!script->has_function(edited_func)) + break; + + if (clipboard->nodes.empty()) { + EditorNode::get_singleton()->show_warning("Clipboard is empty!"); + break; + } + + Map<int,int> remap; + + undo_redo->create_action("Paste VisualScript Nodes"); + int idc=script->get_available_id()+1; + + Set<int> to_select; + + Set<Vector2> existing_positions; + + { + List<int> nodes; + script->get_node_list(edited_func,&nodes); + for (List<int>::Element *E=nodes.front();E;E=E->next()) { + Vector2 pos = script->get_node_pos(edited_func,E->get()).snapped(Vector2(2,2)); + existing_positions.insert(pos); + } + } + + for (Map<int,Ref<VisualScriptNode> >::Element *E=clipboard->nodes.front();E;E=E->next()) { + + + Ref<VisualScriptNode> node = E->get()->duplicate(); + + int new_id = idc++; + to_select.insert(new_id); + + remap[E->key()]=new_id; + + Vector2 paste_pos = clipboard->nodes_positions[E->key()]; + + while(existing_positions.has(paste_pos.snapped(Vector2(2,2)))) { + paste_pos+=Vector2(20,20)*EDSCALE; + } + + + undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,node,paste_pos); + undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id); + + } + + for (Set<VisualScript::SequenceConnection>::Element *E=clipboard->sequence_connections.front();E;E=E->next()) { + + + undo_redo->add_do_method(script.ptr(),"sequence_connect",edited_func,remap[E->get().from_node],E->get().from_output,remap[E->get().to_node]); + undo_redo->add_undo_method(script.ptr(),"sequence_disconnect",edited_func,remap[E->get().from_node],E->get().from_output,remap[E->get().to_node]); + + } + + for (Set<VisualScript::DataConnection>::Element *E=clipboard->data_connections.front();E;E=E->next()) { + + + undo_redo->add_do_method(script.ptr(),"data_connect",edited_func,remap[E->get().from_node],E->get().from_port,remap[E->get().to_node],E->get().to_port); + undo_redo->add_undo_method(script.ptr(),"data_disconnect",edited_func,remap[E->get().from_node],E->get().from_port,remap[E->get().to_node],E->get().to_port); + + } + + undo_redo->add_do_method(this,"_update_graph"); + undo_redo->add_undo_method(this,"_update_graph"); + + undo_redo->commit_action(); + + for(int i=0;i<graph->get_child_count();i++) { + GraphNode *gn = graph->get_child(i)->cast_to<GraphNode>(); + if (gn) { + int id = gn->get_name().operator String().to_int(); + gn->set_selected(to_select.has(id)); + + } + } + } break; + + + } +} + +void VisualScriptEditor::_bind_methods() { + + ObjectTypeDB::bind_method("_member_button",&VisualScriptEditor::_member_button); + ObjectTypeDB::bind_method("_member_edited",&VisualScriptEditor::_member_edited); + ObjectTypeDB::bind_method("_member_selected",&VisualScriptEditor::_member_selected); + ObjectTypeDB::bind_method("_update_members",&VisualScriptEditor::_update_members); + ObjectTypeDB::bind_method("_change_base_type",&VisualScriptEditor::_change_base_type); + ObjectTypeDB::bind_method("_change_base_type_callback",&VisualScriptEditor::_change_base_type_callback); + ObjectTypeDB::bind_method("_override_pressed",&VisualScriptEditor::_override_pressed); + ObjectTypeDB::bind_method("_node_selected",&VisualScriptEditor::_node_selected); + ObjectTypeDB::bind_method("_node_moved",&VisualScriptEditor::_node_moved); + ObjectTypeDB::bind_method("_move_node",&VisualScriptEditor::_move_node); + ObjectTypeDB::bind_method("_begin_node_move",&VisualScriptEditor::_begin_node_move); + ObjectTypeDB::bind_method("_end_node_move",&VisualScriptEditor::_end_node_move); + ObjectTypeDB::bind_method("_remove_node",&VisualScriptEditor::_remove_node); + ObjectTypeDB::bind_method("_update_graph",&VisualScriptEditor::_update_graph,DEFVAL(-1)); + ObjectTypeDB::bind_method("_node_ports_changed",&VisualScriptEditor::_node_ports_changed); + ObjectTypeDB::bind_method("_available_node_doubleclicked",&VisualScriptEditor::_available_node_doubleclicked); + ObjectTypeDB::bind_method("_default_value_edited",&VisualScriptEditor::_default_value_edited); + ObjectTypeDB::bind_method("_default_value_changed",&VisualScriptEditor::_default_value_changed); + ObjectTypeDB::bind_method("_menu_option",&VisualScriptEditor::_menu_option); + ObjectTypeDB::bind_method("_graph_ofs_changed",&VisualScriptEditor::_graph_ofs_changed); + ObjectTypeDB::bind_method("_center_on_node",&VisualScriptEditor::_center_on_node); + ObjectTypeDB::bind_method("_comment_node_resized",&VisualScriptEditor::_comment_node_resized); + ObjectTypeDB::bind_method("_button_resource_previewed",&VisualScriptEditor::_button_resource_previewed); + ObjectTypeDB::bind_method("_port_action_menu",&VisualScriptEditor::_port_action_menu); + ObjectTypeDB::bind_method("_selected_connect_node_method_or_setget",&VisualScriptEditor::_selected_connect_node_method_or_setget); + ObjectTypeDB::bind_method("_expression_text_changed",&VisualScriptEditor::_expression_text_changed); + + + + + ObjectTypeDB::bind_method("get_drag_data_fw",&VisualScriptEditor::get_drag_data_fw); + ObjectTypeDB::bind_method("can_drop_data_fw",&VisualScriptEditor::can_drop_data_fw); + ObjectTypeDB::bind_method("drop_data_fw",&VisualScriptEditor::drop_data_fw); + + ObjectTypeDB::bind_method("_input",&VisualScriptEditor::_input); + ObjectTypeDB::bind_method("_on_nodes_delete",&VisualScriptEditor::_on_nodes_delete); + ObjectTypeDB::bind_method("_on_nodes_duplicate",&VisualScriptEditor::_on_nodes_duplicate); + + ObjectTypeDB::bind_method("_hide_timer",&VisualScriptEditor::_hide_timer); + + ObjectTypeDB::bind_method("_graph_connected",&VisualScriptEditor::_graph_connected); + ObjectTypeDB::bind_method("_graph_disconnected",&VisualScriptEditor::_graph_disconnected); + ObjectTypeDB::bind_method("_graph_connect_to_empty",&VisualScriptEditor::_graph_connect_to_empty); + + ObjectTypeDB::bind_method("_update_graph_connections",&VisualScriptEditor::_update_graph_connections); + ObjectTypeDB::bind_method("_node_filter_changed",&VisualScriptEditor::_node_filter_changed); + + ObjectTypeDB::bind_method("_selected_method",&VisualScriptEditor::_selected_method); + ObjectTypeDB::bind_method("_draw_color_over_button",&VisualScriptEditor::_draw_color_over_button); + + + + +} + + + +VisualScriptEditor::VisualScriptEditor() { + + if (!clipboard) { + clipboard = memnew( Clipboard ); + } + updating_graph=false; + + edit_menu = memnew( MenuButton ); + edit_menu->set_text(TTR("Edit")); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/delete_selected"), EDIT_DELETE_NODES); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/toggle_breakpoint"), EDIT_TOGGLE_BREAKPOINT); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/find_node_type"), EDIT_FIND_NODE_TYPE); + edit_menu->get_popup()->add_separator(); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/copy_nodes"), EDIT_COPY_NODES); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/cut_nodes"), EDIT_CUT_NODES); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/paste_nodes"), EDIT_PASTE_NODES); + + edit_menu->get_popup()->connect("item_pressed",this,"_menu_option"); + + main_hsplit = memnew( HSplitContainer ); + add_child(main_hsplit); + main_hsplit->set_area_as_parent_rect(); + + left_vsplit = memnew( VSplitContainer ); + main_hsplit->add_child(left_vsplit); + + VBoxContainer *left_vb = memnew( VBoxContainer ); + left_vsplit->add_child(left_vb); + left_vb->set_v_size_flags(SIZE_EXPAND_FILL); + left_vb->set_custom_minimum_size(Size2(230,1)*EDSCALE); + + base_type_select = memnew( Button ); + left_vb->add_margin_child(TTR("Base Type:"),base_type_select); + base_type_select->connect("pressed",this,"_change_base_type"); + + members = memnew( Tree ); + left_vb->add_margin_child(TTR("Members:"),members,true); + members->set_hide_root(true); + members->connect("button_pressed",this,"_member_button"); + members->connect("item_edited",this,"_member_edited"); + members->connect("cell_selected",this,"_member_selected",varray(),CONNECT_DEFERRED); + members->set_single_select_cell_editing_only_when_already_selected(true); + members->set_hide_folding(true); + members->set_drag_forwarding(this); + + + VBoxContainer *left_vb2 = memnew( VBoxContainer ); + left_vsplit->add_child(left_vb2); + left_vb2->set_v_size_flags(SIZE_EXPAND_FILL); + + + VBoxContainer *vbc_nodes = memnew( VBoxContainer ); + HBoxContainer *hbc_nodes = memnew( HBoxContainer ); + node_filter = memnew (LineEdit); + node_filter->connect("text_changed",this,"_node_filter_changed"); + hbc_nodes->add_child(node_filter); + node_filter->set_h_size_flags(SIZE_EXPAND_FILL); + node_filter_icon = memnew( TextureFrame ); + node_filter_icon->set_stretch_mode(TextureFrame::STRETCH_KEEP_CENTERED); + hbc_nodes->add_child(node_filter_icon); + vbc_nodes->add_child(hbc_nodes); + + nodes = memnew( Tree ); + vbc_nodes->add_child(nodes); + nodes->set_v_size_flags(SIZE_EXPAND_FILL); + + left_vb2->add_margin_child(TTR("Available Nodes:"),vbc_nodes,true); + + nodes->set_hide_root(true); + nodes->connect("item_activated",this,"_available_node_doubleclicked"); + nodes->set_drag_forwarding(this); + + graph = memnew( GraphEdit ); + main_hsplit->add_child(graph); + graph->set_h_size_flags(SIZE_EXPAND_FILL); + graph->connect("node_selected",this,"_node_selected"); + graph->connect("_begin_node_move",this,"_begin_node_move"); + graph->connect("_end_node_move",this,"_end_node_move"); + graph->connect("delete_nodes_request",this,"_on_nodes_delete"); + graph->connect("duplicate_nodes_request",this,"_on_nodes_duplicate"); + graph->set_drag_forwarding(this); + graph->hide(); + graph->connect("scroll_offset_changed",this,"_graph_ofs_changed"); + + select_func_text = memnew( Label ); + select_func_text->set_text(TTR("Select or create a function to edit graph")); + select_func_text->set_align(Label::ALIGN_CENTER); + select_func_text->set_valign(Label::VALIGN_CENTER); + select_func_text->set_h_size_flags(SIZE_EXPAND_FILL); + main_hsplit->add_child(select_func_text); + + + hint_text = memnew( Label ); + hint_text->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,100); + hint_text->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END,0); + hint_text->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,0); + hint_text->set_align(Label::ALIGN_CENTER); + hint_text->set_valign(Label::VALIGN_CENTER); + graph->add_child(hint_text); + + hint_text_timer = memnew( Timer ); + hint_text_timer->set_wait_time(4); + hint_text_timer->connect("timeout",this,"_hide_timer"); + add_child(hint_text_timer); + + //allowed casts (connections) + for(int i=0;i<Variant::VARIANT_MAX;i++) { + graph->add_valid_connection_type(Variant::NIL,i); + graph->add_valid_connection_type(i,Variant::NIL); + for(int j=0;j<Variant::VARIANT_MAX;j++) { + if (Variant::can_convert(Variant::Type(i),Variant::Type(j))) { + graph->add_valid_connection_type(i,j); + } + } + + graph->add_valid_right_disconnect_type(i); + } + + graph->add_valid_left_disconnect_type(TYPE_SEQUENCE); + + graph->connect("connection_request",this,"_graph_connected"); + graph->connect("disconnection_request",this,"_graph_disconnected"); + graph->connect("connection_to_empty",this,"_graph_connect_to_empty"); + + edit_signal_dialog = memnew( AcceptDialog ); + edit_signal_dialog->get_ok()->set_text(TTR("Close")); + add_child(edit_signal_dialog); + edit_signal_dialog->set_title(TTR("Edit Signal Arguments:")); + + signal_editor = memnew( VisualScriptEditorSignalEdit ); + edit_signal_edit = memnew( PropertyEditor ); + edit_signal_edit->hide_top_label(); + edit_signal_dialog->add_child(edit_signal_edit); + edit_signal_dialog->set_child_rect(edit_signal_edit); + edit_signal_edit->edit(signal_editor); + + edit_variable_dialog = memnew( AcceptDialog ); + edit_variable_dialog->get_ok()->set_text(TTR("Close")); + add_child(edit_variable_dialog); + edit_variable_dialog->set_title(TTR("Edit Variable:")); + + variable_editor = memnew( VisualScriptEditorVariableEdit ); + edit_variable_edit = memnew( PropertyEditor ); + edit_variable_edit->hide_top_label(); + edit_variable_dialog->add_child(edit_variable_edit); + edit_variable_dialog->set_child_rect(edit_variable_edit); + edit_variable_edit->edit(variable_editor); + + select_base_type=memnew(CreateDialog); + select_base_type->set_base_type("Object"); //anything goes + select_base_type->connect("create",this,"_change_base_type_callback"); + select_base_type->get_ok()->set_text(TTR("Change")); + add_child(select_base_type); + + undo_redo = EditorNode::get_singleton()->get_undo_redo(); + + new_function_menu = memnew( PopupMenu ); + new_function_menu->connect("item_pressed",this,"_override_pressed"); + add_child(new_function_menu); + updating_members=false; + + set_process_input(true); //for revert on drag + set_process_unhandled_input(true); //for revert on drag + + default_value_edit= memnew( CustomPropertyEditor); + add_child(default_value_edit); + default_value_edit->connect("variant_changed",this,"_default_value_changed"); + + method_select = memnew( PropertySelector ); + add_child(method_select); + method_select->connect("selected",this,"_selected_method"); + error_line=-1; + + new_connect_node_select = memnew( PropertySelector ); + add_child(new_connect_node_select); + new_connect_node_select->connect("selected",this,"_selected_connect_node_method_or_setget"); + + port_action_popup = memnew( PopupMenu ); + add_child(port_action_popup); + port_action_popup->connect("item_pressed",this,"_port_action_menu"); + + +} + +VisualScriptEditor::~VisualScriptEditor() { + + undo_redo->clear_history(); //avoid crashes + memdelete(signal_editor); + memdelete(variable_editor); +} + +static ScriptEditorBase * create_editor(const Ref<Script>& p_script) { + + if (p_script->cast_to<VisualScript>()) { + return memnew( VisualScriptEditor ); + } + + return NULL; +} + + +VisualScriptEditor::Clipboard *VisualScriptEditor::clipboard=NULL; + +void VisualScriptEditor::free_clipboard() { + if (clipboard) + memdelete(clipboard); +} + +static void register_editor_callback() { + + ScriptEditor::register_create_script_editor_function(create_editor); + EditorSettings::get_singleton()->set("visual_script_editor/color_functions",Color(1,0.9,0.9)); + EditorSettings::get_singleton()->set("visual_script_editor/color_data",Color(0.9,1.0,0.9)); + EditorSettings::get_singleton()->set("visual_script_editor/color_operators",Color(0.9,0.9,1.0)); + EditorSettings::get_singleton()->set("visual_script_editor/color_flow_control",Color(1.0,1.0,0.8)); + EditorSettings::get_singleton()->set("visual_script_editor/color_custom",Color(0.8,1.0,1.0)); + EditorSettings::get_singleton()->set("visual_script_editor/color_constants",Color(1.0,0.8,1.0)); + + + ED_SHORTCUT("visual_script_editor/delete_selected", TTR("Delete Selected")); + ED_SHORTCUT("visual_script_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_F9); + ED_SHORTCUT("visual_script_editor/find_node_type", TTR("Find Node Type"), KEY_MASK_CMD+KEY_F); + ED_SHORTCUT("visual_script_editor/copy_nodes", TTR("Copy Nodes"), KEY_MASK_CMD+KEY_C); + ED_SHORTCUT("visual_script_editor/cut_nodes", TTR("Cut Nodes"), KEY_MASK_CMD+KEY_X); + ED_SHORTCUT("visual_script_editor/paste_nodes", TTR("Paste Nodes"), KEY_MASK_CMD+KEY_V); + +} + +void VisualScriptEditor::register_editor() { + + //too early to register stuff here, request a callback + EditorNode::add_plugin_init_callback(register_editor_callback); + + + +} + +#endif diff --git a/modules/visual_script/visual_script_editor.h b/modules/visual_script/visual_script_editor.h new file mode 100644 index 0000000000..483ae1644c --- /dev/null +++ b/modules/visual_script/visual_script_editor.h @@ -0,0 +1,244 @@ +#ifndef VisualSCRIPT_EDITOR_H +#define VisualSCRIPT_EDITOR_H + +#include "tools/editor/plugins/script_editor_plugin.h" +#include "visual_script.h" +#include "tools/editor/property_editor.h" +#include "scene/gui/graph_edit.h" +#include "tools/editor/create_dialog.h" +#include "tools/editor/property_selector.h" +class VisualScriptEditorSignalEdit; +class VisualScriptEditorVariableEdit; + + +#ifdef TOOLS_ENABLED + + +class VisualScriptEditor : public ScriptEditorBase { + OBJ_TYPE(VisualScriptEditor,ScriptEditorBase) + + enum { + TYPE_SEQUENCE=1000, + INDEX_BASE_SEQUENCE=1024 + + + }; + + enum { + EDIT_DELETE_NODES, + EDIT_TOGGLE_BREAKPOINT, + EDIT_FIND_NODE_TYPE, + EDIT_COPY_NODES, + EDIT_CUT_NODES, + EDIT_PASTE_NODES, + }; + + enum PortAction { + + CREATE_CALL, + CREATE_SET, + CREATE_GET, + CREATE_COND, + CREATE_SEQUENCE, + CREATE_SWITCH, + CREATE_ITERATOR, + CREATE_WHILE, + CREATE_RETURN, + }; + + MenuButton *edit_menu; + + Ref<VisualScript> script; + + Button *base_type_select; + + HSplitContainer *main_hsplit; + VSplitContainer *left_vsplit; + + GraphEdit *graph; + + LineEdit *node_filter; + TextureFrame *node_filter_icon; + + VisualScriptEditorSignalEdit *signal_editor; + + AcceptDialog *edit_signal_dialog; + PropertyEditor *edit_signal_edit; + + PropertySelector *method_select; + PropertySelector *new_connect_node_select; + + VisualScriptEditorVariableEdit *variable_editor; + + AcceptDialog *edit_variable_dialog; + PropertyEditor *edit_variable_edit; + + CustomPropertyEditor *default_value_edit; + + UndoRedo *undo_redo; + + Tree *members; + Tree *nodes; + + Label *hint_text; + Timer *hint_text_timer; + + Label *select_func_text; + + bool updating_graph; + + void _show_hint(const String& p_hint); + void _hide_timer(); + + CreateDialog *select_base_type; + + struct VirtualInMenu { + String name; + Variant::Type ret; + bool ret_variant; + Vector< Pair<Variant::Type,String> > args; + }; + + Map<int,VirtualInMenu> virtuals_in_menu; + + PopupMenu *new_function_menu; + + + StringName edited_func; + + void _update_graph_connections(); + void _update_graph(int p_only_id=-1); + + bool updating_members; + + void _update_members(); + + StringName selected; + + String _validate_name(const String& p_name) const; + + struct Clipboard { + + Map<int,Ref<VisualScriptNode> > nodes; + Map<int,Vector2 > nodes_positions; + + Set<VisualScript::SequenceConnection> sequence_connections; + Set<VisualScript::DataConnection> data_connections; + }; + + static Clipboard *clipboard; + + PopupMenu *port_action_popup; + + PortAction port_action; + int port_action_node; + int port_action_output; + Vector2 port_action_pos; + int port_action_new_node; + void _port_action_menu(int p_option); + void _selected_connect_node_method_or_setget(const String& p_text); + + + int error_line; + + void _node_selected(Node* p_node); + void _center_on_node(int p_id); + + void _node_filter_changed(const String& p_text); + void _change_base_type_callback(); + void _change_base_type(); + void _member_selected(); + void _member_edited(); + void _override_pressed(int p_id); + + void _begin_node_move(); + void _end_node_move(); + void _move_node(String func,int p_id,const Vector2& p_to); + + void _node_moved(Vector2 p_from,Vector2 p_to, int p_id); + void _remove_node(int p_id); + void _graph_connected(const String& p_from,int p_from_slot,const String& p_to,int p_to_slot); + void _graph_disconnected(const String& p_from,int p_from_slot,const String& p_to,int p_to_slot); + void _graph_connect_to_empty(const String& p_from,int p_from_slot,const Vector2& p_release_pos); + + void _node_ports_changed(const String& p_func,int p_id); + void _available_node_doubleclicked(); + + void _update_available_nodes(); + + void _member_button(Object *p_item, int p_column, int p_button); + + void _expression_text_changed(const String& p_text,int p_id); + + + String revert_on_drag; + + void _input(const InputEvent& p_event); + void _on_nodes_delete(); + void _on_nodes_duplicate(); + + Variant get_drag_data_fw(const Point2& p_point,Control* p_from); + bool can_drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from) const; + void drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from); + + + int editing_id; + int editing_input; + + void _default_value_changed(); + void _default_value_edited(Node * p_button,int p_id,int p_input_port); + + void _menu_option(int p_what); + + void _graph_ofs_changed(const Vector2& p_ofs); + void _comment_node_resized(const Vector2& p_new_size,int p_node); + + int selecting_method_id; + void _selected_method(const String& p_method); + + void _draw_color_over_button(Object* obj,Color p_color); + void _button_resource_previewed(const String& p_path,const Ref<Texture>& p_preview,Variant p_ud); + + VisualScriptNode::TypeGuess _guess_output_type(int p_port_action_node,int p_port_action_output,Set<int> &visited_nodes); + + +protected: + + void _notification(int p_what); + static void _bind_methods(); +public: + + virtual void apply_code(); + virtual Ref<Script> get_edited_script() const; + virtual Vector<String> get_functions(); + virtual void set_edited_script(const Ref<Script>& p_script); + virtual void reload_text(); + virtual String get_name(); + virtual Ref<Texture> get_icon(); + virtual bool is_unsaved(); + virtual Variant get_edit_state(); + virtual void set_edit_state(const Variant& p_state); + virtual void goto_line(int p_line,bool p_with_error=false); + virtual void trim_trailing_whitespace(); + virtual void ensure_focus(); + virtual void tag_saved_version(); + virtual void reload(bool p_soft); + virtual void get_breakpoints(List<int> *p_breakpoints); + virtual bool goto_method(const String& p_method); + virtual void add_callback(const String& p_function,StringArray p_args); + virtual void update_settings(); + virtual void set_debugger_active(bool p_active); + virtual void set_tooltip_request_func(String p_method,Object* p_obj); + virtual Control *get_edit_menu(); + virtual bool can_lose_focus_on_node_selection() { return false; } + + static void register_editor(); + + static void free_clipboard(); + + VisualScriptEditor(); + ~VisualScriptEditor(); +}; +#endif + +#endif // VisualSCRIPT_EDITOR_H diff --git a/modules/visual_script/visual_script_expression.cpp b/modules/visual_script/visual_script_expression.cpp new file mode 100644 index 0000000000..cc3b5f2174 --- /dev/null +++ b/modules/visual_script/visual_script_expression.cpp @@ -0,0 +1,1523 @@ +#include "visual_script_expression.h" + + +bool VisualScriptExpression::_set(const StringName& p_name, const Variant& p_value) { + + if (String(p_name)=="expression") { + expression=p_value; + expression_dirty=true; + ports_changed_notify(); + return true; + } + + if (String(p_name)=="out_type") { + output_type=Variant::Type(int(p_value)); + expression_dirty=true; + ports_changed_notify(); + return true; + } + if (String(p_name)=="sequenced") { + sequenced=p_value; + ports_changed_notify(); + return true; + } + + if (String(p_name)=="input_count") { + + int from=inputs.size(); + inputs.resize(int(p_value)); + for(int i=from;i<inputs.size();i++) { + inputs[i].name=String::chr('a'+i); + if (from==0) { + inputs[i].type=output_type; + } else { + inputs[i].type=inputs[from-1].type; + } + } + expression_dirty=true; + ports_changed_notify(); + _change_notify(); + return true; + } + + if (String(p_name).begins_with("input/")) { + + int idx=String(p_name).get_slice("/",1).to_int(); + ERR_FAIL_INDEX_V(idx,inputs.size(),false); + + String what=String(p_name).get_slice("/",2); + + if (what=="type") { + + inputs[idx].type=Variant::Type(int(p_value)); + } else if (what=="name") { + + inputs[idx].name=p_value; + } else { + return false; + } + + expression_dirty=true; + ports_changed_notify(); + return true; + } + + + return false; + +} + +bool VisualScriptExpression::_get(const StringName& p_name,Variant &r_ret) const { + + if (String(p_name)=="expression") { + r_ret=expression; + return true; + } + + if (String(p_name)=="out_type") { + r_ret=output_type; + return true; + } + + if (String(p_name)=="sequenced") { + r_ret=sequenced; + return true; + } + + if (String(p_name)=="input_count") { + r_ret=inputs.size(); + return true; + } + + if (String(p_name).begins_with("input/")) { + + int idx=String(p_name).get_slice("/",1).to_int(); + ERR_FAIL_INDEX_V(idx,inputs.size(),false); + + String what=String(p_name).get_slice("/",2); + + if (what=="type") { + + r_ret=inputs[idx].type; + } else if (what=="name") { + + r_ret=inputs[idx].name; + } else { + return false; + } + + return true; + } + + + return false; +} +void VisualScriptExpression::_get_property_list( List<PropertyInfo> *p_list) const { + + + String argt="Any"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + + p_list->push_back(PropertyInfo(Variant::STRING,"expression",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR)); + p_list->push_back(PropertyInfo(Variant::INT,"out_type",PROPERTY_HINT_ENUM,argt)); + p_list->push_back(PropertyInfo(Variant::INT,"input_count",PROPERTY_HINT_RANGE,"0,64,1")); + p_list->push_back(PropertyInfo(Variant::BOOL,"sequenced")); + + for(int i=0;i<inputs.size();i++) { + + p_list->push_back(PropertyInfo(Variant::INT,"input/"+itos(i)+"/type",PROPERTY_HINT_ENUM,argt)); + p_list->push_back(PropertyInfo(Variant::STRING,"input/"+itos(i)+"/name")); + } +} + +int VisualScriptExpression::get_output_sequence_port_count() const { + + return sequenced?1:0; +} +bool VisualScriptExpression::has_input_sequence_port() const{ + + return sequenced; +} + + +String VisualScriptExpression::get_output_sequence_port_text(int p_port) const{ + + return String(); +} + + +int VisualScriptExpression::get_input_value_port_count() const{ + + return inputs.size(); + +} +int VisualScriptExpression::get_output_value_port_count() const{ + + return 1; +} + + +PropertyInfo VisualScriptExpression::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(inputs[p_idx].type,inputs[p_idx].name); +} +PropertyInfo VisualScriptExpression::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(output_type,"result"); +} + +String VisualScriptExpression::get_caption() const{ + + return "Expression"; +} +String VisualScriptExpression::get_text() const{ + + return expression; +} + + +Error VisualScriptExpression::_get_token(Token& r_token) { + + while (true) { +#define GET_CHAR() (str_ofs>=expression.length()?0:expression[str_ofs++]) + + CharType cchar = GET_CHAR(); + if (cchar==0) { + r_token.type=TK_EOF; + return OK; + } + + + switch(cchar) { + + case 0: { + r_token.type=TK_EOF; + return OK; + } break; + case '{': { + + r_token.type=TK_CURLY_BRACKET_OPEN; + return OK; + }; + case '}': { + + r_token.type=TK_CURLY_BRACKET_CLOSE; + return OK; + }; + case '[': { + + r_token.type=TK_BRACKET_OPEN; + return OK; + }; + case ']': { + + r_token.type=TK_BRACKET_CLOSE; + return OK; + }; + case '(': { + + r_token.type=TK_PARENTHESIS_OPEN; + return OK; + }; + case ')': { + + r_token.type=TK_PARENTHESIS_CLOSE; + return OK; + }; + case ',': { + + r_token.type=TK_COMMA; + return OK; + }; + case ':': { + + r_token.type=TK_COLON; + return OK; + }; + case '.': { + + r_token.type=TK_PERIOD; + return OK; + }; + case '=': { + + cchar=GET_CHAR(); + if (cchar=='=') { + r_token.type=TK_OP_EQUAL; + } else { + _set_error("Expected '='"); + r_token.type=TK_ERROR; + return ERR_PARSE_ERROR; + } + return OK; + }; + case '!': { + + if (expression[str_ofs]=='=') { + r_token.type=TK_OP_NOT_EQUAL; + str_ofs++; + } else { + r_token.type=TK_OP_NOT; + } + return OK; + }; + case '>': { + + if (expression[str_ofs]=='=') { + r_token.type=TK_OP_GREATER_EQUAL; + str_ofs++; + } else if (expression[str_ofs]=='>') { + r_token.type=TK_OP_SHIFT_RIGHT; + str_ofs++; + } else { + r_token.type=TK_OP_GREATER; + } + return OK; + }; + case '<': { + + if (expression[str_ofs]=='=') { + r_token.type=TK_OP_LESS_EQUAL; + str_ofs++; + } else if (expression[str_ofs]=='<') { + r_token.type=TK_OP_SHIFT_LEFT; + str_ofs++; + } else { + r_token.type=TK_OP_LESS; + } + return OK; + }; + case '+': { + r_token.type=TK_OP_ADD; + return OK; + }; + case '-': { + r_token.type=TK_OP_SUB; + return OK; + }; + case '/': { + r_token.type=TK_OP_DIV; + return OK; + }; + case '*': { + r_token.type=TK_OP_MUL; + return OK; + }; + case '%': { + r_token.type=TK_OP_MOD; + return OK; + }; + case '&': { + + if (expression[str_ofs]=='&') { + r_token.type=TK_OP_AND; + str_ofs++; + } else { + r_token.type=TK_OP_BIT_AND; + } + return OK; + }; + case '|': { + + if (expression[str_ofs]=='|') { + r_token.type=TK_OP_OR; + str_ofs++; + } else { + r_token.type=TK_OP_BIT_OR; + } + return OK; + }; + case '^': { + + r_token.type=TK_OP_BIT_XOR; + + return OK; + }; + case '~': { + + r_token.type=TK_OP_BIT_INVERT; + + return OK; + }; + case '"': { + + + String str; + while(true) { + + CharType ch=GET_CHAR(); + + if (ch==0) { + _set_error("Unterminated String"); + r_token.type=TK_ERROR; + return ERR_PARSE_ERROR; + } else if (ch=='"') { + break; + } else if (ch=='\\') { + //escaped characters... + + CharType next = GET_CHAR(); + if (next==0) { + _set_error("Unterminated String"); + r_token.type=TK_ERROR; + return ERR_PARSE_ERROR; + } + CharType res=0; + + switch(next) { + + case 'b': res=8; break; + case 't': res=9; break; + case 'n': res=10; break; + case 'f': res=12; break; + case 'r': res=13; break; + case 'u': { + //hexnumbarh - oct is deprecated + + + for(int j=0;j<4;j++) { + CharType c = GET_CHAR(); + + if (c==0) { + _set_error("Unterminated String"); + r_token.type=TK_ERROR; + return ERR_PARSE_ERROR; + } + if (!((c>='0' && c<='9') || (c>='a' && c<='f') || (c>='A' && c<='F'))) { + + _set_error("Malformed hex constant in string"); + r_token.type=TK_ERROR; + return ERR_PARSE_ERROR; + } + CharType v; + if (c>='0' && c<='9') { + v=c-'0'; + } else if (c>='a' && c<='f') { + v=c-'a'; + v+=10; + } else if (c>='A' && c<='F') { + v=c-'A'; + v+=10; + } else { + ERR_PRINT("BUG"); + v=0; + } + + res<<=4; + res|=v; + + + } + + + + } break; + //case '\"': res='\"'; break; + //case '\\': res='\\'; break; + //case '/': res='/'; break; + default: { + res = next; + //r_err_str="Invalid escape sequence"; + //return ERR_PARSE_ERROR; + } break; + } + + str+=res; + + } else { + str+=ch; + } + } + + r_token.type=TK_CONSTANT; + r_token.value=str; + return OK; + + } break; + default: { + + if (cchar<=32) { + break; + } + + if (cchar=='-' || (cchar>='0' && cchar<='9')) { + //a number + + + String num; +#define READING_SIGN 0 +#define READING_INT 1 +#define READING_DEC 2 +#define READING_EXP 3 +#define READING_DONE 4 + int reading=READING_INT; + + if (cchar=='-') { + num+='-'; + cchar=GET_CHAR(); + + } + + + + CharType c = cchar; + bool exp_sign=false; + bool exp_beg=false; + bool is_float=false; + + while(true) { + + switch(reading) { + case READING_INT: { + + if (c>='0' && c<='9') { + //pass + } else if (c=='.') { + reading=READING_DEC; + is_float=true; + } else if (c=='e') { + reading=READING_EXP; + } else { + reading=READING_DONE; + } + + } break; + case READING_DEC: { + + if (c>='0' && c<='9') { + + } else if (c=='e') { + reading=READING_EXP; + + } else { + reading=READING_DONE; + } + + } break; + case READING_EXP: { + + if (c>='0' && c<='9') { + exp_beg=true; + + } else if ((c=='-' || c=='+') && !exp_sign && !exp_beg) { + if (c=='-') + is_float=true; + exp_sign=true; + + } else { + reading=READING_DONE; + } + } break; + } + + if (reading==READING_DONE) + break; + num+=String::chr(c); + c = GET_CHAR(); + + + } + + str_ofs--; + + r_token.type=TK_CONSTANT; + + if (is_float) + r_token.value=num.to_double(); + else + r_token.value=num.to_int(); + return OK; + + } else if ((cchar>='A' && cchar<='Z') || (cchar>='a' && cchar<='z') || cchar=='_') { + + String id; + bool first=true; + + while((cchar>='A' && cchar<='Z') || (cchar>='a' && cchar<='z') || cchar=='_' || (!first && cchar>='0' && cchar<='9')) { + + id+=String::chr(cchar); + cchar=GET_CHAR(); + first=false; + } + + str_ofs--; //go back one + + if (id=="in") { + r_token.type=TK_OP_IN; + } else if (id=="null") { + r_token.type=TK_CONSTANT; + r_token.value=Variant(); + } else if (id=="true") { + r_token.type=TK_CONSTANT; + r_token.value=true; + } else if (id=="false") { + r_token.type=TK_CONSTANT; + r_token.value=false; + } else if (id=="PI") { + r_token.type=TK_CONSTANT; + r_token.value=Math_PI; + } else if (id=="not") { + r_token.type=TK_OP_NOT; + } else if (id=="or") { + r_token.type=TK_OP_OR; + } else if (id=="and") { + r_token.type=TK_OP_AND; + } else if (id=="self") { + r_token.type=TK_SELF; + } else { + + for(int i=0;i<Variant::VARIANT_MAX;i++) { + if (id==Variant::get_type_name(Variant::Type(i))) { + r_token.type=TK_BASIC_TYPE; + r_token.value=i; + return OK; + break; + } + } + + VisualScriptBuiltinFunc::BuiltinFunc bifunc = VisualScriptBuiltinFunc::find_function(id); + if (bifunc!=VisualScriptBuiltinFunc::FUNC_MAX) { + r_token.type=TK_BUILTIN_FUNC; + r_token.value=bifunc; + return OK; + } + + r_token.type=TK_IDENTIFIER; + r_token.value=id; + } + + return OK; + } else { + _set_error("Unexpected character."); + r_token.type=TK_ERROR; + return ERR_PARSE_ERROR; + } + } + } + } + + r_token.type=TK_ERROR; + return ERR_PARSE_ERROR; +} + +const char* VisualScriptExpression::token_name[TK_MAX]={ +"CURLY BRACKET OPEN", +"CURLY BRACKET CLOSE", +"BRACKET OPEN", +"BRACKET CLOSE", +"PARENTHESIS OPEN", +"PARENTHESIS CLOSE", +"IDENTIFIER", +"BUILTIN FUNC", +"SELF", +"CONSTANT", +"BASIC TYPE", +"COLON", +"COMMA", +"PERIOD", +"OP IN", +"OP EQUAL", +"OP NOT EQUAL", +"OP LESS", +"OP LESS EQUAL", +"OP GREATER", +"OP GREATER EQUAL", +"OP AND", +"OP OR", +"OP NOT", +"OP ADD", +"OP SUB", +"OP MUL", +"OP DIV", +"OP MOD", +"OP SHIFT LEFT", +"OP SHIFT RIGHT", +"OP BIT AND", +"OP BIT OR", +"OP BIT XOR", +"OP BIT INVERT", +"EOF", +"ERROR" +}; + +VisualScriptExpression::ENode* VisualScriptExpression::_parse_expression() { + + + Vector<Expression> expression; + + while(true) { + //keep appending stuff to expression + ENode*expr=NULL; + + Token tk; + _get_token(tk); + if (error_set) + return NULL; + + + + switch(tk.type) { + case TK_CURLY_BRACKET_OPEN: { + //a dictionary + DictionaryNode *dn = alloc_node<DictionaryNode>(); + + + while(true) { + + int cofs=str_ofs; + _get_token(tk); + if (tk.type==TK_CURLY_BRACKET_CLOSE) { + break; + } + str_ofs=cofs; //revert + //parse an expression + ENode* expr=_parse_expression(); + if (!expr) + return NULL; + dn->dict.push_back(expr); + + _get_token(tk); + if (tk.type!=TK_COLON) { + _set_error("Expected ':'"); + return NULL; + } + + expr=_parse_expression(); + if (!expr) + return NULL; + + dn->dict.push_back(expr); + + cofs=str_ofs; + _get_token(tk); + if (tk.type==TK_COMMA) { + //all good + } else if (tk.type==TK_CURLY_BRACKET_CLOSE) { + str_ofs=cofs; + } else { + _set_error("Expected ',' or '}'"); + } + } + + expr=dn; + } break; + case TK_BRACKET_OPEN: { + //an array + + ArrayNode *an = alloc_node<ArrayNode>(); + + + while(true) { + + int cofs=str_ofs; + _get_token(tk); + if (tk.type==TK_BRACKET_CLOSE) { + break; + } + str_ofs=cofs; //revert + //parse an expression + ENode* expr=_parse_expression(); + if (!expr) + return NULL; + an->array.push_back(expr); + + cofs=str_ofs; + _get_token(tk); + if (tk.type==TK_COMMA) { + //all good + } else if (tk.type==TK_BRACKET_CLOSE) { + str_ofs=cofs; + } else { + _set_error("Expected ',' or ']'"); + } + } + + expr=an; + } break; + case TK_PARENTHESIS_OPEN: { + //a suexpression + ENode* e=_parse_expression(); + if (error_set) + return NULL; + _get_token(tk); + if (tk.type!=TK_PARENTHESIS_CLOSE) { + _set_error("Expected ')'"); + return NULL; + } + + expr=e; + + } break; + case TK_IDENTIFIER: { + + String what = tk.value; + int index=-1; + for(int i=0;i<inputs.size();i++) { + if (what==inputs[i].name) { + index=i; + break; + } + } + + if (index!=-1) { + InputNode *input = alloc_node<InputNode>(); + input->index=index; + expr=input; + } else { + _set_error("Invalid input identifier '"+what+"'. For script variables, use self (locals are for inputs)."+what); + return NULL; + } + } break; + case TK_SELF: { + + SelfNode *self = alloc_node<SelfNode>(); + expr=self; + } break; + case TK_CONSTANT: { + ConstantNode *constant = alloc_node<ConstantNode>(); + constant->value=tk.value; + expr=constant; + } break; + case TK_BASIC_TYPE: { + //constructor.. + + Variant::Type bt = Variant::Type(int(tk.value)); + _get_token(tk); + if (tk.type!=TK_PARENTHESIS_OPEN) { + _set_error("Expected '('"); + return NULL; + } + + ConstructorNode *constructor = alloc_node<ConstructorNode>(); + constructor->data_type=bt; + + while(true) { + + int cofs=str_ofs; + _get_token(tk); + if (tk.type==TK_PARENTHESIS_CLOSE) { + break; + } + str_ofs=cofs; //revert + //parse an expression + ENode* expr=_parse_expression(); + if (!expr) + return NULL; + + constructor->arguments.push_back(expr); + + cofs=str_ofs; + _get_token(tk); + if (tk.type==TK_COMMA) { + //all good + } else if (tk.type==TK_PARENTHESIS_CLOSE) { + str_ofs=cofs; + } else { + _set_error("Expected ',' or ')'"); + } + } + + expr=constructor; + + } break; + case TK_BUILTIN_FUNC: { + //builtin function + + Variant::Type bt = Variant::Type(int(tk.value)); + _get_token(tk); + if (tk.type!=TK_PARENTHESIS_OPEN) { + _set_error("Expected '('"); + return NULL; + } + + BuiltinFuncNode *bifunc = alloc_node<BuiltinFuncNode>(); + bifunc->func=VisualScriptBuiltinFunc::BuiltinFunc(int(tk.value)); + + while(true) { + + int cofs=str_ofs; + _get_token(tk); + if (tk.type==TK_PARENTHESIS_CLOSE) { + break; + } + str_ofs=cofs; //revert + //parse an expression + ENode* expr=_parse_expression(); + if (!expr) + return NULL; + + bifunc->arguments.push_back(expr); + + cofs=str_ofs; + _get_token(tk); + if (tk.type==TK_COMMA) { + //all good + } else if (tk.type==TK_PARENTHESIS_CLOSE) { + str_ofs=cofs; + } else { + _set_error("Expected ',' or ')'"); + } + } + + int expected_args = VisualScriptBuiltinFunc::get_func_argument_count(bifunc->func); + if (bifunc->arguments.size() != expected_args) { + _set_error("Builtin func '"+VisualScriptBuiltinFunc::get_func_name(bifunc->func)+"' expects "+itos(expected_args)+" arguments."); + } + + expr=bifunc; + + } break; + case TK_OP_SUB: { + + Expression e; + e.is_op=true; + e.op=Variant::OP_NEGATE; + expression.push_back(e); + continue; + } break; + case TK_OP_NOT: { + + Expression e; + e.is_op=true; + e.op=Variant::OP_NOT; + expression.push_back(e); + continue; + } break; + + default: { + _set_error("Expected expression."); + return NULL; + } break; + + } + + //before going to operators, must check indexing! + + while(true) { + int cofs2=str_ofs; + _get_token(tk); + if (error_set) + return NULL; + + bool done=false; + + switch(tk.type) { + case TK_BRACKET_OPEN: { + //value indexing + + IndexNode *index = alloc_node<IndexNode>(); + index->base=expr; + + ENode* what=_parse_expression(); + if (!what) + return NULL; + + index->index=what; + + _get_token(tk); + if (tk.type!=TK_BRACKET_CLOSE) { + _set_error("Expected ']' at end of index."); + return NULL; + } + expr=index; + + } break; + case TK_PERIOD: { + //named indexing or function call + _get_token(tk); + if (tk.type!=TK_IDENTIFIER) { + _set_error("Expected identifier after '.'"); + return NULL; + } + + StringName identifier=tk.value; + + int cofs=str_ofs; + _get_token(tk); + if (tk.type==TK_PARENTHESIS_OPEN) { + //function call + CallNode *func_call = alloc_node<CallNode>(); + func_call->method=identifier; + func_call->base=expr; + + while(true) { + + int cofs=str_ofs; + _get_token(tk); + if (tk.type==TK_PARENTHESIS_CLOSE) { + break; + } + str_ofs=cofs; //revert + //parse an expression + ENode* expr=_parse_expression(); + if (!expr) + return NULL; + + func_call->arguments.push_back(expr); + + cofs=str_ofs; + _get_token(tk); + if (tk.type==TK_COMMA) { + //all good + } else if (tk.type==TK_PARENTHESIS_CLOSE) { + str_ofs=cofs; + } else { + _set_error("Expected ',' or ')'"); + } + } + + expr=func_call; + } else { + //named indexing + str_ofs=cofs; + + NamedIndexNode *index = alloc_node<NamedIndexNode>(); + index->base=expr; + index->name=identifier; + expr=index; + + } + + } break; + default: { + str_ofs=cofs2; + done=true; + } break; + } + + if (done) + break; + } + + //push expression + { + Expression e; + e.is_op=false; + e.node=expr; + expression.push_back(e); + } + + //ok finally look for an operator + + + int cofs=str_ofs; + _get_token(tk); + if (error_set) + return NULL; + + + Variant::Operator op = Variant::OP_MAX; + + switch(tk.type) { + case TK_OP_IN: op=Variant::OP_IN; break; + case TK_OP_EQUAL: op=Variant::OP_EQUAL; break; + case TK_OP_NOT_EQUAL: op=Variant::OP_NOT_EQUAL; break; + case TK_OP_LESS: op=Variant::OP_LESS; break; + case TK_OP_LESS_EQUAL: op=Variant::OP_LESS_EQUAL; break; + case TK_OP_GREATER: op=Variant::OP_GREATER; break; + case TK_OP_GREATER_EQUAL: op=Variant::OP_GREATER_EQUAL; break; + case TK_OP_AND: op=Variant::OP_AND; break; + case TK_OP_OR: op=Variant::OP_OR; break; + case TK_OP_NOT: op=Variant::OP_NOT; break; + case TK_OP_ADD: op=Variant::OP_ADD; break; + case TK_OP_SUB: op=Variant::OP_SUBSTRACT; break; + case TK_OP_MUL: op=Variant::OP_MULTIPLY; break; + case TK_OP_DIV: op=Variant::OP_DIVIDE; break; + case TK_OP_MOD: op=Variant::OP_MODULE; break; + case TK_OP_SHIFT_LEFT: op=Variant::OP_SHIFT_LEFT; break; + case TK_OP_SHIFT_RIGHT: op=Variant::OP_SHIFT_RIGHT; break; + case TK_OP_BIT_AND: op=Variant::OP_BIT_AND; break; + case TK_OP_BIT_OR: op=Variant::OP_BIT_OR; break; + case TK_OP_BIT_XOR: op=Variant::OP_BIT_XOR; break; + case TK_OP_BIT_INVERT: op=Variant::OP_BIT_NEGATE; break; + default: {}; + } + + if (op==Variant::OP_MAX) { //stop appending stuff + str_ofs=cofs; + break; + } + + //push operator and go on + { + Expression e; + e.is_op=true; + e.op=op; + expression.push_back(e); + } + } + + + /* Reduce the set set of expressions and place them in an operator tree, respecting precedence */ + + + while(expression.size()>1) { + + int next_op=-1; + int min_priority=0xFFFFF; + bool is_unary=false; + + for(int i=0;i<expression.size();i++) { + + + + if (!expression[i].is_op) { + + continue; + } + + int priority; + + bool unary=false; + + switch(expression[i].op) { + + + case Variant::OP_BIT_NEGATE: priority=0; unary=true; break; + case Variant::OP_NEGATE: priority=1; unary=true; break; + + case Variant::OP_MULTIPLY: priority=2; break; + case Variant::OP_DIVIDE: priority=2; break; + case Variant::OP_MODULE: priority=2; break; + + case Variant::OP_ADD: priority=3; break; + case Variant::OP_SUBSTRACT: priority=3; break; + + case Variant::OP_SHIFT_LEFT: priority=4; break; + case Variant::OP_SHIFT_RIGHT: priority=4; break; + + case Variant::OP_BIT_AND: priority=5; break; + case Variant::OP_BIT_XOR: priority=6; break; + case Variant::OP_BIT_OR: priority=7; break; + + case Variant::OP_LESS: priority=8; break; + case Variant::OP_LESS_EQUAL: priority=8; break; + case Variant::OP_GREATER: priority=8; break; + case Variant::OP_GREATER_EQUAL: priority=8; break; + + case Variant::OP_EQUAL: priority=8; break; + case Variant::OP_NOT_EQUAL: priority=8; break; + + case Variant::OP_IN: priority=10; break; + + case Variant::OP_NOT: priority=11; unary=true; break; + case Variant::OP_AND: priority=12; break; + case Variant::OP_OR: priority=13; break; + + + default: { + _set_error("Parser bug, invalid operator in expression: "+itos(expression[i].op)); + return NULL; + } + + } + + if (priority<min_priority) { + // < is used for left to right (default) + // <= is used for right to left + + next_op=i; + min_priority=priority; + is_unary=unary; + } + + } + + if (next_op==-1) { + + + _set_error("Yet another parser bug...."); + ERR_FAIL_COND_V(next_op==-1,NULL); + } + + + // OK! create operator.. + if (is_unary) { + + int expr_pos=next_op; + while(expression[expr_pos].is_op) { + + expr_pos++; + if (expr_pos==expression.size()) { + //can happen.. + _set_error("Unexpected end of expression.."); + return NULL; + } + } + + //consecutively do unary opeators + for(int i=expr_pos-1;i>=next_op;i--) { + + OperatorNode *op = alloc_node<OperatorNode>(); + op->op=expression[i].op; + op->nodes[0]=expression[i+1].node; + op->nodes[1]=NULL; + expression[i].is_op=false; + expression[i].node=op; + expression.remove(i+1); + } + + + } else { + + if (next_op <1 || next_op>=(expression.size()-1)) { + _set_error("Parser bug.."); + ERR_FAIL_V(NULL); + } + + OperatorNode *op = alloc_node<OperatorNode>(); + op->op=expression[next_op].op; + + if (expression[next_op-1].is_op) { + + _set_error("Parser bug.."); + ERR_FAIL_V(NULL); + } + + if (expression[next_op+1].is_op) { + // this is not invalid and can really appear + // but it becomes invalid anyway because no binary op + // can be followed by an unary op in a valid combination, + // due to how precedence works, unaries will always dissapear first + + _set_error("Unexpected two consecutive operators."); + return NULL; + } + + + op->nodes[0]=expression[next_op-1].node; //expression goes as left + op->nodes[1]=expression[next_op+1].node; //next expression goes as right + + //replace all 3 nodes by this operator and make it an expression + expression[next_op-1].node=op; + expression.remove(next_op); + expression.remove(next_op); + } + } + + return expression[0].node; +} + +bool VisualScriptExpression::_compile_expression() { + + if (!expression_dirty) + return error_set; + + if (nodes) { + memdelete(nodes); + nodes=NULL; + root=NULL; + + } + + error_str=String(); + error_set=false; + str_ofs=0; + + root=_parse_expression(); + + if (error_set) { + root=NULL; + if (nodes) { + memdelete(nodes); + } + nodes=NULL; + return true; + } + + expression_dirty=false; + return false; +} + + +class VisualScriptNodeInstanceExpression : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + VisualScriptExpression *expression; + + //virtual int get_working_memory_size() const { return 0; } + //execute by parsing the tree directly + virtual bool _execute(const Variant** p_inputs,VisualScriptExpression::ENode *p_node,Variant& r_ret,String& r_error_str,Variant::CallError &ce) { + + switch(p_node->type) { + case VisualScriptExpression::ENode::TYPE_INPUT: { + + const VisualScriptExpression::InputNode *in = static_cast<const VisualScriptExpression::InputNode*>(p_node); + r_ret=*p_inputs[in->index]; + } break; + case VisualScriptExpression::ENode::TYPE_CONSTANT: { + + const VisualScriptExpression::ConstantNode *c = static_cast<const VisualScriptExpression::ConstantNode*>(p_node); + r_ret=c->value; + + } break; + case VisualScriptExpression::ENode::TYPE_SELF: { + + r_ret=instance->get_owner_ptr(); + } break; + case VisualScriptExpression::ENode::TYPE_OPERATOR: { + + + const VisualScriptExpression::OperatorNode *op = static_cast<const VisualScriptExpression::OperatorNode*>(p_node); + + Variant a; + bool ret = _execute(p_inputs,op->nodes[0],a,r_error_str,ce); + if (ret) + return true; + + Variant b; + + if (op->nodes[1]) { + ret = _execute(p_inputs,op->nodes[1],b,r_error_str,ce); + if (ret) + return true; + } + + bool valid=true; + Variant::evaluate(op->op,a,b,r_ret,valid); + if (!valid) { + r_error_str="Invalid operands to operator "+Variant::get_operator_name(op->op)+": "+Variant::get_type_name(a.get_type())+" and "+Variant::get_type_name(b.get_type())+"."; + return true; + } + + } break; + case VisualScriptExpression::ENode::TYPE_INDEX: { + + const VisualScriptExpression::IndexNode *index = static_cast<const VisualScriptExpression::IndexNode*>(p_node); + + Variant base; + bool ret = _execute(p_inputs,index->base,base,r_error_str,ce); + if (ret) + return true; + + Variant idx; + + ret = _execute(p_inputs,index->index,idx,r_error_str,ce); + if (ret) + return true; + + bool valid; + r_ret=base.get(idx,&valid); + if (!valid) { + r_error_str="Invalid index of type "+Variant::get_type_name(idx.get_type())+" for base of type "+Variant::get_type_name(base.get_type())+"."; + return true; + } + + + + } break; + case VisualScriptExpression::ENode::TYPE_NAMED_INDEX: { + + const VisualScriptExpression::NamedIndexNode *index = static_cast<const VisualScriptExpression::NamedIndexNode*>(p_node); + + Variant base; + bool ret = _execute(p_inputs,index->base,base,r_error_str,ce); + if (ret) + return true; + + bool valid; + r_ret=base.get_named(index->name,&valid); + if (!valid) { + r_error_str="Invalid index '"+String(index->name)+"' for base of type "+Variant::get_type_name(base.get_type())+"."; + return true; + } + + } break; + case VisualScriptExpression::ENode::TYPE_ARRAY: { + const VisualScriptExpression::ArrayNode *array = static_cast<const VisualScriptExpression::ArrayNode*>(p_node); + + Array arr; + arr.resize(array->array.size()); + for (int i=0;i<array->array.size();i++) { + + Variant value; + bool ret = _execute(p_inputs,array->array[i],value,r_error_str,ce); + if (ret) + return true; + arr[i]=value; + } + + r_ret=arr; + + } break; + case VisualScriptExpression::ENode::TYPE_DICTIONARY: { + const VisualScriptExpression::DictionaryNode *dictionary = static_cast<const VisualScriptExpression::DictionaryNode*>(p_node); + + Dictionary d; + for (int i=0;i<dictionary->dict.size();i+=2) { + + Variant key; + bool ret = _execute(p_inputs,dictionary->dict[i+0],key,r_error_str,ce); + if (ret) + return true; + + Variant value; + ret = _execute(p_inputs,dictionary->dict[i+1],value,r_error_str,ce); + if (ret) + return true; + + d[key]=value; + } + + r_ret=d; + } break; + case VisualScriptExpression::ENode::TYPE_CONSTRUCTOR: { + + const VisualScriptExpression::ConstructorNode *constructor = static_cast<const VisualScriptExpression::ConstructorNode*>(p_node); + + Vector<Variant> arr; + Vector<const Variant*> argp; + arr.resize(constructor->arguments.size()); + argp.resize(constructor->arguments.size()); + + for (int i=0;i<constructor->arguments.size();i++) { + + Variant value; + bool ret = _execute(p_inputs,constructor->arguments[i],value,r_error_str,ce); + if (ret) + return true; + arr[i]=value; + argp[i]=&arr[i]; + } + + + r_ret=Variant::construct(constructor->data_type,argp.ptr(),argp.size(),ce); + + if (ce.error!=Variant::CallError::CALL_OK) { + r_error_str="Invalid arguments to construct '"+Variant::get_type_name(constructor->data_type)+"'."; + return true; + } + + + } break; + case VisualScriptExpression::ENode::TYPE_BUILTIN_FUNC: { + + const VisualScriptExpression::BuiltinFuncNode *bifunc = static_cast<const VisualScriptExpression::BuiltinFuncNode*>(p_node); + + Vector<Variant> arr; + Vector<const Variant*> argp; + arr.resize(bifunc->arguments.size()); + argp.resize(bifunc->arguments.size()); + + for (int i=0;i<bifunc->arguments.size();i++) { + + Variant value; + bool ret = _execute(p_inputs,bifunc->arguments[i],value,r_error_str,ce); + if (ret) + return true; + arr[i]=value; + argp[i]=&arr[i]; + } + + + VisualScriptBuiltinFunc::exec_func(bifunc->func,argp.ptr(),&r_ret,ce,r_error_str); + + if (ce.error!=Variant::CallError::CALL_OK) { + r_error_str="Builtin Call Failed. "+r_error_str; + return true; + } + + } break; + case VisualScriptExpression::ENode::TYPE_CALL: { + + const VisualScriptExpression::CallNode *call = static_cast<const VisualScriptExpression::CallNode*>(p_node); + + + Variant base; + bool ret = _execute(p_inputs,call->base,base,r_error_str,ce); + if (ret) + return true; + + Vector<Variant> arr; + Vector<const Variant*> argp; + arr.resize(call->arguments.size()); + argp.resize(call->arguments.size()); + + for (int i=0;i<call->arguments.size();i++) { + + Variant value; + bool ret = _execute(p_inputs,call->arguments[i],value,r_error_str,ce); + if (ret) + return true; + arr[i]=value; + argp[i]=&arr[i]; + } + + + r_ret=base.call(call->method,argp.ptr(),argp.size(),ce); + + if (ce.error!=Variant::CallError::CALL_OK) { + r_error_str="On call to '"+String(call->method)+"':"; + return true; + } + + } break; + } + return false; + } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (!expression->root || expression->error_set) { + r_error_str=expression->error_str; + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + return 0; + } + + + bool error = _execute(p_inputs,expression->root,*p_outputs[0],r_error_str,r_error); + if (error && r_error.error==Variant::CallError::CALL_OK) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + } + +#ifdef DEBUG_ENABLED + if (!error && expression->output_type!=Variant::NIL && !Variant::can_convert_strict(p_outputs[0]->get_type(),expression->output_type)) { + + r_error_str+="Can't convert expression result from "+Variant::get_type_name(p_outputs[0]->get_type())+" to "+Variant::get_type_name(expression->output_type)+"."; + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + + } +#endif + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptExpression::instance(VisualScriptInstance* p_instance){ + + _compile_expression(); + VisualScriptNodeInstanceExpression *instance = memnew( VisualScriptNodeInstanceExpression ); + instance->instance=p_instance; + instance->expression=this; + return instance; +} + + +VisualScriptExpression::VisualScriptExpression() +{ + output_type=Variant::NIL; + expression_dirty=true; + error_set=true; + root=NULL; + nodes=NULL; + sequenced=false; +} + +VisualScriptExpression::~VisualScriptExpression() { + + if (nodes) { + memdelete(nodes); + } +} + + +void register_visual_script_expression_node() { + + VisualScriptLanguage::singleton->add_register_func("operators/expression",create_node_generic<VisualScriptExpression>); + +} diff --git a/modules/visual_script/visual_script_expression.h b/modules/visual_script/visual_script_expression.h new file mode 100644 index 0000000000..4edae133c7 --- /dev/null +++ b/modules/visual_script/visual_script_expression.h @@ -0,0 +1,280 @@ +#ifndef VISUALSCRIPTEXPRESSION_H +#define VISUALSCRIPTEXPRESSION_H + +#include "visual_script.h" +#include "visual_script_builtin_funcs.h" + +class VisualScriptExpression : public VisualScriptNode { + + OBJ_TYPE(VisualScriptExpression,VisualScriptNode) +friend class VisualScriptNodeInstanceExpression; + + struct Input { + + Variant::Type type; + String name; + + Input() { type=Variant::NIL; } + }; + + Vector<Input> inputs; + Variant::Type output_type; + + String expression; + + bool sequenced; + int str_ofs; + bool expression_dirty; + + bool _compile_expression(); + + enum TokenType { + TK_CURLY_BRACKET_OPEN, + TK_CURLY_BRACKET_CLOSE, + TK_BRACKET_OPEN, + TK_BRACKET_CLOSE, + TK_PARENTHESIS_OPEN, + TK_PARENTHESIS_CLOSE, + TK_IDENTIFIER, + TK_BUILTIN_FUNC, + TK_SELF, + TK_CONSTANT, + TK_BASIC_TYPE, + TK_COLON, + TK_COMMA, + TK_PERIOD, + TK_OP_IN, + TK_OP_EQUAL, + TK_OP_NOT_EQUAL, + TK_OP_LESS, + TK_OP_LESS_EQUAL, + TK_OP_GREATER, + TK_OP_GREATER_EQUAL, + TK_OP_AND, + TK_OP_OR, + TK_OP_NOT, + TK_OP_ADD, + TK_OP_SUB, + TK_OP_MUL, + TK_OP_DIV, + TK_OP_MOD, + TK_OP_SHIFT_LEFT, + TK_OP_SHIFT_RIGHT, + TK_OP_BIT_AND, + TK_OP_BIT_OR, + TK_OP_BIT_XOR, + TK_OP_BIT_INVERT, + TK_EOF, + TK_ERROR, + TK_MAX + }; + + static const char* token_name[TK_MAX]; + struct Token { + + TokenType type; + Variant value; + }; + + + void _set_error(const String& p_err) { + if (error_set) + return; + error_str=p_err; + error_set=true; + } + + Error _get_token(Token& r_token); + + String error_str; + bool error_set; + + + + struct ENode { + + enum Type { + TYPE_INPUT, + TYPE_CONSTANT, + TYPE_SELF, + TYPE_OPERATOR, + TYPE_INDEX, + TYPE_NAMED_INDEX, + TYPE_ARRAY, + TYPE_DICTIONARY, + TYPE_CONSTRUCTOR, + TYPE_BUILTIN_FUNC, + TYPE_CALL + }; + + ENode *next; + + Type type; + + ENode() { next=NULL; } + virtual ~ENode() { if (next) { memdelete(next); } } + }; + + struct Expression { + + bool is_op; + union { + Variant::Operator op; + ENode *node; + }; + }; + + ENode* _parse_expression(); + + struct InputNode : public ENode { + + int index; + InputNode() { + type=TYPE_INPUT; + } + }; + + + struct ConstantNode : public ENode { + + Variant value; + ConstantNode() { + type=TYPE_CONSTANT; + } + }; + + struct OperatorNode : public ENode { + + Variant::Operator op; + + ENode* nodes[2]; + + OperatorNode() { + type=TYPE_OPERATOR; + } + }; + + struct SelfNode : public ENode { + + + SelfNode() { + type=TYPE_SELF; + } + }; + + struct IndexNode : public ENode { + ENode*base; + ENode*index; + + IndexNode() { + type=TYPE_INDEX; + } + }; + + struct NamedIndexNode : public ENode { + ENode*base; + StringName name; + + NamedIndexNode() { + type=TYPE_NAMED_INDEX; + } + + }; + + struct ConstructorNode : public ENode { + Variant::Type data_type; + Vector<ENode*> arguments; + + ConstructorNode() { + type=TYPE_CONSTRUCTOR; + } + }; + + struct CallNode : public ENode { + ENode*base; + StringName method; + Vector<ENode*> arguments; + + CallNode() { + type=TYPE_CALL; + } + + }; + + struct ArrayNode : public ENode { + Vector<ENode*> array; + ArrayNode() { + type=TYPE_ARRAY; + } + + }; + + struct DictionaryNode : public ENode { + Vector<ENode*> dict; + DictionaryNode() { + type=TYPE_DICTIONARY; + } + + }; + + struct BuiltinFuncNode : public ENode { + VisualScriptBuiltinFunc::BuiltinFunc func; + Vector<ENode*> arguments; + BuiltinFuncNode() { + type=TYPE_BUILTIN_FUNC; + } + }; + + template<class T> + T* alloc_node() { + T* node = memnew(T); + node->next=nodes; + nodes=node; + return node; + } + + ENode *root; + ENode *nodes; + + + + + +protected: + + bool _set(const StringName& p_name, const Variant& p_value); + bool _get(const StringName& p_name,Variant &r_ret) const; + void _get_property_list( List<PropertyInfo> *p_list) const; + +public: + + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "operators"; } + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptExpression(); + ~VisualScriptExpression(); +}; + + +void register_visual_script_expression_node(); + + +#endif // VISUALSCRIPTEXPRESSION_H diff --git a/modules/visual_script/visual_script_flow_control.cpp b/modules/visual_script/visual_script_flow_control.cpp new file mode 100644 index 0000000000..97338da187 --- /dev/null +++ b/modules/visual_script/visual_script_flow_control.cpp @@ -0,0 +1,1940 @@ +#include "visual_script_flow_control.h" +#include "os/keyboard.h" +#include "globals.h" + + +////////////////////////////////////////// +////////////////RETURN//////////////////// +////////////////////////////////////////// + +int VisualScriptReturn::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptReturn::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptReturn::get_input_value_port_count() const{ + + return with_value?1:0; +} +int VisualScriptReturn::get_output_value_port_count() const{ + + return 0; +} + +String VisualScriptReturn::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptReturn::get_input_value_port_info(int p_idx) const{ + + PropertyInfo pinfo; + pinfo.name="result"; + pinfo.type=type; + return pinfo; +} +PropertyInfo VisualScriptReturn::get_output_value_port_info(int p_idx) const{ + return PropertyInfo(); +} + +String VisualScriptReturn::get_caption() const { + + return "Return"; +} + +String VisualScriptReturn::get_text() const { + + return get_name(); +} + +void VisualScriptReturn::set_return_type(Variant::Type p_type) { + + if (type==p_type) + return; + type=p_type; + ports_changed_notify(); + +} + +Variant::Type VisualScriptReturn::get_return_type() const{ + + return type; +} + +void VisualScriptReturn::set_enable_return_value(bool p_enable) { + if (with_value==p_enable) + return; + + with_value=p_enable; + ports_changed_notify(); +} + +bool VisualScriptReturn::is_return_value_enabled() const { + + return with_value; +} + +void VisualScriptReturn::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_return_type","type"),&VisualScriptReturn::set_return_type); + ObjectTypeDB::bind_method(_MD("get_return_type"),&VisualScriptReturn::get_return_type); + ObjectTypeDB::bind_method(_MD("set_enable_return_value","enable"),&VisualScriptReturn::set_enable_return_value); + ObjectTypeDB::bind_method(_MD("is_return_value_enabled"),&VisualScriptReturn::is_return_value_enabled); + + String argt="Any"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + + ADD_PROPERTY(PropertyInfo(Variant::BOOL,"return_value/enabled"),_SCS("set_enable_return_value"),_SCS("is_return_value_enabled")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"return_value/type",PROPERTY_HINT_ENUM,argt),_SCS("set_return_type"),_SCS("get_return_type")); + +} + +class VisualScriptNodeInstanceReturn : public VisualScriptNodeInstance { +public: + + VisualScriptReturn *node; + VisualScriptInstance *instance; + bool with_value; + + virtual int get_working_memory_size() const { return 1; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (with_value) { + *p_working_mem = *p_inputs[0]; + } else { + *p_working_mem = Variant(); + } + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptReturn::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceReturn * instance = memnew(VisualScriptNodeInstanceReturn ); + instance->node=this; + instance->instance=p_instance; + instance->with_value=with_value; + return instance; +} + +VisualScriptReturn::VisualScriptReturn() { + + with_value=false; + type=Variant::NIL; +} + +template<bool with_value> +static Ref<VisualScriptNode> create_return_node(const String& p_name) { + + Ref<VisualScriptReturn> node; + node.instance(); + node->set_enable_return_value(with_value); + return node; +} + + + +////////////////////////////////////////// +////////////////CONDITION///////////////// +////////////////////////////////////////// + +int VisualScriptCondition::get_output_sequence_port_count() const { + + return 3; +} + +bool VisualScriptCondition::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptCondition::get_input_value_port_count() const{ + + return 1; +} +int VisualScriptCondition::get_output_value_port_count() const{ + + return 0; +} + +String VisualScriptCondition::get_output_sequence_port_text(int p_port) const { + + if (p_port==0) + return "true"; + else if (p_port==1) + return "false"; + else + return "done"; +} + +PropertyInfo VisualScriptCondition::get_input_value_port_info(int p_idx) const{ + + PropertyInfo pinfo; + pinfo.name="cond"; + pinfo.type=Variant::BOOL; + return pinfo; +} +PropertyInfo VisualScriptCondition::get_output_value_port_info(int p_idx) const{ + return PropertyInfo(); +} + +String VisualScriptCondition::get_caption() const { + + return "Condition"; +} + +String VisualScriptCondition::get_text() const { + + return "if (cond) is: "; +} + + +void VisualScriptCondition::_bind_methods() { + + + +} + +class VisualScriptNodeInstanceCondition : public VisualScriptNodeInstance { +public: + + VisualScriptCondition *node; + VisualScriptInstance *instance; + + //virtual int get_working_memory_size() const { return 1; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (p_start_mode==START_MODE_CONTINUE_SEQUENCE) + return 2; + else if (p_inputs[0]->operator bool()) + return 0 | STEP_FLAG_PUSH_STACK_BIT; + else + return 1 | STEP_FLAG_PUSH_STACK_BIT; + } + + +}; + +VisualScriptNodeInstance* VisualScriptCondition::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceCondition * instance = memnew(VisualScriptNodeInstanceCondition ); + instance->node=this; + instance->instance=p_instance; + return instance; +} + +VisualScriptCondition::VisualScriptCondition() { + +} + + + +////////////////////////////////////////// +////////////////WHILE///////////////// +////////////////////////////////////////// + +int VisualScriptWhile::get_output_sequence_port_count() const { + + return 2; +} + +bool VisualScriptWhile::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptWhile::get_input_value_port_count() const{ + + return 1; +} +int VisualScriptWhile::get_output_value_port_count() const{ + + return 0; +} + +String VisualScriptWhile::get_output_sequence_port_text(int p_port) const { + + if (p_port==0) + return "repeat"; + else + return "exit"; +} + +PropertyInfo VisualScriptWhile::get_input_value_port_info(int p_idx) const{ + + PropertyInfo pinfo; + pinfo.name="cond"; + pinfo.type=Variant::BOOL; + return pinfo; +} +PropertyInfo VisualScriptWhile::get_output_value_port_info(int p_idx) const{ + return PropertyInfo(); +} + +String VisualScriptWhile::get_caption() const { + + return "While"; +} + +String VisualScriptWhile::get_text() const { + + return "while (cond): "; +} + + +void VisualScriptWhile::_bind_methods() { + + + +} + +class VisualScriptNodeInstanceWhile : public VisualScriptNodeInstance { +public: + + VisualScriptWhile *node; + VisualScriptInstance *instance; + + //virtual int get_working_memory_size() const { return 1; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + bool keep_going = p_inputs[0]->operator bool(); + + if (keep_going) + return 0|STEP_FLAG_PUSH_STACK_BIT; + else + return 1; + } + + +}; + +VisualScriptNodeInstance* VisualScriptWhile::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceWhile * instance = memnew(VisualScriptNodeInstanceWhile ); + instance->node=this; + instance->instance=p_instance; + return instance; +} +VisualScriptWhile::VisualScriptWhile() { + +} + + + +////////////////////////////////////////// +////////////////ITERATOR///////////////// +////////////////////////////////////////// + +int VisualScriptIterator::get_output_sequence_port_count() const { + + return 2; +} + +bool VisualScriptIterator::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptIterator::get_input_value_port_count() const{ + + return 1; +} +int VisualScriptIterator::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptIterator::get_output_sequence_port_text(int p_port) const { + + if (p_port==0) + return "each"; + else + return "exit"; +} + +PropertyInfo VisualScriptIterator::get_input_value_port_info(int p_idx) const{ + + PropertyInfo pinfo; + pinfo.name="input"; + pinfo.type=Variant::NIL; + return pinfo; +} +PropertyInfo VisualScriptIterator::get_output_value_port_info(int p_idx) const{ + PropertyInfo pinfo; + pinfo.name="elem"; + pinfo.type=Variant::NIL; + return pinfo; +} +String VisualScriptIterator::get_caption() const { + + return "Iterator"; +} + +String VisualScriptIterator::get_text() const { + + return "for (elem) in (input): "; +} + + +void VisualScriptIterator::_bind_methods() { + + + +} + +class VisualScriptNodeInstanceIterator : public VisualScriptNodeInstance { +public: + + VisualScriptIterator *node; + VisualScriptInstance *instance; + + virtual int get_working_memory_size() const { return 2; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (p_start_mode==START_MODE_BEGIN_SEQUENCE) { + p_working_mem[0]=*p_inputs[0]; + bool valid; + bool can_iter = p_inputs[0]->iter_init(p_working_mem[1],valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str=RTR("Input type not iterable: ")+Variant::get_type_name(p_inputs[0]->get_type()); + return 0; + } + + if (!can_iter) + return 1; //nothing to iterate + + + *p_outputs[0]=p_working_mem[0].iter_get( p_working_mem[1],valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str=RTR("Iterator became invalid"); + return 0; + } + + + } else { //continue sequence + + bool valid; + bool can_iter = p_working_mem[0].iter_next(p_working_mem[1],valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str=RTR("Iterator became invalid: ")+Variant::get_type_name(p_inputs[0]->get_type()); + return 0; + } + + if (!can_iter) + return 1; //nothing to iterate + + + *p_outputs[0]=p_working_mem[0].iter_get( p_working_mem[1],valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str=RTR("Iterator became invalid"); + return 0; + } + + } + + return 0|STEP_FLAG_PUSH_STACK_BIT; //go around + } + + +}; + +VisualScriptNodeInstance* VisualScriptIterator::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceIterator * instance = memnew(VisualScriptNodeInstanceIterator ); + instance->node=this; + instance->instance=p_instance; + return instance; +} + +VisualScriptIterator::VisualScriptIterator() { + +} + + + +////////////////////////////////////////// +////////////////SEQUENCE///////////////// +////////////////////////////////////////// + +int VisualScriptSequence::get_output_sequence_port_count() const { + + return steps; +} + +bool VisualScriptSequence::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptSequence::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptSequence::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptSequence::get_output_sequence_port_text(int p_port) const { + + return itos(p_port+1); +} + +PropertyInfo VisualScriptSequence::get_input_value_port_info(int p_idx) const{ + return PropertyInfo(); +} +PropertyInfo VisualScriptSequence::get_output_value_port_info(int p_idx) const{ + return PropertyInfo(Variant::INT,"current"); +} +String VisualScriptSequence::get_caption() const { + + return "Sequence"; +} + +String VisualScriptSequence::get_text() const { + + return "in order: "; +} + +void VisualScriptSequence::set_steps(int p_steps) { + + ERR_FAIL_COND(p_steps<1); + if (steps==p_steps) + return; + + steps=p_steps; + ports_changed_notify(); + +} + +int VisualScriptSequence::get_steps() const { + + return steps; +} + +void VisualScriptSequence::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_steps","steps"),&VisualScriptSequence::set_steps); + ObjectTypeDB::bind_method(_MD("get_steps"),&VisualScriptSequence::get_steps); + + ADD_PROPERTY(PropertyInfo(Variant::INT,"steps",PROPERTY_HINT_RANGE,"1,64,1"),_SCS("set_steps"),_SCS("get_steps")); + +} + +class VisualScriptNodeInstanceSequence : public VisualScriptNodeInstance { +public: + + VisualScriptSequence *node; + VisualScriptInstance *instance; + int steps; + + virtual int get_working_memory_size() const { return 1; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (p_start_mode==START_MODE_BEGIN_SEQUENCE) { + + p_working_mem[0]=0; + } + + int step = p_working_mem[0]; + + *p_outputs[0]=step; + + if (step+1==steps) + return step; + else { + p_working_mem[0]=step+1; + return step|STEP_FLAG_PUSH_STACK_BIT; + } + + } + + +}; + +VisualScriptNodeInstance* VisualScriptSequence::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceSequence * instance = memnew(VisualScriptNodeInstanceSequence ); + instance->node=this; + instance->instance=p_instance; + instance->steps=steps; + return instance; +} +VisualScriptSequence::VisualScriptSequence() { + + steps=1; +} + + +////////////////////////////////////////// +////////////////EVENT TYPE FILTER/////////// +////////////////////////////////////////// + +int VisualScriptSwitch::get_output_sequence_port_count() const { + + return case_values.size()+1; +} + +bool VisualScriptSwitch::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptSwitch::get_input_value_port_count() const{ + + + return case_values.size()+1; +} +int VisualScriptSwitch::get_output_value_port_count() const{ + + return 0; +} + +String VisualScriptSwitch::get_output_sequence_port_text(int p_port) const { + + if (p_port==case_values.size()) + return "done"; + + return String(); +} + +PropertyInfo VisualScriptSwitch::get_input_value_port_info(int p_idx) const{ + + if (p_idx<case_values.size()) { + return PropertyInfo(case_values[p_idx].type," ="); + } else + return PropertyInfo(Variant::NIL,"input"); +} + +PropertyInfo VisualScriptSwitch::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + + +String VisualScriptSwitch::get_caption() const { + + return "Switch"; +} + +String VisualScriptSwitch::get_text() const { + + return "'input' is:"; +} + + +class VisualScriptNodeInstanceSwitch : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + int case_count; + + //virtual int get_working_memory_size() const { return 0; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return false; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (p_start_mode==START_MODE_CONTINUE_SEQUENCE) { + return case_count; //exit + } + + for(int i=0;i<case_count;i++) { + + if (*p_inputs[i]==*p_inputs[case_count]) { + return i|STEP_FLAG_PUSH_STACK_BIT; + } + } + + return case_count; + } + + +}; + +VisualScriptNodeInstance* VisualScriptSwitch::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceSwitch * instance = memnew(VisualScriptNodeInstanceSwitch ); + instance->instance=p_instance; + instance->case_count=case_values.size(); + return instance; +} + +bool VisualScriptSwitch::_set(const StringName& p_name, const Variant& p_value) { + + if (String(p_name)=="case_count") { + case_values.resize(p_value); + _change_notify(); + ports_changed_notify(); + return true; + } + + if (String(p_name).begins_with("case/")) { + + int idx = String(p_name).get_slice("/",1).to_int(); + ERR_FAIL_INDEX_V(idx,case_values.size(),false); + + case_values[idx].type=Variant::Type(int(p_value)); + _change_notify(); + ports_changed_notify(); + + return true; + } + + return false; +} + +bool VisualScriptSwitch::_get(const StringName& p_name,Variant &r_ret) const { + + if (String(p_name)=="case_count") { + r_ret=case_values.size(); + return true; + } + + if (String(p_name).begins_with("case/")) { + + int idx = String(p_name).get_slice("/",1).to_int(); + ERR_FAIL_INDEX_V(idx,case_values.size(),false); + + r_ret=case_values[idx].type; + return true; + } + + return false; + +} +void VisualScriptSwitch::_get_property_list( List<PropertyInfo> *p_list) const { + + p_list->push_back(PropertyInfo(Variant::INT,"case_count",PROPERTY_HINT_RANGE,"0,128")); + + String argt="Any"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + + for(int i=0;i<case_values.size();i++) { + p_list->push_back(PropertyInfo(Variant::INT,"case/"+itos(i),PROPERTY_HINT_ENUM,argt)); + } +} + + +void VisualScriptSwitch::_bind_methods() { + + +} + +VisualScriptSwitch::VisualScriptSwitch() { + + +} + +////////////////////////////////////////// +////////////////EVENT ACTION FILTER/////////// +////////////////////////////////////////// + + +int VisualScriptInputFilter::get_output_sequence_port_count() const { + + return filters.size(); +} + +bool VisualScriptInputFilter::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptInputFilter::get_input_value_port_count() const{ + + + return 1; +} +int VisualScriptInputFilter::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptInputFilter::get_output_sequence_port_text(int p_port) const { + + String text; + + switch(filters[p_port].type) { + case InputEvent::NONE: { + text="None"; + } break; + case InputEvent::KEY: { + + InputEventKey k = filters[p_port].key; + + if (k.scancode==0 && k.unicode==0) { + text="No Key"; + } else { + if (k.scancode!=0) { + text="KeyCode: "+keycode_get_string(k.scancode); + } else if (k.unicode!=0) { + text="Uniode: "+String::chr(k.unicode); + } + + if (k.pressed) + text+=", Pressed"; + else + text+=", Released"; + + if (k.echo) + text+=", Echo"; + if (k.mod.alt) + text="Alt+"+text; + if (k.mod.shift) + text="Shift+"+text; + if (k.mod.control) + text="Ctrl+"+text; + if (k.mod.meta) + text="Meta+"+text; + } + + } break; + case InputEvent::MOUSE_MOTION: { + InputEventMouseMotion mm = filters[p_port].mouse_motion; + text="Mouse Motion"; + + String b = "Left,Right,Middle,WheelUp,WheelDown,WheelLeft,WheelRight"; + + for(int i=0;i<7;i++) { + if (mm.button_mask&(1<<i)) { + text=b.get_slice(",",i)+"+"+text; + } + } + if (mm.mod.alt) + text="Alt+"+text; + if (mm.mod.shift) + text="Shift+"+text; + if (mm.mod.control) + text="Ctrl+"+text; + if (mm.mod.meta) + text="Meta+"+text; + } break; + case InputEvent::MOUSE_BUTTON: { + + InputEventMouseButton mb = filters[p_port].mouse_button; + + String b = "Any,Left,Right,Middle,WheelUp,WheelDown,WheelLeft,WheelRight"; + + text=b.get_slice(",",mb.button_index)+" Mouse Button"; + + if (mb.pressed) + text+=", Pressed"; + else + text+=", Released"; + + if (mb.doubleclick) + text+=", DblClick"; + if (mb.mod.alt) + text="Alt+"+text; + if (mb.mod.shift) + text="Shift+"+text; + if (mb.mod.control) + text="Ctrl+"+text; + if (mb.mod.meta) + text="Meta+"+text; + + + } break; + case InputEvent::JOYSTICK_MOTION: { + + InputEventJoystickMotion jm = filters[p_port].joy_motion; + + text="JoyMotion Axis "+itos(jm.axis>>1); + if (jm.axis&1) + text+=" > "+rtos(jm.axis_value); + else + text+=" < "+rtos(-jm.axis_value); + + } break; + case InputEvent::JOYSTICK_BUTTON: { + InputEventJoystickButton jb = filters[p_port].joy_button; + + text="JoyButton "+itos(jb.button_index); + if (jb.pressed) + text+=", Pressed"; + else + text+=", Released"; + } break; + case InputEvent::SCREEN_TOUCH: { + InputEventScreenTouch sd = filters[p_port].screen_touch; + + text="Touch Finger "+itos(sd.index); + if (sd.pressed) + text+=", Pressed"; + else + text+=", Released"; + } break; + case InputEvent::SCREEN_DRAG: { + InputEventScreenDrag sd = filters[p_port].screen_drag; + text="Drag Finger "+itos(sd.index); + } break; + case InputEvent::ACTION: { + + + List<PropertyInfo> pinfo; + Globals::get_singleton()->get_property_list(&pinfo); + int index=1; + + text="No Action"; + for(List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) { + const PropertyInfo &pi=E->get(); + + if (!pi.name.begins_with("input/")) + continue; + + + if (filters[p_port].action.action==index) { + text="Action "+pi.name.substr(pi.name.find("/")+1,pi.name.length()); + break; + } + index++; + } + + if (filters[p_port].action.pressed) + text+=", Pressed"; + else + text+=", Released"; + + + } break; + } + + + + return text+" - "+itos(p_port); +} + +PropertyInfo VisualScriptInputFilter::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::INPUT_EVENT,"event"); +} + +PropertyInfo VisualScriptInputFilter::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::INPUT_EVENT,""); +} + + +String VisualScriptInputFilter::get_caption() const { + + return "InputFilter"; +} + +String VisualScriptInputFilter::get_text() const { + + return ""; +} + + + +bool VisualScriptInputFilter::_set(const StringName& p_name, const Variant& p_value) { + + if (p_name=="filter_count") { + filters.resize(p_value); + _change_notify(); + ports_changed_notify(); + return true; + } + + + if (String(p_name).begins_with("filter_")) { + + int idx = String(p_name).replace_first("filters_","").get_slice("/",0).to_int(); + + ERR_FAIL_INDEX_V(idx,filters.size(),false); + + String what = String(p_name).get_slice("/",1); + + + if (what=="type") { + filters[idx]=InputEvent(); + filters[idx].type=InputEvent::Type(int(p_value)); + if (filters[idx].type==InputEvent::JOYSTICK_MOTION) { + filters[idx].joy_motion.axis_value=0.5; //for treshold + } else if (filters[idx].type==InputEvent::KEY) { + filters[idx].key.pressed=true; //put these as true to make it more user friendly + } else if (filters[idx].type==InputEvent::MOUSE_BUTTON) { + filters[idx].mouse_button.pressed=true; + } else if (filters[idx].type==InputEvent::JOYSTICK_BUTTON) { + filters[idx].joy_button.pressed=true; + } else if (filters[idx].type==InputEvent::SCREEN_TOUCH) { + filters[idx].screen_touch.pressed=true; + } else if (filters[idx].type==InputEvent::ACTION) { + filters[idx].action.pressed=true; + } + _change_notify(); + ports_changed_notify(); + + return true; + } + if (what=="device") { + filters[idx].device=p_value; + ports_changed_notify(); + return true; + } + + switch(filters[idx].type) { + + case InputEvent::KEY: { + + if (what=="scancode") { + String sc = p_value; + if (sc==String()) { + filters[idx].key.scancode=0; + } else { + filters[idx].key.scancode=find_keycode(p_value); + } + + } else if (what=="unicode") { + + String uc = p_value; + + if (uc==String()) { + filters[idx].key.unicode=0; + } else { + filters[idx].key.unicode=uc[0]; + } + + } else if (what=="pressed") { + + filters[idx].key.pressed=p_value; + } else if (what=="echo") { + + filters[idx].key.echo=p_value; + + } else if (what=="mod_alt") { + filters[idx].key.mod.alt=p_value; + + } else if (what=="mod_shift") { + filters[idx].key.mod.shift=p_value; + + } else if (what=="mod_ctrl") { + filters[idx].key.mod.control=p_value; + + } else if (what=="mod_meta") { + filters[idx].key.mod.meta=p_value; + } else { + return false; + } + ports_changed_notify(); + + return true; + } break; + case InputEvent::MOUSE_MOTION: { + + + if (what=="button_mask") { + filters[idx].mouse_motion.button_mask=p_value; + + } else if (what=="mod_alt") { + filters[idx].mouse_motion.mod.alt=p_value; + + } else if (what=="mod_shift") { + filters[idx].mouse_motion.mod.shift=p_value; + + } else if (what=="mod_ctrl") { + filters[idx].mouse_motion.mod.control=p_value; + + } else if (what=="mod_meta") { + filters[idx].mouse_motion.mod.meta=p_value; + } else { + return false; + } + + ports_changed_notify(); + return true; + + } break; + case InputEvent::MOUSE_BUTTON: { + + if (what=="button_index") { + filters[idx].mouse_button.button_index=p_value; + } else if (what=="pressed") { + filters[idx].mouse_button.pressed=p_value; + } else if (what=="doubleclicked") { + filters[idx].mouse_button.doubleclick=p_value; + + } else if (what=="mod_alt") { + filters[idx].mouse_button.mod.alt=p_value; + + } else if (what=="mod_shift") { + filters[idx].mouse_button.mod.shift=p_value; + + } else if (what=="mod_ctrl") { + filters[idx].mouse_button.mod.control=p_value; + + } else if (what=="mod_meta") { + filters[idx].mouse_button.mod.meta=p_value; + } else { + return false; + } + ports_changed_notify(); + return true; + + } break; + case InputEvent::JOYSTICK_MOTION: { + + if (what=="axis") { + filters[idx].joy_motion.axis=int(p_value)<<1|filters[idx].joy_motion.axis; + } else if (what=="mode") { + filters[idx].joy_motion.axis|=int(p_value); + } else if (what=="treshold") { + filters[idx].joy_motion.axis_value=p_value; + } else { + return false; + } + ports_changed_notify(); + return true; + + + } break; + case InputEvent::JOYSTICK_BUTTON: { + + if (what=="button_index") { + filters[idx].joy_button.button_index=p_value; + } else if (what=="pressed") { + filters[idx].joy_button.pressed=p_value; + } else { + return false; + } + ports_changed_notify(); + return true; + + } break; + case InputEvent::SCREEN_TOUCH: { + + if (what=="finger_index") { + filters[idx].screen_touch.index=p_value; + } else if (what=="pressed") { + filters[idx].screen_touch.pressed=p_value; + } else { + return false; + } + ports_changed_notify(); + return true; + } break; + case InputEvent::SCREEN_DRAG: { + if (what=="finger_index") { + filters[idx].screen_drag.index=p_value; + } else { + return false; + } + ports_changed_notify(); + return true; + } break; + case InputEvent::ACTION: { + + + if (what=="action_name") { + + List<PropertyInfo> pinfo; + Globals::get_singleton()->get_property_list(&pinfo); + int index=1; + + for(List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) { + const PropertyInfo &pi=E->get(); + + if (!pi.name.begins_with("input/")) + continue; + + String name = pi.name.substr(pi.name.find("/")+1,pi.name.length()); + if (name==String(p_value)) { + + filters[idx].action.action=index; + ports_changed_notify(); + return true; + } + + index++; + } + + filters[idx].action.action=0; + ports_changed_notify(); + + return false; + + } else if (what=="pressed") { + + filters[idx].action.pressed=p_value; + ports_changed_notify(); + return true; + } + + + } break; + + } + } + return false; +} + +bool VisualScriptInputFilter::_get(const StringName& p_name,Variant &r_ret) const{ + + if (p_name=="filter_count") { + r_ret=filters.size(); + return true; + } + + + if (String(p_name).begins_with("filter_")) { + + int idx = String(p_name).replace_first("filters_","").get_slice("/",0).to_int(); + + ERR_FAIL_INDEX_V(idx,filters.size(),false); + + String what = String(p_name).get_slice("/",1); + + + if (what=="type") { + r_ret=filters[idx].type; + return true; + } + if (what=="device") { + r_ret=filters[idx].device; + return true; + } + + switch(filters[idx].type) { + + case InputEvent::KEY: { + + if (what=="scancode") { + if (filters[idx].key.scancode==0) + r_ret=String(); + else { + + r_ret=keycode_get_string(filters[idx].key.scancode); + } + + } else if (what=="unicode") { + + + if (filters[idx].key.unicode==0) { + r_ret=String(); + } else { + CharType str[2]={ (CharType)filters[idx].key.unicode, 0}; + r_ret=String(str); + } + + } else if (what=="pressed") { + + r_ret=filters[idx].key.pressed; + } else if (what=="echo") { + + r_ret=filters[idx].key.echo; + + } else if (what=="mod_alt") { + r_ret=filters[idx].key.mod.alt; + + } else if (what=="mod_shift") { + r_ret=filters[idx].key.mod.shift; + + } else if (what=="mod_ctrl") { + r_ret=filters[idx].key.mod.control; + + } else if (what=="mod_meta") { + r_ret=filters[idx].key.mod.meta; + } else { + return false; + } + + return true; + } break; + case InputEvent::MOUSE_MOTION: { + + + if (what=="button_mask") { + r_ret=filters[idx].mouse_motion.button_mask; + + } else if (what=="mod_alt") { + r_ret=filters[idx].mouse_motion.mod.alt; + + } else if (what=="mod_shift") { + r_ret=filters[idx].mouse_motion.mod.shift; + + } else if (what=="mod_ctrl") { + r_ret=filters[idx].mouse_motion.mod.control; + + } else if (what=="mod_meta") { + r_ret=filters[idx].mouse_motion.mod.meta; + } else { + return false; + } + + return true; + + } break; + case InputEvent::MOUSE_BUTTON: { + + if (what=="button_index") { + r_ret=filters[idx].mouse_button.button_index; + } else if (what=="pressed") { + r_ret=filters[idx].mouse_button.pressed; + } else if (what=="doubleclicked") { + r_ret=filters[idx].mouse_button.doubleclick; + + } else if (what=="mod_alt") { + r_ret=filters[idx].mouse_button.mod.alt; + + } else if (what=="mod_shift") { + r_ret=filters[idx].mouse_button.mod.shift; + + } else if (what=="mod_ctrl") { + r_ret=filters[idx].mouse_button.mod.control; + + } else if (what=="mod_meta") { + r_ret=filters[idx].mouse_button.mod.meta; + } else { + return false; + } + return true; + + } break; + case InputEvent::JOYSTICK_MOTION: { + + if (what=="axis_index") { + r_ret=filters[idx].joy_motion.axis>>1; + } else if (what=="mode") { + r_ret=filters[idx].joy_motion.axis&1; + } else if (what=="treshold") { + r_ret=filters[idx].joy_motion.axis_value; + } else { + return false; + } + return true; + + + } break; + case InputEvent::JOYSTICK_BUTTON: { + + if (what=="button_index") { + r_ret=filters[idx].joy_button.button_index; + } else if (what=="pressed") { + r_ret=filters[idx].joy_button.pressed; + } else { + return false; + } + return true; + + } break; + case InputEvent::SCREEN_TOUCH: { + + if (what=="finger_index") { + r_ret=filters[idx].screen_touch.index; + } else if (what=="pressed") { + r_ret=filters[idx].screen_touch.pressed; + } else { + return false; + } + return true; + } break; + case InputEvent::SCREEN_DRAG: { + if (what=="finger_index") { + r_ret=filters[idx].screen_drag.index; + } else { + return false; + } + return true; + } break; + case InputEvent::ACTION: { + + + if (what=="action_name") { + + List<PropertyInfo> pinfo; + Globals::get_singleton()->get_property_list(&pinfo); + int index=1; + + for(List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) { + const PropertyInfo &pi=E->get(); + + if (!pi.name.begins_with("input/")) + continue; + + + if (filters[idx].action.action==index) { + r_ret=pi.name.substr(pi.name.find("/")+1,pi.name.length()); + return true; + } + index++; + } + + r_ret="None"; //no index + return false; + + } else if (what=="pressed") { + + r_ret=filters[idx].action.pressed; + return true; + } + + + } break; + + } + } + return false; +} + +static const char* event_type_names[InputEvent::TYPE_MAX]={ + "None", + "Key", + "MouseMotion", + "MouseButton", + "JoystickMotion", + "JoystickButton", + "ScreenTouch", + "ScreenDrag", + "Action" +}; + +void VisualScriptInputFilter::_get_property_list( List<PropertyInfo> *p_list) const { + + p_list->push_back(PropertyInfo(Variant::INT,"filter_count",PROPERTY_HINT_RANGE,"0,64")); + + String et; + for(int i=0;i<InputEvent::TYPE_MAX;i++) { + if (i>0) + et+=","; + + et+=event_type_names[i]; + } + + String kc; + String actions; + + + + for(int i=0;i<filters.size();i++) { + + String base = "filter_"+itos(i)+"/"; + p_list->push_back(PropertyInfo(Variant::INT,base+"type",PROPERTY_HINT_ENUM,et)); + p_list->push_back(PropertyInfo(Variant::INT,base+"device")); + switch(filters[i].type) { + + case InputEvent::NONE: { + + } break; + case InputEvent::KEY: { + if (kc==String()) { + int kcc = keycode_get_count(); + kc="None"; + for(int i=0;i<kcc;i++) { + kc+=","; + kc+=String(keycode_get_name_by_index(i)); + } + } + p_list->push_back(PropertyInfo(Variant::STRING,base+"scancode",PROPERTY_HINT_ENUM,kc)); + p_list->push_back(PropertyInfo(Variant::STRING,base+"unicode")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"pressed")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"echo")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_alt")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_shift")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_ctrl")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_meta")); + + + } break; + case InputEvent::MOUSE_MOTION: { + p_list->push_back(PropertyInfo(Variant::INT,base+"button_mask",PROPERTY_HINT_FLAGS,"Left,Right,Middle,WheelUp,WheelDown,WheelLeft,WheelRight")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_alt")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_shift")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_ctrl")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_meta")); + + } break; + case InputEvent::MOUSE_BUTTON: { + p_list->push_back(PropertyInfo(Variant::INT,base+"button_index",PROPERTY_HINT_ENUM,"Any,Left,Right,Middle,WheelUp,WheelDown,WheelLeft,WheelRight")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"pressed")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"doubleclicked")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_alt")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_shift")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_ctrl")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"mod_meta")); + + } break; + case InputEvent::JOYSTICK_MOTION: { + + p_list->push_back(PropertyInfo(Variant::INT,base+"axis_index")); + p_list->push_back(PropertyInfo(Variant::INT,base+"mode",PROPERTY_HINT_ENUM,"Min,Max")); + p_list->push_back(PropertyInfo(Variant::REAL,base+"treshold",PROPERTY_HINT_RANGE,"0,1,0.01")); + } break; + case InputEvent::JOYSTICK_BUTTON: { + p_list->push_back(PropertyInfo(Variant::INT,base+"button_index")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"pressed")); + + } break; + case InputEvent::SCREEN_TOUCH: { + p_list->push_back(PropertyInfo(Variant::INT,base+"finger_index")); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"pressed")); + + } break; + case InputEvent::SCREEN_DRAG: { + p_list->push_back(PropertyInfo(Variant::INT,base+"finger_index")); + } break; + case InputEvent::ACTION: { + + + + if (actions==String()) { + + actions="None"; + + List<PropertyInfo> pinfo; + Globals::get_singleton()->get_property_list(&pinfo); + Vector<String> al; + + for(List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) { + const PropertyInfo &pi=E->get(); + + if (!pi.name.begins_with("input/")) + continue; + + String name = pi.name.substr(pi.name.find("/")+1,pi.name.length()); + + + al.push_back(name); + } + + for(int i=0;i<al.size();i++) { + actions+=","; + actions+=al[i]; + } + } + + p_list->push_back(PropertyInfo(Variant::STRING,base+"action_name",PROPERTY_HINT_ENUM,actions)); + p_list->push_back(PropertyInfo(Variant::BOOL,base+"pressed")); + + } break; + + } + } +} + +class VisualScriptNodeInstanceInputFilter : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + Vector<InputEvent> filters; + + //virtual int get_working_memory_size() const { return 0; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return false; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (p_inputs[0]->get_type()!=Variant::INPUT_EVENT) { + r_error_str="Input value not of type event"; + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + return 0; + } + + InputEvent event = *p_inputs[0]; + + + for(int i=0;i<filters.size();i++) { + + const InputEvent &ie = filters[i]; + if (ie.type!=event.type) + continue; + + bool match=false; + + switch(ie.type) { + + case InputEvent::NONE: { + + match=true; + } break; + case InputEvent::KEY: { + + InputEventKey k = ie.key; + InputEventKey k2 = event.key; + + if (k.scancode==0 && k.unicode==0 && k2.scancode==0 && k2.unicode==0) { + match=true; + + } else { + + if ( (k.scancode!=0 && k.scancode==k2.scancode) || (k.unicode!=0 && k.unicode==k2.unicode)) { + //key valid + + if ( + k.pressed==k2.pressed && + k.echo==k2.echo && + k.mod == k2.mod + ) { + match=true; + } + } + + } + + } break; + case InputEvent::MOUSE_MOTION: { + InputEventMouseMotion mm = ie.mouse_motion; + InputEventMouseMotion mm2 = event.mouse_motion; + + if ( mm.button_mask==mm2.button_mask && + mm.mod==mm2.mod + ) { + match=true; + } + + } break; + case InputEvent::MOUSE_BUTTON: { + + InputEventMouseButton mb = ie.mouse_button; + InputEventMouseButton mb2 = event.mouse_button; + + if ( mb.button_index==mb2.button_index && + mb.pressed==mb2.pressed && + mb.doubleclick==mb2.doubleclick && + mb.mod==mb2.mod) { + match=true; + } + + + } break; + case InputEvent::JOYSTICK_MOTION: { + + InputEventJoystickMotion jm = ie.joy_motion; + InputEventJoystickMotion jm2 = event.joy_motion; + + int axis = jm.axis>>1; + + if (axis==jm2.axis) { + + if (jm.axis&1) { + //greater + if (jm2.axis_value > jm.axis_value) { + match=true; + } + } else { + //less + if (jm2.axis_value < -jm.axis_value) { + match=true; + } + } + } + + + } break; + case InputEvent::JOYSTICK_BUTTON: { + InputEventJoystickButton jb = ie.joy_button; + InputEventJoystickButton jb2 = event.joy_button; + + if ( jb.button_index==jb2.button_index && + jb.pressed == jb2.pressed + ) { + match=true; + } + } break; + case InputEvent::SCREEN_TOUCH: { + InputEventScreenTouch st = ie.screen_touch; + InputEventScreenTouch st2 = event.screen_touch; + + if ( st.index==st2.index && + st.pressed==st2.pressed) { + match=true; + } + + } break; + case InputEvent::SCREEN_DRAG: { + InputEventScreenDrag sd = ie.screen_drag; + InputEventScreenDrag sd2 = event.screen_drag; + + if (sd.index==sd2.index) { + match=true; + } + } break; + case InputEvent::ACTION: { + + InputEventAction ia = ie.action; + InputEventAction ia2 = event.action; + + if ( ia.action==ia2.action && + ia.pressed==ia2.pressed) { + match=true; + } + } break; + + } + + *p_outputs[0] = event; + + if (match) + return i; //go through match output + + } + + return STEP_NO_ADVANCE_BIT; //none found, don't advance + + + } + + +}; + + +VisualScriptNodeInstance* VisualScriptInputFilter::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceInputFilter * instance = memnew(VisualScriptNodeInstanceInputFilter ); + instance->instance=p_instance; + instance->filters=filters; + return instance; +} + + + + +VisualScriptInputFilter::VisualScriptInputFilter() { + + +} + + +////////////////////////////////////////// +////////////////TYPE CAST/////////// +////////////////////////////////////////// + + +int VisualScriptTypeCast::get_output_sequence_port_count() const { + + return 2; +} + +bool VisualScriptTypeCast::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptTypeCast::get_input_value_port_count() const{ + + + return 1; +} +int VisualScriptTypeCast::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptTypeCast::get_output_sequence_port_text(int p_port) const { + + return p_port==0 ? "yes" : "no"; +} + +PropertyInfo VisualScriptTypeCast::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::OBJECT,"instance"); +} + +PropertyInfo VisualScriptTypeCast::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::OBJECT,""); +} + + +String VisualScriptTypeCast::get_caption() const { + + return "TypeCast"; +} + +String VisualScriptTypeCast::get_text() const { + + if (script!=String()) + return "Is "+script.get_file()+"?"; + else + return "Is "+base_type+"?"; +} + +void VisualScriptTypeCast::set_base_type(const StringName& p_type) { + + if (base_type==p_type) + return; + + base_type=p_type; + _change_notify(); + ports_changed_notify(); +} + +StringName VisualScriptTypeCast::get_base_type() const{ + + return base_type; +} + +void VisualScriptTypeCast::set_base_script(const String& p_path){ + + if (script==p_path) + return; + + script=p_path; + _change_notify(); + ports_changed_notify(); + +} +String VisualScriptTypeCast::get_base_script() const{ + + return script; +} + + +class VisualScriptNodeInstanceTypeCast : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + StringName base_type; + String script; + + //virtual int get_working_memory_size() const { return 0; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return false; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + Object *obj = *p_inputs[0]; + + *p_outputs[0]=Variant(); + + if (!obj) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Instance is null"; + return 0; + } + + if (script!=String()) { + + Ref<Script> obj_script = obj->get_script(); + if (!obj_script.is_valid()) { + return 1; //well, definitely not the script because object we got has no script. + } + + if (!ResourceCache::has(script)) { + //if the script is not in use by anyone, we can safely assume whathever we got is not casting to it. + return 1; + } + Ref<Script> cast_script = Ref<Resource>(ResourceCache::get(script)); + if (!cast_script.is_valid()) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Script path is not a script: "+script; + return 1; + } + + while(obj_script.is_valid()) { + + if (cast_script==obj_script) { + *p_outputs[0]=*p_inputs[0]; //copy + return 0; // it is the script, yey + } + + obj_script=obj_script->get_base_script(); + } + + return 1; //not found sorry + } + + if (ObjectTypeDB::is_type(obj->get_type_name(),base_type)) { + *p_outputs[0]=*p_inputs[0]; //copy + return 0; + } else + return 1; + + } + + +}; + +VisualScriptNodeInstance* VisualScriptTypeCast::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceTypeCast * instance = memnew(VisualScriptNodeInstanceTypeCast ); + instance->instance=p_instance; + instance->base_type=base_type; + instance->script=script; + return instance; +} + + + +void VisualScriptTypeCast::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_base_type","type"),&VisualScriptTypeCast::set_base_type); + ObjectTypeDB::bind_method(_MD("get_base_type"),&VisualScriptTypeCast::get_base_type); + + ObjectTypeDB::bind_method(_MD("set_base_script","path"),&VisualScriptTypeCast::set_base_script); + ObjectTypeDB::bind_method(_MD("get_base_script"),&VisualScriptTypeCast::get_base_script); + + + List<String> script_extensions; + for(int i=0;i>ScriptServer::get_language_count();i++) { + ScriptServer::get_language(i)->get_recognized_extensions(&script_extensions); + } + + String script_ext_hint; + for (List<String>::Element *E=script_extensions.front();E;E=E->next()) { + if (script_ext_hint!=String()) + script_ext_hint+=","; + script_ext_hint+="*."+E->get(); + } + + ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_script",PROPERTY_HINT_FILE,script_ext_hint),_SCS("set_base_script"),_SCS("get_base_script")); + +} + +VisualScriptTypeCast::VisualScriptTypeCast() { + + base_type="Object"; +} + + +void register_visual_script_flow_control_nodes() { + + VisualScriptLanguage::singleton->add_register_func("flow_control/return",create_return_node<false>); + VisualScriptLanguage::singleton->add_register_func("flow_control/return_with_value",create_return_node<true>); + VisualScriptLanguage::singleton->add_register_func("flow_control/condition",create_node_generic<VisualScriptCondition>); + VisualScriptLanguage::singleton->add_register_func("flow_control/while",create_node_generic<VisualScriptWhile>); + VisualScriptLanguage::singleton->add_register_func("flow_control/iterator",create_node_generic<VisualScriptIterator>); + VisualScriptLanguage::singleton->add_register_func("flow_control/sequence",create_node_generic<VisualScriptSequence>); + VisualScriptLanguage::singleton->add_register_func("flow_control/switch",create_node_generic<VisualScriptSwitch>); + VisualScriptLanguage::singleton->add_register_func("flow_control/input_filter",create_node_generic<VisualScriptInputFilter>); + VisualScriptLanguage::singleton->add_register_func("flow_control/type_cast",create_node_generic<VisualScriptTypeCast>); + + + +} diff --git a/modules/visual_script/visual_script_flow_control.h b/modules/visual_script/visual_script_flow_control.h new file mode 100644 index 0000000000..e0da84a534 --- /dev/null +++ b/modules/visual_script/visual_script_flow_control.h @@ -0,0 +1,341 @@ +#ifndef VISUAL_SCRIPT_FLOW_CONTROL_H +#define VISUAL_SCRIPT_FLOW_CONTROL_H + +#include "visual_script.h" + +class VisualScriptReturn : public VisualScriptNode { + + OBJ_TYPE(VisualScriptReturn,VisualScriptNode) + + + Variant::Type type; + bool with_value; +protected: + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "flow_control"; } + + void set_return_type(Variant::Type); + Variant::Type get_return_type() const; + + void set_enable_return_value(bool p_enable); + bool is_return_value_enabled() const; + + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptReturn(); +}; + + +class VisualScriptCondition : public VisualScriptNode { + + OBJ_TYPE(VisualScriptCondition,VisualScriptNode) + + + +protected: + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "flow_control"; } + + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptCondition(); +}; + + +class VisualScriptWhile : public VisualScriptNode { + + OBJ_TYPE(VisualScriptWhile,VisualScriptNode) + + + +protected: + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "flow_control"; } + + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptWhile(); +}; + + + +class VisualScriptIterator : public VisualScriptNode { + + OBJ_TYPE(VisualScriptIterator,VisualScriptNode) + + + +protected: + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "flow_control"; } + + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptIterator(); +}; + + + +class VisualScriptSequence : public VisualScriptNode { + + OBJ_TYPE(VisualScriptSequence,VisualScriptNode) + + + int steps; + +protected: + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "flow_control"; } + + void set_steps(int p_steps); + int get_steps() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptSequence(); +}; + + + + +class VisualScriptSwitch : public VisualScriptNode { + + OBJ_TYPE(VisualScriptSwitch,VisualScriptNode) + + struct Case { + Variant::Type type; + Case() { type=Variant::NIL; } + }; + + Vector<Case> case_values; + +friend class VisualScriptNodeInstanceSwitch; +protected: + + bool _set(const StringName& p_name, const Variant& p_value); + bool _get(const StringName& p_name,Variant &r_ret) const; + void _get_property_list( List<PropertyInfo> *p_list) const; + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + virtual bool has_mixed_input_and_sequence_ports() const { return true; } + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "flow_control"; } + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + + VisualScriptSwitch(); +}; + + + + +class VisualScriptInputFilter : public VisualScriptNode { + + OBJ_TYPE(VisualScriptInputFilter,VisualScriptNode) + + Vector<InputEvent> filters; + + +protected: + bool _set(const StringName& p_name, const Variant& p_value); + bool _get(const StringName& p_name,Variant &r_ret) const; + void _get_property_list( List<PropertyInfo> *p_list) const; + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "flow_control"; } + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + + VisualScriptInputFilter(); +}; + + + + + +class VisualScriptTypeCast : public VisualScriptNode { + + OBJ_TYPE(VisualScriptTypeCast,VisualScriptNode) + + + StringName base_type; + String script; + +protected: + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "flow_control"; } + + void set_base_type(const StringName& p_type); + StringName get_base_type() const; + + void set_base_script(const String& p_path); + String get_base_script() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + + VisualScriptTypeCast(); +}; + + + + +void register_visual_script_flow_control_nodes(); + + + +#endif // VISUAL_SCRIPT_FLOW_CONTROL_H diff --git a/modules/visual_script/visual_script_func_nodes.cpp b/modules/visual_script/visual_script_func_nodes.cpp new file mode 100644 index 0000000000..5a21cb40e9 --- /dev/null +++ b/modules/visual_script/visual_script_func_nodes.cpp @@ -0,0 +1,2528 @@ +#include "visual_script_func_nodes.h" +#include "scene/main/scene_main_loop.h" +#include "os/os.h" +#include "scene/main/node.h" +#include "visual_script_nodes.h" +#include "io/resource_loader.h" +#include "globals.h" + +////////////////////////////////////////// +////////////////CALL////////////////////// +////////////////////////////////////////// + +int VisualScriptFunctionCall::get_output_sequence_port_count() const { + + if (method_cache.flags&METHOD_FLAG_CONST || call_mode==CALL_MODE_BASIC_TYPE) + return 0; + else + return 1; +} + +bool VisualScriptFunctionCall::has_input_sequence_port() const{ + + if (method_cache.flags&METHOD_FLAG_CONST || call_mode==CALL_MODE_BASIC_TYPE) + return false; + else + return true; +} +#ifdef TOOLS_ENABLED + +static Node* _find_script_node(Node* p_edited_scene,Node* p_current_node,const Ref<Script> &script) { + + if (p_edited_scene!=p_current_node && p_current_node->get_owner()!=p_edited_scene) + return NULL; + + Ref<Script> scr = p_current_node->get_script(); + + if (scr.is_valid() && scr==script) + return p_current_node; + + for(int i=0;i<p_current_node->get_child_count();i++) { + Node *n = _find_script_node(p_edited_scene,p_current_node->get_child(i),script); + if (n) + return n; + } + + return NULL; +} + +#endif +Node *VisualScriptFunctionCall::_get_base_node() const { + +#ifdef TOOLS_ENABLED + Ref<Script> script = get_visual_script(); + if (!script.is_valid()) + return NULL; + + MainLoop * main_loop = OS::get_singleton()->get_main_loop(); + if (!main_loop) + return NULL; + + SceneTree *scene_tree = main_loop->cast_to<SceneTree>(); + + if (!scene_tree) + return NULL; + + Node *edited_scene = scene_tree->get_edited_scene_root(); + + if (!edited_scene) + return NULL; + + Node* script_node = _find_script_node(edited_scene,edited_scene,script); + + if (!script_node) + return NULL; + + if (!script_node->has_node(base_path)) + return NULL; + + Node *path_to = script_node->get_node(base_path); + + return path_to; +#else + + return NULL; +#endif +} + +StringName VisualScriptFunctionCall::_get_base_type() const { + + if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) + return get_visual_script()->get_instance_base_type(); + else if (call_mode==CALL_MODE_NODE_PATH && get_visual_script().is_valid()) { + Node *path = _get_base_node(); + if (path) + return path->get_type(); + + } + + return base_type; +} + + +int VisualScriptFunctionCall::get_input_value_port_count() const{ + + if (call_mode==CALL_MODE_BASIC_TYPE) { + + + Vector<StringName> names = Variant::get_method_argument_names(basic_type,function); + return names.size() + (rpc_call_mode>=RPC_RELIABLE_TO_ID?1:0) + 1; + + } else { + + MethodBind *mb = ObjectTypeDB::get_method(_get_base_type(),function); + if (mb) { + return mb->get_argument_count() + (call_mode==CALL_MODE_INSTANCE?1:0) + (rpc_call_mode>=RPC_RELIABLE_TO_ID?1:0) - use_default_args; + } + + return method_cache.arguments.size() + (call_mode==CALL_MODE_INSTANCE?1:0) + (rpc_call_mode>=RPC_RELIABLE_TO_ID?1:0) - use_default_args; + } + +} +int VisualScriptFunctionCall::get_output_value_port_count() const{ + + if (call_mode==CALL_MODE_BASIC_TYPE) { + + bool returns=false; + Variant::get_method_return_type(basic_type,function,&returns); + return returns?1:0; + + } else { + int ret; + MethodBind *mb = ObjectTypeDB::get_method(_get_base_type(),function); + if (mb) { + ret = mb->has_return() ? 1 : 0; + } else + ret = 1; //it is assumed that script always returns something + + if (call_mode==CALL_MODE_INSTANCE) { + ret++; + } + + return ret; + } +} + +String VisualScriptFunctionCall::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptFunctionCall::get_input_value_port_info(int p_idx) const{ + + if (call_mode==CALL_MODE_INSTANCE || call_mode==CALL_MODE_BASIC_TYPE) { + if (p_idx==0) { + PropertyInfo pi; + pi.type=(call_mode==CALL_MODE_INSTANCE?Variant::OBJECT:basic_type); + pi.name=(call_mode==CALL_MODE_INSTANCE?String("instance"):Variant::get_type_name(basic_type).to_lower()); + return pi; + } else { + p_idx--; + } + } + + if (rpc_call_mode>=RPC_RELIABLE_TO_ID) { + + if (p_idx==0) { + return PropertyInfo(Variant::INT,"peer_id"); + } else { + p_idx--; + } + + } + +#ifdef DEBUG_METHODS_ENABLED + + if (call_mode==CALL_MODE_BASIC_TYPE) { + + + Vector<StringName> names = Variant::get_method_argument_names(basic_type,function); + Vector<Variant::Type> types = Variant::get_method_argument_types(basic_type,function); + return PropertyInfo(types[p_idx],names[p_idx]); + + } else { + + MethodBind *mb = ObjectTypeDB::get_method(_get_base_type(),function); + if (mb) { + return mb->get_argument_info(p_idx); + } + + if (p_idx>=0 && p_idx < method_cache.arguments.size()) { + return method_cache.arguments[p_idx]; + } + + return PropertyInfo(); + } +#else + return PropertyInfo(); +#endif + +} + +PropertyInfo VisualScriptFunctionCall::get_output_value_port_info(int p_idx) const{ + + +#ifdef DEBUG_METHODS_ENABLED + + if (call_mode==CALL_MODE_BASIC_TYPE) { + + + return PropertyInfo(Variant::get_method_return_type(basic_type,function),""); + } else { + + if (call_mode==CALL_MODE_INSTANCE) { + if (p_idx==0) { + return PropertyInfo(Variant::OBJECT,"pass"); + } else { + p_idx--; + } + } + + PropertyInfo ret; + + /*MethodBind *mb = ObjectTypeDB::get_method(_get_base_type(),function); + if (mb) { + + ret = mb->get_argument_info(-1); + } else {*/ + + ret = method_cache.return_val; + + //} + + if (call_mode==CALL_MODE_INSTANCE) { + ret.name="return"; + } else { + ret.name=""; + } + return ret; + + + } +#else + return PropertyInfo(); +#endif +} + + +String VisualScriptFunctionCall::get_caption() const { + + static const char*cname[5]= { + "CallSelf", + "CallNode", + "CallInstance", + "CallBasic", + "CallSingleton" + }; + + String caption = cname[call_mode]; + + if (rpc_call_mode) { + caption+=" (RPC)"; + } + + return caption; +} + +String VisualScriptFunctionCall::get_text() const { + + if (call_mode==CALL_MODE_SELF) + return " "+String(function)+"()"; + if (call_mode==CALL_MODE_SINGLETON) + return String(singleton)+":"+String(function)+"()"; + else if (call_mode==CALL_MODE_BASIC_TYPE) + return Variant::get_type_name(basic_type)+"."+String(function)+"()"; + else if (call_mode==CALL_MODE_NODE_PATH) + return " ["+String(base_path.simplified())+"]."+String(function)+"()"; + else + return " "+base_type+"."+String(function)+"()"; + +} + + +void VisualScriptFunctionCall::set_basic_type(Variant::Type p_type) { + + if (basic_type==p_type) + return; + basic_type=p_type; + + + _change_notify(); + ports_changed_notify(); +} + +Variant::Type VisualScriptFunctionCall::get_basic_type() const{ + + return basic_type; +} + +void VisualScriptFunctionCall::set_base_type(const StringName& p_type) { + + if (base_type==p_type) + return; + + base_type=p_type; + _change_notify(); + ports_changed_notify(); +} + +StringName VisualScriptFunctionCall::get_base_type() const{ + + return base_type; +} + +void VisualScriptFunctionCall::set_base_script(const String& p_path) { + + if (base_script==p_path) + return; + + base_script=p_path; + _change_notify(); + ports_changed_notify(); +} + +String VisualScriptFunctionCall::get_base_script() const { + + return base_script; +} + +void VisualScriptFunctionCall::set_singleton(const StringName& p_path) { + + if (singleton==p_path) + return; + + singleton=p_path; + Object *obj = Globals::get_singleton()->get_singleton_object(singleton); + if (obj) { + base_type=obj->get_type(); + } + + _change_notify(); + ports_changed_notify(); +} + +StringName VisualScriptFunctionCall::get_singleton() const { + + return singleton; +} + + + +void VisualScriptFunctionCall::_update_method_cache() { + StringName type; + Ref<Script> script; + + if (call_mode==CALL_MODE_NODE_PATH) { + + Node* node=_get_base_node(); + if (node) { + type=node->get_type(); + base_type=type; //cache, too + script = node->get_script(); + } + } else if (call_mode==CALL_MODE_SELF) { + + if (get_visual_script().is_valid()) { + type=get_visual_script()->get_instance_base_type(); + base_type=type; //cache, too + script=get_visual_script(); + } + + } else if (call_mode==CALL_MODE_SINGLETON) { + + Object *obj = Globals::get_singleton()->get_singleton_object(singleton); + if (obj) { + type=obj->get_type(); + script=obj->get_script(); + } + + } else if (call_mode==CALL_MODE_INSTANCE) { + + type=base_type; + if (base_script!=String()) { + + if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) { + + ScriptServer::edit_request_func(base_script); //make sure it's loaded + } + + if (ResourceCache::has(base_script)) { + + script = Ref<Resource>( ResourceCache::get(base_script) ); + } else { + return; + } + } + } + + +// print_line("BASE: "+String(type)+" FUNC: "+String(function)); + MethodBind *mb = ObjectTypeDB::get_method(type,function); + if (mb) { + use_default_args=mb->get_default_argument_count(); + method_cache = MethodInfo(); + for(int i=0;i<mb->get_argument_count();i++) { +#ifdef DEBUG_METHODS_ENABLED + method_cache.arguments.push_back(mb->get_argument_info(i)); +#else + method_cache.arguments.push_back(PropertyInfo()); +#endif + } + + if (mb->is_const()) { + method_cache.flags|=METHOD_FLAG_CONST; + } + +#ifdef DEBUG_METHODS_ENABLED + + method_cache.return_val = mb->get_argument_info(-1); +#endif + + if (mb->is_vararg()) { + //for vararg just give it 10 arguments (should be enough for most use cases) + for(int i=0;i<10;i++) { + method_cache.arguments.push_back(PropertyInfo(Variant::NIL,"arg"+itos(i))); + use_default_args++; + } + } + } else if (script.is_valid() && script->has_method(function)) { + + method_cache = script->get_method_info(function); + use_default_args=method_cache.default_arguments.size(); + } +} + +void VisualScriptFunctionCall::set_function(const StringName& p_type){ + + if (function==p_type) + return; + + function=p_type; + + if (call_mode==CALL_MODE_BASIC_TYPE) { + use_default_args = Variant::get_method_default_arguments(basic_type,function).size(); + } else { + //update all caches + + _update_method_cache(); + + } + + + _change_notify(); + ports_changed_notify(); +} +StringName VisualScriptFunctionCall::get_function() const { + + + return function; +} + +void VisualScriptFunctionCall::set_base_path(const NodePath& p_type) { + + if (base_path==p_type) + return; + + base_path=p_type; + _change_notify(); + ports_changed_notify(); +} + +NodePath VisualScriptFunctionCall::get_base_path() const { + + return base_path; +} + + +void VisualScriptFunctionCall::set_call_mode(CallMode p_mode) { + + if (call_mode==p_mode) + return; + + call_mode=p_mode; + _change_notify(); + ports_changed_notify(); + +} +VisualScriptFunctionCall::CallMode VisualScriptFunctionCall::get_call_mode() const { + + return call_mode; +} + +void VisualScriptFunctionCall::set_use_default_args(int p_amount) { + + if (use_default_args==p_amount) + return; + + use_default_args=p_amount; + ports_changed_notify(); + + +} + +void VisualScriptFunctionCall::set_rpc_call_mode(VisualScriptFunctionCall::RPCCallMode p_mode) { + + if (rpc_call_mode==p_mode) + return; + rpc_call_mode=p_mode; + ports_changed_notify(); + _change_notify(); +} + +VisualScriptFunctionCall::RPCCallMode VisualScriptFunctionCall::get_rpc_call_mode() const{ + + return rpc_call_mode; +} + + +int VisualScriptFunctionCall::get_use_default_args() const{ + + return use_default_args; +} + + +void VisualScriptFunctionCall::set_validate(bool p_amount) { + + validate=p_amount; +} + +bool VisualScriptFunctionCall::get_validate() const { + + return validate; +} + + +void VisualScriptFunctionCall::_set_argument_cache(const Dictionary& p_cache) { + //so everything works in case all else fails + method_cache=MethodInfo::from_dict(p_cache); + +} + +Dictionary VisualScriptFunctionCall::_get_argument_cache() const { + + return method_cache; +} + +void VisualScriptFunctionCall::_validate_property(PropertyInfo& property) const { + + if (property.name=="function/base_type") { + if (call_mode!=CALL_MODE_INSTANCE) { + property.usage=PROPERTY_USAGE_NOEDITOR; + } + } + + if (property.name=="function/base_script") { + if (call_mode!=CALL_MODE_INSTANCE) { + property.usage=0; + } + } + + if (property.name=="function/basic_type") { + if (call_mode!=CALL_MODE_BASIC_TYPE) { + property.usage=0; + } + } + + if (property.name=="function/singleton") { + if (call_mode!=CALL_MODE_SINGLETON) { + property.usage=0; + } else { + List<Globals::Singleton> names; + Globals::get_singleton()->get_singletons(&names); + property.hint=PROPERTY_HINT_ENUM; + String sl; + for (List<Globals::Singleton>::Element *E=names.front();E;E=E->next()) { + if (sl!=String()) + sl+=","; + sl+=E->get().name; + } + property.hint_string=sl; + + } + } + + if (property.name=="function/node_path") { + if (call_mode!=CALL_MODE_NODE_PATH) { + property.usage=0; + } else { + + Node *bnode = _get_base_node(); + if (bnode) { + property.hint_string=bnode->get_path(); //convert to loong string + } else { + + } + } + } + + if (property.name=="function/function") { + + if (call_mode==CALL_MODE_BASIC_TYPE) { + + property.hint=PROPERTY_HINT_METHOD_OF_VARIANT_TYPE; + property.hint_string=Variant::get_type_name(basic_type); + + } else if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) { + property.hint=PROPERTY_HINT_METHOD_OF_SCRIPT; + property.hint_string=itos(get_visual_script()->get_instance_ID()); + } else if (call_mode==CALL_MODE_SINGLETON) { + + Object *obj = Globals::get_singleton()->get_singleton_object(singleton); + if (obj) { + property.hint=PROPERTY_HINT_METHOD_OF_INSTANCE; + property.hint_string=itos(obj->get_instance_ID()); + } else { + + property.hint=PROPERTY_HINT_METHOD_OF_BASE_TYPE; + property.hint_string=base_type;//should be cached + } + } else if (call_mode==CALL_MODE_INSTANCE) { + property.hint=PROPERTY_HINT_METHOD_OF_BASE_TYPE; + property.hint_string=base_type; + + if (base_script!=String()) { + if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) { + + ScriptServer::edit_request_func(base_script); //make sure it's loaded + } + + if (ResourceCache::has(base_script)) { + + Ref<Script> script = Ref<Resource>( ResourceCache::get(base_script) ); + if (script.is_valid()) { + + property.hint=PROPERTY_HINT_METHOD_OF_SCRIPT; + property.hint_string=itos(script->get_instance_ID()); + } + } + } + + } else if (call_mode==CALL_MODE_NODE_PATH) { + Node *node = _get_base_node(); + if (node) { + property.hint=PROPERTY_HINT_METHOD_OF_INSTANCE; + property.hint_string=itos(node->get_instance_ID()); + } else { + property.hint=PROPERTY_HINT_METHOD_OF_BASE_TYPE; + property.hint_string=get_base_type(); + } + + } + + } + + if (property.name=="function/use_default_args") { + + property.hint=PROPERTY_HINT_RANGE; + + int mc=0; + + if (call_mode==CALL_MODE_BASIC_TYPE) { + + mc = Variant::get_method_default_arguments(basic_type,function).size(); + } else { + MethodBind *mb = ObjectTypeDB::get_method(_get_base_type(),function); + if (mb) { + + mc=mb->get_default_argument_count(); + } + } + + if (mc==0) { + property.usage=0; //do not show + } else { + + property.hint_string="0,"+itos(mc)+",1"; + } + } + + if (property.name=="rpc/call_mode") { + if (call_mode==CALL_MODE_BASIC_TYPE) { + property.usage=0; + } + } + +} + + +void VisualScriptFunctionCall::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_base_type","base_type"),&VisualScriptFunctionCall::set_base_type); + ObjectTypeDB::bind_method(_MD("get_base_type"),&VisualScriptFunctionCall::get_base_type); + + ObjectTypeDB::bind_method(_MD("set_base_script","base_script"),&VisualScriptFunctionCall::set_base_script); + ObjectTypeDB::bind_method(_MD("get_base_script"),&VisualScriptFunctionCall::get_base_script); + + ObjectTypeDB::bind_method(_MD("set_basic_type","basic_type"),&VisualScriptFunctionCall::set_basic_type); + ObjectTypeDB::bind_method(_MD("get_basic_type"),&VisualScriptFunctionCall::get_basic_type); + + ObjectTypeDB::bind_method(_MD("set_singleton","singleton"),&VisualScriptFunctionCall::set_singleton); + ObjectTypeDB::bind_method(_MD("get_singleton"),&VisualScriptFunctionCall::get_singleton); + + ObjectTypeDB::bind_method(_MD("set_function","function"),&VisualScriptFunctionCall::set_function); + ObjectTypeDB::bind_method(_MD("get_function"),&VisualScriptFunctionCall::get_function); + + ObjectTypeDB::bind_method(_MD("set_call_mode","mode"),&VisualScriptFunctionCall::set_call_mode); + ObjectTypeDB::bind_method(_MD("get_call_mode"),&VisualScriptFunctionCall::get_call_mode); + + ObjectTypeDB::bind_method(_MD("set_base_path","base_path"),&VisualScriptFunctionCall::set_base_path); + ObjectTypeDB::bind_method(_MD("get_base_path"),&VisualScriptFunctionCall::get_base_path); + + ObjectTypeDB::bind_method(_MD("set_use_default_args","amount"),&VisualScriptFunctionCall::set_use_default_args); + ObjectTypeDB::bind_method(_MD("get_use_default_args"),&VisualScriptFunctionCall::get_use_default_args); + + ObjectTypeDB::bind_method(_MD("_set_argument_cache","argument_cache"),&VisualScriptFunctionCall::_set_argument_cache); + ObjectTypeDB::bind_method(_MD("_get_argument_cache"),&VisualScriptFunctionCall::_get_argument_cache); + + ObjectTypeDB::bind_method(_MD("set_rpc_call_mode","mode"),&VisualScriptFunctionCall::set_rpc_call_mode); + ObjectTypeDB::bind_method(_MD("get_rpc_call_mode"),&VisualScriptFunctionCall::get_rpc_call_mode); + + ObjectTypeDB::bind_method(_MD("set_validate","enable"),&VisualScriptFunctionCall::set_validate); + ObjectTypeDB::bind_method(_MD("get_validate"),&VisualScriptFunctionCall::get_validate); + + String bt; + for(int i=0;i<Variant::VARIANT_MAX;i++) { + if (i>0) + bt+=","; + + bt+=Variant::get_type_name(Variant::Type(i)); + } + + + List<String> script_extensions; + for(int i=0;i<ScriptServer::get_language_count();i++) { + ScriptServer::get_language(i)->get_recognized_extensions(&script_extensions); + } + + String script_ext_hint; + for (List<String>::Element *E=script_extensions.front();E;E=E->next()) { + if (script_ext_hint!=String()) + script_ext_hint+=","; + script_ext_hint+="*."+E->get(); + } + + + + ADD_PROPERTY(PropertyInfo(Variant::INT,"function/call_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type,Singleton"),_SCS("set_call_mode"),_SCS("get_call_mode")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/base_script",PROPERTY_HINT_FILE,script_ext_hint),_SCS("set_base_script"),_SCS("get_base_script")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/singleton"),_SCS("set_singleton"),_SCS("get_singleton")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"function/basic_type",PROPERTY_HINT_ENUM,bt),_SCS("set_basic_type"),_SCS("get_basic_type")); + ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"function/node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),_SCS("set_base_path"),_SCS("get_base_path")); + ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY,"function/argument_cache",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_argument_cache"),_SCS("_get_argument_cache")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/function"),_SCS("set_function"),_SCS("get_function")); //when set, if loaded properly, will override argument count. + ADD_PROPERTY(PropertyInfo(Variant::INT,"function/use_default_args"),_SCS("set_use_default_args"),_SCS("get_use_default_args")); + ADD_PROPERTY(PropertyInfo(Variant::BOOL,"function/validate"),_SCS("set_validate"),_SCS("get_validate")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"rpc/call_mode",PROPERTY_HINT_ENUM,"Disabled,Reliable,Unreliable,ReliableToID,UnreliableToID"),_SCS("set_rpc_call_mode"),_SCS("get_rpc_call_mode")); //when set, if loaded properly, will override argument count. + + BIND_CONSTANT( CALL_MODE_SELF ); + BIND_CONSTANT( CALL_MODE_NODE_PATH); + BIND_CONSTANT( CALL_MODE_INSTANCE); + BIND_CONSTANT( CALL_MODE_BASIC_TYPE ); +} + +class VisualScriptNodeInstanceFunctionCall : public VisualScriptNodeInstance { +public: + + + VisualScriptFunctionCall::CallMode call_mode; + NodePath node_path; + int input_args; + bool validate; + bool returns; + VisualScriptFunctionCall::RPCCallMode rpc_mode; + StringName function; + StringName singleton; + + VisualScriptFunctionCall *node; + VisualScriptInstance *instance; + + + + //virtual int get_working_memory_size() const { return 0; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; } + + + _FORCE_INLINE_ bool call_rpc(Object* p_base,const Variant** p_args,int p_argcount) { + + if (!p_base) + return false; + + Node * node = p_base->cast_to<Node>(); + if (!node) + return false; + + int to_id=0; + bool reliable=true; + + if (rpc_mode>=VisualScriptFunctionCall::RPC_RELIABLE_TO_ID) { + to_id = *p_args[0]; + p_args+=1; + p_argcount-=1; + if (rpc_mode==VisualScriptFunctionCall::RPC_UNRELIABLE_TO_ID) { + reliable=false; + } + } else if (rpc_mode==VisualScriptFunctionCall::RPC_UNRELIABLE) { + reliable=false; + } + + node->rpcp(to_id,!reliable,function,p_args,p_argcount); + + return true; + } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + + switch(call_mode) { + + case VisualScriptFunctionCall::CALL_MODE_SELF: { + + Object *object=instance->get_owner_ptr(); + + if (rpc_mode) { + call_rpc(object,p_inputs,input_args); + } else if (returns) { + *p_outputs[0] = object->call(function,p_inputs,input_args,r_error); + } else { + object->call(function,p_inputs,input_args,r_error); + } + } break; + case VisualScriptFunctionCall::CALL_MODE_NODE_PATH: { + + Node* node = instance->get_owner_ptr()->cast_to<Node>(); + if (!node) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Base object is not a Node!"; + return 0; + } + + Node* another = node->get_node(node_path); + if (!node) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Path does not lead Node!"; + return 0; + } + + if (rpc_mode) { + call_rpc(node,p_inputs,input_args); + } else if (returns) { + *p_outputs[0] = another->call(function,p_inputs,input_args,r_error); + } else { + another->call(function,p_inputs,input_args,r_error); + } + + } break; + case VisualScriptFunctionCall::CALL_MODE_INSTANCE: + case VisualScriptFunctionCall::CALL_MODE_BASIC_TYPE: { + + Variant v = *p_inputs[0]; + + if (rpc_mode) { + Object *obj = v; + if (obj) { + call_rpc(obj,p_inputs+1,input_args-1); + } + } else if (returns) { + if (call_mode==VisualScriptFunctionCall::CALL_MODE_INSTANCE) { + *p_outputs[1] = v.call(function,p_inputs+1,input_args,r_error); + } else { + *p_outputs[0] = v.call(function,p_inputs+1,input_args,r_error); + } + } else { + v.call(function,p_inputs+1,input_args,r_error); + } + + if (call_mode==VisualScriptFunctionCall::CALL_MODE_INSTANCE) { + *p_outputs[0]=*p_inputs[0]; + } + + } break; + case VisualScriptFunctionCall::CALL_MODE_SINGLETON: { + + Object *object=Globals::get_singleton()->get_singleton_object(singleton); + if (!object) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Invalid singleton name: '"+String(singleton)+"'"; + return 0; + } + + if (rpc_mode) { + call_rpc(object,p_inputs,input_args); + } else if (returns) { + *p_outputs[0] = object->call(function,p_inputs,input_args,r_error); + } else { + object->call(function,p_inputs,input_args,r_error); + } + } break; + + } + + if (!validate) { + + //ignore call errors if validation is disabled + r_error.error=Variant::CallError::CALL_OK; + r_error_str=String(); + } + + return 0; + + } + + +}; + +VisualScriptNodeInstance* VisualScriptFunctionCall::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceFunctionCall * instance = memnew(VisualScriptNodeInstanceFunctionCall ); + instance->node=this; + instance->instance=p_instance; + instance->singleton=singleton; + instance->function=function; + instance->call_mode=call_mode; + instance->returns=get_output_value_port_count(); + instance->node_path=base_path; + instance->input_args = get_input_value_port_count() - ( (call_mode==CALL_MODE_BASIC_TYPE || call_mode==CALL_MODE_INSTANCE) ? 1: 0 ); + instance->rpc_mode=rpc_call_mode; + instance->validate=validate; + return instance; +} + + +VisualScriptFunctionCall::TypeGuess VisualScriptFunctionCall::guess_output_type(TypeGuess* p_inputs, int p_output) const { + + if (p_output==0 && call_mode==CALL_MODE_INSTANCE) { + return p_inputs[0]; + } + + return VisualScriptNode::guess_output_type(p_inputs,p_output); + +} + +VisualScriptFunctionCall::VisualScriptFunctionCall() { + + validate=true; + call_mode=CALL_MODE_SELF; + basic_type=Variant::NIL; + use_default_args=0; + base_type="Object"; + rpc_call_mode=RPC_DISABLED; + + +} + +template<VisualScriptFunctionCall::CallMode cmode> +static Ref<VisualScriptNode> create_function_call_node(const String& p_name) { + + Ref<VisualScriptFunctionCall> node; + node.instance(); + node->set_call_mode(cmode); + return node; +} + + +////////////////////////////////////////// +////////////////SET////////////////////// +////////////////////////////////////////// + +static const char* event_type_names[InputEvent::TYPE_MAX]={ + "None", + "Key", + "MouseMotion", + "MouseButton", + "JoystickMotion", + "JoystickButton", + "ScreenTouch", + "ScreenDrag", + "Action" +}; + + +int VisualScriptPropertySet::get_output_sequence_port_count() const { + + return call_mode!=CALL_MODE_BASIC_TYPE ? 1 : 0; +} + +bool VisualScriptPropertySet::has_input_sequence_port() const{ + + return call_mode!=CALL_MODE_BASIC_TYPE ? true : false; +} + +Node *VisualScriptPropertySet::_get_base_node() const { + +#ifdef TOOLS_ENABLED + Ref<Script> script = get_visual_script(); + if (!script.is_valid()) + return NULL; + + MainLoop * main_loop = OS::get_singleton()->get_main_loop(); + if (!main_loop) + return NULL; + + SceneTree *scene_tree = main_loop->cast_to<SceneTree>(); + + if (!scene_tree) + return NULL; + + Node *edited_scene = scene_tree->get_edited_scene_root(); + + if (!edited_scene) + return NULL; + + Node* script_node = _find_script_node(edited_scene,edited_scene,script); + + if (!script_node) + return NULL; + + if (!script_node->has_node(base_path)) + return NULL; + + Node *path_to = script_node->get_node(base_path); + + return path_to; +#else + + return NULL; +#endif +} + +StringName VisualScriptPropertySet::_get_base_type() const { + + if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) + return get_visual_script()->get_instance_base_type(); + else if (call_mode==CALL_MODE_NODE_PATH && get_visual_script().is_valid()) { + Node *path = _get_base_node(); + if (path) + return path->get_type(); + + } + + return base_type; +} + +int VisualScriptPropertySet::get_input_value_port_count() const{ + + int pc = (call_mode==CALL_MODE_BASIC_TYPE || call_mode==CALL_MODE_INSTANCE)?2:1; + + return pc; +} +int VisualScriptPropertySet::get_output_value_port_count() const{ + + return (call_mode==CALL_MODE_BASIC_TYPE || call_mode==CALL_MODE_INSTANCE) ? 1 : 0; +} + +String VisualScriptPropertySet::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptPropertySet::get_input_value_port_info(int p_idx) const{ + + if (call_mode==CALL_MODE_INSTANCE || call_mode==CALL_MODE_BASIC_TYPE) { + if (p_idx==0) { + PropertyInfo pi; + pi.type=(call_mode==CALL_MODE_INSTANCE?Variant::OBJECT:basic_type); + pi.name=(call_mode==CALL_MODE_INSTANCE?String("instance"):Variant::get_type_name(basic_type).to_lower()); + return pi; + } else { + p_idx--; + } + } + + PropertyInfo pinfo=type_cache; + pinfo.name="value"; + return pinfo; +} + +PropertyInfo VisualScriptPropertySet::get_output_value_port_info(int p_idx) const{ + if (call_mode==CALL_MODE_BASIC_TYPE) { + return PropertyInfo(basic_type,"out"); + } else if (call_mode==CALL_MODE_INSTANCE) { + return PropertyInfo(Variant::OBJECT,"pass"); + } else { + return PropertyInfo(); + } + +} + + +String VisualScriptPropertySet::get_caption() const { + + static const char*cname[4]= { + "SelfSet", + "NodeSet", + "InstanceSet", + "BasicSet" + }; + + return cname[call_mode]; +} + +String VisualScriptPropertySet::get_text() const { + + String prop; + + if (call_mode==CALL_MODE_BASIC_TYPE) + prop=Variant::get_type_name(basic_type)+"."+property; + else if (call_mode==CALL_MODE_NODE_PATH) + prop=String(base_path)+":"+property; + else if (call_mode==CALL_MODE_SELF) + prop=property; + else if (call_mode==CALL_MODE_INSTANCE) + prop=String(base_type)+":"+property; + + return prop; + +} + +void VisualScriptPropertySet::_update_base_type() { + //cache it because this information may not be available on load + if (call_mode==CALL_MODE_NODE_PATH) { + + Node* node=_get_base_node(); + if (node) { + base_type=node->get_type(); + } + } else if (call_mode==CALL_MODE_SELF) { + + if (get_visual_script().is_valid()) { + base_type=get_visual_script()->get_instance_base_type(); + } + } + +} +void VisualScriptPropertySet::set_basic_type(Variant::Type p_type) { + + if (basic_type==p_type) + return; + basic_type=p_type; + + + _change_notify(); + _update_base_type(); + ports_changed_notify(); +} + +Variant::Type VisualScriptPropertySet::get_basic_type() const{ + + return basic_type; +} + +void VisualScriptPropertySet::set_event_type(InputEvent::Type p_type) { + + if (event_type==p_type) + return; + event_type=p_type; + if (call_mode==CALL_MODE_BASIC_TYPE) { + _update_cache(); + } + _change_notify(); + _update_base_type(); + ports_changed_notify(); +} + +InputEvent::Type VisualScriptPropertySet::get_event_type() const{ + + return event_type; +} + + +void VisualScriptPropertySet::set_base_type(const StringName& p_type) { + + if (base_type==p_type) + return; + + base_type=p_type; + _change_notify(); + ports_changed_notify(); +} + +StringName VisualScriptPropertySet::get_base_type() const{ + + return base_type; +} + + +void VisualScriptPropertySet::set_base_script(const String& p_path) { + + if (base_script==p_path) + return; + + base_script=p_path; + _change_notify(); + ports_changed_notify(); +} + +String VisualScriptPropertySet::get_base_script() const { + + return base_script; +} + + +void VisualScriptPropertySet::_update_cache() { + + + if (!OS::get_singleton()->get_main_loop()) + return; + if (!OS::get_singleton()->get_main_loop()->cast_to<SceneTree>()) + return; + + if (!OS::get_singleton()->get_main_loop()->cast_to<SceneTree>()->is_editor_hint()) //only update cache if editor exists, it's pointless otherwise + return; + + if (call_mode==CALL_MODE_BASIC_TYPE) { + + //not super efficient.. + + Variant v; + if (basic_type==Variant::INPUT_EVENT) { + InputEvent ev; + ev.type=event_type; + v=ev; + } else { + Variant::CallError ce; + v = Variant::construct(basic_type,NULL,0,ce); + } + + List<PropertyInfo> pinfo; + v.get_property_list(&pinfo); + + for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) { + + if (E->get().name==property) { + + type_cache=E->get(); + } + } + + } else { + + + StringName type; + Ref<Script> script; + Node *node=NULL; + + if (call_mode==CALL_MODE_NODE_PATH) { + + node=_get_base_node(); + if (node) { + type=node->get_type(); + base_type=type; //cache, too + script = node->get_script(); + } + } else if (call_mode==CALL_MODE_SELF) { + + if (get_visual_script().is_valid()) { + type=get_visual_script()->get_instance_base_type(); + base_type=type; //cache, too + script=get_visual_script(); + } + } else if (call_mode==CALL_MODE_INSTANCE) { + + type=base_type; + if (base_script!=String()) { + + if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) { + + ScriptServer::edit_request_func(base_script); //make sure it's loaded + } + + if (ResourceCache::has(base_script)) { + + script = Ref<Resource>( ResourceCache::get(base_script) ); + } else { + return; + } + } + } + + List<PropertyInfo> pinfo; + + + if (node) { + + node->get_property_list(&pinfo); + } else { + ObjectTypeDB::get_property_list(type,&pinfo); + } + + if (script.is_valid()) { + + script->get_script_property_list(&pinfo); + } + + for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) { + + if (E->get().name==property) { + type_cache=E->get(); + return; + } + } + + } +} + +void VisualScriptPropertySet::set_property(const StringName& p_type){ + + if (property==p_type) + return; + + property=p_type; + _update_cache(); + _change_notify(); + ports_changed_notify(); +} +StringName VisualScriptPropertySet::get_property() const { + + + return property; +} + +void VisualScriptPropertySet::set_base_path(const NodePath& p_type) { + + if (base_path==p_type) + return; + + base_path=p_type; + _update_base_type(); + _change_notify(); + ports_changed_notify(); +} + +NodePath VisualScriptPropertySet::get_base_path() const { + + return base_path; +} + + +void VisualScriptPropertySet::set_call_mode(CallMode p_mode) { + + if (call_mode==p_mode) + return; + + call_mode=p_mode; + _update_base_type(); + _change_notify(); + ports_changed_notify(); + +} +VisualScriptPropertySet::CallMode VisualScriptPropertySet::get_call_mode() const { + + return call_mode; +} + + + + +void VisualScriptPropertySet::_set_type_cache(const Dictionary &p_type) { + type_cache=PropertyInfo::from_dict(p_type); +} + +Dictionary VisualScriptPropertySet::_get_type_cache() const { + + return type_cache; +} + +void VisualScriptPropertySet::_validate_property(PropertyInfo& property) const { + + if (property.name=="property/base_type") { + if (call_mode!=CALL_MODE_INSTANCE) { + property.usage=PROPERTY_USAGE_NOEDITOR; + } + } + + if (property.name=="property/base_script") { + if (call_mode!=CALL_MODE_INSTANCE) { + property.usage=0; + } + } + + if (property.name=="property/basic_type") { + if (call_mode!=CALL_MODE_BASIC_TYPE) { + property.usage=0; + } + } + + if (property.name=="property/event_type") { + if (call_mode!=CALL_MODE_BASIC_TYPE || basic_type!=Variant::INPUT_EVENT) { + property.usage=0; + } + } + + if (property.name=="property/node_path") { + if (call_mode!=CALL_MODE_NODE_PATH) { + property.usage=0; + } else { + + Node *bnode = _get_base_node(); + if (bnode) { + property.hint_string=bnode->get_path(); //convert to loong string + } else { + + } + } + } + + if (property.name=="property/property") { + + if (call_mode==CALL_MODE_BASIC_TYPE) { + + property.hint=PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE; + property.hint_string=Variant::get_type_name(basic_type); + + } else if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) { + property.hint=PROPERTY_HINT_PROPERTY_OF_SCRIPT; + property.hint_string=itos(get_visual_script()->get_instance_ID()); + } else if (call_mode==CALL_MODE_INSTANCE) { + property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE; + property.hint_string=base_type; + + if (base_script!=String()) { + if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) { + + ScriptServer::edit_request_func(base_script); //make sure it's loaded + } + + if (ResourceCache::has(base_script)) { + + Ref<Script> script = Ref<Resource>( ResourceCache::get(base_script) ); + if (script.is_valid()) { + + property.hint=PROPERTY_HINT_PROPERTY_OF_SCRIPT; + property.hint_string=itos(script->get_instance_ID()); + } + } + } + + } else if (call_mode==CALL_MODE_NODE_PATH) { + Node *node = _get_base_node(); + if (node) { + property.hint=PROPERTY_HINT_PROPERTY_OF_INSTANCE; + property.hint_string=itos(node->get_instance_ID()); + } else { + property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE; + property.hint_string=get_base_type(); + } + + } + + } + +} + +void VisualScriptPropertySet::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_base_type","base_type"),&VisualScriptPropertySet::set_base_type); + ObjectTypeDB::bind_method(_MD("get_base_type"),&VisualScriptPropertySet::get_base_type); + + ObjectTypeDB::bind_method(_MD("set_base_script","base_script"),&VisualScriptPropertySet::set_base_script); + ObjectTypeDB::bind_method(_MD("get_base_script"),&VisualScriptPropertySet::get_base_script); + + ObjectTypeDB::bind_method(_MD("set_basic_type","basic_type"),&VisualScriptPropertySet::set_basic_type); + ObjectTypeDB::bind_method(_MD("get_basic_type"),&VisualScriptPropertySet::get_basic_type); + + ObjectTypeDB::bind_method(_MD("_set_type_cache","type_cache"),&VisualScriptPropertySet::_set_type_cache); + ObjectTypeDB::bind_method(_MD("_get_type_cache"),&VisualScriptPropertySet::_get_type_cache); + + ObjectTypeDB::bind_method(_MD("set_event_type","event_type"),&VisualScriptPropertySet::set_event_type); + ObjectTypeDB::bind_method(_MD("get_event_type"),&VisualScriptPropertySet::get_event_type); + + ObjectTypeDB::bind_method(_MD("set_property","property"),&VisualScriptPropertySet::set_property); + ObjectTypeDB::bind_method(_MD("get_property"),&VisualScriptPropertySet::get_property); + + ObjectTypeDB::bind_method(_MD("set_call_mode","mode"),&VisualScriptPropertySet::set_call_mode); + ObjectTypeDB::bind_method(_MD("get_call_mode"),&VisualScriptPropertySet::get_call_mode); + + ObjectTypeDB::bind_method(_MD("set_base_path","base_path"),&VisualScriptPropertySet::set_base_path); + ObjectTypeDB::bind_method(_MD("get_base_path"),&VisualScriptPropertySet::get_base_path); + + + + String bt; + for(int i=0;i<Variant::VARIANT_MAX;i++) { + if (i>0) + bt+=","; + + bt+=Variant::get_type_name(Variant::Type(i)); + } + + String et; + for(int i=0;i<InputEvent::TYPE_MAX;i++) { + if (i>0) + et+=","; + + et+=event_type_names[i]; + } + + List<String> script_extensions; + for(int i=0;i<ScriptServer::get_language_count();i++) { + ScriptServer::get_language(i)->get_recognized_extensions(&script_extensions); + } + + String script_ext_hint; + for (List<String>::Element *E=script_extensions.front();E;E=E->next()) { + if (script_ext_hint!=String()) + script_ext_hint+=","; + script_ext_hint+="*."+E->get(); + } + + ADD_PROPERTY(PropertyInfo(Variant::INT,"property/set_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type"),_SCS("set_call_mode"),_SCS("get_call_mode")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_script",PROPERTY_HINT_FILE,script_ext_hint),_SCS("set_base_script"),_SCS("get_base_script")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"property/type_cache",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_type_cache"),_SCS("_get_type_cache")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"property/basic_type",PROPERTY_HINT_ENUM,bt),_SCS("set_basic_type"),_SCS("get_basic_type")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"property/event_type",PROPERTY_HINT_ENUM,et),_SCS("set_event_type"),_SCS("get_event_type")); + ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"property/node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),_SCS("set_base_path"),_SCS("get_base_path")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/property"),_SCS("set_property"),_SCS("get_property")); + + BIND_CONSTANT( CALL_MODE_SELF ); + BIND_CONSTANT( CALL_MODE_NODE_PATH); + BIND_CONSTANT( CALL_MODE_INSTANCE); + +} + +class VisualScriptNodeInstancePropertySet : public VisualScriptNodeInstance { +public: + + + VisualScriptPropertySet::CallMode call_mode; + NodePath node_path; + StringName property; + + VisualScriptPropertySet *node; + VisualScriptInstance *instance; + + + + //virtual int get_working_memory_size() const { return 0; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + + switch(call_mode) { + + case VisualScriptPropertySet::CALL_MODE_SELF: { + + Object *object=instance->get_owner_ptr(); + + bool valid; + + object->set(property,*p_inputs[0],&valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Invalid set value '"+String(*p_inputs[0])+"' on property '"+String(property)+"' of type "+object->get_type(); + } + } break; + case VisualScriptPropertySet::CALL_MODE_NODE_PATH: { + + Node* node = instance->get_owner_ptr()->cast_to<Node>(); + if (!node) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Base object is not a Node!"; + return 0; + } + + Node* another = node->get_node(node_path); + if (!node) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Path does not lead Node!"; + return 0; + } + + bool valid; + + another->set(property,*p_inputs[0],&valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Invalid set value '"+String(*p_inputs[0])+"' on property '"+String(property)+"' of type "+another->get_type(); + } + + } break; + case VisualScriptPropertySet::CALL_MODE_INSTANCE: + case VisualScriptPropertySet::CALL_MODE_BASIC_TYPE: { + + Variant v = *p_inputs[0]; + + bool valid; + + v.set(property,*p_inputs[1],&valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Invalid set value '"+String(*p_inputs[1])+"' ("+Variant::get_type_name(p_inputs[1]->get_type())+") on property '"+String(property)+"' of type "+Variant::get_type_name(v.get_type()); + } + + *p_outputs[0]=v; + + } break; + + } + return 0; + + } + + +}; + +VisualScriptNodeInstance* VisualScriptPropertySet::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstancePropertySet * instance = memnew(VisualScriptNodeInstancePropertySet ); + instance->node=this; + instance->instance=p_instance; + instance->property=property; + instance->call_mode=call_mode; + instance->node_path=base_path; + return instance; +} + + + +VisualScriptPropertySet::TypeGuess VisualScriptPropertySet::guess_output_type(TypeGuess* p_inputs, int p_output) const { + + if (p_output==0 && call_mode==CALL_MODE_INSTANCE) { + return p_inputs[0]; + } + + return VisualScriptNode::guess_output_type(p_inputs,p_output); + +} +VisualScriptPropertySet::VisualScriptPropertySet() { + + call_mode=CALL_MODE_SELF; + base_type="Object"; + basic_type=Variant::NIL; + event_type=InputEvent::NONE; + +} + +template<VisualScriptPropertySet::CallMode cmode> +static Ref<VisualScriptNode> create_property_set_node(const String& p_name) { + + Ref<VisualScriptPropertySet> node; + node.instance(); + node->set_call_mode(cmode); + return node; +} + + +////////////////////////////////////////// +////////////////GET////////////////////// +////////////////////////////////////////// + +int VisualScriptPropertyGet::get_output_sequence_port_count() const { + + return 0;// (call_mode==CALL_MODE_SELF || call_mode==CALL_MODE_NODE_PATH)?0:1; +} + +bool VisualScriptPropertyGet::has_input_sequence_port() const{ + + return false;//(call_mode==CALL_MODE_SELF || call_mode==CALL_MODE_NODE_PATH)?false:true; +} +void VisualScriptPropertyGet::_update_base_type() { + //cache it because this information may not be available on load + if (call_mode==CALL_MODE_NODE_PATH) { + + Node* node=_get_base_node(); + if (node) { + base_type=node->get_type(); + } + } else if (call_mode==CALL_MODE_SELF) { + + if (get_visual_script().is_valid()) { + base_type=get_visual_script()->get_instance_base_type(); + } + } + +} +Node *VisualScriptPropertyGet::_get_base_node() const { + +#ifdef TOOLS_ENABLED + Ref<Script> script = get_visual_script(); + if (!script.is_valid()) + return NULL; + + MainLoop * main_loop = OS::get_singleton()->get_main_loop(); + if (!main_loop) + return NULL; + + SceneTree *scene_tree = main_loop->cast_to<SceneTree>(); + + if (!scene_tree) + return NULL; + + Node *edited_scene = scene_tree->get_edited_scene_root(); + + if (!edited_scene) + return NULL; + + Node* script_node = _find_script_node(edited_scene,edited_scene,script); + + if (!script_node) + return NULL; + + if (!script_node->has_node(base_path)) + return NULL; + + Node *path_to = script_node->get_node(base_path); + + return path_to; +#else + + return NULL; +#endif +} + +StringName VisualScriptPropertyGet::_get_base_type() const { + + if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) + return get_visual_script()->get_instance_base_type(); + else if (call_mode==CALL_MODE_NODE_PATH && get_visual_script().is_valid()) { + Node *path = _get_base_node(); + if (path) + return path->get_type(); + + } + + return base_type; +} + + +int VisualScriptPropertyGet::get_input_value_port_count() const{ + + return (call_mode==CALL_MODE_BASIC_TYPE || call_mode==CALL_MODE_INSTANCE)?1:0; + +} +int VisualScriptPropertyGet::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptPropertyGet::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptPropertyGet::get_input_value_port_info(int p_idx) const{ + + if (call_mode==CALL_MODE_INSTANCE || call_mode==CALL_MODE_BASIC_TYPE) { + if (p_idx==0) { + PropertyInfo pi; + pi.type=(call_mode==CALL_MODE_INSTANCE?Variant::OBJECT:basic_type); + pi.name=(call_mode==CALL_MODE_INSTANCE?String("instance"):Variant::get_type_name(basic_type).to_lower()); + return pi; + } else { + p_idx--; + } + } + return PropertyInfo(); + +} + +PropertyInfo VisualScriptPropertyGet::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(type_cache,"value"); +} + + +String VisualScriptPropertyGet::get_caption() const { + + static const char*cname[4]= { + "SelfGet", + "NodeGet", + "InstanceGet", + "BasicGet" + }; + + return cname[call_mode]; +} + +String VisualScriptPropertyGet::get_text() const { + + String prop; + + if (call_mode==CALL_MODE_BASIC_TYPE) + prop=Variant::get_type_name(basic_type)+"."+property; + else if (call_mode==CALL_MODE_NODE_PATH) + prop=String(base_path)+":"+property; + else if (call_mode==CALL_MODE_SELF) + prop=property; + else if (call_mode==CALL_MODE_INSTANCE) + prop=String(base_type)+":"+property; + + return prop; +} + +void VisualScriptPropertyGet::set_base_type(const StringName& p_type) { + + if (base_type==p_type) + return; + + base_type=p_type; + _change_notify(); + ports_changed_notify(); +} + +StringName VisualScriptPropertyGet::get_base_type() const{ + + return base_type; +} + +void VisualScriptPropertyGet::set_base_script(const String& p_path) { + + if (base_script==p_path) + return; + + base_script=p_path; + _change_notify(); + ports_changed_notify(); +} + +String VisualScriptPropertyGet::get_base_script() const { + + return base_script; +} + + +void VisualScriptPropertyGet::_update_cache() { + + + if (call_mode==CALL_MODE_BASIC_TYPE) { + + //not super efficient.. + + Variant v; + if (basic_type==Variant::INPUT_EVENT) { + InputEvent ev; + ev.type=event_type; + v=ev; + } else { + Variant::CallError ce; + v = Variant::construct(basic_type,NULL,0,ce); + } + + List<PropertyInfo> pinfo; + v.get_property_list(&pinfo); + + for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) { + + if (E->get().name==property) { + + type_cache=E->get().type; + return; + } + } + + } else { + + + StringName type; + Ref<Script> script; + Node *node=NULL; + + if (call_mode==CALL_MODE_NODE_PATH) { + + node=_get_base_node(); + if (node) { + type=node->get_type(); + base_type=type; //cache, too + script = node->get_script(); + } + } else if (call_mode==CALL_MODE_SELF) { + + if (get_visual_script().is_valid()) { + type=get_visual_script()->get_instance_base_type(); + base_type=type; //cache, too + script=get_visual_script(); + } + } else if (call_mode==CALL_MODE_INSTANCE) { + + type=base_type; + if (base_script!=String()) { + + if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) { + + ScriptServer::edit_request_func(base_script); //make sure it's loaded + } + + if (ResourceCache::has(base_script)) { + + script = Ref<Resource>( ResourceCache::get(base_script) ); + } else { + return; + } + } + } + + + bool valid=false; + + Variant::Type type_ret; + + type_ret=ObjectTypeDB::get_property_type(base_type,property,&valid); + + if (valid) { + type_cache=type_ret; + return; //all dandy + } + + if (node) { + + Variant prop = node->get(property,&valid); + if (valid) { + type_cache=prop.get_type(); + return; //all dandy again + } + } + + if (script.is_valid()) { + + type_ret=script->get_static_property_type(property,&valid); + + if (valid) { + type_cache=type_ret; + return; //all dandy + } + } + } +} + +void VisualScriptPropertyGet::set_property(const StringName& p_type){ + + if (property==p_type) + return; + + property=p_type; + + + _update_cache(); + _change_notify(); + ports_changed_notify(); +} +StringName VisualScriptPropertyGet::get_property() const { + + + return property; +} + +void VisualScriptPropertyGet::set_base_path(const NodePath& p_type) { + + if (base_path==p_type) + return; + + base_path=p_type; + _change_notify(); + _update_base_type(); + ports_changed_notify(); +} + +NodePath VisualScriptPropertyGet::get_base_path() const { + + return base_path; +} + + +void VisualScriptPropertyGet::set_call_mode(CallMode p_mode) { + + if (call_mode==p_mode) + return; + + call_mode=p_mode; + _change_notify(); + _update_base_type(); + ports_changed_notify(); + +} +VisualScriptPropertyGet::CallMode VisualScriptPropertyGet::get_call_mode() const { + + return call_mode; +} + + + +void VisualScriptPropertyGet::set_basic_type(Variant::Type p_type) { + + if (basic_type==p_type) + return; + basic_type=p_type; + + + _change_notify(); + ports_changed_notify(); +} + +Variant::Type VisualScriptPropertyGet::get_basic_type() const{ + + return basic_type; +} + + +void VisualScriptPropertyGet::set_event_type(InputEvent::Type p_type) { + + if (event_type==p_type) + return; + event_type=p_type; + if(call_mode==CALL_MODE_BASIC_TYPE) { + _update_cache(); + } + _change_notify(); + _update_base_type(); + ports_changed_notify(); +} + +InputEvent::Type VisualScriptPropertyGet::get_event_type() const{ + + return event_type; +} + + +void VisualScriptPropertyGet::_set_type_cache(Variant::Type p_type) { + type_cache=p_type; +} + +Variant::Type VisualScriptPropertyGet::_get_type_cache() const { + + return type_cache; +} + + +void VisualScriptPropertyGet::_validate_property(PropertyInfo& property) const { + + if (property.name=="property/base_type") { + if (call_mode!=CALL_MODE_INSTANCE) { + property.usage=PROPERTY_USAGE_NOEDITOR; + } + } + + if (property.name=="property/base_script") { + if (call_mode!=CALL_MODE_INSTANCE) { + property.usage=0; + } + } + + if (property.name=="property/basic_type") { + if (call_mode!=CALL_MODE_BASIC_TYPE) { + property.usage=0; + } + } + if (property.name=="property/event_type") { + if (call_mode!=CALL_MODE_BASIC_TYPE || basic_type!=Variant::INPUT_EVENT) { + property.usage=0; + } + } + + if (property.name=="property/node_path") { + if (call_mode!=CALL_MODE_NODE_PATH) { + property.usage=0; + } else { + + Node *bnode = _get_base_node(); + if (bnode) { + property.hint_string=bnode->get_path(); //convert to loong string + } else { + + } + } + } + + if (property.name=="property/property") { + + if (call_mode==CALL_MODE_BASIC_TYPE) { + + property.hint=PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE; + property.hint_string=Variant::get_type_name(basic_type); + + } else if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) { + property.hint=PROPERTY_HINT_PROPERTY_OF_SCRIPT; + property.hint_string=itos(get_visual_script()->get_instance_ID()); + } else if (call_mode==CALL_MODE_INSTANCE) { + property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE; + property.hint_string=base_type; + + if (base_script!=String()) { + if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) { + + ScriptServer::edit_request_func(base_script); //make sure it's loaded + } + + if (ResourceCache::has(base_script)) { + + Ref<Script> script = Ref<Resource>( ResourceCache::get(base_script) ); + if (script.is_valid()) { + + property.hint=PROPERTY_HINT_PROPERTY_OF_SCRIPT; + property.hint_string=itos(script->get_instance_ID()); + } + } + } + } else if (call_mode==CALL_MODE_NODE_PATH) { + Node *node = _get_base_node(); + if (node) { + property.hint=PROPERTY_HINT_PROPERTY_OF_INSTANCE; + property.hint_string=itos(node->get_instance_ID()); + } else { + property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE; + property.hint_string=get_base_type(); + } + + } + + } + +} + +void VisualScriptPropertyGet::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_base_type","base_type"),&VisualScriptPropertyGet::set_base_type); + ObjectTypeDB::bind_method(_MD("get_base_type"),&VisualScriptPropertyGet::get_base_type); + + ObjectTypeDB::bind_method(_MD("set_base_script","base_script"),&VisualScriptPropertyGet::set_base_script); + ObjectTypeDB::bind_method(_MD("get_base_script"),&VisualScriptPropertyGet::get_base_script); + + ObjectTypeDB::bind_method(_MD("set_basic_type","basic_type"),&VisualScriptPropertyGet::set_basic_type); + ObjectTypeDB::bind_method(_MD("get_basic_type"),&VisualScriptPropertyGet::get_basic_type); + + ObjectTypeDB::bind_method(_MD("_set_type_cache","type_cache"),&VisualScriptPropertyGet::_set_type_cache); + ObjectTypeDB::bind_method(_MD("_get_type_cache"),&VisualScriptPropertyGet::_get_type_cache); + + ObjectTypeDB::bind_method(_MD("set_event_type","event_type"),&VisualScriptPropertyGet::set_event_type); + ObjectTypeDB::bind_method(_MD("get_event_type"),&VisualScriptPropertyGet::get_event_type); + + + ObjectTypeDB::bind_method(_MD("set_property","property"),&VisualScriptPropertyGet::set_property); + ObjectTypeDB::bind_method(_MD("get_property"),&VisualScriptPropertyGet::get_property); + + ObjectTypeDB::bind_method(_MD("set_call_mode","mode"),&VisualScriptPropertyGet::set_call_mode); + ObjectTypeDB::bind_method(_MD("get_call_mode"),&VisualScriptPropertyGet::get_call_mode); + + ObjectTypeDB::bind_method(_MD("set_base_path","base_path"),&VisualScriptPropertyGet::set_base_path); + ObjectTypeDB::bind_method(_MD("get_base_path"),&VisualScriptPropertyGet::get_base_path); + + String bt; + for(int i=0;i<Variant::VARIANT_MAX;i++) { + if (i>0) + bt+=","; + + bt+=Variant::get_type_name(Variant::Type(i)); + } + + String et; + for(int i=0;i<InputEvent::TYPE_MAX;i++) { + if (i>0) + et+=","; + + et+=event_type_names[i]; + } + + List<String> script_extensions; + for(int i=0;i<ScriptServer::get_language_count();i++) { + ScriptServer::get_language(i)->get_recognized_extensions(&script_extensions); + } + + String script_ext_hint; + for (List<String>::Element *E=script_extensions.front();E;E=E->next()) { + if (script_ext_hint!=String()) + script_ext_hint+=","; + script_ext_hint+="."+E->get(); + } + + ADD_PROPERTY(PropertyInfo(Variant::INT,"property/set_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type"),_SCS("set_call_mode"),_SCS("get_call_mode")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_script",PROPERTY_HINT_FILE,script_ext_hint),_SCS("set_base_script"),_SCS("get_base_script")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"property/type_cache",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_type_cache"),_SCS("_get_type_cache")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"property/basic_type",PROPERTY_HINT_ENUM,bt),_SCS("set_basic_type"),_SCS("get_basic_type")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"property/event_type",PROPERTY_HINT_ENUM,et),_SCS("set_event_type"),_SCS("get_event_type")); + ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"property/node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),_SCS("set_base_path"),_SCS("get_base_path")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/property"),_SCS("set_property"),_SCS("get_property")); + + BIND_CONSTANT( CALL_MODE_SELF ); + BIND_CONSTANT( CALL_MODE_NODE_PATH); + BIND_CONSTANT( CALL_MODE_INSTANCE); +} + +class VisualScriptNodeInstancePropertyGet : public VisualScriptNodeInstance { +public: + + + VisualScriptPropertyGet::CallMode call_mode; + NodePath node_path; + StringName property; + + VisualScriptPropertyGet *node; + VisualScriptInstance *instance; + + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + + + switch(call_mode) { + + case VisualScriptPropertyGet::CALL_MODE_SELF: { + + Object *object=instance->get_owner_ptr(); + + bool valid; + + *p_outputs[0] = object->get(property,&valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str=RTR("Invalid index property name."); + return 0; + } + } break; + case VisualScriptPropertyGet::CALL_MODE_NODE_PATH: { + + Node* node = instance->get_owner_ptr()->cast_to<Node>(); + if (!node) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str=RTR("Base object is not a Node!"); + return 0; + } + + Node* another = node->get_node(node_path); + if (!node) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str=RTR("Path does not lead Node!"); + return 0; + } + + bool valid; + + + *p_outputs[0] = another->get(property,&valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str=vformat(RTR("Invalid index property name '%s' in node %s."),String(property),another->get_name()); + return 0; + } + + } break; + default: { + + bool valid; + Variant v = *p_inputs[0]; + + *p_outputs[0] = v.get(property,&valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str=RTR("Invalid index property name."); + + } + }; + } + + return 0; + } + + + + +}; + +VisualScriptNodeInstance* VisualScriptPropertyGet::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstancePropertyGet * instance = memnew(VisualScriptNodeInstancePropertyGet ); + instance->node=this; + instance->instance=p_instance; + instance->property=property; + instance->call_mode=call_mode; + instance->node_path=base_path; + + return instance; +} + +VisualScriptPropertyGet::VisualScriptPropertyGet() { + + call_mode=CALL_MODE_SELF; + base_type="Object"; + basic_type=Variant::NIL; + event_type=InputEvent::NONE; + type_cache=Variant::NIL; + +} + +template<VisualScriptPropertyGet::CallMode cmode> +static Ref<VisualScriptNode> create_property_get_node(const String& p_name) { + + Ref<VisualScriptPropertyGet> node; + node.instance(); + node->set_call_mode(cmode); + return node; +} + + +////////////////////////////////////////// +////////////////EMIT////////////////////// +////////////////////////////////////////// + +int VisualScriptEmitSignal::get_output_sequence_port_count() const { + + return 1; +} + +bool VisualScriptEmitSignal::has_input_sequence_port() const{ + + return true; +} + + +int VisualScriptEmitSignal::get_input_value_port_count() const{ + + Ref<VisualScript> vs = get_visual_script(); + if (vs.is_valid()) { + + if (!vs->has_custom_signal(name)) + return 0; + + return vs->custom_signal_get_argument_count(name); + } + + return 0; + +} +int VisualScriptEmitSignal::get_output_value_port_count() const{ + return 0; +} + +String VisualScriptEmitSignal::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptEmitSignal::get_input_value_port_info(int p_idx) const{ + + Ref<VisualScript> vs = get_visual_script(); + if (vs.is_valid()) { + + if (!vs->has_custom_signal(name)) + return PropertyInfo(); + + return PropertyInfo(vs->custom_signal_get_argument_type(name,p_idx),vs->custom_signal_get_argument_name(name,p_idx)); + } + + return PropertyInfo(); + +} + +PropertyInfo VisualScriptEmitSignal::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + + +String VisualScriptEmitSignal::get_caption() const { + + return "EmitSignal"; +} + +String VisualScriptEmitSignal::get_text() const { + + return "emit "+String(name); +} + + + +void VisualScriptEmitSignal::set_signal(const StringName& p_type){ + + if (name==p_type) + return; + + name=p_type; + + _change_notify(); + ports_changed_notify(); +} +StringName VisualScriptEmitSignal::get_signal() const { + + + return name; +} + + +void VisualScriptEmitSignal::_validate_property(PropertyInfo& property) const { + + + + if (property.name=="signal/signal") { + property.hint=PROPERTY_HINT_ENUM; + + + List<StringName> sigs; + + Ref<VisualScript> vs = get_visual_script(); + if (vs.is_valid()) { + + vs->get_custom_signal_list(&sigs); + + } + + String ml; + for (List<StringName>::Element *E=sigs.front();E;E=E->next()) { + + if (ml!=String()) + ml+=","; + ml+=E->get(); + } + + property.hint_string=ml; + } + +} + + +void VisualScriptEmitSignal::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_signal","name"),&VisualScriptEmitSignal::set_signal); + ObjectTypeDB::bind_method(_MD("get_signal"),&VisualScriptEmitSignal::get_signal); + + + ADD_PROPERTY(PropertyInfo(Variant::STRING,"signal/signal"),_SCS("set_signal"),_SCS("get_signal")); + + +} + +class VisualScriptNodeInstanceEmitSignal : public VisualScriptNodeInstance { +public: + + VisualScriptEmitSignal *node; + VisualScriptInstance *instance; + int argcount; + StringName name; + + //virtual int get_working_memory_size() const { return 0; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + + Object *obj = instance->get_owner_ptr(); + + obj->emit_signal(name,p_inputs,argcount); + + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptEmitSignal::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceEmitSignal * instance = memnew(VisualScriptNodeInstanceEmitSignal ); + instance->node=this; + instance->instance=p_instance; + instance->name=name; + instance->argcount=get_input_value_port_count(); + return instance; +} + +VisualScriptEmitSignal::VisualScriptEmitSignal() { +} + + + +static Ref<VisualScriptNode> create_basic_type_call_node(const String& p_name) { + + Vector<String> path = p_name.split("/"); + ERR_FAIL_COND_V(path.size()<4,Ref<VisualScriptNode>()); + String base_type = path[2]; + String method = path[3]; + + Ref<VisualScriptFunctionCall> node; + node.instance(); + + Variant::Type type=Variant::VARIANT_MAX; + + for(int i=0;i<Variant::VARIANT_MAX;i++) { + + if (Variant::get_type_name(Variant::Type(i))==base_type) { + type=Variant::Type(i); + break; + } + } + + ERR_FAIL_COND_V(type==Variant::VARIANT_MAX,Ref<VisualScriptNode>()); + + + node->set_call_mode(VisualScriptFunctionCall::CALL_MODE_BASIC_TYPE); + node->set_basic_type(type); + node->set_function(method); + + return node; +} + + +void register_visual_script_func_nodes() { + + VisualScriptLanguage::singleton->add_register_func("functions/call",create_node_generic<VisualScriptFunctionCall>); + VisualScriptLanguage::singleton->add_register_func("functions/set",create_node_generic<VisualScriptPropertySet>); + VisualScriptLanguage::singleton->add_register_func("functions/get",create_node_generic<VisualScriptPropertyGet>); + + //VisualScriptLanguage::singleton->add_register_func("functions/call_script/call_self",create_script_call_node<VisualScriptScriptCall::CALL_MODE_SELF>); +// VisualScriptLanguage::singleton->add_register_func("functions/call_script/call_node",create_script_call_node<VisualScriptScriptCall::CALL_MODE_NODE_PATH>); + VisualScriptLanguage::singleton->add_register_func("functions/emit_signal",create_node_generic<VisualScriptEmitSignal>); + + + for(int i=0;i<Variant::VARIANT_MAX;i++) { + + Variant::Type t = Variant::Type(i); + String type_name = Variant::get_type_name(t); + Variant::CallError ce; + Variant vt = Variant::construct(t,NULL,0,ce); + List<MethodInfo> ml; + vt.get_method_list(&ml); + + for (List<MethodInfo>::Element *E=ml.front();E;E=E->next()) { + VisualScriptLanguage::singleton->add_register_func("functions/by_type/"+type_name+"/"+E->get().name,create_basic_type_call_node); + } + } +} diff --git a/modules/visual_script/visual_script_func_nodes.h b/modules/visual_script/visual_script_func_nodes.h new file mode 100644 index 0000000000..43ef276cf4 --- /dev/null +++ b/modules/visual_script/visual_script_func_nodes.h @@ -0,0 +1,349 @@ +#ifndef VISUAL_SCRIPT_FUNC_NODES_H +#define VISUAL_SCRIPT_FUNC_NODES_H + +#include "visual_script.h" + + +class VisualScriptFunctionCall : public VisualScriptNode { + + OBJ_TYPE(VisualScriptFunctionCall,VisualScriptNode) +public: + enum CallMode { + CALL_MODE_SELF, + CALL_MODE_NODE_PATH, + CALL_MODE_INSTANCE, + CALL_MODE_BASIC_TYPE, + CALL_MODE_SINGLETON, + }; + + enum RPCCallMode { + RPC_DISABLED, + RPC_RELIABLE, + RPC_UNRELIABLE, + RPC_RELIABLE_TO_ID, + RPC_UNRELIABLE_TO_ID + }; + +private: + + CallMode call_mode; + StringName base_type; + String base_script; + Variant::Type basic_type; + NodePath base_path; + StringName function; + int use_default_args; + RPCCallMode rpc_call_mode; + StringName singleton; + bool validate; + + + Node *_get_base_node() const; + StringName _get_base_type() const; + + MethodInfo method_cache; + void _update_method_cache(); + + void _set_argument_cache(const Dictionary& p_args); + Dictionary _get_argument_cache() const; + +protected: + virtual void _validate_property(PropertyInfo& property) const; + + static void _bind_methods(); + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "functions"; } + + void set_basic_type(Variant::Type p_type); + Variant::Type get_basic_type() const; + + void set_base_type(const StringName& p_type); + StringName get_base_type() const; + + void set_base_script(const String& p_path); + String get_base_script() const; + + void set_singleton(const StringName& p_type); + StringName get_singleton() const; + + void set_function(const StringName& p_type); + StringName get_function() const; + + void set_base_path(const NodePath& p_type); + NodePath get_base_path() const; + + + void set_call_mode(CallMode p_mode); + CallMode get_call_mode() const; + + void set_use_default_args(int p_amount); + int get_use_default_args() const; + + void set_validate(bool p_amount); + bool get_validate() const; + + void set_rpc_call_mode(RPCCallMode p_mode); + RPCCallMode get_rpc_call_mode() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const; + + + VisualScriptFunctionCall(); +}; + +VARIANT_ENUM_CAST(VisualScriptFunctionCall::CallMode ); +VARIANT_ENUM_CAST(VisualScriptFunctionCall::RPCCallMode ); + + +class VisualScriptPropertySet : public VisualScriptNode { + + OBJ_TYPE(VisualScriptPropertySet,VisualScriptNode) +public: + enum CallMode { + CALL_MODE_SELF, + CALL_MODE_NODE_PATH, + CALL_MODE_INSTANCE, + CALL_MODE_BASIC_TYPE, + + + }; +private: + + PropertyInfo type_cache; + + CallMode call_mode; + Variant::Type basic_type; + StringName base_type; + String base_script; + NodePath base_path; + StringName property; + InputEvent::Type event_type; + + Node *_get_base_node() const; + StringName _get_base_type() const; + + void _update_base_type(); + + void _update_cache(); + + void _set_type_cache(const Dictionary& p_type); + Dictionary _get_type_cache() const; + + +protected: + virtual void _validate_property(PropertyInfo& property) const; + + static void _bind_methods(); + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "functions"; } + + void set_base_type(const StringName& p_type); + StringName get_base_type() const; + + void set_base_script(const String& p_path); + String get_base_script() const; + + void set_basic_type(Variant::Type p_type); + Variant::Type get_basic_type() const; + + void set_event_type(InputEvent::Type p_type); + InputEvent::Type get_event_type() const; + + void set_property(const StringName& p_type); + StringName get_property() const; + + void set_base_path(const NodePath& p_type); + NodePath get_base_path() const; + + void set_call_mode(CallMode p_mode); + CallMode get_call_mode() const; + + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const; + + VisualScriptPropertySet(); +}; + +VARIANT_ENUM_CAST(VisualScriptPropertySet::CallMode ); + + +class VisualScriptPropertyGet : public VisualScriptNode { + + OBJ_TYPE(VisualScriptPropertyGet,VisualScriptNode) +public: + enum CallMode { + CALL_MODE_SELF, + CALL_MODE_NODE_PATH, + CALL_MODE_INSTANCE, + CALL_MODE_BASIC_TYPE, + + }; +private: + + Variant::Type type_cache; + + CallMode call_mode; + Variant::Type basic_type; + StringName base_type; + String base_script; + NodePath base_path; + StringName property; + InputEvent::Type event_type; + + void _update_base_type(); + Node *_get_base_node() const; + StringName _get_base_type() const; + + void _update_cache(); + + void _set_type_cache(Variant::Type p_type); + Variant::Type _get_type_cache() const; + +protected: + virtual void _validate_property(PropertyInfo& property) const; + + static void _bind_methods(); + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "functions"; } + + void set_base_type(const StringName& p_type); + StringName get_base_type() const; + + void set_base_script(const String& p_path); + String get_base_script() const; + + void set_basic_type(Variant::Type p_type); + Variant::Type get_basic_type() const; + + void set_event_type(InputEvent::Type p_type); + InputEvent::Type get_event_type() const; + + void set_property(const StringName& p_type); + StringName get_property() const; + + void set_base_path(const NodePath& p_type); + NodePath get_base_path() const; + + void set_call_mode(CallMode p_mode); + CallMode get_call_mode() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptPropertyGet(); +}; + + + + + +VARIANT_ENUM_CAST(VisualScriptPropertyGet::CallMode ); + + + +class VisualScriptEmitSignal : public VisualScriptNode { + + OBJ_TYPE(VisualScriptEmitSignal,VisualScriptNode) + +private: + + StringName name; + + +protected: + virtual void _validate_property(PropertyInfo& property) const; + + static void _bind_methods(); + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "functions"; } + + void set_signal(const StringName& p_type); + StringName get_signal() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + + + + VisualScriptEmitSignal(); +}; + + + +void register_visual_script_func_nodes(); + +#endif // VISUAL_SCRIPT_FUNC_NODES_H diff --git a/modules/visual_script/visual_script_nodes.cpp b/modules/visual_script/visual_script_nodes.cpp new file mode 100644 index 0000000000..7ada292b13 --- /dev/null +++ b/modules/visual_script/visual_script_nodes.cpp @@ -0,0 +1,3958 @@ +#include "visual_script_nodes.h" +#include "global_constants.h" +#include "globals.h" +#include "scene/main/scene_main_loop.h" +#include "os/os.h" +#include "scene/main/node.h" +#include "os/input.h" + +////////////////////////////////////////// +////////////////FUNCTION////////////////// +////////////////////////////////////////// + + +bool VisualScriptFunction::_set(const StringName& p_name, const Variant& p_value) { + + + if (p_name=="argument_count") { + + int new_argc=p_value; + int argc = arguments.size(); + if (argc==new_argc) + return true; + + arguments.resize(new_argc); + + for(int i=argc;i<new_argc;i++) { + arguments[i].name="arg"+itos(i+1); + arguments[i].type=Variant::NIL; + } + ports_changed_notify(); + _change_notify(); + return true; + } + if (String(p_name).begins_with("argument/")) { + int idx = String(p_name).get_slice("/",1).to_int()-1; + ERR_FAIL_INDEX_V(idx,arguments.size(),false); + String what = String(p_name).get_slice("/",2); + if (what=="type") { + + Variant::Type new_type = Variant::Type(int(p_value)); + arguments[idx].type=new_type; + ports_changed_notify(); + + return true; + } + + if (what=="name") { + + arguments[idx].name=p_value; + ports_changed_notify(); + return true; + } + + + } + + if (p_name=="stack/stackless") { + set_stack_less(p_value); + return true; + } + + if (p_name=="stack/size") { + stack_size=p_value; + return true; + } + + if (p_name=="rpc/mode") { + rpc_mode=ScriptInstance::RPCMode(int(p_value)); + return true; + } + + return false; +} + +bool VisualScriptFunction::_get(const StringName& p_name,Variant &r_ret) const { + + + if (p_name=="argument_count") { + r_ret = arguments.size(); + return true; + } + if (String(p_name).begins_with("argument/")) { + int idx = String(p_name).get_slice("/",1).to_int()-1; + ERR_FAIL_INDEX_V(idx,arguments.size(),false); + String what = String(p_name).get_slice("/",2); + if (what=="type") { + r_ret = arguments[idx].type; + return true; + } + if (what=="name") { + r_ret = arguments[idx].name; + return true; + } + + + + } + + if (p_name=="stack/stackless") { + r_ret=stack_less; + return true; + } + + if (p_name=="stack/size") { + r_ret=stack_size; + return true; + } + + if (p_name=="rpc/mode") { + r_ret=rpc_mode; + return true; + } + + return false; +} +void VisualScriptFunction::_get_property_list( List<PropertyInfo> *p_list) const { + + + p_list->push_back(PropertyInfo(Variant::INT,"argument_count",PROPERTY_HINT_RANGE,"0,256")); + String argt="Any"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + + for(int i=0;i<arguments.size();i++) { + p_list->push_back(PropertyInfo(Variant::INT,"argument/"+itos(i+1)+"/type",PROPERTY_HINT_ENUM,argt)); + p_list->push_back(PropertyInfo(Variant::STRING,"argument/"+itos(i+1)+"/name")); + } + if (!stack_less) { + p_list->push_back(PropertyInfo(Variant::INT,"stack/size",PROPERTY_HINT_RANGE,"1,100000")); + } + p_list->push_back(PropertyInfo(Variant::BOOL,"stack/stackless")); + p_list->push_back(PropertyInfo(Variant::INT,"rpc/mode",PROPERTY_HINT_ENUM,"Disabled,Remote,Sync,Master,Slave")); + +} + + +int VisualScriptFunction::get_output_sequence_port_count() const { + + return 1; +} + +bool VisualScriptFunction::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptFunction::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptFunction::get_output_value_port_count() const{ + + return arguments.size(); +} + +String VisualScriptFunction::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptFunction::get_input_value_port_info(int p_idx) const{ + + ERR_FAIL_V(PropertyInfo()); + return PropertyInfo(); +} +PropertyInfo VisualScriptFunction::get_output_value_port_info(int p_idx) const{ + + ERR_FAIL_INDEX_V(p_idx,arguments.size(),PropertyInfo()); + PropertyInfo out; + out.type=arguments[p_idx].type; + out.name=arguments[p_idx].name; + return out; +} + +String VisualScriptFunction::get_caption() const { + + return "Function"; +} + +String VisualScriptFunction::get_text() const { + + return get_name(); //use name as function name I guess +} + +void VisualScriptFunction::add_argument(Variant::Type p_type,const String& p_name,int p_index){ + + Argument arg; + arg.name=p_name; + arg.type=p_type; + if (p_index>=0) + arguments.insert(p_index,arg); + else + arguments.push_back(arg); + + ports_changed_notify(); + +} +void VisualScriptFunction::set_argument_type(int p_argidx,Variant::Type p_type){ + + ERR_FAIL_INDEX(p_argidx,arguments.size()); + + arguments[p_argidx].type=p_type; + ports_changed_notify(); +} +Variant::Type VisualScriptFunction::get_argument_type(int p_argidx) const { + + ERR_FAIL_INDEX_V(p_argidx,arguments.size(),Variant::NIL); + return arguments[p_argidx].type; + +} +void VisualScriptFunction::set_argument_name(int p_argidx,const String& p_name) { + + ERR_FAIL_INDEX(p_argidx,arguments.size()); + + arguments[p_argidx].name=p_name; + ports_changed_notify(); + +} +String VisualScriptFunction::get_argument_name(int p_argidx) const { + + ERR_FAIL_INDEX_V(p_argidx,arguments.size(),String()); + return arguments[p_argidx].name; + +} +void VisualScriptFunction::remove_argument(int p_argidx) { + + ERR_FAIL_INDEX(p_argidx,arguments.size()); + + arguments.remove(p_argidx); + ports_changed_notify(); + +} + +int VisualScriptFunction::get_argument_count() const { + + return arguments.size(); +} + + +void VisualScriptFunction::set_rpc_mode(ScriptInstance::RPCMode p_mode) { + rpc_mode=p_mode; +} + +ScriptInstance::RPCMode VisualScriptFunction::get_rpc_mode() const { + return rpc_mode; +} + + +class VisualScriptNodeInstanceFunction : public VisualScriptNodeInstance { +public: + + VisualScriptFunction *node; + VisualScriptInstance *instance; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + int ac = node->get_argument_count(); + + for(int i=0;i<ac;i++) { +#ifdef DEBUG_ENABLED + Variant::Type expected = node->get_argument_type(i); + if (expected!=Variant::NIL) { + if (!Variant::can_convert_strict(p_inputs[i]->get_type(),expected)) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.expected=expected; + r_error.argument=i; + return 0; + } + } +#endif + + *p_outputs[i]=*p_inputs[i]; + } + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptFunction::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceFunction * instance = memnew(VisualScriptNodeInstanceFunction ); + instance->node=this; + instance->instance=p_instance; + return instance; +} + +VisualScriptFunction::VisualScriptFunction() { + + stack_size=256; + stack_less=false; + rpc_mode=ScriptInstance::RPC_MODE_DISABLED; +} + + +void VisualScriptFunction::set_stack_less(bool p_enable) { + stack_less=p_enable; + _change_notify(); +} + +bool VisualScriptFunction::is_stack_less() const { + return stack_less; +} + +void VisualScriptFunction::set_stack_size(int p_size) { + + ERR_FAIL_COND(p_size <1 || p_size>100000); + stack_size=p_size; +} + +int VisualScriptFunction::get_stack_size() const { + + return stack_size; +} + + +////////////////////////////////////////// +////////////////OPERATOR////////////////// +////////////////////////////////////////// + +int VisualScriptOperator::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptOperator::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptOperator::get_input_value_port_count() const{ + + return (op==Variant::OP_BIT_NEGATE || op==Variant::OP_NOT || op==Variant::OP_NEGATE) ? 1 : 2; +} +int VisualScriptOperator::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptOperator::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptOperator::get_input_value_port_info(int p_idx) const{ + + static const Variant::Type port_types[Variant::OP_MAX][2]={ + {Variant::NIL,Variant::NIL}, //OP_EQUAL, + {Variant::NIL,Variant::NIL}, //OP_NOT_EQUAL, + {Variant::NIL,Variant::NIL}, //OP_LESS, + {Variant::NIL,Variant::NIL}, //OP_LESS_EQUAL, + {Variant::NIL,Variant::NIL}, //OP_GREATER, + {Variant::NIL,Variant::NIL}, //OP_GREATER_EQUAL, + //mathematic + {Variant::NIL,Variant::NIL}, //OP_ADD, + {Variant::NIL,Variant::NIL}, //OP_SUBSTRACT, + {Variant::NIL,Variant::NIL}, //OP_MULTIPLY, + {Variant::NIL,Variant::NIL}, //OP_DIVIDE, + {Variant::NIL,Variant::NIL}, //OP_NEGATE, + {Variant::INT,Variant::INT}, //OP_MODULE, + {Variant::STRING,Variant::STRING}, //OP_STRING_CONCAT, + //bitwise + {Variant::INT,Variant::INT}, //OP_SHIFT_LEFT, + {Variant::INT,Variant::INT}, //OP_SHIFT_RIGHT, + {Variant::INT,Variant::INT}, //OP_BIT_AND, + {Variant::INT,Variant::INT}, //OP_BIT_OR, + {Variant::INT,Variant::INT}, //OP_BIT_XOR, + {Variant::INT,Variant::INT}, //OP_BIT_NEGATE, + //logic + {Variant::BOOL,Variant::BOOL}, //OP_AND, + {Variant::BOOL,Variant::BOOL}, //OP_OR, + {Variant::BOOL,Variant::BOOL}, //OP_XOR, + {Variant::BOOL,Variant::BOOL}, //OP_NOT, + //containment + {Variant::NIL,Variant::NIL} //OP_IN, + }; + + ERR_FAIL_INDEX_V(p_idx,Variant::OP_MAX,PropertyInfo()); + + PropertyInfo pinfo; + pinfo.name=p_idx==0?"A":"B"; + pinfo.type=port_types[op][p_idx]; + if (pinfo.type==Variant::NIL) + pinfo.type=typed; + return pinfo; +} +PropertyInfo VisualScriptOperator::get_output_value_port_info(int p_idx) const{ + static const Variant::Type port_types[Variant::OP_MAX]={ + //comparation + Variant::BOOL, //OP_EQUAL, + Variant::BOOL, //OP_NOT_EQUAL, + Variant::BOOL, //OP_LESS, + Variant::BOOL, //OP_LESS_EQUAL, + Variant::BOOL, //OP_GREATER, + Variant::BOOL, //OP_GREATER_EQUAL, + //mathematic + Variant::NIL, //OP_ADD, + Variant::NIL, //OP_SUBSTRACT, + Variant::NIL, //OP_MULTIPLY, + Variant::NIL, //OP_DIVIDE, + Variant::NIL, //OP_NEGATE, + Variant::INT, //OP_MODULE, + Variant::STRING, //OP_STRING_CONCAT, + //bitwise + Variant::INT, //OP_SHIFT_LEFT, + Variant::INT, //OP_SHIFT_RIGHT, + Variant::INT, //OP_BIT_AND, + Variant::INT, //OP_BIT_OR, + Variant::INT, //OP_BIT_XOR, + Variant::INT, //OP_BIT_NEGATE, + //logic + Variant::BOOL, //OP_AND, + Variant::BOOL, //OP_OR, + Variant::BOOL, //OP_XOR, + Variant::BOOL, //OP_NOT, + //containment + Variant::BOOL //OP_IN, + }; + + PropertyInfo pinfo; + pinfo.name=""; + pinfo.type=port_types[op]; + if (pinfo.type==Variant::NIL) + pinfo.type=typed; + return pinfo; + +} + +static const char* op_names[]={ + //comparation + "Equal", //OP_EQUAL, + "NotEqual", //OP_NOT_EQUAL, + "Less", //OP_LESS, + "LessEqual", //OP_LESS_EQUAL, + "Greater", //OP_GREATER, + "GreaterEq", //OP_GREATER_EQUAL, + //mathematic + "Add", //OP_ADD, + "Subtract", //OP_SUBSTRACT, + "Multiply", //OP_MULTIPLY, + "Divide", //OP_DIVIDE, + "Negate", //OP_NEGATE, + "Remainder", //OP_MODULE, + "Concat", //OP_STRING_CONCAT, + //bitwise + "ShiftLeft", //OP_SHIFT_LEFT, + "ShiftRight", //OP_SHIFT_RIGHT, + "BitAnd", //OP_BIT_AND, + "BitOr", //OP_BIT_OR, + "BitXor", //OP_BIT_XOR, + "BitNeg", //OP_BIT_NEGATE, + //logic + "And", //OP_AND, + "Or", //OP_OR, + "Xor", //OP_XOR, + "Not", //OP_NOT, + //containment + "In", //OP_IN, +}; + +String VisualScriptOperator::get_caption() const { + + + + return op_names[op]; +} + +String VisualScriptOperator::get_text() const { + + static const wchar_t* op_names[]={ + //comparation + L"A = B", //OP_EQUAL, + L"A \u2260 B", //OP_NOT_EQUAL, + L"A < B", //OP_LESS, + L"A \u2264 B", //OP_LESS_EQUAL, + L"A > B", //OP_GREATER, + L"A \u2265 B", //OP_GREATER_EQUAL, + //mathematic + L"A + B", //OP_ADD, + L"A - B", //OP_SUBSTRACT, + L"A x B", //OP_MULTIPLY, + L"A \u00F7 B", //OP_DIVIDE, + L"\u00AC A", //OP_NEGATE, + L"A mod B", //OP_MODULE, + L"A .. B", //OP_STRING_CONCAT, + //bitwise + L"A << B", //OP_SHIFT_LEFT, + L"A >> B", //OP_SHIFT_RIGHT, + L"A & B", //OP_BIT_AND, + L"A | B", //OP_BIT_OR, + L"A ^ B", //OP_BIT_XOR, + L"~A", //OP_BIT_NEGATE, + //logic + L"A and B", //OP_AND, + L"A or B", //OP_OR, + L"A xor B", //OP_XOR, + L"not A", //OP_NOT, + + }; + return op_names[op]; +} + +void VisualScriptOperator::set_operator(Variant::Operator p_op) { + + if (op==p_op) + return; + op=p_op; + ports_changed_notify(); + +} + +Variant::Operator VisualScriptOperator::get_operator() const{ + + return op; +} + +void VisualScriptOperator::set_typed(Variant::Type p_op) { + + if (typed==p_op) + return; + + typed=p_op; + ports_changed_notify(); +} + +Variant::Type VisualScriptOperator::get_typed() const { + + return typed; +} + + +void VisualScriptOperator::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_operator","op"),&VisualScriptOperator::set_operator); + ObjectTypeDB::bind_method(_MD("get_operator"),&VisualScriptOperator::get_operator); + + ObjectTypeDB::bind_method(_MD("set_typed","type"),&VisualScriptOperator::set_typed); + ObjectTypeDB::bind_method(_MD("get_typed"),&VisualScriptOperator::get_typed); + + String types; + for(int i=0;i<Variant::OP_MAX;i++) { + if (i>0) + types+=","; + types+=op_names[i]; + } + + String argt="Any"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + + ADD_PROPERTY(PropertyInfo(Variant::INT,"operator_value/type",PROPERTY_HINT_ENUM,types),_SCS("set_operator"),_SCS("get_operator")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"typed_value/typed",PROPERTY_HINT_ENUM,argt),_SCS("set_typed"),_SCS("get_typed")); + +} + +class VisualScriptNodeInstanceOperator : public VisualScriptNodeInstance { +public: + + bool unary; + Variant::Operator op; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + bool valid; + if (unary) { + + Variant::evaluate(op,*p_inputs[0],Variant(),*p_outputs[0],valid); + } else { + Variant::evaluate(op,*p_inputs[0],*p_inputs[1],*p_outputs[0],valid); + } + + if (!valid) { + + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + if (p_outputs[0]->get_type()==Variant::STRING) { + r_error_str=*p_outputs[0]; + } else { + if (unary) + r_error_str=String(op_names[op])+RTR(": Invalid argument of type: ")+Variant::get_type_name(p_inputs[0]->get_type()); + else + r_error_str=String(op_names[op])+RTR(": Invalid arguments: ")+"A: "+Variant::get_type_name(p_inputs[0]->get_type())+" B: "+Variant::get_type_name(p_inputs[1]->get_type()); + } + } + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptOperator::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceOperator * instance = memnew(VisualScriptNodeInstanceOperator ); + instance->unary=get_input_value_port_count()==1; + instance->op=op; + return instance; +} + +VisualScriptOperator::VisualScriptOperator() { + + op=Variant::OP_ADD; + typed=Variant::NIL; +} + + + +template<Variant::Operator OP> +static Ref<VisualScriptNode> create_op_node(const String& p_name) { + + Ref<VisualScriptOperator> node; + node.instance(); + node->set_operator(OP); + return node; +} + +////////////////////////////////////////// +////////////////VARIABLE GET////////////////// +////////////////////////////////////////// + +int VisualScriptVariableGet::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptVariableGet::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptVariableGet::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptVariableGet::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptVariableGet::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptVariableGet::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptVariableGet::get_output_value_port_info(int p_idx) const{ + + PropertyInfo pinfo; + pinfo.name="value"; + if (get_visual_script().is_valid() && get_visual_script()->has_variable(variable)) { + PropertyInfo vinfo = get_visual_script()->get_variable_info(variable); + pinfo.type=vinfo.type; + pinfo.hint=vinfo.hint; + pinfo.hint_string=vinfo.hint_string; + } + return pinfo; +} + + +String VisualScriptVariableGet::get_caption() const { + + return "Variable"; +} + +String VisualScriptVariableGet::get_text() const { + + return variable; +} + +void VisualScriptVariableGet::set_variable(StringName p_variable) { + + if (variable==p_variable) + return; + variable=p_variable; + ports_changed_notify(); + +} + +StringName VisualScriptVariableGet::get_variable() const{ + + return variable; +} + +void VisualScriptVariableGet::_validate_property(PropertyInfo& property) const { + + if (property.name=="variable/name" && get_visual_script().is_valid()) { + Ref<VisualScript> vs = get_visual_script(); + List<StringName> vars; + vs->get_variable_list(&vars); + + String vhint; + for (List<StringName>::Element *E=vars.front();E;E=E->next()) { + if (vhint!=String()) + vhint+=","; + + vhint+=E->get().operator String(); + } + + property.hint=PROPERTY_HINT_ENUM; + property.hint_string=vhint; + } +} + +void VisualScriptVariableGet::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_variable","name"),&VisualScriptVariableGet::set_variable); + ObjectTypeDB::bind_method(_MD("get_variable"),&VisualScriptVariableGet::get_variable); + + + ADD_PROPERTY(PropertyInfo(Variant::STRING,"variable/name"),_SCS("set_variable"),_SCS("get_variable")); + +} + +class VisualScriptNodeInstanceVariableGet : public VisualScriptNodeInstance { +public: + + VisualScriptVariableGet *node; + VisualScriptInstance *instance; + StringName variable; + + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (instance->get_variable(variable,p_outputs[0])==false) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str=RTR("VariableGet not found in script: ")+"'"+String(variable)+"'"; + return false; + } + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptVariableGet::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceVariableGet * instance = memnew(VisualScriptNodeInstanceVariableGet ); + instance->node=this; + instance->instance=p_instance; + instance->variable=variable; + return instance; +} +VisualScriptVariableGet::VisualScriptVariableGet() { + + +} + + +////////////////////////////////////////// +////////////////VARIABLE SET////////////////// +////////////////////////////////////////// + +int VisualScriptVariableSet::get_output_sequence_port_count() const { + + return 1; +} + +bool VisualScriptVariableSet::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptVariableSet::get_input_value_port_count() const{ + + return 1; +} +int VisualScriptVariableSet::get_output_value_port_count() const{ + + return 0; +} + +String VisualScriptVariableSet::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptVariableSet::get_input_value_port_info(int p_idx) const{ + + PropertyInfo pinfo; + pinfo.name="set"; + if (get_visual_script().is_valid() && get_visual_script()->has_variable(variable)) { + PropertyInfo vinfo = get_visual_script()->get_variable_info(variable); + pinfo.type=vinfo.type; + pinfo.hint=vinfo.hint; + pinfo.hint_string=vinfo.hint_string; + } + return pinfo; +} + +PropertyInfo VisualScriptVariableSet::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + + +String VisualScriptVariableSet::get_caption() const { + + return "VariableSet"; +} + +String VisualScriptVariableSet::get_text() const { + + return variable; +} + +void VisualScriptVariableSet::set_variable(StringName p_variable) { + + if (variable==p_variable) + return; + variable=p_variable; + ports_changed_notify(); + +} + +StringName VisualScriptVariableSet::get_variable() const{ + + return variable; +} + +void VisualScriptVariableSet::_validate_property(PropertyInfo& property) const { + + if (property.name=="variable/name" && get_visual_script().is_valid()) { + Ref<VisualScript> vs = get_visual_script(); + List<StringName> vars; + vs->get_variable_list(&vars); + + String vhint; + for (List<StringName>::Element *E=vars.front();E;E=E->next()) { + if (vhint!=String()) + vhint+=","; + + vhint+=E->get().operator String(); + } + + property.hint=PROPERTY_HINT_ENUM; + property.hint_string=vhint; + } +} + +void VisualScriptVariableSet::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_variable","name"),&VisualScriptVariableSet::set_variable); + ObjectTypeDB::bind_method(_MD("get_variable"),&VisualScriptVariableSet::get_variable); + + + ADD_PROPERTY(PropertyInfo(Variant::STRING,"variable/name"),_SCS("set_variable"),_SCS("get_variable")); + +} + +class VisualScriptNodeInstanceVariableSet : public VisualScriptNodeInstance { +public: + + VisualScriptVariableSet *node; + VisualScriptInstance *instance; + StringName variable; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (instance->set_variable(variable,*p_inputs[0])==false) { + + + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str=RTR("VariableSet not found in script: ")+"'"+String(variable)+"'"; + } + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptVariableSet::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceVariableSet * instance = memnew(VisualScriptNodeInstanceVariableSet ); + instance->node=this; + instance->instance=p_instance; + instance->variable=variable; + return instance; +} +VisualScriptVariableSet::VisualScriptVariableSet() { + + +} + + + +////////////////////////////////////////// +////////////////CONSTANT////////////////// +////////////////////////////////////////// + +int VisualScriptConstant::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptConstant::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptConstant::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptConstant::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptConstant::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptConstant::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptConstant::get_output_value_port_info(int p_idx) const{ + + PropertyInfo pinfo; + pinfo.name="get"; + pinfo.type=type; + return pinfo; +} + + +String VisualScriptConstant::get_caption() const { + + return "Constant"; +} + +String VisualScriptConstant::get_text() const { + + return String(value); +} + +void VisualScriptConstant::set_constant_type(Variant::Type p_type) { + + if (type==p_type) + return; + + type=p_type; + ports_changed_notify(); + Variant::CallError ce; + value=Variant::construct(type,NULL,0,ce); + _change_notify(); + +} + +Variant::Type VisualScriptConstant::get_constant_type() const{ + + return type; +} + +void VisualScriptConstant::set_constant_value(Variant p_value){ + + if (value==p_value) + return; + + value=p_value; + ports_changed_notify(); +} +Variant VisualScriptConstant::get_constant_value() const{ + + return value; +} + +void VisualScriptConstant::_validate_property(PropertyInfo& property) const { + + + if (property.name=="constant/value") { + property.type=type; + if (type==Variant::NIL) + property.usage=0; //do not save if nil + } +} + +void VisualScriptConstant::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_constant_type","type"),&VisualScriptConstant::set_constant_type); + ObjectTypeDB::bind_method(_MD("get_constant_type"),&VisualScriptConstant::get_constant_type); + + ObjectTypeDB::bind_method(_MD("set_constant_value","value"),&VisualScriptConstant::set_constant_value); + ObjectTypeDB::bind_method(_MD("get_constant_value"),&VisualScriptConstant::get_constant_value); + + String argt="Null"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + + + ADD_PROPERTY(PropertyInfo(Variant::INT,"constant/type",PROPERTY_HINT_ENUM,argt),_SCS("set_constant_type"),_SCS("get_constant_type")); + ADD_PROPERTY(PropertyInfo(Variant::NIL,"constant/value"),_SCS("set_constant_value"),_SCS("get_constant_value")); + +} + +class VisualScriptNodeInstanceConstant : public VisualScriptNodeInstance { +public: + + Variant constant; + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + *p_outputs[0]=constant; + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptConstant::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceConstant * instance = memnew(VisualScriptNodeInstanceConstant ); + instance->constant=value; + return instance; +} + +VisualScriptConstant::VisualScriptConstant() { + + type=Variant::NIL; + +} + +////////////////////////////////////////// +////////////////PRELOAD////////////////// +////////////////////////////////////////// + +int VisualScriptPreload::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptPreload::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptPreload::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptPreload::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptPreload::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptPreload::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptPreload::get_output_value_port_info(int p_idx) const{ + + PropertyInfo pinfo=PropertyInfo(Variant::OBJECT,"res"); + if (preload.is_valid()) { + pinfo.hint=PROPERTY_HINT_RESOURCE_TYPE; + pinfo.hint_string=preload->get_type(); + } + + return pinfo; +} + + +String VisualScriptPreload::get_caption() const { + + return "Preload"; +} + +String VisualScriptPreload::get_text() const { + + if (preload.is_valid()) { + if (preload->get_path().is_resource_file()) { + return preload->get_path(); + } else if (preload->get_name()!=String()) { + return preload->get_name(); + } else { + return preload->get_type(); + } + } else { + return "<empty>"; + } +} + + +void VisualScriptPreload::set_preload(const Ref<Resource>& p_preload){ + + if (preload==p_preload) + return; + + preload=p_preload; + ports_changed_notify(); +} +Ref<Resource> VisualScriptPreload::get_preload() const{ + + return preload; +} + + +void VisualScriptPreload::_bind_methods() { + + + ObjectTypeDB::bind_method(_MD("set_preload","resource"),&VisualScriptPreload::set_preload); + ObjectTypeDB::bind_method(_MD("get_preload"),&VisualScriptPreload::get_preload); + + + ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"resource",PROPERTY_HINT_RESOURCE_TYPE,"Resource"),_SCS("set_preload"),_SCS("get_preload")); + +} + +class VisualScriptNodeInstancePreload : public VisualScriptNodeInstance { +public: + + Ref<Resource> preload; + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + *p_outputs[0]=preload; + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptPreload::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstancePreload * instance = memnew(VisualScriptNodeInstancePreload ); + instance->preload=preload; + return instance; +} + +VisualScriptPreload::VisualScriptPreload() { + +} + + + + +////////////////////////////////////////// +////////////////INDEX//////////////////// +////////////////////////////////////////// + +int VisualScriptIndexGet::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptIndexGet::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptIndexGet::get_input_value_port_count() const{ + + return 2; +} +int VisualScriptIndexGet::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptIndexGet::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptIndexGet::get_input_value_port_info(int p_idx) const{ + + if (p_idx==0) { + return PropertyInfo(Variant::NIL,"base"); + } else { + return PropertyInfo(Variant::NIL,"index"); + + } +} + +PropertyInfo VisualScriptIndexGet::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + + +String VisualScriptIndexGet::get_caption() const { + + return "IndexGet"; +} + +String VisualScriptIndexGet::get_text() const { + + return String("get"); +} + + +class VisualScriptNodeInstanceIndexGet : public VisualScriptNodeInstance { +public: + + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + bool valid; + *p_outputs[0] = p_inputs[0]->get(*p_inputs[1],&valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Invalid get: "+p_inputs[0]->get_construct_string(); + } + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptIndexGet::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceIndexGet * instance = memnew(VisualScriptNodeInstanceIndexGet ); + return instance; +} +VisualScriptIndexGet::VisualScriptIndexGet() { + + + +} + +////////////////////////////////////////// +////////////////INDEXSET////////////////// +////////////////////////////////////////// + +int VisualScriptIndexSet::get_output_sequence_port_count() const { + + return 1; +} + +bool VisualScriptIndexSet::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptIndexSet::get_input_value_port_count() const{ + + return 3; +} +int VisualScriptIndexSet::get_output_value_port_count() const{ + + return 0; +} + +String VisualScriptIndexSet::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptIndexSet::get_input_value_port_info(int p_idx) const{ + + if (p_idx==0) { + return PropertyInfo(Variant::NIL,"base"); + } else if (p_idx==1){ + return PropertyInfo(Variant::NIL,"index"); + + } else { + return PropertyInfo(Variant::NIL,"value"); + + } +} + +PropertyInfo VisualScriptIndexSet::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + + +String VisualScriptIndexSet::get_caption() const { + + return "IndexSet"; +} + +String VisualScriptIndexSet::get_text() const { + + return String("set"); +} + + +class VisualScriptNodeInstanceIndexSet : public VisualScriptNodeInstance { +public: + + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + bool valid; + *p_outputs[0]=*p_inputs[0]; + p_outputs[0]->set(*p_inputs[1],*p_inputs[2],&valid); + + if (!valid) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Invalid set: "+p_inputs[1]->get_construct_string(); + } + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptIndexSet::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceIndexSet * instance = memnew(VisualScriptNodeInstanceIndexSet ); + return instance; +} +VisualScriptIndexSet::VisualScriptIndexSet() { + + + +} + + +////////////////////////////////////////// +////////////////GLOBALCONSTANT/////////// +////////////////////////////////////////// + +int VisualScriptGlobalConstant::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptGlobalConstant::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptGlobalConstant::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptGlobalConstant::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptGlobalConstant::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptGlobalConstant::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptGlobalConstant::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::REAL,"value"); +} + + +String VisualScriptGlobalConstant::get_caption() const { + + return "GlobalConst"; +} + +String VisualScriptGlobalConstant::get_text() const { + + return GlobalConstants::get_global_constant_name(index); +} + +void VisualScriptGlobalConstant::set_global_constant(int p_which) { + + index=p_which; + _change_notify(); + ports_changed_notify(); +} + +int VisualScriptGlobalConstant::get_global_constant() { + return index; +} + + +class VisualScriptNodeInstanceGlobalConstant : public VisualScriptNodeInstance { +public: + + int index; + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + + *p_outputs[0] = GlobalConstants::get_global_constant_value(index); + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptGlobalConstant::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceGlobalConstant * instance = memnew(VisualScriptNodeInstanceGlobalConstant ); + instance->index=index; + return instance; +} + +void VisualScriptGlobalConstant::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_global_constant","index"),&VisualScriptGlobalConstant::set_global_constant); + ObjectTypeDB::bind_method(_MD("get_global_constant"),&VisualScriptGlobalConstant::get_global_constant); + + String cc; + + for(int i=0;i<GlobalConstants::get_global_constant_count();i++) { + + if (i>0) + cc+=","; + cc+=GlobalConstants::get_global_constant_name(i); + } + ADD_PROPERTY(PropertyInfo(Variant::INT,"constant",PROPERTY_HINT_ENUM,cc),_SCS("set_global_constant"),_SCS("get_global_constant")); +} + +VisualScriptGlobalConstant::VisualScriptGlobalConstant() { + + index=0; +} + +////////////////////////////////////////// +////////////////CLASSCONSTANT/////////// +////////////////////////////////////////// + +int VisualScriptClassConstant::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptClassConstant::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptClassConstant::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptClassConstant::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptClassConstant::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptClassConstant::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptClassConstant::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::INT,"value"); +} + + +String VisualScriptClassConstant::get_caption() const { + + return "ClassConst"; +} + +String VisualScriptClassConstant::get_text() const { + + return String(base_type)+"."+String(name); +} + +void VisualScriptClassConstant::set_class_constant(const StringName& p_which) { + + name=p_which; + _change_notify(); + ports_changed_notify(); +} + +StringName VisualScriptClassConstant::get_class_constant() { + return name; +} + + +void VisualScriptClassConstant::set_base_type(const StringName& p_which) { + + base_type=p_which; + _change_notify(); + ports_changed_notify(); +} + +StringName VisualScriptClassConstant::get_base_type() { + return base_type; +} + +class VisualScriptNodeInstanceClassConstant : public VisualScriptNodeInstance { +public: + + int value; + bool valid; + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (!valid) { + r_error_str="Invalid constant name, pick a valid class constant."; + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + } + + *p_outputs[0] = value; + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptClassConstant::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceClassConstant * instance = memnew(VisualScriptNodeInstanceClassConstant ); + instance->value=ObjectTypeDB::get_integer_constant(base_type,name,&instance->valid); + return instance; +} + +void VisualScriptClassConstant::_validate_property(PropertyInfo& property) const { + + if (property.name=="constant") { + + List<String> constants; + ObjectTypeDB::get_integer_constant_list(base_type,&constants,true); + + property.hint_string=""; + for(List<String>::Element *E=constants.front();E;E=E->next()) { + if (property.hint_string!=String()) { + property.hint_string+=","; + } + property.hint_string+=E->get(); + } + } +} + +void VisualScriptClassConstant::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_class_constant","name"),&VisualScriptClassConstant::set_class_constant); + ObjectTypeDB::bind_method(_MD("get_class_constant"),&VisualScriptClassConstant::get_class_constant); + + ObjectTypeDB::bind_method(_MD("set_base_type","name"),&VisualScriptClassConstant::set_base_type); + ObjectTypeDB::bind_method(_MD("get_base_type"),&VisualScriptClassConstant::get_base_type); + + ADD_PROPERTY(PropertyInfo(Variant::STRING,"base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"constant",PROPERTY_HINT_ENUM,""),_SCS("set_class_constant"),_SCS("get_class_constant")); +} + +VisualScriptClassConstant::VisualScriptClassConstant() { + + base_type="Object"; +} + + +////////////////////////////////////////// +////////////////BASICTYPECONSTANT/////////// +////////////////////////////////////////// + +int VisualScriptBasicTypeConstant::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptBasicTypeConstant::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptBasicTypeConstant::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptBasicTypeConstant::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptBasicTypeConstant::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptBasicTypeConstant::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptBasicTypeConstant::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::INT,"value"); +} + + +String VisualScriptBasicTypeConstant::get_caption() const { + + return "BasicConst"; +} + +String VisualScriptBasicTypeConstant::get_text() const { + + return Variant::get_type_name(type)+"."+String(name); +} + +void VisualScriptBasicTypeConstant::set_basic_type_constant(const StringName& p_which) { + + name=p_which; + _change_notify(); + ports_changed_notify(); +} + +StringName VisualScriptBasicTypeConstant::get_basic_type_constant() const { + return name; +} + + +void VisualScriptBasicTypeConstant::set_basic_type(Variant::Type p_which) { + + type=p_which; + _change_notify(); + ports_changed_notify(); +} + +Variant::Type VisualScriptBasicTypeConstant::get_basic_type() const { + return type; +} + +class VisualScriptNodeInstanceBasicTypeConstant : public VisualScriptNodeInstance { +public: + + int value; + bool valid; + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (!valid) { + r_error_str="Invalid constant name, pick a valid basic type constant."; + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + } + + *p_outputs[0] = value; + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptBasicTypeConstant::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceBasicTypeConstant * instance = memnew(VisualScriptNodeInstanceBasicTypeConstant ); + instance->value=Variant::get_numeric_constant_value(type,name,&instance->valid); + return instance; +} + +void VisualScriptBasicTypeConstant::_validate_property(PropertyInfo& property) const { + + if (property.name=="constant") { + + List<StringName> constants; + Variant::get_numeric_constants_for_type(type,&constants); + + if (constants.size()==0) { + property.usage=0; + return; + } + property.hint_string=""; + for(List<StringName>::Element *E=constants.front();E;E=E->next()) { + if (property.hint_string!=String()) { + property.hint_string+=","; + } + property.hint_string+=String(E->get()); + } + + } +} + +void VisualScriptBasicTypeConstant::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_basic_type","name"),&VisualScriptBasicTypeConstant::set_basic_type); + ObjectTypeDB::bind_method(_MD("get_basic_type"),&VisualScriptBasicTypeConstant::get_basic_type); + + ObjectTypeDB::bind_method(_MD("set_basic_type_constant","name"),&VisualScriptBasicTypeConstant::set_basic_type_constant); + ObjectTypeDB::bind_method(_MD("get_basic_type_constant"),&VisualScriptBasicTypeConstant::get_basic_type_constant); + + + String argt="Null"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + + ADD_PROPERTY(PropertyInfo(Variant::INT,"basic_type",PROPERTY_HINT_ENUM,argt),_SCS("set_basic_type"),_SCS("get_basic_type")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"constant",PROPERTY_HINT_ENUM,""),_SCS("set_basic_type_constant"),_SCS("get_basic_type_constant")); +} + +VisualScriptBasicTypeConstant::VisualScriptBasicTypeConstant() { + + type=Variant::NIL; +} + + + +////////////////////////////////////////// +////////////////MATHCONSTANT/////////// +////////////////////////////////////////// + + +const char* VisualScriptMathConstant::const_name[MATH_CONSTANT_MAX]={ + "One", + "PI", + "PIx2", + "PI/2", + "E", + "Sqrt2", +}; + +double VisualScriptMathConstant::const_value[MATH_CONSTANT_MAX]={ + 1.0, + Math_PI, + Math_PI*2, + Math_PI*0.5, + 2.71828182845904523536, + Math::sqrt(2.0) +}; + + +int VisualScriptMathConstant::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptMathConstant::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptMathConstant::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptMathConstant::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptMathConstant::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptMathConstant::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptMathConstant::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::REAL,"value"); +} + + +String VisualScriptMathConstant::get_caption() const { + + return "MathConst"; +} + +String VisualScriptMathConstant::get_text() const { + + return const_name[constant]; +} + +void VisualScriptMathConstant::set_math_constant(MathConstant p_which) { + + constant=p_which; + _change_notify(); + ports_changed_notify(); +} + +VisualScriptMathConstant::MathConstant VisualScriptMathConstant::get_math_constant() { + return constant; +} + +class VisualScriptNodeInstanceMathConstant : public VisualScriptNodeInstance { +public: + + float value; + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + *p_outputs[0]=value; + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptMathConstant::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceMathConstant * instance = memnew(VisualScriptNodeInstanceMathConstant ); + instance->value=const_value[constant]; + return instance; +} + + +void VisualScriptMathConstant::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_math_constant","which"),&VisualScriptMathConstant::set_math_constant); + ObjectTypeDB::bind_method(_MD("get_math_constant"),&VisualScriptMathConstant::get_math_constant); + + String cc; + + for(int i=0;i<MATH_CONSTANT_MAX;i++) { + + if (i>0) + cc+=","; + cc+=const_name[i]; + } + ADD_PROPERTY(PropertyInfo(Variant::INT,"constant",PROPERTY_HINT_ENUM,cc),_SCS("set_math_constant"),_SCS("get_math_constant")); +} + +VisualScriptMathConstant::VisualScriptMathConstant() { + + constant=MATH_CONSTANT_ONE; +} + + + +////////////////////////////////////////// +////////////////GLOBALSINGLETON/////////// +////////////////////////////////////////// + +int VisualScriptEngineSingleton::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptEngineSingleton::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptEngineSingleton::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptEngineSingleton::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptEngineSingleton::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptEngineSingleton::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptEngineSingleton::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::OBJECT,"instance"); +} + + +String VisualScriptEngineSingleton::get_caption() const { + + return "EngineSingleton"; +} + +String VisualScriptEngineSingleton::get_text() const { + + return singleton; +} + +void VisualScriptEngineSingleton::set_singleton(const String& p_string) { + + singleton=p_string; + + _change_notify(); + ports_changed_notify(); +} + +String VisualScriptEngineSingleton::get_singleton() { + return singleton; +} + + + +class VisualScriptNodeInstanceEngineSingleton : public VisualScriptNodeInstance { +public: + + Object* singleton; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + *p_outputs[0]=singleton; + return 0; + } + +}; + +VisualScriptNodeInstance* VisualScriptEngineSingleton::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceEngineSingleton * instance = memnew(VisualScriptNodeInstanceEngineSingleton ); + instance->singleton=Globals::get_singleton()->get_singleton_object(singleton); + return instance; +} + +VisualScriptEngineSingleton::TypeGuess VisualScriptEngineSingleton::guess_output_type(TypeGuess* p_inputs, int p_output) const { + + Object *obj=Globals::get_singleton()->get_singleton_object(singleton); + TypeGuess tg; + tg.type=Variant::OBJECT; + if (obj) { + tg.obj_type=obj->get_type(); + tg.script=obj->get_script(); + } + + return tg; +} + + +void VisualScriptEngineSingleton::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_singleton","name"),&VisualScriptEngineSingleton::set_singleton); + ObjectTypeDB::bind_method(_MD("get_singleton"),&VisualScriptEngineSingleton::get_singleton); + + String cc; + + List<Globals::Singleton> singletons; + + Globals::get_singleton()->get_singletons(&singletons); + + for (List<Globals::Singleton>::Element *E=singletons.front();E;E=E->next()) { + if (E->get().name=="VS" || E->get().name=="PS" || E->get().name=="PS2D" || E->get().name=="AS" || E->get().name=="TS" || E->get().name=="SS" || E->get().name=="SS2D") + continue; //skip these, too simple named + + if (cc!=String()) + cc+=","; + cc+=E->get().name; + } + + ADD_PROPERTY(PropertyInfo(Variant::STRING,"constant",PROPERTY_HINT_ENUM,cc),_SCS("set_singleton"),_SCS("get_singleton")); +} + +VisualScriptEngineSingleton::VisualScriptEngineSingleton() { + + singleton=String(); +} + + + +////////////////////////////////////////// +////////////////GETNODE/////////// +////////////////////////////////////////// + +int VisualScriptSceneNode::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptSceneNode::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptSceneNode::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptSceneNode::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptSceneNode::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptSceneNode::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptSceneNode::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::OBJECT,"node"); +} + + +String VisualScriptSceneNode::get_caption() const { + + return "SceneNode"; +} + +String VisualScriptSceneNode::get_text() const { + + return path.simplified(); +} + +void VisualScriptSceneNode::set_node_path(const NodePath& p_path) { + + path=p_path; + _change_notify(); + ports_changed_notify(); +} + +NodePath VisualScriptSceneNode::get_node_path() { + return path; +} + + +class VisualScriptNodeInstanceSceneNode : public VisualScriptNodeInstance { +public: + + VisualScriptSceneNode *node; + VisualScriptInstance *instance; + NodePath path; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + Node* node = instance->get_owner_ptr()->cast_to<Node>(); + if (!node) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Base object is not a Node!"; + return 0; + } + + + + Node* another = node->get_node(path); + if (!node) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Path does not lead Node!"; + return 0; + } + + *p_outputs[0]=another; + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptSceneNode::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceSceneNode * instance = memnew(VisualScriptNodeInstanceSceneNode ); + instance->node=this; + instance->instance=p_instance; + instance->path=path; + return instance; +} + + + + +#ifdef TOOLS_ENABLED + +static Node* _find_script_node(Node* p_edited_scene,Node* p_current_node,const Ref<Script> &script) { + + if (p_edited_scene!=p_current_node && p_current_node->get_owner()!=p_edited_scene) + return NULL; + + Ref<Script> scr = p_current_node->get_script(); + + if (scr.is_valid() && scr==script) + return p_current_node; + + for(int i=0;i<p_current_node->get_child_count();i++) { + Node *n = _find_script_node(p_edited_scene,p_current_node->get_child(i),script); + if (n) + return n; + } + + return NULL; +} + +#endif + +VisualScriptSceneNode::TypeGuess VisualScriptSceneNode::guess_output_type(TypeGuess* p_inputs, int p_output) const { + + + VisualScriptSceneNode::TypeGuess tg; + tg.type=Variant::OBJECT; + tg.obj_type="Node"; + +#ifdef TOOLS_ENABLED + Ref<Script> script = get_visual_script(); + if (!script.is_valid()) + return tg; + + MainLoop * main_loop = OS::get_singleton()->get_main_loop(); + if (!main_loop) + return tg; + + SceneTree *scene_tree = main_loop->cast_to<SceneTree>(); + + if (!scene_tree) + return tg; + + Node *edited_scene = scene_tree->get_edited_scene_root(); + + if (!edited_scene) + return tg; + + Node* script_node = _find_script_node(edited_scene,edited_scene,script); + + if (!script_node) + return tg; + + Node* another = script_node->get_node(path); + + if (another) { + tg.obj_type=another->get_type(); + tg.script=another->get_script(); + } +#endif + return tg; + +} + + +void VisualScriptSceneNode::_validate_property(PropertyInfo& property) const { + +#ifdef TOOLS_ENABLED + if (property.name=="node_path") { + + Ref<Script> script = get_visual_script(); + if (!script.is_valid()) + return; + + MainLoop * main_loop = OS::get_singleton()->get_main_loop(); + if (!main_loop) + return; + + SceneTree *scene_tree = main_loop->cast_to<SceneTree>(); + + if (!scene_tree) + return; + + Node *edited_scene = scene_tree->get_edited_scene_root(); + + if (!edited_scene) + return; + + Node* script_node = _find_script_node(edited_scene,edited_scene,script); + + if (!script_node) + return; + + property.hint_string=script_node->get_path(); + } +#endif +} + +void VisualScriptSceneNode::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_node_path","path"),&VisualScriptSceneNode::set_node_path); + ObjectTypeDB::bind_method(_MD("get_node_path"),&VisualScriptSceneNode::get_node_path); + + ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),_SCS("set_node_path"),_SCS("get_node_path")); +} + +VisualScriptSceneNode::VisualScriptSceneNode() { + + path=String("."); +} + + +////////////////////////////////////////// +////////////////SceneTree/////////// +////////////////////////////////////////// + +int VisualScriptSceneTree::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptSceneTree::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptSceneTree::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptSceneTree::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptSceneTree::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptSceneTree::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptSceneTree::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::OBJECT,"instance"); +} + + +String VisualScriptSceneTree::get_caption() const { + + return "SceneTree"; +} + +String VisualScriptSceneTree::get_text() const { + + return ""; +} + + +class VisualScriptNodeInstanceSceneTree : public VisualScriptNodeInstance { +public: + + VisualScriptSceneTree *node; + VisualScriptInstance *instance; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + Node* node = instance->get_owner_ptr()->cast_to<Node>(); + if (!node) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Base object is not a Node!"; + return 0; + } + + SceneTree* tree = node->get_tree(); + if (!tree) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Attempt to get SceneTree while node is not in the active tree."; + return 0; + } + + *p_outputs[0]=tree; + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptSceneTree::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceSceneTree * instance = memnew(VisualScriptNodeInstanceSceneTree ); + instance->node=this; + instance->instance=p_instance; + return instance; +} + +VisualScriptSceneTree::TypeGuess VisualScriptSceneTree::guess_output_type(TypeGuess* p_inputs, int p_output) const { + + TypeGuess tg; + tg.type=Variant::OBJECT; + tg.obj_type="SceneTree"; + return tg; +} + +void VisualScriptSceneTree::_validate_property(PropertyInfo& property) const { + +} + +void VisualScriptSceneTree::_bind_methods() { + +} + +VisualScriptSceneTree::VisualScriptSceneTree() { + +} + + +////////////////////////////////////////// +////////////////RESPATH/////////// +////////////////////////////////////////// + +int VisualScriptResourcePath::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptResourcePath::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptResourcePath::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptResourcePath::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptResourcePath::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptResourcePath::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptResourcePath::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::STRING,"path"); +} + + +String VisualScriptResourcePath::get_caption() const { + + return "ResourcePath"; +} + +String VisualScriptResourcePath::get_text() const { + + return path; +} + +void VisualScriptResourcePath::set_resource_path(const String& p_path) { + + path=p_path; + _change_notify(); + ports_changed_notify(); +} + +String VisualScriptResourcePath::get_resource_path() { + return path; +} + + +class VisualScriptNodeInstanceResourcePath : public VisualScriptNodeInstance { +public: + + String path; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + *p_outputs[0] = path; + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptResourcePath::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceResourcePath * instance = memnew(VisualScriptNodeInstanceResourcePath ); + instance->path=path; + return instance; +} + + + +void VisualScriptResourcePath::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_resource_path","path"),&VisualScriptResourcePath::set_resource_path); + ObjectTypeDB::bind_method(_MD("get_resource_path"),&VisualScriptResourcePath::get_resource_path); + + ADD_PROPERTY(PropertyInfo(Variant::STRING,"path",PROPERTY_HINT_FILE),_SCS("set_resource_path"),_SCS("get_resource_path")); +} + +VisualScriptResourcePath::VisualScriptResourcePath() { + + path=""; +} + + + +////////////////////////////////////////// +////////////////SELF/////////// +////////////////////////////////////////// + +int VisualScriptSelf::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptSelf::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptSelf::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptSelf::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptSelf::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptSelf::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptSelf::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::OBJECT,"instance"); +} + + +String VisualScriptSelf::get_caption() const { + + return "Self"; +} + +String VisualScriptSelf::get_text() const { + + if (get_visual_script().is_valid()) + return get_visual_script()->get_instance_base_type(); + else + return ""; +} + + +class VisualScriptNodeInstanceSelf : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + *p_outputs[0] = instance->get_owner_ptr(); + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptSelf::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceSelf * instance = memnew(VisualScriptNodeInstanceSelf ); + instance->instance=p_instance; + return instance; +} + +VisualScriptSelf::TypeGuess VisualScriptSelf::guess_output_type(TypeGuess* p_inputs, int p_output) const { + + VisualScriptSceneNode::TypeGuess tg; + tg.type=Variant::OBJECT; + tg.obj_type="Object"; + + Ref<Script> script = get_visual_script(); + if (!script.is_valid()) + return tg; + + tg.obj_type=script->get_instance_base_type(); + tg.script=script; + + return tg; + + +} + + +void VisualScriptSelf::_bind_methods() { + +} + +VisualScriptSelf::VisualScriptSelf() { + + +} + +////////////////////////////////////////// +////////////////CUSTOM (SCRIPTED)/////////// +////////////////////////////////////////// + +int VisualScriptCustomNode::get_output_sequence_port_count() const { + + if (get_script_instance() && get_script_instance()->has_method("_get_output_sequence_port_count")) { + return get_script_instance()->call("_get_output_sequence_port_count"); + } + return 0; +} + +bool VisualScriptCustomNode::has_input_sequence_port() const{ + + if (get_script_instance() && get_script_instance()->has_method("_has_input_sequence_port")) { + return get_script_instance()->call("_has_input_sequence_port"); + } + return false; +} + +int VisualScriptCustomNode::get_input_value_port_count() const{ + + if (get_script_instance() && get_script_instance()->has_method("_get_input_value_port_count")) { + return get_script_instance()->call("_get_input_value_port_count"); + } + return 0; +} +int VisualScriptCustomNode::get_output_value_port_count() const{ + + if (get_script_instance() && get_script_instance()->has_method("_get_output_value_port_count")) { + return get_script_instance()->call("_get_output_value_port_count"); + } + return 0; +} + +String VisualScriptCustomNode::get_output_sequence_port_text(int p_port) const { + + if (get_script_instance() && get_script_instance()->has_method("_get_output_sequence_port_text")) { + return get_script_instance()->call("_get_output_sequence_port_text",p_port); + } + + return String(); +} + +PropertyInfo VisualScriptCustomNode::get_input_value_port_info(int p_idx) const{ + + PropertyInfo info; + if (get_script_instance() && get_script_instance()->has_method("_get_input_value_port_type")) { + info.type=Variant::Type(int(get_script_instance()->call("_get_input_value_port_type",p_idx))); + } + if (get_script_instance() && get_script_instance()->has_method("_get_input_value_port_name")) { + info.name=get_script_instance()->call("_get_input_value_port_name",p_idx); + } + return info; +} + +PropertyInfo VisualScriptCustomNode::get_output_value_port_info(int p_idx) const{ + + PropertyInfo info; + if (get_script_instance() && get_script_instance()->has_method("_get_output_value_port_type")) { + info.type=Variant::Type(int(get_script_instance()->call("_get_output_value_port_type",p_idx))); + } + if (get_script_instance() && get_script_instance()->has_method("_get_output_value_port_name")) { + info.name=get_script_instance()->call("_get_output_value_port_name",p_idx); + } + return info; +} + + +String VisualScriptCustomNode::get_caption() const { + + if (get_script_instance() && get_script_instance()->has_method("_get_caption")) { + return get_script_instance()->call("_get_caption"); + } + return "CustomNode"; +} + +String VisualScriptCustomNode::get_text() const { + + if (get_script_instance() && get_script_instance()->has_method("_get_text")) { + return get_script_instance()->call("_get_text"); + } + return ""; +} + +String VisualScriptCustomNode::get_category() const { + + if (get_script_instance() && get_script_instance()->has_method("_get_category")) { + return get_script_instance()->call("_get_category"); + } + return "custom"; +} + +class VisualScriptNodeInstanceCustomNode : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + VisualScriptCustomNode *node; + int in_count; + int out_count; + int work_mem_size; + + virtual int get_working_memory_size() const { return work_mem_size; } + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (node->get_script_instance()) { +#ifdef DEBUG_ENABLED + if (!node->get_script_instance()->has_method(VisualScriptLanguage::singleton->_step)) { + r_error_str=RTR("Custom node has no _step() method, can't process graph."); + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + return 0; + } +#endif + Array in_values(true); + Array out_values(true); + Array work_mem(true); + + in_values.resize(in_count); + + for(int i=0;i<in_count;i++) { + in_values[i]=p_inputs[i]; + } + + out_values.resize(in_count); + + work_mem.resize(work_mem_size); + + for(int i=0;i<work_mem_size;i++) { + work_mem[i]=p_working_mem[i]; + } + + int ret_out; + + Variant ret = node->get_script_instance()->call(VisualScriptLanguage::singleton->_step,in_values,out_values,p_start_mode,work_mem); + if (ret.get_type()==Variant::STRING) { + r_error_str=ret; + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + return 0; + } else if (ret.is_num()) { + ret_out=ret; + } else { + r_error_str=RTR("Invalid return value from _step(), must be integer (seq out), or string (error)."); + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + return 0; + } + + for(int i=0;i<out_count;i++) { + if (i<out_values.size()) { + *p_outputs[i]=out_values[i]; + } + } + + for(int i=0;i<work_mem_size;i++) { + if (i<work_mem.size()) { + p_working_mem[i]=work_mem[i]; + } + } + + return ret_out; + + } + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptCustomNode::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceCustomNode * instance = memnew(VisualScriptNodeInstanceCustomNode ); + instance->instance=p_instance; + instance->in_count=get_input_value_port_count(); + instance->out_count=get_output_value_port_count(); + + + if (get_script_instance() && get_script_instance()->has_method("_get_working_memory_size")) { + instance->work_mem_size = get_script_instance()->call("_get_working_memory_size"); + } else { + instance->work_mem_size=0; + } + + return instance; +} + + + +void VisualScriptCustomNode::_bind_methods() { + + BIND_VMETHOD( MethodInfo(Variant::INT,"_get_output_sequence_port_count") ); + BIND_VMETHOD( MethodInfo(Variant::BOOL,"_has_input_sequence_port") ); + + BIND_VMETHOD( MethodInfo(Variant::STRING,"_get_output_sequence_port_text",PropertyInfo(Variant::INT,"idx")) ); + BIND_VMETHOD( MethodInfo(Variant::INT,"_get_input_value_port_count") ); + BIND_VMETHOD( MethodInfo(Variant::INT,"_get_output_value_port_count") ); + + BIND_VMETHOD( MethodInfo(Variant::INT,"_get_input_value_port_type",PropertyInfo(Variant::INT,"idx")) ); + BIND_VMETHOD( MethodInfo(Variant::STRING,"_get_input_value_port_name",PropertyInfo(Variant::INT,"idx")) ); + + BIND_VMETHOD( MethodInfo(Variant::INT,"_get_output_value_port_type",PropertyInfo(Variant::INT,"idx")) ); + BIND_VMETHOD( MethodInfo(Variant::STRING,"_get_output_value_port_name",PropertyInfo(Variant::INT,"idx")) ); + + BIND_VMETHOD( MethodInfo(Variant::STRING,"_get_caption") ); + BIND_VMETHOD( MethodInfo(Variant::STRING,"_get_text") ); + BIND_VMETHOD( MethodInfo(Variant::STRING,"_get_category") ); + + BIND_VMETHOD( MethodInfo(Variant::INT,"_get_working_memory_size") ); + BIND_VMETHOD( MethodInfo(Variant::NIL,"_step:Variant",PropertyInfo(Variant::ARRAY,"inputs"),PropertyInfo(Variant::ARRAY,"outputs"),PropertyInfo(Variant::INT,"start_mode"),PropertyInfo(Variant::ARRAY,"working_mem")) ); + + BIND_CONSTANT( START_MODE_BEGIN_SEQUENCE ); + BIND_CONSTANT( START_MODE_CONTINUE_SEQUENCE ); + BIND_CONSTANT( START_MODE_RESUME_YIELD ); + + BIND_CONSTANT( STEP_PUSH_STACK_BIT ); + BIND_CONSTANT( STEP_GO_BACK_BIT ); + BIND_CONSTANT( STEP_NO_ADVANCE_BIT ); + BIND_CONSTANT( STEP_EXIT_FUNCTION_BIT ); + BIND_CONSTANT( STEP_YIELD_BIT ); + +} + +VisualScriptCustomNode::VisualScriptCustomNode() { + + +} + +////////////////////////////////////////// +////////////////SUBCALL/////////// +////////////////////////////////////////// + +int VisualScriptSubCall::get_output_sequence_port_count() const { + + return 1; +} + +bool VisualScriptSubCall::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptSubCall::get_input_value_port_count() const{ + + Ref<Script> script = get_script(); + + if (script.is_valid() && script->has_method(VisualScriptLanguage::singleton->_subcall)) { + + MethodInfo mi = script->get_method_info(VisualScriptLanguage::singleton->_subcall); + return mi.arguments.size(); + } + + return 0; +} +int VisualScriptSubCall::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptSubCall::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptSubCall::get_input_value_port_info(int p_idx) const{ + + Ref<Script> script = get_script(); + if (script.is_valid() && script->has_method(VisualScriptLanguage::singleton->_subcall)) { + + MethodInfo mi = script->get_method_info(VisualScriptLanguage::singleton->_subcall); + return mi.arguments[p_idx]; + } + + return PropertyInfo(); +} + +PropertyInfo VisualScriptSubCall::get_output_value_port_info(int p_idx) const{ + + Ref<Script> script = get_script(); + if (script.is_valid() && script->has_method(VisualScriptLanguage::singleton->_subcall)) { + MethodInfo mi = script->get_method_info(VisualScriptLanguage::singleton->_subcall); + return mi.return_val; + } + return PropertyInfo(); +} + + +String VisualScriptSubCall::get_caption() const { + + return "SubCall"; +} + + +String VisualScriptSubCall::get_text() const { + + Ref<Script> script = get_script(); + if (script.is_valid()) { + if (script->get_name()!=String()) + return script->get_name(); + if (script->get_path().is_resource_file()) + return script->get_path().get_file(); + return script->get_type(); + } + return ""; +} + +String VisualScriptSubCall::get_category() const { + + return "custom"; +} + +class VisualScriptNodeInstanceSubCall : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + VisualScriptSubCall *subcall; + int input_args; + bool valid; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (!valid) { + r_error_str="Node requires a script with a _subcall(<args>) method to work."; + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + return 0; + } + *p_outputs[0]=subcall->call(VisualScriptLanguage::singleton->_subcall,p_inputs,input_args,r_error_str); + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptSubCall::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceSubCall * instance = memnew(VisualScriptNodeInstanceSubCall ); + instance->instance=p_instance; + Ref<Script> script = get_script(); + if (script.is_valid() && script->has_method(VisualScriptLanguage::singleton->_subcall)) { + instance->valid=true; + instance->input_args=get_input_value_port_count(); + } else { + instance->valid=false; + } + return instance; +} + + + +void VisualScriptSubCall::_bind_methods() { + + BIND_VMETHOD( MethodInfo(Variant::NIL,"_subcall",PropertyInfo(Variant::NIL,"arguments:Variant")) ); + +} + +VisualScriptSubCall::VisualScriptSubCall() { + + +} + +////////////////////////////////////////// +////////////////Comment/////////// +////////////////////////////////////////// + +int VisualScriptComment::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptComment::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptComment::get_input_value_port_count() const{ + return 0; +} +int VisualScriptComment::get_output_value_port_count() const{ + + return 0; +} + +String VisualScriptComment::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptComment::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptComment::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + + +String VisualScriptComment::get_caption() const { + + return title; +} + + +String VisualScriptComment::get_text() const { + + return description; +} + +void VisualScriptComment::set_title(const String& p_title) { + + + if (title==p_title) + return; + title=p_title; + ports_changed_notify(); +} + +String VisualScriptComment::get_title() const{ + + return title; +} + +void VisualScriptComment::set_description(const String& p_description){ + + if (description==p_description) + return; + description=p_description; + ports_changed_notify(); + +} +String VisualScriptComment::get_description() const{ + + return description; +} + +void VisualScriptComment::set_size(const Size2& p_size){ + + if (size==p_size) + return; + size=p_size; + ports_changed_notify(); + +} +Size2 VisualScriptComment::get_size() const{ + + return size; +} + + +String VisualScriptComment::get_category() const { + + return "data"; +} + +class VisualScriptNodeInstanceComment : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptComment::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceComment * instance = memnew(VisualScriptNodeInstanceComment ); + instance->instance=p_instance; + return instance; +} + + + +void VisualScriptComment::_bind_methods() { + + + ObjectTypeDB::bind_method(_MD("set_title","title"),&VisualScriptComment::set_title); + ObjectTypeDB::bind_method(_MD("get_title"),&VisualScriptComment::get_title); + + ObjectTypeDB::bind_method(_MD("set_description","description"),&VisualScriptComment::set_description); + ObjectTypeDB::bind_method(_MD("get_description"),&VisualScriptComment::get_description); + + ObjectTypeDB::bind_method(_MD("set_size","size"),&VisualScriptComment::set_size); + ObjectTypeDB::bind_method(_MD("get_size"),&VisualScriptComment::get_size); + + ADD_PROPERTY( PropertyInfo(Variant::STRING,"title"),_SCS("set_title"),_SCS("get_title")); + ADD_PROPERTY( PropertyInfo(Variant::STRING,"description",PROPERTY_HINT_MULTILINE_TEXT),_SCS("set_description"),_SCS("get_description")); + ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"size"),_SCS("set_size"),_SCS("get_size")); + +} + +VisualScriptComment::VisualScriptComment() { + + title="Comment"; + size=Size2(150,150); +} + + +////////////////////////////////////////// +////////////////Constructor/////////// +////////////////////////////////////////// + +int VisualScriptConstructor::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptConstructor::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptConstructor::get_input_value_port_count() const{ + return constructor.arguments.size(); +} +int VisualScriptConstructor::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptConstructor::get_output_sequence_port_text(int p_port) const { + + return ""; +} + +PropertyInfo VisualScriptConstructor::get_input_value_port_info(int p_idx) const{ + + return constructor.arguments[p_idx]; +} + +PropertyInfo VisualScriptConstructor::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(type,"value"); +} + + +String VisualScriptConstructor::get_caption() const { + + return "Construct"; +} + + +String VisualScriptConstructor::get_text() const { + + return "new "+Variant::get_type_name(type)+"()"; +} + + +String VisualScriptConstructor::get_category() const { + + return "functions"; +} + +void VisualScriptConstructor::set_constructor_type(Variant::Type p_type) { + + if (type==p_type) + return; + + type=p_type; + ports_changed_notify(); +} + +Variant::Type VisualScriptConstructor::get_constructor_type() const { + + return type; +} + +void VisualScriptConstructor::set_constructor(const Dictionary& p_info) { + + constructor=MethodInfo::from_dict(p_info); + ports_changed_notify(); +} + +Dictionary VisualScriptConstructor::get_constructor() const { + + return constructor; +} + + +class VisualScriptNodeInstanceConstructor : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + Variant::Type type; + int argcount; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + Variant::CallError ce; + *p_outputs[0]=Variant::construct(type,p_inputs,argcount,ce); + if (ce.error!=Variant::CallError::CALL_OK) { + r_error_str="Invalid arguments for constructor"; + } + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptConstructor::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceConstructor * instance = memnew(VisualScriptNodeInstanceConstructor ); + instance->instance=p_instance; + instance->type=type; + instance->argcount=constructor.arguments.size(); + return instance; +} + + + +void VisualScriptConstructor::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_constructor_type","type"),&VisualScriptConstructor::set_constructor_type); + ObjectTypeDB::bind_method(_MD("get_constructor_type"),&VisualScriptConstructor::get_constructor_type); + + ObjectTypeDB::bind_method(_MD("set_constructor","constructor"),&VisualScriptConstructor::set_constructor); + ObjectTypeDB::bind_method(_MD("get_constructor"),&VisualScriptConstructor::get_constructor); + + ADD_PROPERTY( PropertyInfo(Variant::INT,"type",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("set_constructor_type"),_SCS("get_constructor_type")); + ADD_PROPERTY( PropertyInfo(Variant::DICTIONARY,"constructor",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("set_constructor"),_SCS("get_constructor")); + +} + +VisualScriptConstructor::VisualScriptConstructor() { + + type=Variant::NIL; + +} + +static Map<String,Pair<Variant::Type,MethodInfo> > constructor_map; + +static Ref<VisualScriptNode> create_constructor_node(const String& p_name) { + + ERR_FAIL_COND_V(!constructor_map.has(p_name),Ref<VisualScriptNode>()); + + Ref<VisualScriptConstructor> vsc; + vsc.instance(); + vsc->set_constructor_type(constructor_map[p_name].first); + vsc->set_constructor(constructor_map[p_name].second); + + return vsc; +} + +////////////////////////////////////////// +////////////////LocalVar/////////// +////////////////////////////////////////// + +int VisualScriptLocalVar::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptLocalVar::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptLocalVar::get_input_value_port_count() const{ + return 0; +} +int VisualScriptLocalVar::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptLocalVar::get_output_sequence_port_text(int p_port) const { + + return ""; +} + +PropertyInfo VisualScriptLocalVar::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} +PropertyInfo VisualScriptLocalVar::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(type,"get"); +} + + +String VisualScriptLocalVar::get_caption() const { + + return "LocalVarGet"; +} + + +String VisualScriptLocalVar::get_text() const { + + return name; +} + + +String VisualScriptLocalVar::get_category() const { + + return "data"; +} + + +void VisualScriptLocalVar::set_var_name(const StringName& p_name) { + + if (name==p_name) + return; + + name=p_name; + ports_changed_notify(); + +} + +StringName VisualScriptLocalVar::get_var_name() const { + + return name; +} + +void VisualScriptLocalVar::set_var_type(Variant::Type p_type) { + + type=p_type; + ports_changed_notify(); +} + +Variant::Type VisualScriptLocalVar::get_var_type() const { + + return type; +} + + +class VisualScriptNodeInstanceLocalVar : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + StringName name; + + + virtual int get_working_memory_size() const { return 1; } + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + *p_outputs[0]=*p_working_mem; + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptLocalVar::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceLocalVar * instance = memnew(VisualScriptNodeInstanceLocalVar ); + instance->instance=p_instance; + instance->name=name; + + return instance; +} + + + +void VisualScriptLocalVar::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_var_name","name"),&VisualScriptLocalVar::set_var_name); + ObjectTypeDB::bind_method(_MD("get_var_name"),&VisualScriptLocalVar::get_var_name); + + ObjectTypeDB::bind_method(_MD("set_var_type","type"),&VisualScriptLocalVar::set_var_type); + ObjectTypeDB::bind_method(_MD("get_var_type"),&VisualScriptLocalVar::get_var_type); + + String argt="Any"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + + ADD_PROPERTY( PropertyInfo(Variant::STRING,"variable/name"),_SCS("set_var_name"),_SCS("get_var_name")); + ADD_PROPERTY( PropertyInfo(Variant::INT,"variable/type",PROPERTY_HINT_ENUM,argt),_SCS("set_var_type"),_SCS("get_var_type")); + + +} + +VisualScriptLocalVar::VisualScriptLocalVar() { + + name="new_local"; + type=Variant::NIL; + +} + +////////////////////////////////////////// +////////////////LocalVar/////////// +////////////////////////////////////////// + +int VisualScriptLocalVarSet::get_output_sequence_port_count() const { + + return 1; +} + +bool VisualScriptLocalVarSet::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptLocalVarSet::get_input_value_port_count() const{ + return 1; +} +int VisualScriptLocalVarSet::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptLocalVarSet::get_output_sequence_port_text(int p_port) const { + + return ""; +} + +PropertyInfo VisualScriptLocalVarSet::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(type,"set"); +} +PropertyInfo VisualScriptLocalVarSet::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(type,"get"); +} + + +String VisualScriptLocalVarSet::get_caption() const { + + return "LocalVarSet"; +} + + +String VisualScriptLocalVarSet::get_text() const { + + return name; +} + + +String VisualScriptLocalVarSet::get_category() const { + + return "data"; +} + + +void VisualScriptLocalVarSet::set_var_name(const StringName& p_name) { + + if (name==p_name) + return; + + name=p_name; + ports_changed_notify(); + +} + +StringName VisualScriptLocalVarSet::get_var_name() const { + + return name; +} + +void VisualScriptLocalVarSet::set_var_type(Variant::Type p_type) { + + type=p_type; + ports_changed_notify(); +} + +Variant::Type VisualScriptLocalVarSet::get_var_type() const { + + return type; +} + + +class VisualScriptNodeInstanceLocalVarSet : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + StringName name; + + + virtual int get_working_memory_size() const { return 1; } + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + *p_working_mem=*p_inputs[0]; + *p_outputs[0]=*p_working_mem; + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptLocalVarSet::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceLocalVarSet * instance = memnew(VisualScriptNodeInstanceLocalVarSet ); + instance->instance=p_instance; + instance->name=name; + + return instance; +} + + + +void VisualScriptLocalVarSet::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_var_name","name"),&VisualScriptLocalVarSet::set_var_name); + ObjectTypeDB::bind_method(_MD("get_var_name"),&VisualScriptLocalVarSet::get_var_name); + + ObjectTypeDB::bind_method(_MD("set_var_type","type"),&VisualScriptLocalVarSet::set_var_type); + ObjectTypeDB::bind_method(_MD("get_var_type"),&VisualScriptLocalVarSet::get_var_type); + + String argt="Any"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + + ADD_PROPERTY( PropertyInfo(Variant::STRING,"variable/name"),_SCS("set_var_name"),_SCS("get_var_name")); + ADD_PROPERTY( PropertyInfo(Variant::INT,"variable/type",PROPERTY_HINT_ENUM,argt),_SCS("set_var_type"),_SCS("get_var_type")); + + +} + +VisualScriptLocalVarSet::VisualScriptLocalVarSet() { + + name="new_local"; + type=Variant::NIL; + +} + + +////////////////////////////////////////// +////////////////LocalVar/////////// +////////////////////////////////////////// + +int VisualScriptInputAction::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptInputAction::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptInputAction::get_input_value_port_count() const{ + return 0; +} +int VisualScriptInputAction::get_output_value_port_count() const{ + + return 1; +} + +String VisualScriptInputAction::get_output_sequence_port_text(int p_port) const { + + return ""; +} + +PropertyInfo VisualScriptInputAction::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} +PropertyInfo VisualScriptInputAction::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(Variant::BOOL,"pressed"); +} + + +String VisualScriptInputAction::get_caption() const { + + + return "Action"; +} + + +String VisualScriptInputAction::get_text() const { + + switch(mode) { + case MODE_PRESSED: { + return name; + } break; + case MODE_RELEASED: { + return "not "+name; + } break; + case MODE_JUST_PRESSED: { + return String(name)+" "+TTR("just pressed"); + } break; + case MODE_JUST_RELEASED: { + return String(name)+" "+TTR("just released"); + } break; + } + + return String(); +} + + +String VisualScriptInputAction::get_category() const { + + return "data"; +} + + +void VisualScriptInputAction::set_action_name(const StringName& p_name) { + + if (name==p_name) + return; + + name=p_name; + ports_changed_notify(); + +} + +StringName VisualScriptInputAction::get_action_name() const { + + return name; +} + +void VisualScriptInputAction::set_action_mode(Mode p_mode) { + + if (mode==p_mode) + return; + + mode=p_mode; + ports_changed_notify(); + +} +VisualScriptInputAction::Mode VisualScriptInputAction::get_action_mode() const { + + return mode; +} + + +class VisualScriptNodeInstanceInputAction : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + StringName action; + VisualScriptInputAction::Mode mode; + + + virtual int get_working_memory_size() const { return 1; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + switch(mode) { + case VisualScriptInputAction::MODE_PRESSED: { + *p_outputs[0]=Input::get_singleton()->is_action_pressed(action); + } break; + case VisualScriptInputAction::MODE_RELEASED: { + *p_outputs[0]=!Input::get_singleton()->is_action_pressed(action); + } break; + case VisualScriptInputAction::MODE_JUST_PRESSED: { + *p_outputs[0]=Input::get_singleton()->is_action_just_pressed(action); + } break; + case VisualScriptInputAction:: MODE_JUST_RELEASED: { + *p_outputs[0]=Input::get_singleton()->is_action_just_released(action); + } break; + + } + + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptInputAction::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceInputAction * instance = memnew(VisualScriptNodeInstanceInputAction ); + instance->instance=p_instance; + instance->action=name; + instance->mode=mode; + + return instance; +} + +void VisualScriptInputAction::_validate_property(PropertyInfo& property) const { + + + if (property.name=="action") { + + property.hint=PROPERTY_HINT_ENUM; + String actions; + + List<PropertyInfo> pinfo; + Globals::get_singleton()->get_property_list(&pinfo); + Vector<String> al; + + for(List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) { + const PropertyInfo &pi=E->get(); + + if (!pi.name.begins_with("input/")) + continue; + + String name = pi.name.substr(pi.name.find("/")+1,pi.name.length()); + + + al.push_back(name); + } + + al.sort();; + + for(int i=0;i<al.size();i++) { + if (actions!=String()) + actions+=","; + actions+=al[i]; + } + + property.hint_string=actions; + } +} + + +void VisualScriptInputAction::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_action_name","name"),&VisualScriptInputAction::set_action_name); + ObjectTypeDB::bind_method(_MD("get_action_name"),&VisualScriptInputAction::get_action_name); + + ObjectTypeDB::bind_method(_MD("set_action_mode","mode"),&VisualScriptInputAction::set_action_mode); + ObjectTypeDB::bind_method(_MD("get_action_mode"),&VisualScriptInputAction::get_action_mode); + + ADD_PROPERTY( PropertyInfo(Variant::STRING,"action"),_SCS("set_action_name"),_SCS("get_action_name")); + ADD_PROPERTY( PropertyInfo(Variant::INT,"mode",PROPERTY_HINT_ENUM,"Pressed,Released,JustPressed,JustReleased"),_SCS("set_action_mode"),_SCS("get_action_mode")); + +} + +VisualScriptInputAction::VisualScriptInputAction() { + + name=""; + mode=MODE_PRESSED; + +} + +////////////////////////////////////////// +////////////////Constructor/////////// +////////////////////////////////////////// + +int VisualScriptDeconstruct::get_output_sequence_port_count() const { + + return 0; +} + +bool VisualScriptDeconstruct::has_input_sequence_port() const{ + + return false; +} + +int VisualScriptDeconstruct::get_input_value_port_count() const{ + return 1; +} +int VisualScriptDeconstruct::get_output_value_port_count() const{ + + return elements.size(); +} + +String VisualScriptDeconstruct::get_output_sequence_port_text(int p_port) const { + + return ""; +} + +PropertyInfo VisualScriptDeconstruct::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(type,"value"); +} + +PropertyInfo VisualScriptDeconstruct::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(elements[p_idx].type,elements[p_idx].name); +} + + +String VisualScriptDeconstruct::get_caption() const { + + return "Deconstruct"; +} + + +String VisualScriptDeconstruct::get_text() const { + + return "from "+Variant::get_type_name(type)+":"; +} + + +String VisualScriptDeconstruct::get_category() const { + + return "functions"; +} + +void VisualScriptDeconstruct::_update_elements() { + + elements.clear();; + Variant v; + if (type==Variant::INPUT_EVENT) { + InputEvent ie; + ie.type=input_type; + v=ie; + } else { + Variant::CallError ce; + v = Variant::construct(type,NULL,0,ce); + } + + List<PropertyInfo> pinfo; + v.get_property_list(&pinfo); + + for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) { + + Element e; + e.name=E->get().name; + e.type=E->get().type; + elements.push_back(e); + } +} + +void VisualScriptDeconstruct::set_deconstruct_type(Variant::Type p_type) { + + if (type==p_type) + return; + + type=p_type; + _update_elements(); + ports_changed_notify(); + _change_notify(); //to make input appear/disappear +} + +Variant::Type VisualScriptDeconstruct::get_deconstruct_type() const { + + return type; +} + +void VisualScriptDeconstruct::set_deconstruct_input_type(InputEvent::Type p_input_type) { + + if (input_type==p_input_type) + return; + + input_type=p_input_type; + _update_elements(); + ports_changed_notify(); +} + +InputEvent::Type VisualScriptDeconstruct::get_deconstruct_input_type() const { + + return input_type; +} + +void VisualScriptDeconstruct::_set_elem_cache(const Array& p_elements) { + + ERR_FAIL_COND(p_elements.size()%2==1); + elements.resize(p_elements.size()/2); + for(int i=0;i<elements.size();i++) { + elements[i].name=p_elements[i*2+0]; + elements[i].type=Variant::Type(int(p_elements[i*2+1])); + } +} + +Array VisualScriptDeconstruct::_get_elem_cache() const { + + Array ret; + for(int i=0;i<elements.size();i++) { + ret.push_back(elements[i].name); + ret.push_back(elements[i].type); + } + return ret; +} + +class VisualScriptNodeInstanceDeconstruct : public VisualScriptNodeInstance { +public: + + VisualScriptInstance* instance; + Vector<StringName> outputs; + + //virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + Variant in=*p_inputs[0]; + + for(int i=0;i<outputs.size();i++) { + bool valid; + *p_outputs[i]=in.get(outputs[i],&valid); + if (!valid) { + r_error_str="Can't obtain element '"+String(outputs[i])+"' from "+Variant::get_type_name(in.get_type()); + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + return 0; + } + + } + + return 0; + } + + +}; + +VisualScriptNodeInstance* VisualScriptDeconstruct::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceDeconstruct * instance = memnew(VisualScriptNodeInstanceDeconstruct ); + instance->instance=p_instance; + instance->outputs.resize(elements.size()); + for(int i=0;i<elements.size();i++) { + instance->outputs[i]=elements[i].name; + } + + return instance; +} + + + +void VisualScriptDeconstruct::_validate_property(PropertyInfo& property) const { + + if (property.name=="input_type") { + if (type!=Variant::INPUT_EVENT) { + property.usage=0; + } + } +} + + +void VisualScriptDeconstruct::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_deconstruct_type","type"),&VisualScriptDeconstruct::set_deconstruct_type); + ObjectTypeDB::bind_method(_MD("get_deconstruct_type"),&VisualScriptDeconstruct::get_deconstruct_type); + + ObjectTypeDB::bind_method(_MD("set_deconstruct_input_type","input_type"),&VisualScriptDeconstruct::set_deconstruct_input_type); + ObjectTypeDB::bind_method(_MD("get_deconstruct_input_type"),&VisualScriptDeconstruct::get_deconstruct_input_type); + + ObjectTypeDB::bind_method(_MD("_set_elem_cache","_cache"),&VisualScriptDeconstruct::_set_elem_cache); + ObjectTypeDB::bind_method(_MD("_get_elem_cache"),&VisualScriptDeconstruct::_get_elem_cache); + + String argt="Any"; + for(int i=1;i<Variant::VARIANT_MAX;i++) { + argt+=","+Variant::get_type_name(Variant::Type(i)); + } + + String iet="None,Key,MouseMotion,MouseButton,JoystickMotion,JoystickButton,ScreenTouch,ScreenDrag,Action"; + + ADD_PROPERTY( PropertyInfo(Variant::INT,"type",PROPERTY_HINT_ENUM,argt),_SCS("set_deconstruct_type"),_SCS("get_deconstruct_type")); + ADD_PROPERTY( PropertyInfo(Variant::INT,"input_type",PROPERTY_HINT_ENUM,iet),_SCS("set_deconstruct_input_type"),_SCS("get_deconstruct_input_type")); + ADD_PROPERTY( PropertyInfo(Variant::ARRAY,"elem_cache",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_elem_cache"),_SCS("_get_elem_cache")); + +} + +VisualScriptDeconstruct::VisualScriptDeconstruct() { + + type=Variant::NIL; + input_type=InputEvent::NONE; + +} + + +void register_visual_script_nodes() { + + VisualScriptLanguage::singleton->add_register_func("data/set_variable",create_node_generic<VisualScriptVariableSet>); + VisualScriptLanguage::singleton->add_register_func("data/get_variable",create_node_generic<VisualScriptVariableGet>); + VisualScriptLanguage::singleton->add_register_func("data/engine_singleton",create_node_generic<VisualScriptEngineSingleton>); + VisualScriptLanguage::singleton->add_register_func("data/scene_node",create_node_generic<VisualScriptSceneNode>); + VisualScriptLanguage::singleton->add_register_func("data/scene_tree",create_node_generic<VisualScriptSceneTree>); + VisualScriptLanguage::singleton->add_register_func("data/resource_path",create_node_generic<VisualScriptResourcePath>); + VisualScriptLanguage::singleton->add_register_func("data/self",create_node_generic<VisualScriptSelf>); + VisualScriptLanguage::singleton->add_register_func("data/comment",create_node_generic<VisualScriptComment>); + VisualScriptLanguage::singleton->add_register_func("data/get_local_variable",create_node_generic<VisualScriptLocalVar>); + VisualScriptLanguage::singleton->add_register_func("data/set_local_variable",create_node_generic<VisualScriptLocalVarSet>); + VisualScriptLanguage::singleton->add_register_func("data/preload",create_node_generic<VisualScriptPreload>); + VisualScriptLanguage::singleton->add_register_func("data/action",create_node_generic<VisualScriptInputAction>); + + VisualScriptLanguage::singleton->add_register_func("constants/constant",create_node_generic<VisualScriptConstant>); + VisualScriptLanguage::singleton->add_register_func("constants/math_constant",create_node_generic<VisualScriptMathConstant>); + VisualScriptLanguage::singleton->add_register_func("constants/class_constant",create_node_generic<VisualScriptClassConstant>); + VisualScriptLanguage::singleton->add_register_func("constants/global_constant",create_node_generic<VisualScriptGlobalConstant>); + VisualScriptLanguage::singleton->add_register_func("constants/basic_type_constant",create_node_generic<VisualScriptBasicTypeConstant>); + + VisualScriptLanguage::singleton->add_register_func("custom/custom_node",create_node_generic<VisualScriptCustomNode>); + VisualScriptLanguage::singleton->add_register_func("custom/sub_call",create_node_generic<VisualScriptSubCall>); + + VisualScriptLanguage::singleton->add_register_func("index/get_index",create_node_generic<VisualScriptIndexGet>); + VisualScriptLanguage::singleton->add_register_func("index/set_index",create_node_generic<VisualScriptIndexSet>); + + + VisualScriptLanguage::singleton->add_register_func("operators/compare/equal",create_op_node<Variant::OP_EQUAL>); + VisualScriptLanguage::singleton->add_register_func("operators/compare/not_equal",create_op_node<Variant::OP_NOT_EQUAL>); + VisualScriptLanguage::singleton->add_register_func("operators/compare/less",create_op_node<Variant::OP_LESS>); + VisualScriptLanguage::singleton->add_register_func("operators/compare/less_equal",create_op_node<Variant::OP_LESS_EQUAL>); + VisualScriptLanguage::singleton->add_register_func("operators/compare/greater",create_op_node<Variant::OP_GREATER>); + VisualScriptLanguage::singleton->add_register_func("operators/compare/greater_equal",create_op_node<Variant::OP_GREATER_EQUAL>); + //mathematic + VisualScriptLanguage::singleton->add_register_func("operators/math/add",create_op_node<Variant::OP_ADD>); + VisualScriptLanguage::singleton->add_register_func("operators/math/subtract",create_op_node<Variant::OP_SUBSTRACT>); + VisualScriptLanguage::singleton->add_register_func("operators/math/multiply",create_op_node<Variant::OP_MULTIPLY>); + VisualScriptLanguage::singleton->add_register_func("operators/math/divide",create_op_node<Variant::OP_DIVIDE>); + VisualScriptLanguage::singleton->add_register_func("operators/math/negate",create_op_node<Variant::OP_NEGATE>); + VisualScriptLanguage::singleton->add_register_func("operators/math/remainder",create_op_node<Variant::OP_MODULE>); + VisualScriptLanguage::singleton->add_register_func("operators/math/string_concat",create_op_node<Variant::OP_STRING_CONCAT>); + //bitwise + VisualScriptLanguage::singleton->add_register_func("operators/bitwise/shift_left",create_op_node<Variant::OP_SHIFT_LEFT>); + VisualScriptLanguage::singleton->add_register_func("operators/bitwise/shift_right",create_op_node<Variant::OP_SHIFT_RIGHT>); + VisualScriptLanguage::singleton->add_register_func("operators/bitwise/bit_and",create_op_node<Variant::OP_BIT_AND>); + VisualScriptLanguage::singleton->add_register_func("operators/bitwise/bit_or",create_op_node<Variant::OP_BIT_OR>); + VisualScriptLanguage::singleton->add_register_func("operators/bitwise/bit_xor",create_op_node<Variant::OP_BIT_XOR>); + VisualScriptLanguage::singleton->add_register_func("operators/bitwise/bit_negate",create_op_node<Variant::OP_BIT_NEGATE>); + //logic + VisualScriptLanguage::singleton->add_register_func("operators/logic/and",create_op_node<Variant::OP_AND>); + VisualScriptLanguage::singleton->add_register_func("operators/logic/or",create_op_node<Variant::OP_OR>); + VisualScriptLanguage::singleton->add_register_func("operators/logic/xor",create_op_node<Variant::OP_XOR>); + VisualScriptLanguage::singleton->add_register_func("operators/logic/not",create_op_node<Variant::OP_NOT>); + VisualScriptLanguage::singleton->add_register_func("operators/logic/in",create_op_node<Variant::OP_IN>); + + VisualScriptLanguage::singleton->add_register_func("functions/deconstruct",create_node_generic<VisualScriptDeconstruct>); + + for(int i=1;i<Variant::VARIANT_MAX;i++) { + + List<MethodInfo> constructors; + Variant::get_constructor_list(Variant::Type(i),&constructors); + + for(List<MethodInfo>::Element *E=constructors.front();E;E=E->next()) { + + if (E->get().arguments.size()>0) { + + + String name = "functions/constructors/"+Variant::get_type_name(Variant::Type(i))+" ( "; + for(int j=0;j<E->get().arguments.size();j++) { + if (j>0) + name+=", "; + if (E->get().arguments.size()==1) + name+=Variant::get_type_name(E->get().arguments[j].type); + else + name+=E->get().arguments[j].name; + } + name+=") "; + + VisualScriptLanguage::singleton->add_register_func(name,create_constructor_node); + Pair<Variant::Type,MethodInfo> pair; + pair.first=Variant::Type(i); + pair.second=E->get(); + constructor_map[name]=pair; + } + } + } +} + + + +void unregister_visual_script_nodes() { + + constructor_map.clear(); +} + diff --git a/modules/visual_script/visual_script_nodes.h b/modules/visual_script/visual_script_nodes.h new file mode 100644 index 0000000000..94eeadca57 --- /dev/null +++ b/modules/visual_script/visual_script_nodes.h @@ -0,0 +1,1068 @@ +#ifndef VISUAL_SCRIPT_NODES_H +#define VISUAL_SCRIPT_NODES_H + +#include "visual_script.h" + +class VisualScriptFunction : public VisualScriptNode { + + OBJ_TYPE(VisualScriptFunction,VisualScriptNode) + + + struct Argument { + String name; + Variant::Type type; + }; + + Vector<Argument> arguments; + + bool stack_less; + int stack_size; + ScriptInstance::RPCMode rpc_mode; + + +protected: + + bool _set(const StringName& p_name, const Variant& p_value); + bool _get(const StringName& p_name,Variant &r_ret) const; + void _get_property_list( List<PropertyInfo> *p_list) const; + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "flow_control"; } + + void add_argument(Variant::Type p_type,const String& p_name,int p_index=-1); + void set_argument_type(int p_argidx,Variant::Type p_type); + Variant::Type get_argument_type(int p_argidx) const; + void set_argument_name(int p_argidx,const String& p_name); + String get_argument_name(int p_argidx) const; + void remove_argument(int p_argidx); + int get_argument_count() const; + + + void set_stack_less(bool p_enable); + bool is_stack_less() const; + + void set_stack_size(int p_size); + int get_stack_size() const; + + void set_rpc_mode(ScriptInstance::RPCMode p_mode); + ScriptInstance::RPCMode get_rpc_mode() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptFunction(); +}; + + +class VisualScriptOperator : public VisualScriptNode { + + OBJ_TYPE(VisualScriptOperator,VisualScriptNode) + + + Variant::Type typed; + Variant::Operator op; +protected: + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "operators"; } + + void set_operator(Variant::Operator p_op); + Variant::Operator get_operator() const; + + void set_typed(Variant::Type p_op); + Variant::Type get_typed() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptOperator(); +}; + + +class VisualScriptVariableGet : public VisualScriptNode { + + OBJ_TYPE(VisualScriptVariableGet,VisualScriptNode) + + + StringName variable; +protected: + + virtual void _validate_property(PropertyInfo& property) const; + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "data"; } + + void set_variable(StringName p_var); + StringName get_variable() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptVariableGet(); +}; + + +class VisualScriptVariableSet : public VisualScriptNode { + + OBJ_TYPE(VisualScriptVariableSet,VisualScriptNode) + + + StringName variable; +protected: + + virtual void _validate_property(PropertyInfo& property) const; + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "data"; } + + void set_variable(StringName p_var); + StringName get_variable() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptVariableSet(); +}; + + +class VisualScriptConstant : public VisualScriptNode { + + OBJ_TYPE(VisualScriptConstant,VisualScriptNode) + + + Variant::Type type; + Variant value; +protected: + virtual void _validate_property(PropertyInfo& property) const; + static void _bind_methods(); + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "constants"; } + + void set_constant_type(Variant::Type p_type); + Variant::Type get_constant_type() const; + + void set_constant_value(Variant p_value); + Variant get_constant_value() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptConstant(); +}; + + + +class VisualScriptPreload : public VisualScriptNode { + + OBJ_TYPE(VisualScriptPreload,VisualScriptNode) + + + Ref<Resource> preload; +protected: + + static void _bind_methods(); + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "data"; } + + void set_preload(const Ref<Resource>& p_value); + Ref<Resource> get_preload() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptPreload(); +}; + +class VisualScriptIndexGet : public VisualScriptNode { + + OBJ_TYPE(VisualScriptIndexGet,VisualScriptNode) + + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "operators"; } + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptIndexGet(); +}; + + +class VisualScriptIndexSet : public VisualScriptNode { + + OBJ_TYPE(VisualScriptIndexSet,VisualScriptNode) + + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "operators"; } + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptIndexSet(); +}; + + + +class VisualScriptGlobalConstant : public VisualScriptNode { + + OBJ_TYPE(VisualScriptGlobalConstant,VisualScriptNode) + + int index; + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "constants"; } + + void set_global_constant(int p_which); + int get_global_constant(); + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptGlobalConstant(); +}; + + +class VisualScriptClassConstant : public VisualScriptNode { + + OBJ_TYPE(VisualScriptClassConstant,VisualScriptNode) + + StringName base_type; + StringName name; +protected: + static void _bind_methods(); + virtual void _validate_property(PropertyInfo& property) const; + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "constants"; } + + void set_class_constant(const StringName& p_which); + StringName get_class_constant(); + + void set_base_type(const StringName& p_which); + StringName get_base_type(); + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptClassConstant(); +}; + +class VisualScriptBasicTypeConstant : public VisualScriptNode { + + OBJ_TYPE(VisualScriptBasicTypeConstant,VisualScriptNode) + + Variant::Type type; + StringName name; +protected: + static void _bind_methods(); + virtual void _validate_property(PropertyInfo& property) const; + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "constants"; } + + void set_basic_type_constant(const StringName& p_which); + StringName get_basic_type_constant() const; + + void set_basic_type(Variant::Type p_which); + Variant::Type get_basic_type() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptBasicTypeConstant(); +}; + + + +class VisualScriptMathConstant : public VisualScriptNode { + + OBJ_TYPE(VisualScriptMathConstant,VisualScriptNode) +public: + + enum MathConstant { + MATH_CONSTANT_ONE, + MATH_CONSTANT_PI, + MATH_CONSTANT_2PI, + MATH_CONSTANT_HALF_PI, + MATH_CONSTANT_E, + MATH_CONSTANT_SQRT2, + MATH_CONSTANT_MAX, + }; + +private: + static const char* const_name[MATH_CONSTANT_MAX]; + static double const_value[MATH_CONSTANT_MAX]; + MathConstant constant; +protected: + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "constants"; } + + void set_math_constant(MathConstant p_which); + MathConstant get_math_constant(); + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptMathConstant(); +}; + +VARIANT_ENUM_CAST( VisualScriptMathConstant::MathConstant ) + +class VisualScriptEngineSingleton : public VisualScriptNode { + + OBJ_TYPE(VisualScriptEngineSingleton,VisualScriptNode) + + String singleton; + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "data"; } + + void set_singleton(const String &p_string); + String get_singleton(); + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const; + + + VisualScriptEngineSingleton(); +}; + + + + +class VisualScriptSceneNode : public VisualScriptNode { + + OBJ_TYPE(VisualScriptSceneNode,VisualScriptNode) + + NodePath path; +protected: + virtual void _validate_property(PropertyInfo& property) const; + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "data"; } + + void set_node_path(const NodePath &p_path); + NodePath get_node_path(); + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const; + + VisualScriptSceneNode(); +}; + + + + +class VisualScriptSceneTree : public VisualScriptNode { + + OBJ_TYPE(VisualScriptSceneTree,VisualScriptNode) + + +protected: + virtual void _validate_property(PropertyInfo& property) const; + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "data"; } + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const; + + VisualScriptSceneTree(); +}; + + + +class VisualScriptResourcePath : public VisualScriptNode { + + OBJ_TYPE(VisualScriptResourcePath,VisualScriptNode) + + String path; +protected: + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "data"; } + + void set_resource_path(const String &p_path); + String get_resource_path(); + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptResourcePath(); +}; + + +class VisualScriptSelf : public VisualScriptNode { + + OBJ_TYPE(VisualScriptSelf,VisualScriptNode) + + +protected: + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "data"; } + + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const; + + VisualScriptSelf(); +}; + + +class VisualScriptCustomNode: public VisualScriptNode { + + OBJ_TYPE(VisualScriptCustomNode,VisualScriptNode) + + +protected: + + virtual bool _use_builtin_script() const { return true; } + + static void _bind_methods(); +public: + + enum StartMode { //replicated for step + START_MODE_BEGIN_SEQUENCE, + START_MODE_CONTINUE_SEQUENCE, + START_MODE_RESUME_YIELD + }; + + enum { //replicated for step + STEP_SHIFT=1<<24, + STEP_MASK=STEP_SHIFT-1, + STEP_PUSH_STACK_BIT=STEP_SHIFT, //push bit to stack + STEP_GO_BACK_BIT=STEP_SHIFT<<1, //go back to previous node + STEP_NO_ADVANCE_BIT=STEP_SHIFT<<2, //do not advance past this node + STEP_EXIT_FUNCTION_BIT=STEP_SHIFT<<3, //return from function + STEP_YIELD_BIT=STEP_SHIFT<<4, //yield (will find VisualScriptFunctionState state in first working memory) + }; + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptCustomNode(); +}; + +class VisualScriptSubCall: public VisualScriptNode { + + OBJ_TYPE(VisualScriptSubCall,VisualScriptNode) + + +protected: + + + static void _bind_methods(); +public: + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptSubCall(); +}; + +class VisualScriptComment: public VisualScriptNode { + + OBJ_TYPE(VisualScriptComment,VisualScriptNode) + + + String title; + String description; + Size2 size; +protected: + + static void _bind_methods(); +public: + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const; + + void set_title(const String& p_title); + String get_title() const; + + void set_description(const String& p_description); + String get_description() const; + + void set_size(const Size2& p_size); + Size2 get_size() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptComment(); +}; + +class VisualScriptConstructor: public VisualScriptNode { + + OBJ_TYPE(VisualScriptConstructor,VisualScriptNode) + + + Variant::Type type; + MethodInfo constructor; + +protected: + + + static void _bind_methods(); +public: + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const; + + void set_constructor_type(Variant::Type p_type); + Variant::Type get_constructor_type() const; + + void set_constructor(const Dictionary& p_info); + Dictionary get_constructor() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptConstructor(); +}; + + + + +class VisualScriptLocalVar: public VisualScriptNode { + + OBJ_TYPE(VisualScriptLocalVar,VisualScriptNode) + + StringName name; + Variant::Type type; + +protected: + + static void _bind_methods(); +public: + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const; + + void set_var_name(const StringName& p_name); + StringName get_var_name() const; + + void set_var_type(Variant::Type p_type); + Variant::Type get_var_type() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptLocalVar(); +}; + +class VisualScriptLocalVarSet: public VisualScriptNode { + + OBJ_TYPE(VisualScriptLocalVarSet,VisualScriptNode) + + StringName name; + Variant::Type type; + +protected: + + static void _bind_methods(); +public: + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const; + + void set_var_name(const StringName& p_name); + StringName get_var_name() const; + + void set_var_type(Variant::Type p_type); + Variant::Type get_var_type() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptLocalVarSet(); +}; + + + +class VisualScriptInputAction: public VisualScriptNode { + + OBJ_TYPE(VisualScriptInputAction,VisualScriptNode) +public: + enum Mode { + MODE_PRESSED, + MODE_RELEASED, + MODE_JUST_PRESSED, + MODE_JUST_RELEASED, + }; + + StringName name; + Mode mode; + +protected: + + virtual void _validate_property(PropertyInfo& property) const; + + static void _bind_methods(); +public: + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const; + + void set_action_name(const StringName& p_name); + StringName get_action_name() const; + + void set_action_mode(Mode p_mode); + Mode get_action_mode() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptInputAction(); +}; + +VARIANT_ENUM_CAST( VisualScriptInputAction::Mode ) + +class VisualScriptDeconstruct: public VisualScriptNode { + + OBJ_TYPE(VisualScriptDeconstruct,VisualScriptNode) + + + struct Element { + StringName name; + Variant::Type type; + }; + + + Vector<Element> elements; + + void _update_elements(); + Variant::Type type; + InputEvent::Type input_type; + + void _set_elem_cache(const Array& p_elements); + Array _get_elem_cache() const; + + virtual void _validate_property(PropertyInfo& property) const; + +protected: + + + static void _bind_methods(); +public: + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const; + + void set_deconstruct_type(Variant::Type p_type); + Variant::Type get_deconstruct_type() const; + + void set_deconstruct_input_type(InputEvent::Type p_input_type); + InputEvent::Type get_deconstruct_input_type() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptDeconstruct(); +}; + + +void register_visual_script_nodes(); +void unregister_visual_script_nodes(); + +#endif // VISUAL_SCRIPT_NODES_H diff --git a/modules/visual_script/visual_script_yield_nodes.cpp b/modules/visual_script/visual_script_yield_nodes.cpp new file mode 100644 index 0000000000..221c46b6fd --- /dev/null +++ b/modules/visual_script/visual_script_yield_nodes.cpp @@ -0,0 +1,625 @@ +#include "visual_script_yield_nodes.h" +#include "scene/main/scene_main_loop.h" +#include "os/os.h" +#include "scene/main/node.h" +#include "visual_script_nodes.h" + +////////////////////////////////////////// +////////////////YIELD/////////// +////////////////////////////////////////// + +int VisualScriptYield::get_output_sequence_port_count() const { + + return 1; +} + +bool VisualScriptYield::has_input_sequence_port() const{ + + return true; +} + +int VisualScriptYield::get_input_value_port_count() const{ + + return 0; +} +int VisualScriptYield::get_output_value_port_count() const{ + + return 0; +} + +String VisualScriptYield::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptYield::get_input_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + +PropertyInfo VisualScriptYield::get_output_value_port_info(int p_idx) const{ + + return PropertyInfo(); +} + + +String VisualScriptYield::get_caption() const { + + return yield_mode==YIELD_RETURN?"Yield":"Wait"; +} + +String VisualScriptYield::get_text() const { + + switch (yield_mode) { + case YIELD_RETURN: return ""; break; + case YIELD_FRAME: return "Next Frame"; break; + case YIELD_FIXED_FRAME: return "Next Fixed Frame"; break; + case YIELD_WAIT: return rtos(wait_time)+" sec(s)"; break; + } + + return String(); +} + + +class VisualScriptNodeInstanceYield : public VisualScriptNodeInstance { +public: + + VisualScriptYield::YieldMode mode; + float wait_time; + + virtual int get_working_memory_size() const { return 1; } //yield needs at least 1 + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return false; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (p_start_mode==START_MODE_RESUME_YIELD) { + return 0; //resuming yield + } else { + //yield + + + SceneTree *tree = OS::get_singleton()->get_main_loop()->cast_to<SceneTree>(); + if (!tree) { + r_error_str="Main Loop is not SceneTree"; + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + return 0; + } + + Ref<VisualScriptFunctionState> state; + state.instance(); + + int ret = STEP_YIELD_BIT; + switch(mode) { + + case VisualScriptYield::YIELD_RETURN: ret=STEP_EXIT_FUNCTION_BIT; break; //return the yield + case VisualScriptYield::YIELD_FRAME: state->connect_to_signal(tree,"idle_frame",Array()); break; + case VisualScriptYield::YIELD_FIXED_FRAME: state->connect_to_signal(tree,"fixed_frame",Array()); break; + case VisualScriptYield::YIELD_WAIT: state->connect_to_signal(tree->create_timer(wait_time).ptr(),"timeout",Array()); break; + + } + + *p_working_mem=state; + + return ret; + } + } + +}; + +VisualScriptNodeInstance* VisualScriptYield::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceYield * instance = memnew(VisualScriptNodeInstanceYield ); + //instance->instance=p_instance; + instance->mode=yield_mode; + instance->wait_time=wait_time; + return instance; +} + +void VisualScriptYield::set_yield_mode(YieldMode p_mode) { + + if (yield_mode==p_mode) + return; + yield_mode=p_mode; + ports_changed_notify(); + _change_notify(); +} + +VisualScriptYield::YieldMode VisualScriptYield::get_yield_mode(){ + + return yield_mode; +} + +void VisualScriptYield::set_wait_time(float p_time) { + + if (wait_time==p_time) + return; + wait_time=p_time; + ports_changed_notify(); + +} + +float VisualScriptYield::get_wait_time(){ + + return wait_time; +} + + +void VisualScriptYield::_validate_property(PropertyInfo& property) const { + + + if (property.name=="wait_time") { + if (yield_mode!=YIELD_WAIT) { + property.usage=0; + } + } +} + +void VisualScriptYield::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_yield_mode","mode"),&VisualScriptYield::set_yield_mode); + ObjectTypeDB::bind_method(_MD("get_yield_mode"),&VisualScriptYield::get_yield_mode); + + ObjectTypeDB::bind_method(_MD("set_wait_time","sec"),&VisualScriptYield::set_wait_time); + ObjectTypeDB::bind_method(_MD("get_wait_time"),&VisualScriptYield::get_wait_time); + + ADD_PROPERTY(PropertyInfo(Variant::INT,"mode",PROPERTY_HINT_ENUM,"Frame,FixedFrame,Time",PROPERTY_USAGE_NOEDITOR),_SCS("set_yield_mode"),_SCS("get_yield_mode")); + ADD_PROPERTY(PropertyInfo(Variant::REAL,"wait_time"),_SCS("set_wait_time"),_SCS("get_wait_time")); + + + BIND_CONSTANT( YIELD_FRAME ); + BIND_CONSTANT( YIELD_FIXED_FRAME ); + BIND_CONSTANT( YIELD_WAIT ); + +} + +VisualScriptYield::VisualScriptYield() { + + yield_mode=YIELD_FRAME; + wait_time=1; + +} + + +template<VisualScriptYield::YieldMode MODE> +static Ref<VisualScriptNode> create_yield_node(const String& p_name) { + + Ref<VisualScriptYield> node; + node.instance(); + node->set_yield_mode(MODE); + return node; +} + +/////////////////////////////////////////////////// +////////////////YIELD SIGNAL////////////////////// +////////////////////////////////////////////////// + +int VisualScriptYieldSignal::get_output_sequence_port_count() const { + + return 1; +} + +bool VisualScriptYieldSignal::has_input_sequence_port() const{ + + return true; +} +#ifdef TOOLS_ENABLED + +static Node* _find_script_node(Node* p_edited_scene,Node* p_current_node,const Ref<Script> &script) { + + if (p_edited_scene!=p_current_node && p_current_node->get_owner()!=p_edited_scene) + return NULL; + + Ref<Script> scr = p_current_node->get_script(); + + if (scr.is_valid() && scr==script) + return p_current_node; + + for(int i=0;i<p_current_node->get_child_count();i++) { + Node *n = _find_script_node(p_edited_scene,p_current_node->get_child(i),script); + if (n) + return n; + } + + return NULL; +} + +#endif +Node *VisualScriptYieldSignal::_get_base_node() const { + +#ifdef TOOLS_ENABLED + Ref<Script> script = get_visual_script(); + if (!script.is_valid()) + return NULL; + + MainLoop * main_loop = OS::get_singleton()->get_main_loop(); + if (!main_loop) + return NULL; + + SceneTree *scene_tree = main_loop->cast_to<SceneTree>(); + + if (!scene_tree) + return NULL; + + Node *edited_scene = scene_tree->get_edited_scene_root(); + + if (!edited_scene) + return NULL; + + Node* script_node = _find_script_node(edited_scene,edited_scene,script); + + if (!script_node) + return NULL; + + if (!script_node->has_node(base_path)) + return NULL; + + Node *path_to = script_node->get_node(base_path); + + return path_to; +#else + + return NULL; +#endif +} + +StringName VisualScriptYieldSignal::_get_base_type() const { + + if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) + return get_visual_script()->get_instance_base_type(); + else if (call_mode==CALL_MODE_NODE_PATH && get_visual_script().is_valid()) { + Node *path = _get_base_node(); + if (path) + return path->get_type(); + + } + + return base_type; +} + +int VisualScriptYieldSignal::get_input_value_port_count() const{ + + if (call_mode==CALL_MODE_INSTANCE) + return 1; + else + return 0; + +} +int VisualScriptYieldSignal::get_output_value_port_count() const{ + + + MethodInfo sr; + + if (!ObjectTypeDB::get_signal(_get_base_type(),signal,&sr)) + return 0; + + return sr.arguments.size(); + +} + +String VisualScriptYieldSignal::get_output_sequence_port_text(int p_port) const { + + return String(); +} + +PropertyInfo VisualScriptYieldSignal::get_input_value_port_info(int p_idx) const{ + + if (call_mode==CALL_MODE_INSTANCE) + return PropertyInfo(Variant::OBJECT,"instance"); + else + return PropertyInfo(); + +} + +PropertyInfo VisualScriptYieldSignal::get_output_value_port_info(int p_idx) const{ + + MethodInfo sr; + + if (!ObjectTypeDB::get_signal(_get_base_type(),signal,&sr)) + return PropertyInfo(); //no signal + ERR_FAIL_INDEX_V(p_idx,sr.arguments.size(),PropertyInfo()); + return sr.arguments[p_idx]; + +} + + +String VisualScriptYieldSignal::get_caption() const { + + static const char*cname[3]= { + "WaitSignal", + "WaitNodeSignal", + "WaitInstanceSigna;", + }; + + return cname[call_mode]; +} + +String VisualScriptYieldSignal::get_text() const { + + if (call_mode==CALL_MODE_SELF) + return " "+String(signal)+"()"; + else + return " "+_get_base_type()+"."+String(signal)+"()"; + +} + + +void VisualScriptYieldSignal::set_base_type(const StringName& p_type) { + + if (base_type==p_type) + return; + + base_type=p_type; + + _change_notify(); + ports_changed_notify(); +} + +StringName VisualScriptYieldSignal::get_base_type() const{ + + return base_type; +} + +void VisualScriptYieldSignal::set_signal(const StringName& p_type){ + + if (signal==p_type) + return; + + signal=p_type; + + _change_notify(); + ports_changed_notify(); +} +StringName VisualScriptYieldSignal::get_signal() const { + + + return signal; +} + +void VisualScriptYieldSignal::set_base_path(const NodePath& p_type) { + + if (base_path==p_type) + return; + + base_path=p_type; + + _change_notify(); + ports_changed_notify(); +} + +NodePath VisualScriptYieldSignal::get_base_path() const { + + return base_path; +} + + +void VisualScriptYieldSignal::set_call_mode(CallMode p_mode) { + + if (call_mode==p_mode) + return; + + call_mode=p_mode; + + _change_notify(); + ports_changed_notify(); + +} + +VisualScriptYieldSignal::CallMode VisualScriptYieldSignal::get_call_mode() const { + + return call_mode; +} + + +void VisualScriptYieldSignal::_validate_property(PropertyInfo& property) const { + + if (property.name=="signal/base_type") { + if (call_mode!=CALL_MODE_INSTANCE) { + property.usage=PROPERTY_USAGE_NOEDITOR; + } + } + + + if (property.name=="signal/node_path") { + if (call_mode!=CALL_MODE_NODE_PATH) { + property.usage=0; + } else { + + Node *bnode = _get_base_node(); + if (bnode) { + property.hint_string=bnode->get_path(); //convert to loong string + } else { + + } + } + } + + if (property.name=="signal/signal") { + property.hint=PROPERTY_HINT_ENUM; + + + List<MethodInfo> methods; + + ObjectTypeDB::get_signal_list(_get_base_type(),&methods); + + List<String> mstring; + for (List<MethodInfo>::Element *E=methods.front();E;E=E->next()) { + if (E->get().name.begins_with("_")) + continue; + mstring.push_back(E->get().name.get_slice(":",0)); + } + + mstring.sort(); + + String ml; + for (List<String>::Element *E=mstring.front();E;E=E->next()) { + + if (ml!=String()) + ml+=","; + ml+=E->get(); + } + + property.hint_string=ml; + } + + +} + + +void VisualScriptYieldSignal::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_base_type","base_type"),&VisualScriptYieldSignal::set_base_type); + ObjectTypeDB::bind_method(_MD("get_base_type"),&VisualScriptYieldSignal::get_base_type); + + ObjectTypeDB::bind_method(_MD("set_signal","signal"),&VisualScriptYieldSignal::set_signal); + ObjectTypeDB::bind_method(_MD("get_signal"),&VisualScriptYieldSignal::get_signal); + + ObjectTypeDB::bind_method(_MD("set_call_mode","mode"),&VisualScriptYieldSignal::set_call_mode); + ObjectTypeDB::bind_method(_MD("get_call_mode"),&VisualScriptYieldSignal::get_call_mode); + + ObjectTypeDB::bind_method(_MD("set_base_path","base_path"),&VisualScriptYieldSignal::set_base_path); + ObjectTypeDB::bind_method(_MD("get_base_path"),&VisualScriptYieldSignal::get_base_path); + + + + String bt; + for(int i=0;i<Variant::VARIANT_MAX;i++) { + if (i>0) + bt+=","; + + bt+=Variant::get_type_name(Variant::Type(i)); + } + + ADD_PROPERTY(PropertyInfo(Variant::INT,"signal/call_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance"),_SCS("set_call_mode"),_SCS("get_call_mode")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"signal/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type")); + ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"signal/node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),_SCS("set_base_path"),_SCS("get_base_path")); + ADD_PROPERTY(PropertyInfo(Variant::STRING,"signal/signal"),_SCS("set_signal"),_SCS("get_signal")); + + + BIND_CONSTANT( CALL_MODE_SELF ); + BIND_CONSTANT( CALL_MODE_NODE_PATH); + BIND_CONSTANT( CALL_MODE_INSTANCE); + +} + +class VisualScriptNodeInstanceYieldSignal : public VisualScriptNodeInstance { +public: + + + VisualScriptYieldSignal::CallMode call_mode; + NodePath node_path; + int output_args; + StringName signal; + + VisualScriptYieldSignal *node; + VisualScriptInstance *instance; + + + + virtual int get_working_memory_size() const { return 1; } + //virtual bool is_output_port_unsequenced(int p_idx) const { return false; } + //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; } + + virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) { + + if (p_start_mode==START_MODE_RESUME_YIELD) { + return 0; //resuming yield + } else { + //yield + + Object * object; + + switch(call_mode) { + + case VisualScriptYieldSignal::CALL_MODE_SELF: { + + object=instance->get_owner_ptr(); + + } break; + case VisualScriptYieldSignal::CALL_MODE_NODE_PATH: { + + Node* node = instance->get_owner_ptr()->cast_to<Node>(); + if (!node) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Base object is not a Node!"; + return 0; + } + + Node* another = node->get_node(node_path); + if (!node) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Path does not lead Node!"; + return 0; + } + + object=another; + + } break; + case VisualScriptYieldSignal::CALL_MODE_INSTANCE: { + + object = *p_inputs[0]; + if (!object) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str="Supplied instance input is null."; + return 0; + + } + + } break; + + } + + Ref<VisualScriptFunctionState> state; + state.instance(); + + state->connect_to_signal(object,signal,Array()); + + *p_working_mem=state; + + return STEP_YIELD_BIT; + } + + + } + + +}; + +VisualScriptNodeInstance* VisualScriptYieldSignal::instance(VisualScriptInstance* p_instance) { + + VisualScriptNodeInstanceYieldSignal * instance = memnew(VisualScriptNodeInstanceYieldSignal ); + instance->node=this; + instance->instance=p_instance; + instance->signal=signal; + instance->call_mode=call_mode; + instance->node_path=base_path; + instance->output_args = get_output_value_port_count(); + return instance; +} +VisualScriptYieldSignal::VisualScriptYieldSignal() { + + call_mode=CALL_MODE_SELF; + base_type="Object"; + +} + +template<VisualScriptYieldSignal::CallMode cmode> +static Ref<VisualScriptNode> create_yield_signal_node(const String& p_name) { + + Ref<VisualScriptYieldSignal> node; + node.instance(); + node->set_call_mode(cmode); + return node; +} + +void register_visual_script_yield_nodes() { + + VisualScriptLanguage::singleton->add_register_func("functions/wait/wait_frame",create_yield_node<VisualScriptYield::YIELD_FRAME>); + VisualScriptLanguage::singleton->add_register_func("functions/wait/wait_fixed_frame",create_yield_node<VisualScriptYield::YIELD_FIXED_FRAME>); + VisualScriptLanguage::singleton->add_register_func("functions/wait/wait_time",create_yield_node<VisualScriptYield::YIELD_WAIT>); + + + VisualScriptLanguage::singleton->add_register_func("functions/yield",create_yield_node<VisualScriptYield::YIELD_RETURN>); + VisualScriptLanguage::singleton->add_register_func("functions/yield_signal",create_node_generic<VisualScriptYieldSignal>); + +} diff --git a/modules/visual_script/visual_script_yield_nodes.h b/modules/visual_script/visual_script_yield_nodes.h new file mode 100644 index 0000000000..ae7f8c15c1 --- /dev/null +++ b/modules/visual_script/visual_script_yield_nodes.h @@ -0,0 +1,128 @@ +#ifndef VISUAL_SCRIPT_YIELD_NODES_H +#define VISUAL_SCRIPT_YIELD_NODES_H + +#include "visual_script.h" + +class VisualScriptYield : public VisualScriptNode { + + OBJ_TYPE(VisualScriptYield,VisualScriptNode) +public: + + enum YieldMode { + YIELD_RETURN, + YIELD_FRAME, + YIELD_FIXED_FRAME, + YIELD_WAIT + + }; +private: + + YieldMode yield_mode; + float wait_time; + + +protected: + + virtual void _validate_property(PropertyInfo& property) const; + + static void _bind_methods(); +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "functions"; } + + void set_yield_mode(YieldMode p_mode); + YieldMode get_yield_mode(); + + void set_wait_time(float p_time); + float get_wait_time(); + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptYield(); +}; +VARIANT_ENUM_CAST( VisualScriptYield::YieldMode ) + +class VisualScriptYieldSignal : public VisualScriptNode { + + OBJ_TYPE(VisualScriptYieldSignal,VisualScriptNode) +public: + enum CallMode { + CALL_MODE_SELF, + CALL_MODE_NODE_PATH, + CALL_MODE_INSTANCE, + + }; +private: + + CallMode call_mode; + StringName base_type; + NodePath base_path; + StringName signal; + + Node *_get_base_node() const; + StringName _get_base_type() const; + + +protected: + virtual void _validate_property(PropertyInfo& property) const; + + static void _bind_methods(); + +public: + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + + virtual String get_output_sequence_port_text(int p_port) const; + + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "functions"; } + + void set_base_type(const StringName& p_type); + StringName get_base_type() const; + + void set_signal(const StringName& p_type); + StringName get_signal() const; + + void set_base_path(const NodePath& p_type); + NodePath get_base_path() const; + + void set_call_mode(CallMode p_mode); + CallMode get_call_mode() const; + + virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); + + VisualScriptYieldSignal(); +}; + +VARIANT_ENUM_CAST(VisualScriptYieldSignal::CallMode ); + +void register_visual_script_yield_nodes(); + +#endif // VISUAL_SCRIPT_YIELD_NODES_H diff --git a/platform/android/build.gradle.template b/platform/android/build.gradle.template index 24951b921b..873eef0566 100644 --- a/platform/android/build.gradle.template +++ b/platform/android/build.gradle.template @@ -67,7 +67,6 @@ android { $$GRADLE_ASSET_DIRS$$ ] jniLibs.srcDirs = [ - 'libs' $$GRADLE_JNI_DIRS$$ ] } diff --git a/platform/android/detect.py b/platform/android/detect.py index 49ffc86658..6fb71a195f 100644 --- a/platform/android/detect.py +++ b/platform/android/detect.py @@ -166,13 +166,16 @@ def configure(env): env.Append(CPPPATH=[gcc_include]) # env['CCFLAGS'] = string.split('-DNO_THREADS -MMD -MP -MF -fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -mthumb -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED ') + libm='m' env['neon_enabled']=False if env['android_arch']=='x86': env['CCFLAGS'] = string.split('-DNO_STATVFS -fpic -ffunction-sections -funwind-tables -fstack-protector -fvisibility=hidden -D__GLIBC__ -Wno-psabi -ftree-vectorize -funsafe-math-optimizations -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED') elif env["android_arch"]=="armv6": - env['CCFLAGS'] = string.split('-DNO_STATVFS -fpic -ffunction-sections -funwind-tables -fstack-protector -fvisibility=hidden -D__ARM_ARCH_6__ -D__GLIBC__ -Wno-psabi -march=armv6 -mfpu=vfp -mfloat-abi=softfp -funsafe-math-optimizations -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED') + env['CCFLAGS'] = string.split('-DNO_STATVFS -fpic -ffunction-sections -funwind-tables -fstack-protector -fvisibility=hidden -D__ARM_ARCH_6__ -D__GLIBC__ -Wno-psabi -march=armv6 -mfpu=vfp -mfloat-abi=hard -D_NDK_MATH_NO_SOFTFP=1 -funsafe-math-optimizations -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED') + libm='m_hard' elif env["android_arch"]=="armv7": - env['CCFLAGS'] = string.split('-DNO_STATVFS -fpic -ffunction-sections -funwind-tables -fstack-protector -fvisibility=hidden -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ -D__GLIBC__ -Wno-psabi -march=armv7-a -mfloat-abi=softfp -ftree-vectorize -funsafe-math-optimizations -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED') + env['CCFLAGS'] = string.split('-DNO_STATVFS -fpic -ffunction-sections -funwind-tables -fstack-protector -fvisibility=hidden -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ -Wl,--fix-cortex-a8 -D__GLIBC__ -Wno-psabi -march=armv7-a -mfloat-abi=hard -D_NDK_MATH_NO_SOFTFP=1 -ftree-vectorize -funsafe-math-optimizations -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED') + libm='m_hard' if env['android_neon']=='yes': env['neon_enabled']=True env.Append(CCFLAGS=['-mfpu=neon','-D__ARM_NEON__']) @@ -181,11 +184,11 @@ def configure(env): env.Append(LDPATH=[ld_path]) env.Append(LIBS=['OpenSLES']) -# env.Append(LIBS=['c','m','stdc++','log','EGL','GLESv1_CM','GLESv2','OpenSLES','supc++','android']) +# env.Append(LIBS=['c',libm,'stdc++','log','EGL','GLESv1_CM','GLESv2','OpenSLES','supc++','android']) env.Append(LIBS=['EGL','OpenSLES','android']) - env.Append(LIBS=['c','m','stdc++','log','GLESv1_CM','GLESv2', 'z']) + env.Append(LIBS=['c',libm,'stdc++','log','GLESv1_CM','GLESv2', 'z']) - env["LINKFLAGS"]= string.split(" -g --sysroot="+ld_sysroot+" -Wl,--no-undefined -Wl,-z,noexecstack ") + env["LINKFLAGS"]= string.split(" -g --sysroot="+ld_sysroot+" -Wl,--no-undefined -Wl,-z,noexecstack -Wl,--no-warn-mismatch") env.Append(LINKFLAGS=["-Wl,-soname,libgodot_android.so"]) if (env["target"]=="release"): diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index 10d77aba6c..8f3edfcaa7 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -495,7 +495,7 @@ static String _parse_string(const uint8_t *p_bytes,bool p_utf8) { Vector<uint8_t> str8; str8.resize(len+1); - for(int i=0;i<len;i++) { + for(uint32_t i=0;i<len;i++) { str8[i]=p_bytes[offset+i]; } str8[len]=0; @@ -505,7 +505,7 @@ static String _parse_string(const uint8_t *p_bytes,bool p_utf8) { } else { String str; - for(int i=0;i<len;i++) { + for(uint32_t i=0;i<len;i++) { CharType c = decode_uint16(&p_bytes[offset+i*2]); if (c==0) break; @@ -535,7 +535,7 @@ void EditorExportPlatformAndroid::_fix_resources(Vector<uint8_t>& p_manifest) { printf("stirng count: %i\n",string_count); printf("flags: %x\n",string_flags); - for(int i=0;i<string_count;i++) { + for(uint32_t i=0;i<string_count;i++) { uint32_t offset = decode_uint32(&p_manifest[string_table_begins+i*4]); offset+=string_table_begins+string_count*4; @@ -569,7 +569,7 @@ void EditorExportPlatformAndroid::_fix_resources(Vector<uint8_t>& p_manifest) { Vector<uint8_t> ret; ret.resize(string_table_begins+string_table.size()*4); - for(int i=0;i<string_table_begins;i++) { + for(uint32_t i=0;i<string_table_begins;i++) { ret[i]=p_manifest[i]; } @@ -660,7 +660,7 @@ void EditorExportPlatformAndroid::_fix_manifest(Vector<uint8_t>& p_manifest,bool uint32_t filesize = decode_uint32(&p_manifest[ofs+4]); ofs+=8; -// print_line("FILESIZE: "+itos(filesize)+" ACTUAL: "+itos(p_manifest.size())); + //print_line("FILESIZE: "+itos(filesize)+" ACTUAL: "+itos(p_manifest.size())); uint32_t string_count; uint32_t styles_count; @@ -672,7 +672,7 @@ void EditorExportPlatformAndroid::_fix_manifest(Vector<uint8_t>& p_manifest,bool uint32_t string_table_ends; Vector<uint8_t> stable_extra; - while(ofs < p_manifest.size()) { + while(ofs < (uint32_t)p_manifest.size()) { uint32_t chunk = decode_uint32(&p_manifest[ofs]); uint32_t size = decode_uint32(&p_manifest[ofs+4]); @@ -687,7 +687,7 @@ void EditorExportPlatformAndroid::_fix_manifest(Vector<uint8_t>& p_manifest,bool string_count=decode_uint32(&p_manifest[iofs]); styles_count=decode_uint32(&p_manifest[iofs+4]); - uint32_t string_flags=decode_uint32(&p_manifest[iofs+8]); + string_flags=decode_uint32(&p_manifest[iofs+8]); string_data_offset=decode_uint32(&p_manifest[iofs+12]); styles_offset=decode_uint32(&p_manifest[iofs+16]); /* @@ -703,7 +703,7 @@ void EditorExportPlatformAndroid::_fix_manifest(Vector<uint8_t>& p_manifest,bool string_table_begins=st_offset; - for(int i=0;i<string_count;i++) { + for(uint32_t i=0;i<string_count;i++) { uint32_t string_at = decode_uint32(&p_manifest[st_offset+i*4]); string_at+=st_offset+string_count*4; @@ -719,7 +719,7 @@ void EditorExportPlatformAndroid::_fix_manifest(Vector<uint8_t>& p_manifest,bool uint32_t len = decode_uint16(&p_manifest[string_at]); Vector<CharType> ucstring; ucstring.resize(len+1); - for(int j=0;j<len;j++) { + for(uint32_t j=0;j<len;j++) { uint16_t c=decode_uint16(&p_manifest[string_at+2+2*j]); ucstring[j]=c; } @@ -732,7 +732,7 @@ void EditorExportPlatformAndroid::_fix_manifest(Vector<uint8_t>& p_manifest,bool // print_line("String "+itos(i)+": "+string_table[i]); } - for(int i=string_end;i<(ofs+size);i++) { + for(uint32_t i=string_end;i<(ofs+size);i++) { stable_extra.push_back(p_manifest[i]); } @@ -758,7 +758,7 @@ void EditorExportPlatformAndroid::_fix_manifest(Vector<uint8_t>& p_manifest,bool uint32_t attrcount=decode_uint32(&p_manifest[iofs+20]); iofs+=28; //printf("ATTRCOUNT: %x\n",attrcount); - for(int i=0;i<attrcount;i++) { + for(uint32_t i=0;i<attrcount;i++) { uint32_t attr_nspace=decode_uint32(&p_manifest[iofs]); uint32_t attr_name=decode_uint32(&p_manifest[iofs+4]); uint32_t attr_value=decode_uint32(&p_manifest[iofs+8]); @@ -883,7 +883,7 @@ void EditorExportPlatformAndroid::_fix_manifest(Vector<uint8_t>& p_manifest,bool Vector<uint8_t> ret; ret.resize(string_table_begins+string_table.size()*4); - for(int i=0;i<string_table_begins;i++) { + for(uint32_t i=0;i<string_table_begins;i++) { ret[i]=p_manifest[i]; } @@ -927,7 +927,7 @@ void EditorExportPlatformAndroid::_fix_manifest(Vector<uint8_t>& p_manifest,bool uint32_t extra = (p_manifest.size()-string_table_ends); ret.resize(new_stable_end + extra); - for(int i=0;i<extra;i++) + for(uint32_t i=0;i<extra;i++) ret[new_stable_end+i]=p_manifest[string_table_ends+i]; while(ret.size()%4) @@ -1355,7 +1355,7 @@ Error EditorExportPlatformAndroid::export_project(const String& p_path, bool p_d args.push_back(unaligned_path); args.push_back(user); int retval; - int err = OS::get_singleton()->execute(jarsigner,args,true,NULL,NULL,&retval); + OS::get_singleton()->execute(jarsigner,args,true,NULL,NULL,&retval); if (retval) { EditorNode::add_io_error("'jarsigner' returned with error #"+itos(retval)); return ERR_CANT_CREATE; @@ -1368,7 +1368,7 @@ Error EditorExportPlatformAndroid::export_project(const String& p_path, bool p_d args.push_back(unaligned_path); args.push_back("-verbose"); - err = OS::get_singleton()->execute(jarsigner,args,true,NULL,NULL,&retval); + OS::get_singleton()->execute(jarsigner,args,true,NULL,NULL,&retval); if (retval) { EditorNode::add_io_error("'jarsigner' verification of APK failed. Make sure to use jarsigner from Java 6."); return ERR_CANT_CREATE; @@ -1515,7 +1515,7 @@ void EditorExportPlatformAndroid::_device_poll_thread(void *ud) { List<String> args; args.push_back("devices"); int ec; - Error err = OS::get_singleton()->execute(adb,args,true,NULL,&devices,&ec); + OS::get_singleton()->execute(adb,args,true,NULL,&devices,&ec); Vector<String> ds = devices.split("\n"); Vector<String> ldevices; for(int i=1;i<ds.size();i++) { @@ -1574,7 +1574,7 @@ void EditorExportPlatformAndroid::_device_poll_thread(void *ud) { int ec; String dp; - Error err = OS::get_singleton()->execute(adb,args,true,NULL,&dp,&ec); + OS::get_singleton()->execute(adb,args,true,NULL,&dp,&ec); Vector<String> props = dp.split("\n"); String vendor; diff --git a/platform/android/java/res/values-zh/strings.xml b/platform/android/java/res/values-zh-rCN/strings.xml index 397e662851..6668c56bd9 100644 --- a/platform/android/java/res/values-zh/strings.xml +++ b/platform/android/java/res/values-zh-rCN/strings.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> <resources> <string name="godot_project_name_string">godot-project-name-zh</string> -</resources>
\ No newline at end of file +</resources> diff --git a/platform/android/java/res/values-zh-rHK/strings.xml b/platform/android/java/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000000..8a6269da0f --- /dev/null +++ b/platform/android/java/res/values-zh-rHK/strings.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="godot_project_name_string">godot-project-name-zh_HK</string> +</resources> diff --git a/platform/android/java/res/values-zh-rTW/strings.xml b/platform/android/java/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000000..b1bb39d5d6 --- /dev/null +++ b/platform/android/java/res/values-zh-rTW/strings.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="godot_project_name_string">godot-project-name-zh_TW</string> +</resources> diff --git a/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java b/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java index fde752acc9..b7de31ada3 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java +++ b/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java @@ -28,99 +28,94 @@ /*************************************************************************/ package org.godotengine.godot; -import org.godotengine.godot.Dictionary; import android.app.Activity; import android.util.Log; +import org.godotengine.godot.payments.PaymentsManager; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + public class GodotPaymentV3 extends Godot.SingletonBase { private Godot activity; - private Integer purchaseCallbackId = 0; - private String accessToken; - private String purchaseValidationUrlPrefix; - private String transactionId; + private PaymentsManager mPaymentManager; + private Dictionary mSkuDetails = new Dictionary(); - public void purchase( String _sku, String _transactionId) { - final String sku = _sku; - final String transactionId = _transactionId; - activity.getPaymentsManager().setBaseSingleton(this); + public void purchase(final String sku, final String transactionId) { activity.runOnUiThread(new Runnable() { @Override public void run() { - activity.getPaymentsManager().requestPurchase(sku, transactionId); + mPaymentManager.requestPurchase(sku, transactionId); } }); } - -/* public string requestPurchasedTicket(){ - activity.getPaymentsManager() - } -*/ - static public Godot.SingletonBase initialize(Activity p_activity) { + static public Godot.SingletonBase initialize(Activity p_activity) { - return new GodotPaymentV3(p_activity); - } + return new GodotPaymentV3(p_activity); + } - public GodotPaymentV3(Activity p_activity) { - registerClass("GodotPayments", new String[] {"purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases", "requestPurchased", "setAutoConsume", "consume"}); - activity=(Godot) p_activity; + registerClass("GodotPayments", new String[]{"purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases", "requestPurchased", "setAutoConsume", "consume", "querySkuDetails"}); + activity = (Godot) p_activity; + mPaymentManager = activity.getPaymentsManager(); + mPaymentManager.setBaseSingleton(this); } - public void consumeUnconsumedPurchases(){ - activity.getPaymentsManager().setBaseSingleton(this); + public void consumeUnconsumedPurchases() { activity.runOnUiThread(new Runnable() { @Override public void run() { - activity.getPaymentsManager().consumeUnconsumedPurchases(); + mPaymentManager.consumeUnconsumedPurchases(); } }); } private String signature; - public String getSignature(){ - return this.signature; + + public String getSignature() { + return this.signature; } - - - public void callbackSuccess(String ticket, String signature, String sku){ -// Log.d(this.getClass().getName(), "PRE-Send callback to purchase success"); + + public void callbackSuccess(String ticket, String signature, String sku) { GodotLib.callobject(purchaseCallbackId, "purchase_success", new Object[]{ticket, signature, sku}); -// Log.d(this.getClass().getName(), "POST-Send callback to purchase success"); -} + } + + public void callbackSuccessProductMassConsumed(String ticket, String signature, String sku) { + Log.d(this.getClass().getName(), "callbackSuccessProductMassConsumed > " + ticket + "," + signature + "," + sku); + GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[]{ticket, signature, sku}); + } - public void callbackSuccessProductMassConsumed(String ticket, String signature, String sku){ -// Log.d(this.getClass().getName(), "PRE-Send callback to consume success"); - Log.d(this.getClass().getName(), "callbackSuccessProductMassConsumed > "+ticket+","+signature+","+sku); - GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[]{ticket, signature, sku}); -// Log.d(this.getClass().getName(), "POST-Send callback to consume success"); + public void callbackSuccessNoUnconsumedPurchases() { + GodotLib.calldeferred(purchaseCallbackId, "consume_not_required", new Object[]{}); } - public void callbackSuccessNoUnconsumedPurchases(){ - GodotLib.calldeferred(purchaseCallbackId, "no_validation_required", new Object[]{}); + public void callbackFailConsume() { + GodotLib.calldeferred(purchaseCallbackId, "consume_fail", new Object[]{}); } - - public void callbackFail(){ + + public void callbackFail() { GodotLib.calldeferred(purchaseCallbackId, "purchase_fail", new Object[]{}); -// GodotLib.callobject(purchaseCallbackId, "purchase_fail", new Object[]{}); } - - public void callbackCancel(){ + + public void callbackCancel() { GodotLib.calldeferred(purchaseCallbackId, "purchase_cancel", new Object[]{}); -// GodotLib.callobject(purchaseCallbackId, "purchase_cancel", new Object[]{}); } - - public void callbackAlreadyOwned(String sku){ + + public void callbackAlreadyOwned(String sku) { GodotLib.calldeferred(purchaseCallbackId, "purchase_owned", new Object[]{sku}); } - + public int getPurchaseCallbackId() { return purchaseCallbackId; } @@ -129,11 +124,11 @@ public class GodotPaymentV3 extends Godot.SingletonBase { this.purchaseCallbackId = purchaseCallbackId; } - public String getPurchaseValidationUrlPrefix(){ - return this.purchaseValidationUrlPrefix ; + public String getPurchaseValidationUrlPrefix() { + return this.purchaseValidationUrlPrefix; } - public void setPurchaseValidationUrlPrefix(String url){ + public void setPurchaseValidationUrlPrefix(String url) { this.purchaseValidationUrlPrefix = url; } @@ -144,39 +139,80 @@ public class GodotPaymentV3 extends Godot.SingletonBase { public void setAccessToken(String accessToken) { this.accessToken = accessToken; } - - public void setTransactionId(String transactionId){ + + public void setTransactionId(String transactionId) { this.transactionId = transactionId; } - - public String getTransactionId(){ + + public String getTransactionId() { return this.transactionId; } - + // request purchased items are not consumed - public void requestPurchased(){ - activity.getPaymentsManager().setBaseSingleton(this); + public void requestPurchased() { activity.runOnUiThread(new Runnable() { @Override public void run() { - activity.getPaymentsManager().requestPurchased(); + mPaymentManager.requestPurchased(); } }); } - + // callback for requestPurchased() - public void callbackPurchased(String receipt, String signature, String sku){ + public void callbackPurchased(String receipt, String signature, String sku) { GodotLib.calldeferred(purchaseCallbackId, "has_purchased", new Object[]{receipt, signature, sku}); } - + // consume item automatically after purchase. default is true. - public void setAutoConsume(boolean autoConsume){ - activity.getPaymentsManager().setAutoConsume(autoConsume); + public void setAutoConsume(boolean autoConsume) { + mPaymentManager.setAutoConsume(autoConsume); } - + // consume a specific item - public void consume(String sku){ - activity.getPaymentsManager().consume(sku); + public void consume(String sku) { + mPaymentManager.consume(sku); + } + + // query in app item detail info + public void querySkuDetails(String[] list) { + List<String> nKeys = Arrays.asList(list); + List<String> cKeys = Arrays.asList(mSkuDetails.get_keys()); + ArrayList<String> fKeys = new ArrayList<String>(); + for (String key : nKeys) { + if (!cKeys.contains(key)) { + fKeys.add(key); + } + } + if (fKeys.size() > 0) { + mPaymentManager.querySkuDetails(fKeys.toArray(new String[0])); + } else { + completeSkuDetail(); + } + } + + public void addSkuDetail(String itemJson) { + JSONObject o = null; + try { + o = new JSONObject(itemJson); + Dictionary item = new Dictionary(); + item.put("type", o.optString("type")); + item.put("product_id", o.optString("productId")); + item.put("title", o.optString("title")); + item.put("description", o.optString("description")); + item.put("price", o.optString("price")); + item.put("price_currency_code", o.optString("price_currency_code")); + item.put("price_amount", 0.000001d * o.optLong("price_amount_micros")); + mSkuDetails.put(item.get("product_id").toString(), item); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + public void completeSkuDetail() { + GodotLib.calldeferred(purchaseCallbackId, "sku_details_complete", new Object[]{mSkuDetails}); + } + + public void errorSkuDetail(String errorMessage) { + GodotLib.calldeferred(purchaseCallbackId, "sku_details_error", new Object[]{errorMessage}); } } - diff --git a/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java b/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java index eb33b37ecc..753c0a6f93 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java +++ b/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java @@ -28,283 +28,370 @@ /*************************************************************************/ package org.godotengine.godot.payments; -import java.util.ArrayList; -import java.util.List; - -import android.os.RemoteException; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.os.Bundle; import android.os.IBinder; +import android.os.RemoteException; +import android.text.TextUtils; import android.util.Log; -import android.os.Bundle; -import org.json.JSONException; -import org.json.JSONObject; -import org.json.JSONStringer; +import com.android.vending.billing.IInAppBillingService; -import org.godotengine.godot.Dictionary; import org.godotengine.godot.Godot; import org.godotengine.godot.GodotPaymentV3; -import com.android.vending.billing.IInAppBillingService; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Arrays; public class PaymentsManager { public static final int BILLING_RESPONSE_RESULT_OK = 0; public static final int REQUEST_CODE_FOR_PURCHASE = 0x1001; private static boolean auto_consume = true; - + private Activity activity; IInAppBillingService mService; - public void setActivity(Activity activity){ + public void setActivity(Activity activity) { this.activity = activity; } - public static PaymentsManager createManager(Activity activity){ + public static PaymentsManager createManager(Activity activity) { PaymentsManager manager = new PaymentsManager(activity); return manager; } - - private PaymentsManager(Activity activity){ + + private PaymentsManager(Activity activity) { this.activity = activity; } - - public PaymentsManager initService(){ + + public PaymentsManager initService() { Intent intent = new Intent("com.android.vending.billing.InAppBillingService.BIND"); intent.setPackage("com.android.vending"); activity.bindService( - intent, - mServiceConn, + intent, + mServiceConn, Context.BIND_AUTO_CREATE); return this; } - public void destroy(){ + public void destroy() { if (mService != null) { - activity.unbindService(mServiceConn); - } + activity.unbindService(mServiceConn); + } } - + ServiceConnection mServiceConn = new ServiceConnection() { - @Override - public void onServiceDisconnected(ComponentName name) { - mService = null; - } + @Override + public void onServiceDisconnected(ComponentName name) { + mService = null; + } - @Override - public void onServiceConnected(ComponentName name, IBinder service) { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { mService = IInAppBillingService.Stub.asInterface(service); - } + } }; - - public void requestPurchase(final String sku, String transactionId){ + + public void requestPurchase(final String sku, String transactionId) { new PurchaseTask(mService, Godot.getInstance()) { - + @Override protected void error(String message) { godotPaymentV3.callbackFail(); - + } - + @Override protected void canceled() { godotPaymentV3.callbackCancel(); } - + @Override protected void alreadyOwned() { godotPaymentV3.callbackAlreadyOwned(sku); } - + }.purchase(sku, transactionId); } - public void consumeUnconsumedPurchases(){ + public void consumeUnconsumedPurchases() { new ReleaseAllConsumablesTask(mService, activity) { - + @Override protected void success(String sku, String receipt, String signature, String token) { godotPaymentV3.callbackSuccessProductMassConsumed(receipt, signature, sku); } - + @Override protected void error(String message) { - godotPaymentV3.callbackFail(); - + Log.d("godot", "consumeUnconsumedPurchases :" + message); + godotPaymentV3.callbackFailConsume(); + } @Override protected void notRequired() { + Log.d("godot", "callbackSuccessNoUnconsumedPurchases :"); godotPaymentV3.callbackSuccessNoUnconsumedPurchases(); - + } }.consumeItAll(); } - - public void requestPurchased(){ - try{ + + public void requestPurchased() { + try { PaymentsCache pc = new PaymentsCache(Godot.getInstance()); -// Log.d("godot", "requestPurchased for " + activity.getPackageName()); - Bundle bundle = mService.getPurchases(3, activity.getPackageName(), "inapp",null); + String continueToken = null; -/* - for (String key : bundle.keySet()) { - Object value = bundle.get(key); - Log.d("godot", String.format("%s %s (%s)", key, value.toString(), value.getClass().getName())); - } -*/ - - if (bundle.getInt("RESPONSE_CODE") == 0){ + do { + Bundle bundle = mService.getPurchases(3, activity.getPackageName(), "inapp", continueToken); - final ArrayList<String> myPurchases = bundle.getStringArrayList("INAPP_PURCHASE_DATA_LIST"); - final ArrayList<String> mySignatures = bundle.getStringArrayList("INAPP_DATA_SIGNATURE_LIST"); - + if (bundle.getInt("RESPONSE_CODE") == 0) { - if (myPurchases == null || myPurchases.size() == 0){ -// Log.d("godot", "No purchases!"); - godotPaymentV3.callbackPurchased("", "", ""); - return; - } - -// Log.d("godot", "# products are purchased:" + myPurchases.size()); - for (int i=0;i<myPurchases.size();i++) - { - - try{ - String receipt = myPurchases.get(i); - JSONObject inappPurchaseData = new JSONObject(receipt); - String sku = inappPurchaseData.getString("productId"); - String token = inappPurchaseData.getString("purchaseToken"); - String signature = mySignatures.get(i); -// Log.d("godot", "purchased item:" + token + "\n" + receipt); - - pc.setConsumableValue("ticket_signautre", sku, signature); - pc.setConsumableValue("ticket", sku, receipt); - pc.setConsumableFlag("block", sku, true); - pc.setConsumableValue("token", sku, token); - - godotPaymentV3.callbackPurchased(receipt, signature, sku); - } catch (JSONException e) { + final ArrayList<String> myPurchases = bundle.getStringArrayList("INAPP_PURCHASE_DATA_LIST"); + final ArrayList<String> mySignatures = bundle.getStringArrayList("INAPP_DATA_SIGNATURE_LIST"); + + if (myPurchases == null || myPurchases.size() == 0) { + godotPaymentV3.callbackPurchased("", "", ""); + return; } - } - } - }catch(Exception e){ + for (int i = 0; i < myPurchases.size(); i++) { + + try { + String receipt = myPurchases.get(i); + JSONObject inappPurchaseData = new JSONObject(receipt); + String sku = inappPurchaseData.getString("productId"); + String token = inappPurchaseData.getString("purchaseToken"); + String signature = mySignatures.get(i); + + pc.setConsumableValue("ticket_signautre", sku, signature); + pc.setConsumableValue("ticket", sku, receipt); + pc.setConsumableFlag("block", sku, true); + pc.setConsumableValue("token", sku, token); + + godotPaymentV3.callbackPurchased(receipt, signature, sku); + } catch (JSONException e) { + } + } + } + continueToken = bundle.getString("INAPP_CONTINUATION_TOKEN"); + Log.d("godot", "continue token = " + continueToken); + } while (!TextUtils.isEmpty(continueToken)); + } catch (Exception e) { Log.d("godot", "Error requesting purchased products:" + e.getClass().getName() + ":" + e.getMessage()); } } - + public void processPurchaseResponse(int resultCode, Intent data) { - new HandlePurchaseTask(activity){ + new HandlePurchaseTask(activity) { @Override protected void success(final String sku, final String signature, final String ticket) { godotPaymentV3.callbackSuccess(ticket, signature, sku); - if (auto_consume){ + if (auto_consume) { new ConsumeTask(mService, activity) { - + @Override protected void success(String ticket) { -// godotPaymentV3.callbackSuccess(""); } - + @Override protected void error(String message) { godotPaymentV3.callbackFail(); - + } }.consume(sku); } - -// godotPaymentV3.callbackSuccess(new PaymentsCache(activity).getConsumableValue("ticket", sku),signature); -// godotPaymentV3.callbackSuccess(ticket); - //validatePurchase(purchaseToken, sku); } @Override protected void error(String message) { godotPaymentV3.callbackFail(); - } @Override protected void canceled() { godotPaymentV3.callbackCancel(); - } }.handlePurchaseRequest(resultCode, data); } - - public void validatePurchase(String purchaseToken, final String sku){ - - new ValidateTask(activity, godotPaymentV3){ + + public void validatePurchase(String purchaseToken, final String sku) { + + new ValidateTask(activity, godotPaymentV3) { @Override protected void success() { - + new ConsumeTask(mService, activity) { - + @Override protected void success(String ticket) { godotPaymentV3.callbackSuccess(ticket, null, sku); - } - + @Override protected void error(String message) { godotPaymentV3.callbackFail(); - } }.consume(sku); - + } @Override protected void error(String message) { godotPaymentV3.callbackFail(); - } @Override protected void canceled() { godotPaymentV3.callbackCancel(); - } }.validatePurchase(sku); } - - public void setAutoConsume(boolean autoConsume){ + + public void setAutoConsume(boolean autoConsume) { auto_consume = autoConsume; } - - public void consume(final String sku){ + + public void consume(final String sku) { new ConsumeTask(mService, activity) { - + @Override protected void success(String ticket) { godotPaymentV3.callbackSuccessProductMassConsumed(ticket, "", sku); - } - + @Override protected void error(String message) { - godotPaymentV3.callbackFail(); - + godotPaymentV3.callbackFailConsume(); } }.consume(sku); } - + + // Workaround to bug where sometimes response codes come as Long instead of Integer + int getResponseCodeFromBundle(Bundle b) { + Object o = b.get("RESPONSE_CODE"); + if (o == null) { + //logDebug("Bundle with null response code, assuming OK (known issue)"); + return BILLING_RESPONSE_RESULT_OK; + } else if (o instanceof Integer) return ((Integer) o).intValue(); + else if (o instanceof Long) return (int) ((Long) o).longValue(); + else { + //logError("Unexpected type for bundle response code."); + //logError(o.getClass().getName()); + throw new RuntimeException("Unexpected type for bundle response code: " + o.getClass().getName()); + } + } + + /** + * Returns a human-readable description for the given response code. + * + * @param code The response code + * @return A human-readable string explaining the result code. + * It also includes the result code numerically. + */ + public static String getResponseDesc(int code) { + String[] iab_msgs = ("0:OK/1:User Canceled/2:Unknown/" + + "3:Billing Unavailable/4:Item unavailable/" + + "5:Developer Error/6:Error/7:Item Already Owned/" + + "8:Item not owned").split("/"); + String[] iabhelper_msgs = ("0:OK/-1001:Remote exception during initialization/" + + "-1002:Bad response received/" + + "-1003:Purchase signature verification failed/" + + "-1004:Send intent failed/" + + "-1005:User cancelled/" + + "-1006:Unknown purchase response/" + + "-1007:Missing token/" + + "-1008:Unknown error/" + + "-1009:Subscriptions not available/" + + "-1010:Invalid consumption attempt").split("/"); + + if (code <= -1000) { + int index = -1000 - code; + if (index >= 0 && index < iabhelper_msgs.length) return iabhelper_msgs[index]; + else return String.valueOf(code) + ":Unknown IAB Helper Error"; + } else if (code < 0 || code >= iab_msgs.length) + return String.valueOf(code) + ":Unknown"; + else + return iab_msgs[code]; + } + + public void querySkuDetails(final String[] list) { + (new Thread(new Runnable() { + @Override + public void run() { + ArrayList<String> skuList = new ArrayList<String>(Arrays.asList(list)); + if (skuList.size() == 0) { + return; + } + // Split the sku list in blocks of no more than 20 elements. + ArrayList<ArrayList<String>> packs = new ArrayList<ArrayList<String>>(); + ArrayList<String> tempList; + int n = skuList.size() / 20; + int mod = skuList.size() % 20; + for (int i = 0; i < n; i++) { + tempList = new ArrayList<String>(); + for (String s : skuList.subList(i * 20, i * 20 + 20)) { + tempList.add(s); + } + packs.add(tempList); + } + if (mod != 0) { + tempList = new ArrayList<String>(); + for (String s : skuList.subList(n * 20, n * 20 + mod)) { + tempList.add(s); + } + packs.add(tempList); + + for (ArrayList<String> skuPartList : packs) { + Bundle querySkus = new Bundle(); + querySkus.putStringArrayList("ITEM_ID_LIST", skuPartList); + Bundle skuDetails = null; + try { + skuDetails = mService.getSkuDetails(3, activity.getPackageName(), "inapp", querySkus); + if (!skuDetails.containsKey("DETAILS_LIST")) { + int response = getResponseCodeFromBundle(skuDetails); + if (response != BILLING_RESPONSE_RESULT_OK) { + godotPaymentV3.errorSkuDetail(getResponseDesc(response)); + } else { + godotPaymentV3.errorSkuDetail("No error but no detail list."); + } + return; + } + + ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST"); + + for (String thisResponse : responseList) { + Log.d("godot", "response = "+thisResponse); + godotPaymentV3.addSkuDetail(thisResponse); + } + } catch (RemoteException e) { + e.printStackTrace(); + godotPaymentV3.errorSkuDetail("RemoteException error!"); + } + } + godotPaymentV3.completeSkuDetail(); + } + } + })).start(); + } + private GodotPaymentV3 godotPaymentV3; - + public void setBaseSingleton(GodotPaymentV3 godotPaymentV3) { this.godotPaymentV3 = godotPaymentV3; } } - diff --git a/platform/javascript/SCsub b/platform/javascript/SCsub index cd96cf4f31..fc70d45a04 100644 --- a/platform/javascript/SCsub +++ b/platform/javascript/SCsub @@ -4,7 +4,8 @@ javascript_files = [ "os_javascript.cpp", "audio_driver_javascript.cpp", "javascript_main.cpp", - "audio_server_javascript.cpp" + "audio_server_javascript.cpp", + "javascript_eval.cpp" ] #obj = env.SharedObject('godot_javascript.cpp') diff --git a/platform/javascript/detect.py b/platform/javascript/detect.py index d76a20bea7..aeff5a1a34 100644 --- a/platform/javascript/detect.py +++ b/platform/javascript/detect.py @@ -18,7 +18,8 @@ def can_build(): def get_opts(): return [ - ['compress','Compress JS Executable','no'] + ['compress','Compress JS Executable','no'], + ['javascript_eval','Enable JavaScript eval interface','yes'] ] def get_flags(): @@ -89,6 +90,10 @@ def configure(env): env.Append(CPPFLAGS=['-s','ASM_JS=1']) env.Append(CPPFLAGS=['-s','FULL_ES2=1']) # env.Append(CPPFLAGS=['-DANDROID_ENABLED', '-DUNIX_ENABLED','-DMPC_FIXED_POINT']) + + if env['javascript_eval'] == 'yes': + env.Append(CPPFLAGS=['-DJAVASCRIPT_EVAL_ENABLED']) + if (env["compress"]=="yes"): lzma_binpath = em_path+"/third_party/lzma.js/lzma-native" lzma_decoder = em_path+"/third_party/lzma.js/lzma-decoder.js" diff --git a/platform/javascript/javascript_eval.cpp b/platform/javascript/javascript_eval.cpp new file mode 100644 index 0000000000..e642300bda --- /dev/null +++ b/platform/javascript/javascript_eval.cpp @@ -0,0 +1,169 @@ +/*************************************************************************/ +/* javascript_eval.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#ifdef JAVASCRIPT_EVAL_ENABLED + +#include "javascript_eval.h" +#include "emscripten.h" + +JavaScript *JavaScript::singleton=NULL; + +JavaScript *JavaScript::get_singleton() { + + return singleton; +} + +Variant JavaScript::eval(const String& p_code, bool p_use_global_exec_context) { + + union { int i; double d; char* s; } js_data[4]; + Variant::Type return_type = static_cast<Variant::Type>(EM_ASM_INT({ + + var eval_ret; + try { + if ($3) { // p_use_global_exec_context + // indirect eval call grants global execution context + var global_eval = eval; + eval_ret = global_eval(UTF8ToString($2)); + } + else { + eval_ret = eval(UTF8ToString($2)); + } + } catch (e) { + Module.printErr(e); + eval_ret = null; + } + + switch (typeof eval_ret) { + + case 'boolean': + // bitwise op yields 32-bit int + setValue($0, eval_ret|0, 'i32'); + return 1; // BOOL + + case 'number': + if ((eval_ret|0)===eval_ret) { + setValue($0, eval_ret|0, 'i32'); + return 2; // INT + } + setValue($0, eval_ret, 'double'); + return 3; // REAL + + case 'string': + var array_len = lengthBytesUTF8(eval_ret)+1; + var array_ptr = _malloc(array_len); + try { + if (array_ptr===0) { + throw new Error('String allocation failed (probably out of memory)'); + } + setValue($0, array_ptr|0 , '*'); + stringToUTF8(eval_ret, array_ptr, array_len); + return 4; // STRING + } catch (e) { + if (array_ptr!==0) { + _free(array_ptr) + } + Module.printErr(e); + // fall through + } + break; + + case 'object': + if (eval_ret === null) { + break; + } + + else if (typeof eval_ret.x==='number' && typeof eval_ret.y==='number') { + setValue($0, eval_ret.x, 'double'); + setValue($0+$1, eval_ret.y, 'double'); + if (typeof eval_ret.z==='number') { + setValue($0+$1*2, eval_ret.z, 'double'); + return 7; // VECTOR3 + } + else if (typeof eval_ret.width==='number' && typeof eval_ret.height==='number') { + setValue($0+$1*2, eval_ret.width, 'double'); + setValue($0+$1*3, eval_ret.height, 'double'); + return 6; // RECT2 + } + return 5; // VECTOR2 + } + + else if (typeof eval_ret.r==='number' && typeof eval_ret.g==='number' && typeof eval_ret.b==='number') { + // assume 8-bit rgb components since we're on the web + setValue($0, eval_ret.r, 'double'); + setValue($0+$1, eval_ret.g, 'double'); + setValue($0+$1*2, eval_ret.b, 'double'); + setValue($0+$1*3, typeof eval_ret.a==='number' ? eval_ret.a : 1, 'double'); + return 14; // COLOR + } + break; + } + return 0; // NIL + + }, js_data, sizeof *js_data, p_code.utf8().get_data(), p_use_global_exec_context)); + + switch(return_type) { + case Variant::BOOL: + return !!js_data->i; + case Variant::INT: + return js_data->i; + case Variant::REAL: + return js_data->d; + case Variant::STRING: + { + String str = String::utf8(js_data->s); + EM_ASM_({ _free($0); }, js_data->s); + return str; + } + case Variant::VECTOR2: + return Vector2(js_data[0].d, js_data[1].d); + case Variant::VECTOR3: + return Vector3(js_data[0].d, js_data[1].d, js_data[2].d); + case Variant::RECT2: + return Rect2(js_data[0].d, js_data[1].d, js_data[2].d, js_data[3].d); + case Variant::COLOR: + return Color(js_data[0].d/255., js_data[1].d/255., js_data[2].d/255., js_data[3].d); + } + return Variant(); +} + +void JavaScript::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("eval", "code", "use_global_execution_context"), &JavaScript::eval, false); +} + +JavaScript::JavaScript() { + + ERR_FAIL_COND(singleton != NULL); + singleton = this; +} + +JavaScript::~JavaScript() { + +} + +#endif // JAVASCRIPT_EVAL_ENABLED diff --git a/platform/javascript/javascript_eval.h b/platform/javascript/javascript_eval.h new file mode 100644 index 0000000000..e5f6268076 --- /dev/null +++ b/platform/javascript/javascript_eval.h @@ -0,0 +1,55 @@ +/*************************************************************************/ +/* javascript_eval.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#ifdef JAVASCRIPT_EVAL_ENABLED + +#ifndef JAVASCRIPT_EVAL_H +#define JAVASCRIPT_EVAL_H + +#include "object.h" + +class JavaScript : public Object { +private: + OBJ_TYPE( JavaScript, Object ); + + static JavaScript *singleton; + + +protected: + static void _bind_methods(); + +public: + Variant eval(const String& p_code, bool p_use_global_exec_context = false); + + static JavaScript *get_singleton(); + JavaScript(); + ~JavaScript(); +}; + +#endif // JAVASCRIPT_EVAL_H +#endif // JAVASCRIPT_EVAL_ENABLED diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp index 1defcb7cb2..e802a7e9cb 100644 --- a/platform/javascript/os_javascript.cpp +++ b/platform/javascript/os_javascript.cpp @@ -230,6 +230,11 @@ void OS_JavaScript::initialize(const VideoMode& p_desired,int p_video_driver,int if (result!=EMSCRIPTEN_RESULT_SUCCESS) { ERR_PRINTS( "Error while setting Emscripten gamepaddisconnected callback: Code " + itos(result) ); } + +#ifdef JAVASCRIPT_EVAL_ENABLED + javascript_eval = memnew(JavaScript); + Globals::get_singleton()->add_singleton(Globals::Singleton("JavaScript", javascript_eval)); +#endif } void OS_JavaScript::set_main_loop( MainLoop * p_main_loop ) { diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h index 16e4781d15..5b7904805b 100644 --- a/platform/javascript/os_javascript.h +++ b/platform/javascript/os_javascript.h @@ -42,6 +42,7 @@ #include "audio_driver_javascript.h" #include "main/input_default.h" #include "emscripten/html5.h" +#include "javascript_eval.h" typedef void (*GFXInitFunc)(void *ud,bool gl2,int w, int h, bool fs); typedef int (*OpenURIFunc)(const String&); @@ -88,6 +89,10 @@ private: GetDataDirFunc get_data_dir_func; GetLocaleFunc get_locale_func; +#ifdef JAVASCRIPT_EVAL_ENABLED + JavaScript* javascript_eval; +#endif + static void _close_notification_funcs(const String& p_file,int p_flags); void process_joysticks(); diff --git a/platform/osx/SCsub b/platform/osx/SCsub index 3785eb3fb3..4169795519 100644 --- a/platform/osx/SCsub +++ b/platform/osx/SCsub @@ -7,6 +7,7 @@ files = [ 'sem_osx.cpp', # 'context_gl_osx.cpp', 'dir_access_osx.mm', + 'joystick_osx.cpp', ] env.Program('#bin/godot',files) diff --git a/platform/osx/detect.py b/platform/osx/detect.py index 1982beb10e..01ea09fa21 100644 --- a/platform/osx/detect.py +++ b/platform/osx/detect.py @@ -92,7 +92,7 @@ def configure(env): env.Append(LIBS=['pthread']) #env.Append(CPPFLAGS=['-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks', '-isysroot', '/Developer/SDKs/MacOSX10.4u.sdk', '-mmacosx-version-min=10.4']) #env.Append(LINKFLAGS=['-mmacosx-version-min=10.4', '-isysroot', '/Developer/SDKs/MacOSX10.4u.sdk', '-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk']) - env.Append(LINKFLAGS=['-framework', 'Cocoa', '-framework', 'Carbon', '-framework', 'OpenGL', '-framework', 'AGL', '-framework', 'AudioUnit','-lz']) + env.Append(LINKFLAGS=['-framework', 'Cocoa', '-framework', 'Carbon', '-framework', 'OpenGL', '-framework', 'AGL', '-framework', 'AudioUnit','-lz', '-framework', 'IOKit', '-framework', 'ForceFeedback']) if (env["CXX"]=="clang++"): env.Append(CPPFLAGS=['-DTYPED_METHOD_BIND']) diff --git a/platform/osx/export/export.cpp b/platform/osx/export/export.cpp index 47b0392b25..30f4c58150 100644 --- a/platform/osx/export/export.cpp +++ b/platform/osx/export/export.cpp @@ -445,7 +445,7 @@ Error EditorExportPlatformOSX::export_project(const String& p_path, bool p_debug { //write datapack - int err = zipOpenNewFileInZip(dpkg, + zipOpenNewFileInZip(dpkg, (pkg_name+".app/Contents/Resources/data.pck").utf8().get_data(), NULL, NULL, diff --git a/platform/osx/joystick_osx.cpp b/platform/osx/joystick_osx.cpp new file mode 100644 index 0000000000..ffb6ac326b --- /dev/null +++ b/platform/osx/joystick_osx.cpp @@ -0,0 +1,623 @@ +/*************************************************************************/ +/* joystick_osx.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#include "joystick_osx.h" +#include <machine/endian.h> + +#define GODOT_JOY_LOOP_RUN_MODE CFSTR("GodotJoystick") + +static JoystickOSX* self = NULL; + +joystick::joystick() { + device_ref = NULL; + ff_device = NULL; + ff_axes = NULL; + ff_directions = NULL; + ffservice = 0; + ff_timestamp = 0; + id = 0; + + ff_constant_force.lMagnitude = 10000; + ff_effect.dwDuration = 0; + ff_effect.dwSamplePeriod = 0; + ff_effect.dwGain = 10000; + ff_effect.dwFlags = FFEFF_OBJECTOFFSETS; + ff_effect.dwTriggerButton = FFEB_NOTRIGGER; + ff_effect.dwStartDelay = 0; + ff_effect.dwTriggerRepeatInterval = 0; + ff_effect.lpEnvelope = NULL; + ff_effect.cbTypeSpecificParams = sizeof(FFCONSTANTFORCE); + ff_effect.lpvTypeSpecificParams = &ff_constant_force; + ff_effect.dwSize = sizeof(ff_effect); +} + +void joystick::free() { + if (device_ref) { + IOHIDDeviceUnscheduleFromRunLoop(device_ref, CFRunLoopGetCurrent(), GODOT_JOY_LOOP_RUN_MODE); + } + if (ff_device) { + FFDeviceReleaseEffect(ff_device, ff_object); + FFReleaseDevice(ff_device); + memfree(ff_axes); + memfree(ff_directions); + } +} + +bool joystick::has_element(IOHIDElementCookie p_cookie, Vector<rec_element> *p_list) const { + for (int i = 0; i < p_list->size(); i++) { + if (p_cookie == p_list->get(i).cookie) { + return true; + } + } + return false; +} + +int joystick::get_hid_element_state(rec_element *p_element) const { + int value = 0; + if (p_element && p_element->ref) { + IOHIDValueRef valueRef; + if (IOHIDDeviceGetValue(device_ref, p_element->ref, &valueRef) == kIOReturnSuccess) { + value = (SInt32) IOHIDValueGetIntegerValue(valueRef); + + /* record min and max for auto calibration */ + if (value < p_element->min) { + p_element->min = value; + } + if (value > p_element->max) { + p_element->max = value; + } + } + } + return value; +} +void joystick::add_hid_element(IOHIDElementRef p_element) { + const CFTypeID elementTypeID = p_element ? CFGetTypeID(p_element) : 0; + + if (p_element && (elementTypeID == IOHIDElementGetTypeID())) { + const IOHIDElementCookie cookie = IOHIDElementGetCookie(p_element); + const uint32_t usagePage = IOHIDElementGetUsagePage(p_element); + const uint32_t usage = IOHIDElementGetUsage(p_element); + Vector<rec_element> *list = NULL; + + switch (IOHIDElementGetType(p_element)) { + case kIOHIDElementTypeInput_Misc: + case kIOHIDElementTypeInput_Button: + case kIOHIDElementTypeInput_Axis: { + switch (usagePage) { + case kHIDPage_GenericDesktop: + switch (usage) { + case kHIDUsage_GD_X: + case kHIDUsage_GD_Y: + case kHIDUsage_GD_Z: + case kHIDUsage_GD_Rx: + case kHIDUsage_GD_Ry: + case kHIDUsage_GD_Rz: + case kHIDUsage_GD_Slider: + case kHIDUsage_GD_Dial: + case kHIDUsage_GD_Wheel: + if (!has_element(cookie, &axis_elements)) { + list = &axis_elements; + } + break; + + case kHIDUsage_GD_Hatswitch: + if (!has_element(cookie, &hat_elements)) { + list = &hat_elements; + } + break; + case kHIDUsage_GD_DPadUp: + case kHIDUsage_GD_DPadDown: + case kHIDUsage_GD_DPadRight: + case kHIDUsage_GD_DPadLeft: + case kHIDUsage_GD_Start: + case kHIDUsage_GD_Select: + if (!has_element(cookie, &button_elements)) { + list = &button_elements; + } + break; + } + break; + + case kHIDPage_Simulation: + switch (usage) { + case kHIDUsage_Sim_Rudder: + case kHIDUsage_Sim_Throttle: + if (!has_element(cookie, &axis_elements)) { + list = &axis_elements; + } + break; + + default: + break; + } + break; + + case kHIDPage_Button: + case kHIDPage_Consumer: + if (!has_element(cookie, &button_elements)) { + list = &button_elements; + } + break; + + default: + break; + } + } + break; + + case kIOHIDElementTypeCollection: { + CFArrayRef array = IOHIDElementGetChildren(p_element); + if (array) { + add_hid_elements(array); + } + } + break; + + default: + break; + } + + if (list) { /* add to list */ + rec_element element; + + element.ref = p_element; + element.usage = usage; + + element.min = (SInt32) IOHIDElementGetLogicalMin(p_element); + element.max = (SInt32) IOHIDElementGetLogicalMax(p_element); + element.cookie = IOHIDElementGetCookie(p_element); + list->push_back(element); + list->sort_custom<rec_element::Comparator>(); + } + } +} + +static void hid_element_added(const void *p_value, void *p_parameter) { + joystick *joy = (joystick*) p_parameter; + joy->add_hid_element((IOHIDElementRef) p_value); +} + +void joystick::add_hid_elements(CFArrayRef p_array) { + CFRange range = { 0, CFArrayGetCount(p_array) }; + CFArrayApplyFunction(p_array, range,hid_element_added,this); +} + +static void joystick_removed_callback(void *ctx, IOReturn result, void *sender) { + int id = (intptr_t) ctx; + self->_device_removed(id); +} + + +static void joystick_added_callback(void *ctx, IOReturn res, void *sender, IOHIDDeviceRef ioHIDDeviceObject) { + self->_device_added(res, ioHIDDeviceObject); +} + +static bool is_joystick(IOHIDDeviceRef p_device_ref) { + CFTypeRef refCF = NULL; + int usage_page = 0; + int usage = 0; + refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDPrimaryUsagePageKey)); + if (refCF) { + CFNumberGetValue((CFNumberRef) refCF, kCFNumberSInt32Type, &usage_page); + } + if (usage_page != kHIDPage_GenericDesktop) { + return false; + } + + refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDPrimaryUsageKey)); + if (refCF) { + CFNumberGetValue((CFNumberRef) refCF, kCFNumberSInt32Type, &usage); + } + if ((usage != kHIDUsage_GD_Joystick && + usage != kHIDUsage_GD_GamePad && + usage != kHIDUsage_GD_MultiAxisController)) { + return false; + } + return true; +} + +void JoystickOSX::_device_added(IOReturn p_res, IOHIDDeviceRef p_device) { + + if (p_res != kIOReturnSuccess || have_device(p_device)) { + return; + } + + joystick new_joystick; + if (is_joystick(p_device)) { + configure_joystick(p_device, &new_joystick); +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + if (IOHIDDeviceGetService != NULL) { +#endif + const io_service_t ioservice = IOHIDDeviceGetService(p_device); + if ((ioservice) && (FFIsForceFeedback(ioservice) == FF_OK) && new_joystick.config_force_feedback(ioservice)) { + new_joystick.ffservice = ioservice; + } +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + } +#endif + device_list.push_back(new_joystick); + } + IOHIDDeviceRegisterRemovalCallback(p_device, joystick_removed_callback, (void*) (intptr_t) new_joystick.id); + IOHIDDeviceScheduleWithRunLoop(p_device, CFRunLoopGetCurrent(), GODOT_JOY_LOOP_RUN_MODE); +} + +void JoystickOSX::_device_removed(int p_id) { + + int device = get_joy_index(p_id); + ERR_FAIL_COND(device == -1); + + input->joy_connection_changed(p_id, false, ""); + device_list[device].free(); + device_list.remove(device); + attached_devices[p_id] = false; +} + +static String _hex_str(uint8_t p_byte) { + + static const char* dict = "0123456789abcdef"; + char ret[3]; + ret[2] = 0; + + ret[0] = dict[p_byte>>4]; + ret[1] = dict[p_byte & 0xF]; + + return ret; +} + +bool JoystickOSX::configure_joystick(IOHIDDeviceRef p_device_ref, joystick* p_joy) { + + CFTypeRef refCF = NULL; + + p_joy->device_ref = p_device_ref; + /* get device name */ + String name; + char c_name[256]; + refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDProductKey)); + if (!refCF) { + refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDManufacturerKey)); + } + if ((!refCF) || (!CFStringGetCString((CFStringRef) refCF, c_name, sizeof (c_name), kCFStringEncodingUTF8))) { + name = "Unidentified Joystick"; + } + name = c_name; + + int id = get_free_joy_id(); + ERR_FAIL_COND_V(id == -1, false); + p_joy->id = id; + int vendor = 0; + refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDVendorIDKey)); + if (refCF) { + CFNumberGetValue((CFNumberRef)refCF, kCFNumberSInt32Type, &vendor); + } + + int product_id = 0; + refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDProductIDKey)); + if (refCF) { + CFNumberGetValue((CFNumberRef)refCF, kCFNumberSInt32Type, &product_id); + } + if (vendor && product_id) { + char uid[128]; + sprintf(uid, "%04x%08x%04x%08x", OSSwapHostToBigInt32(vendor),0, OSSwapHostToBigInt32(product_id), 0); + input->joy_connection_changed(id, true, name, uid); + } + else { + //bluetooth device + String guid = "05000000"; + for (int i = 0; i < 12; i++) { + if (i < name.size()) guid += _hex_str(name[i]); + else guid += "00"; + } + input->joy_connection_changed(id, true, name, guid); + } + + CFArrayRef array = NULL; + array = IOHIDDeviceCopyMatchingElements(p_device_ref, NULL, kIOHIDOptionsTypeNone); + if (array) { + p_joy->add_hid_elements(array); + CFRelease(array); + } + return true; +} + +#define FF_ERR() { if (ret != FF_OK) { FFReleaseDevice(ff_device); return false; } } +bool joystick::config_force_feedback(io_service_t p_service) { + + HRESULT ret = FFCreateDevice(p_service, &ff_device); + ERR_FAIL_COND_V(ret != FF_OK, false); + + ret = FFDeviceSendForceFeedbackCommand(ff_device, FFSFFC_RESET); + FF_ERR(); + + ret = FFDeviceSendForceFeedbackCommand(ff_device, FFSFFC_SETACTUATORSON); + FF_ERR(); + + if (check_ff_features()) { + ret = FFDeviceCreateEffect(ff_device, kFFEffectType_ConstantForce_ID, &ff_effect, &ff_object); + FF_ERR(); + return true; + } + FFReleaseDevice(ff_device); + return false; +} +#undef FF_ERR + +#define TEST_FF(ff) (features.supportedEffects & (ff)) +bool joystick::check_ff_features() { + + FFCAPABILITIES features; + HRESULT ret = FFDeviceGetForceFeedbackCapabilities(ff_device, &features); + if (ret == FF_OK && (features.supportedEffects & FFCAP_ET_CONSTANTFORCE)) { + uint32_t val; + ret = FFDeviceGetForceFeedbackProperty(ff_device, FFPROP_FFGAIN, &val, sizeof(val)); + if (ret != FF_OK) return false; + int num_axes = features.numFfAxes; + ff_axes = (DWORD*) memalloc(sizeof(DWORD) * num_axes); + ff_directions = (LONG*) memalloc(sizeof(LONG) * num_axes); + + for (int i = 0; i < num_axes; i++) { + ff_axes[i] = features.ffAxes[i]; + ff_directions[i] = 0; + } + + ff_effect.cAxes = num_axes; + ff_effect.rgdwAxes = ff_axes; + ff_effect.rglDirection = ff_directions; + return true; + } + return false; +} + +static int process_hat_value(int p_min, int p_max, int p_value) { + int range = (p_max - p_min + 1); + int value = p_value - p_min; + int hat_value = InputDefault::HAT_MASK_CENTER; + if (range == 4) { + value *= 2; + } + + switch (value) { + case 0: + hat_value = InputDefault::HAT_MASK_UP; + break; + case 1: + hat_value = InputDefault::HAT_MASK_UP | InputDefault::HAT_MASK_RIGHT; + break; + case 2: + hat_value = InputDefault::HAT_MASK_RIGHT; + break; + case 3: + hat_value = InputDefault::HAT_MASK_DOWN | InputDefault::HAT_MASK_RIGHT; + break; + case 4: + hat_value = InputDefault::HAT_MASK_DOWN; + break; + case 5: + hat_value = InputDefault::HAT_MASK_DOWN | InputDefault::HAT_MASK_LEFT; + break; + case 6: + hat_value = InputDefault::HAT_MASK_LEFT; + break; + case 7: + hat_value = InputDefault::HAT_MASK_UP | InputDefault::HAT_MASK_LEFT; + break; + default: + hat_value = InputDefault::HAT_MASK_CENTER; + break; + } + return hat_value; +} + +void JoystickOSX::poll_joysticks() const { + while (CFRunLoopRunInMode(GODOT_JOY_LOOP_RUN_MODE,0,TRUE) == kCFRunLoopRunHandledSource) { + /* no-op. Pending callbacks will fire. */ + } +} + +static const InputDefault::JoyAxis axis_correct(int p_value, int p_min, int p_max) { + InputDefault::JoyAxis jx; + if (p_min < 0) { + jx.min = -1; + if (p_value < 0) { + jx.value = (float) -p_value / p_min; + } + else jx.value = (float) p_value / p_max; + } + if (p_min == 0) { + jx.min = 0; + jx.value = 0.0f + (float) p_value / p_max; + } + return jx; +} + +uint32_t JoystickOSX::process_joysticks(uint32_t p_last_id){ + poll_joysticks(); + + for (int i = 0; i < device_list.size(); i++) { + joystick &joy = device_list[i]; + + for (int j = 0; j < joy.axis_elements.size(); j++) { + rec_element &elem = joy.axis_elements[j]; + int value = joy.get_hid_element_state(&elem); + p_last_id = input->joy_axis(p_last_id, joy.id, j, axis_correct(value, elem.min, elem.max)); + } + for (int j = 0; j < joy.button_elements.size(); j++) { + int value = joy.get_hid_element_state(&joy.button_elements[j]); + p_last_id = input->joy_button(p_last_id, joy.id, j, (value>=1)); + } + for (int j = 0; j < joy.hat_elements.size(); j++) { + rec_element &elem = joy.hat_elements[j]; + int value = joy.get_hid_element_state(&elem); + int hat_value = process_hat_value(elem.min, elem.max, value); + p_last_id = input->joy_hat(p_last_id, joy.id, hat_value); + } + + if (joy.ffservice) { + uint64_t timestamp = input->get_joy_vibration_timestamp(joy.id); + if (timestamp > joy.ff_timestamp) { + Vector2 strength = input->get_joy_vibration_strength(joy.id); + float duration = input->get_joy_vibration_duration(joy.id); + if (strength.x == 0 && strength.y == 0) { + joystick_vibration_stop(joy.id, timestamp); + } + else { + float gain = MAX(strength.x, strength.y); + joystick_vibration_start(joy.id, gain, duration, timestamp); + } + } + } + } + return p_last_id; +} + +void JoystickOSX::joystick_vibration_start(int p_id, float p_magnitude, float p_duration, uint64_t p_timestamp) { + joystick *joy = &device_list[get_joy_index(p_id)]; + joy->ff_timestamp = p_timestamp; + joy->ff_effect.dwDuration = p_duration * FF_SECONDS; + joy->ff_effect.dwGain = p_magnitude * FF_FFNOMINALMAX; + FFEffectSetParameters(joy->ff_object, &joy->ff_effect, FFEP_DURATION | FFEP_GAIN); + FFEffectStart(joy->ff_object, 1, 0); +} + +void JoystickOSX::joystick_vibration_stop(int p_id, uint64_t p_timestamp) { + joystick* joy = &device_list[get_joy_index(p_id)]; + joy->ff_timestamp = p_timestamp; + FFEffectStop(joy->ff_object); +} + +int JoystickOSX::get_free_joy_id() { + for (int i = 0; i < JOYSTICKS_MAX; i++) { + if (!attached_devices[i]) { + attached_devices[i] = true; + return i; + } + } + return -1; +} + +int JoystickOSX::get_joy_index(int p_id) const { + for (int i = 0; i < device_list.size(); i++) { + if (device_list[i].id == p_id) return i; + } + return -1; +} + +bool JoystickOSX::have_device(IOHIDDeviceRef p_device) const { + for (int i = 0; i < device_list.size(); i++) { + if (device_list[i].device_ref == p_device) { + return true; + } + } + return false; +} + +static CFDictionaryRef create_match_dictionary(const UInt32 page, const UInt32 usage, int *okay) +{ + CFDictionaryRef retval = NULL; + CFNumberRef pageNumRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &page); + CFNumberRef usageNumRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &usage); + const void *keys[2] = { (void *) CFSTR(kIOHIDDeviceUsagePageKey), (void *) CFSTR(kIOHIDDeviceUsageKey) }; + const void *vals[2] = { (void *) pageNumRef, (void *) usageNumRef }; + + if (pageNumRef && usageNumRef) { + retval = CFDictionaryCreate(kCFAllocatorDefault, keys, vals, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); + } + + if (pageNumRef) { + CFRelease(pageNumRef); + } + if (usageNumRef) { + CFRelease(usageNumRef); + } + + if (!retval) { + *okay = 0; + } + + return retval; +} + +void JoystickOSX::config_hid_manager(CFArrayRef p_matching_array) const { + + CFRunLoopRef runloop = CFRunLoopGetCurrent(); + IOReturn ret = IOHIDManagerOpen(hid_manager, kIOHIDOptionsTypeNone); + ERR_FAIL_COND(ret != kIOReturnSuccess); + + IOHIDManagerSetDeviceMatchingMultiple(hid_manager, p_matching_array); + IOHIDManagerRegisterDeviceMatchingCallback(hid_manager, joystick_added_callback, NULL); + IOHIDManagerScheduleWithRunLoop(hid_manager, runloop, GODOT_JOY_LOOP_RUN_MODE); + + while (CFRunLoopRunInMode(GODOT_JOY_LOOP_RUN_MODE,0,TRUE) == kCFRunLoopRunHandledSource) { + /* no-op. Callback fires once per existing device. */ + } +} + +JoystickOSX::JoystickOSX() +{ + self = this; + input = (InputDefault*)Input::get_singleton(); + + for (int i = 0; i < JOYSTICKS_MAX; i++) { + attached_devices[i] = false; + } + + int okay = 1; + const void *vals[] = { + (void *) create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick, &okay), + (void *) create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_GamePad, &okay), + (void *) create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_MultiAxisController, &okay), + }; + const size_t n_elements = sizeof(vals)/sizeof(vals[0]); + CFArrayRef array = okay ? CFArrayCreate(kCFAllocatorDefault, vals, n_elements, &kCFTypeArrayCallBacks) : NULL; + + for (int i = 0; i < n_elements; i++) { + if (vals[i]) { + CFRelease((CFTypeRef) vals[i]); + } + } + + if (array) { + hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); + if (hid_manager != NULL) { + config_hid_manager(array); + } + CFRelease(array); + } +} + +JoystickOSX::~JoystickOSX() { + + for (int i = 0; i < device_list.size(); i++) { + device_list[i].free(); + } + + IOHIDManagerUnscheduleFromRunLoop(hid_manager, CFRunLoopGetCurrent(), GODOT_JOY_LOOP_RUN_MODE); + IOHIDManagerClose(hid_manager, kIOHIDOptionsTypeNone); + CFRelease(hid_manager); + hid_manager = NULL; +} + diff --git a/platform/osx/joystick_osx.h b/platform/osx/joystick_osx.h new file mode 100644 index 0000000000..38a4e3b1d3 --- /dev/null +++ b/platform/osx/joystick_osx.h @@ -0,0 +1,125 @@ +/*************************************************************************/ +/* joystick_osx.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#ifndef JOYSTICKOSX_H +#define JOYSTICKOSX_H + +#ifdef MACOS_10_0_4 +#include <IOKit/hidsystem/IOHIDUsageTables.h> +#else +#include <Kernel/IOKit/hidsystem/IOHIDUsageTables.h> +#endif +#include <IOKit/hid/IOHIDLib.h> +#include <ForceFeedback/ForceFeedback.h> +#include <ForceFeedback/ForceFeedbackConstants.h> + +#include "main/input_default.h" + +struct rec_element { + IOHIDElementRef ref; + IOHIDElementCookie cookie; + + uint32_t usage; + + int min; + int max; + + struct Comparator { + bool operator()(const rec_element p_a, const rec_element p_b) const { return p_a.usage < p_b.usage; } + }; +}; + +struct joystick { + IOHIDDeviceRef device_ref; + + Vector<rec_element> axis_elements; + Vector<rec_element> button_elements; + Vector<rec_element> hat_elements; + + int id; + + io_service_t ffservice; /* Interface for force feedback, 0 = no ff */ + FFCONSTANTFORCE ff_constant_force; + FFDeviceObjectReference ff_device; + FFEffectObjectReference ff_object; + uint64_t ff_timestamp; + LONG *ff_directions; + FFEFFECT ff_effect; + DWORD *ff_axes; + + void add_hid_elements(CFArrayRef p_array); + void add_hid_element(IOHIDElementRef p_element); + + bool has_element(IOHIDElementCookie p_cookie, Vector<rec_element> *p_list) const; + bool config_force_feedback(io_service_t p_service); + bool check_ff_features(); + + int get_hid_element_state(rec_element *p_element) const; + + void free(); + joystick(); +}; + +class JoystickOSX { + + enum { + JOYSTICKS_MAX = 16, + }; + +private: + InputDefault *input; + IOHIDManagerRef hid_manager; + + bool attached_devices[JOYSTICKS_MAX]; + Vector<joystick> device_list; + + bool have_device(IOHIDDeviceRef p_device) const; + bool configure_joystick(IOHIDDeviceRef p_device_ref, joystick *p_joy); + + + int get_free_joy_id(); + int get_joy_index(int p_id) const; + + void poll_joysticks() const; + void setup_joystick_objects(); + void config_hid_manager(CFArrayRef p_matching_array) const; + + void joystick_vibration_start(int p_id, float p_magnitude, float p_duration, uint64_t p_timestamp); + void joystick_vibration_stop(int p_id, uint64_t p_timestamp); + +public: + uint32_t process_joysticks(uint32_t p_last_id); + + void _device_added(IOReturn p_res, IOHIDDeviceRef p_device); + void _device_removed(int p_id); + + JoystickOSX(); + ~JoystickOSX(); +}; + +#endif // JOYSTICKOSX_H diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h index 8f89695a68..e23ae49a35 100644 --- a/platform/osx/os_osx.h +++ b/platform/osx/os_osx.h @@ -31,6 +31,7 @@ #include "os/input.h" +#include "joystick_osx.h" #include "drivers/unix/os_unix.h" #include "main/input_default.h" #include "servers/visual_server.h" @@ -76,6 +77,7 @@ public: SpatialSound2DServerSW *spatial_sound_2d_server; InputDefault *input; + JoystickOSX *joystick_osx; /* objc */ @@ -203,6 +205,7 @@ public: virtual void set_window_maximized(bool p_enabled); virtual bool is_window_maximized() const; virtual void request_attention(); + virtual String get_joy_guid(int p_device) const; void run(); diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index dc87f767f6..cc893cc7a0 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -1123,6 +1123,7 @@ void OS_OSX::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi physics_2d_server->init(); input = memnew( InputDefault ); + joystick_osx = memnew( JoystickOSX ); _ensure_data_dir(); @@ -1165,7 +1166,7 @@ void OS_OSX::finalize() { spatial_sound_2d_server->finish(); memdelete(spatial_sound_2d_server); - + memdelete(joystick_osx); memdelete(input); memdelete(sample_manager); @@ -1497,6 +1498,16 @@ Size2 OS_OSX::get_window_size() const { void OS_OSX::set_window_size(const Size2 p_size) { Size2 size=p_size; + + // NSRect used by setFrame includes the title bar, so add it to our size.y + CGFloat menuBarHeight = [[[NSApplication sharedApplication] mainMenu] menuBarHeight]; + if (menuBarHeight != 0.f) { + size.y+= menuBarHeight; +#if MAC_OS_X_VERSION_MAX_ALLOWED <= 101104 + } else { + size.y+= [[NSStatusBar systemStatusBar] thickness]; +#endif + } NSRect frame = [window_object frame]; [window_object setFrame:NSMakeRect(frame.origin.x, frame.origin.y, size.x, size.y) display:YES]; }; @@ -1728,7 +1739,7 @@ void OS_OSX::run() { while (!force_quit) { process_events(); // get rid of pending events -// process_joysticks(); + last_id = joystick_osx->process_joysticks(last_id); if (Main::iteration()==true) break; }; @@ -1763,6 +1774,10 @@ OS::MouseMode OS_OSX::get_mouse_mode() const { return mouse_mode; } +String OS_OSX::get_joy_guid(int p_device) const { + return input->get_joy_guid_remapped(p_device); +} + OS_OSX* OS_OSX::singleton=NULL; OS_OSX::OS_OSX() { diff --git a/platform/windows/detect.py b/platform/windows/detect.py index 320fb9d269..0548b84cfa 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -90,6 +90,7 @@ import os import sys +import methods def is_active(): return True @@ -237,8 +238,7 @@ def configure(env): env.Append(CCFLAGS=['/DTYPED_METHOD_BIND']) env.Append(CCFLAGS=['/DGLES2_ENABLED']) - - LIBS=['winmm','opengl32','dsound','kernel32','ole32','oleaut32','user32','gdi32', 'IPHLPAPI','Shlwapi', 'wsock32', 'shell32','advapi32','dinput8','dxguid'] + LIBS=['winmm','opengl32','dsound','kernel32','ole32','oleaut32','user32','gdi32', 'IPHLPAPI','Shlwapi', 'wsock32','Ws2_32', 'shell32','advapi32','dinput8','dxguid'] env.Append(LINKFLAGS=[p+env["LIBSUFFIX"] for p in LIBS]) env.Append(LIBPATH=[os.getenv("WindowsSdkDir")+"/Lib"]) @@ -259,7 +259,7 @@ def configure(env): env['ENV'] = os.environ; # This detection function needs the tools env (that is env['ENV'], not SCons's env), and that is why it's this far bellow in the code - compiler_version_str = detect_visual_c_compiler_version(env['ENV']) + compiler_version_str = methods.detect_visual_c_compiler_version(env['ENV']) # Note: this detection/override code from here onward should be here instead of in SConstruct because it's platform and compiler specific (MSVC/Windows) if(env["bits"] != "default"): @@ -273,7 +273,7 @@ def configure(env): # that decide the architecture that is build for. Scons can only detect the os.getenviron (because vsvarsall.bat sets a lot of stuff for cl.exe to work with) env["bits"]="32" env["x86_opt_vc"]=True - + print "Detected MSVC compiler: "+compiler_version_str # If building for 64bit architecture, disable assembly optimisations for 32 bit builds (theora as of writting)... vc compiler for 64bit can not compile _asm if(compiler_version_str == "amd64" or compiler_version_str == "x86_amd64"): @@ -283,9 +283,14 @@ def configure(env): elif (compiler_version_str=="x86" or compiler_version_str == "amd64_x86"): print "Compiled program architecture will be a 32 bit executable. (forcing bits=32)." else: - print "Failed to detect MSVC compiler architecture version... Defaulting to 32bit executable settings (forcing bits=32). Compilation attempt will continue, but SCons can not detect for what architecture this build is compiled for. You should check your settings/compilation setup." + print "Failed to detect MSVC compiler architecture version... Defaulting to 32bit executable settings (forcing bits=32). Compilation attempt will continue, but SCons can not detect for what architecture this build is compiled for. You should check your settings/compilation setup." if env["bits"]=="64": env.Append(CCFLAGS=['/D_WIN64']) + + # Incremental linking fix + env['BUILDERS']['ProgramOriginal'] = env['BUILDERS']['Program'] + env['BUILDERS']['Program'] = methods.precious_program + else: # Workaround for MinGW. See: @@ -361,7 +366,7 @@ def configure(env): env.Append(CCFLAGS=['-DWINDOWS_ENABLED','-mwindows']) env.Append(CPPFLAGS=['-DRTAUDIO_ENABLED']) env.Append(CCFLAGS=['-DGLES2_ENABLED']) - env.Append(LIBS=['mingw32','opengl32', 'dsound', 'ole32', 'd3d9','winmm','gdi32','iphlpapi','shlwapi','wsock32','kernel32', 'oleaut32', 'dinput8', 'dxguid']) + env.Append(LIBS=['mingw32','opengl32', 'dsound', 'ole32', 'd3d9','winmm','gdi32','iphlpapi','shlwapi','wsock32','ws2_32','kernel32', 'oleaut32', 'dinput8', 'dxguid']) # if (env["bits"]=="32"): # env.Append(LIBS=['gcc_s']) @@ -380,73 +385,7 @@ def configure(env): env['is_mingw']=True env.Append( BUILDERS = { 'RES' : env.Builder(action = build_res_file, suffix = '.o',src_suffix = '.rc') } ) - import methods env.Append( BUILDERS = { 'GLSL120' : env.Builder(action = methods.build_legacygl_headers, suffix = 'glsl.h',src_suffix = '.glsl') } ) env.Append( BUILDERS = { 'GLSL' : env.Builder(action = methods.build_glsl_headers, suffix = 'glsl.h',src_suffix = '.glsl') } ) env.Append( BUILDERS = { 'HLSL9' : env.Builder(action = methods.build_hlsl_dx9_headers, suffix = 'hlsl.h',src_suffix = '.hlsl') } ) env.Append( BUILDERS = { 'GLSL120GLES' : env.Builder(action = methods.build_gles2_headers, suffix = 'glsl.h',src_suffix = '.glsl') } ) - -def detect_visual_c_compiler_version(tools_env): - # tools_env is the variable scons uses to call tools that execute tasks, SCons's env['ENV'] that executes tasks... - # (see the SCons documentation for more information on what it does)... - # in order for this function to be well encapsulated i choose to force it to recieve SCons's TOOLS env (env['ENV'] - # and not scons setup environment (env)... so make sure you call the right environment on it or it will fail to detect - # the propper vc version that will be called - - # These is no flag to give to visual c compilers to set the architecture, ie scons bits argument (32,64,ARM etc) - # There are many different cl.exe files that are run, and each one compiles & links to a different architecture - # As far as I know, the only way to figure out what compiler will be run when Scons calls cl.exe via Program() - # is to check the PATH varaible and figure out which one will be called first. Code bellow does that and returns: - # the following string values: - - # "" Compiler not detected - # "amd64" Native 64 bit compiler - # "amd64_x86" 64 bit Cross Compiler for 32 bit - # "x86" Native 32 bit compiler - # "x86_amd64" 32 bit Cross Compiler for 64 bit - - # There are other architectures, but Godot does not support them currently, so this function does not detect arm/amd64_arm - # and similar architectures/compilers - - # Set chosen compiler to "not detected" - vc_chosen_compiler_index = -1 - vc_chosen_compiler_str = "" - - # find() works with -1 so big ifs bellow are needed... the simplest solution, in fact - # First test if amd64 and amd64_x86 compilers are present in the path - vc_amd64_compiler_detection_index = tools_env["PATH"].find(tools_env["VCINSTALLDIR"]+"BIN\\amd64;") - if(vc_amd64_compiler_detection_index > -1): - vc_chosen_compiler_index = vc_amd64_compiler_detection_index - vc_chosen_compiler_str = "amd64" - - vc_amd64_x86_compiler_detection_index = tools_env["PATH"].find(tools_env["VCINSTALLDIR"]+"BIN\\amd64_x86;") - if(vc_amd64_x86_compiler_detection_index > -1 - and (vc_chosen_compiler_index == -1 - or vc_chosen_compiler_index > vc_amd64_x86_compiler_detection_index)): - vc_chosen_compiler_index = vc_amd64_x86_compiler_detection_index - vc_chosen_compiler_str = "amd64_x86" - - - # Now check the 32 bit compilers - vc_x86_compiler_detection_index = tools_env["PATH"].find(tools_env["VCINSTALLDIR"]+"BIN;") - if(vc_x86_compiler_detection_index > -1 - and (vc_chosen_compiler_index == -1 - or vc_chosen_compiler_index > vc_x86_compiler_detection_index)): - vc_chosen_compiler_index = vc_x86_compiler_detection_index - vc_chosen_compiler_str = "x86" - - vc_x86_amd64_compiler_detection_index = tools_env["PATH"].find(tools_env['VCINSTALLDIR']+"BIN\\x86_amd64;") - if(vc_x86_amd64_compiler_detection_index > -1 - and (vc_chosen_compiler_index == -1 - or vc_chosen_compiler_index > vc_x86_amd64_compiler_detection_index)): - vc_chosen_compiler_index = vc_x86_amd64_compiler_detection_index - vc_chosen_compiler_str = "x86_amd64" - - # debug help - #print vc_amd64_compiler_detection_index - #print vc_amd64_x86_compiler_detection_index - #print vc_x86_compiler_detection_index - #print vc_x86_amd64_compiler_detection_index - #print "chosen "+str(vc_chosen_compiler_index)+ " | "+str(vc_chosen_compiler_str) - - return vc_chosen_compiler_str diff --git a/platform/windows/godot_res.rc b/platform/windows/godot_res.rc index 5f1e951e0f..b86869d316 100644 --- a/platform/windows/godot_res.rc +++ b/platform/windows/godot_res.rc @@ -3,12 +3,18 @@ #define _STR(m_x) #m_x #define _MKSTR(m_x) _STR(m_x) #endif +#ifndef VERSION_PATCH +#define VERSION_PATCH 0 +#define PATCH_STRING +#else +#define PATCH_STRING "." _MKSTR(VERSION_PATCH) +#endif GODOT_ICON ICON platform/windows/godot.ico 1 VERSIONINFO -FILEVERSION VERSION_MAJOR,VERSION_MINOR,0,0 -PRODUCTVERSION VERSION_MAJOR,VERSION_MINOR,0,0 +FILEVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,0 +PRODUCTVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,0 FILEOS 4 FILETYPE 1 BEGIN @@ -17,13 +23,13 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "CompanyName", "Godot Engine" - VALUE "FileDescription", _MKSTR(VERSION_NAME) " Editor (" _MKSTR(VERSION_STATUS) ")" - VALUE "FileVersion", _MKSTR(VERSION_MAJOR) "." _MKSTR(VERSION_MINOR) "."_MKSTR(VERSION_REVISION) + VALUE "FileDescription", _MKSTR(VERSION_NAME) " Editor" + VALUE "FileVersion", _MKSTR(VERSION_MAJOR) "." _MKSTR(VERSION_MINOR) "." _MKSTR(VERSION_PATCH) VALUE "ProductName", _MKSTR(VERSION_NAME) VALUE "Licence", "MIT" VALUE "LegalCopyright", "Copyright (c) 2007-" _MKSTR(VERSION_YEAR) " Juan Linietsky, Ariel Manzur" VALUE "Info", "http://www.godotengine.org" - VALUE "ProductVersion", _MKSTR(VERSION_MAJOR) "." _MKSTR(VERSION_MINOR) "."_MKSTR(VERSION_REVISION) + VALUE "ProductVersion", _MKSTR(VERSION_MAJOR) "." _MKSTR(VERSION_MINOR) PATCH_STRING "." _MKSTR(VERSION_REVISION) END END BLOCK "VarFileInfo" diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 6aee0d2399..cebafdabce 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -1343,7 +1343,7 @@ void OS_Windows::vprint(const char* p_format, va_list p_list, bool p_stderr) { void OS_Windows::alert(const String& p_alert,const String& p_title) { if (!is_no_window_mode_enabled()) - MessageBoxW(NULL,p_alert.c_str(),p_title.c_str(),MB_OK|MB_ICONEXCLAMATION); + MessageBoxW(NULL, p_alert.c_str(), p_title.c_str(), MB_OK | MB_ICONEXCLAMATION | MB_TASKMODAL); else print_line("ALERT: "+p_alert); } @@ -1364,7 +1364,9 @@ void OS_Windows::set_mouse_mode(MouseMode p_mode) { POINT pos = { (int) center.x, (int) center.y }; ClientToScreen(hWnd, &pos); SetCursorPos(pos.x, pos.y); + ShowCursor(false); } else { + ShowCursor(true); ReleaseCapture(); ClipCursor(NULL); } @@ -1476,6 +1478,7 @@ Point2 OS_Windows::get_window_position() const{ } void OS_Windows::set_window_position(const Point2& p_position){ + if (video_mode.fullscreen) return; RECT r; GetWindowRect(hWnd,&r); MoveWindow(hWnd,p_position.x,p_position.y,r.right-r.left,r.bottom-r.top,TRUE); diff --git a/platform/winrt/SCsub b/platform/winrt/SCsub index 2ea8cbd0de..ef7a653d53 100644 --- a/platform/winrt/SCsub +++ b/platform/winrt/SCsub @@ -2,10 +2,18 @@ Import('env') files = [ 'thread_winrt.cpp', -# '#platform/windows/stream_peer_winsock.cpp', + '#platform/windows/tcp_server_winsock.cpp', + '#platform/windows/packet_peer_udp_winsock.cpp', + '#platform/windows/stream_peer_winsock.cpp', + '#platform/windows/key_mapping_win.cpp', + 'joystick_winrt.cpp', 'gl_context_egl.cpp', + 'audio_driver_winrt.cpp', 'app.cpp', 'os_winrt.cpp', ] -env.Program('#bin/godot', files) +cmd = env.AlwaysBuild(env.ANGLE('libANGLE.lib', None)) + +prog = env.Program('#bin/godot', files) +env.Depends(prog, [cmd]) diff --git a/platform/winrt/app.cpp b/platform/winrt/app.cpp index ea7619a64b..c2b7ba0641 100644 --- a/platform/winrt/app.cpp +++ b/platform/winrt/app.cpp @@ -1,4 +1,32 @@ -// +/*************************************************************************/ +/* app.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +// // This file demonstrates how to initialize EGL in a Windows Store app, using ICoreWindow. // @@ -7,17 +35,25 @@ #include "main/main.h" #include "core/os/dir_access.h" #include "core/os/file_access.h" +#include "core/os/keyboard.h" + +#include "platform/windows/key_mapping_win.h" + +#include <collection.h> using namespace Windows::ApplicationModel::Core; using namespace Windows::ApplicationModel::Activation; using namespace Windows::UI::Core; using namespace Windows::UI::Input; +using namespace Windows::Devices::Input; +using namespace Windows::UI::Xaml::Input; using namespace Windows::Foundation; using namespace Windows::Graphics::Display; +using namespace Windows::System; +using namespace Windows::System::Threading::Core; using namespace Microsoft::WRL; -using namespace Platform; -using namespace $ext_safeprojectname$; +using namespace GodotWinRT; // Helper to convert a length in device-independent pixels (DIPs) to a length in physical pixels. inline float ConvertDipsToPixels(float dips, float dpi) @@ -27,7 +63,7 @@ inline float ConvertDipsToPixels(float dips, float dpi) } // Implementation of the IFrameworkViewSource interface, necessary to run our app. -ref class HelloTriangleApplicationSource sealed : Windows::ApplicationModel::Core::IFrameworkViewSource +ref class GodotWinrtViewSource sealed : Windows::ApplicationModel::Core::IFrameworkViewSource { public: virtual Windows::ApplicationModel::Core::IFrameworkView^ CreateView() @@ -40,8 +76,8 @@ public: [Platform::MTAThread] int main(Platform::Array<Platform::String^>^) { - auto helloTriangleApplicationSource = ref new HelloTriangleApplicationSource(); - CoreApplication::Run(helloTriangleApplicationSource); + auto godotApplicationSource = ref new GodotWinrtViewSource(); + CoreApplication::Run(godotApplicationSource); return 0; } @@ -52,7 +88,8 @@ App::App() : mWindowHeight(0), mEglDisplay(EGL_NO_DISPLAY), mEglContext(EGL_NO_CONTEXT), - mEglSurface(EGL_NO_SURFACE) + mEglSurface(EGL_NO_SURFACE), + number_of_contacts(0) { } @@ -69,6 +106,7 @@ void App::Initialize(CoreApplicationView^ applicationView) // http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh994930.aspx os = new OSWinrt; + } // Called when the CoreWindow object is created (or re-created). @@ -95,20 +133,31 @@ void App::SetWindow(CoreWindow^ p_window) window->PointerPressed += ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &App::OnPointerPressed); - window->PointerMoved += ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &App::OnPointerMoved); - window->PointerReleased += ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &App::OnPointerReleased); + window->PointerWheelChanged += + ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &App::OnPointerWheelChanged); + + mouseChangedNotifier = SignalNotifier::AttachToEvent(L"os_mouse_mode_changed", ref new SignalHandler( + this, &App::OnMouseModeChanged + )); - //window->PointerWheelChanged += - // ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &App::OnPointerWheelChanged); + mouseChangedNotifier->Enable(); + window->CharacterReceived += + ref new TypedEventHandler<CoreWindow^, CharacterReceivedEventArgs^>(this, &App::OnCharacterReceived); + window->KeyDown += + ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(this, &App::OnKeyDown); + window->KeyUp += + ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(this, &App::OnKeyUp); - char* args[] = {"-path", "game", NULL}; - Main::setup("winrt", 2, args, false); + unsigned int argc; + char** argv = get_command_line(&argc); + + Main::setup("winrt", argc, argv, false); // The CoreWindow has been created, so EGL can be initialized. ContextEGL* context = memnew(ContextEGL(window)); @@ -217,7 +266,7 @@ static int _get_finger(uint32_t p_touch_id) { return p_touch_id % 31; // for now }; -void App::pointer_event(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args, bool p_pressed) { +void App::pointer_event(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args, bool p_pressed, bool p_is_wheel) { Windows::UI::Input::PointerPoint ^point = args->CurrentPoint; Windows::Foundation::Point pos = _get_pixel_position(window, point->Position, os); @@ -236,7 +285,7 @@ void App::pointer_event(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core last_touch_y[event.screen_touch.index] = pos.Y; os->input_event(event); - if (event.screen_touch.index != 0) + if (number_of_contacts > 1) return; }; // fallthrought of sorts @@ -251,6 +300,14 @@ void App::pointer_event(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core event.mouse_button.global_x = pos.X; event.mouse_button.global_y = pos.Y; + if (p_is_wheel) { + if (point->Properties->MouseWheelDelta > 0) { + event.mouse_button.button_index = point->Properties->IsHorizontalMouseWheel ? BUTTON_WHEEL_RIGHT : BUTTON_WHEEL_UP; + } else if (point->Properties->MouseWheelDelta < 0) { + event.mouse_button.button_index = point->Properties->IsHorizontalMouseWheel ? BUTTON_WHEEL_LEFT : BUTTON_WHEEL_DOWN; + } + } + last_touch_x[31] = pos.X; last_touch_y[31] = pos.Y; @@ -260,21 +317,56 @@ void App::pointer_event(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core void App::OnPointerPressed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args) { + number_of_contacts++; pointer_event(sender, args, true); }; void App::OnPointerReleased(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args) { + number_of_contacts--; pointer_event(sender, args, false); }; +void App::OnPointerWheelChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args) { + + pointer_event(sender, args, true, true); +} + +void App::OnMouseModeChanged(Windows::System::Threading::Core::SignalNotifier^ signalNotifier, bool timedOut) { + + OS::MouseMode mode = os->get_mouse_mode(); + SignalNotifier^ notifier = mouseChangedNotifier; + + window->Dispatcher->RunAsync( + CoreDispatcherPriority::High, + ref new DispatchedHandler( + [mode, notifier, this]() { + if (mode == OS::MOUSE_MODE_CAPTURED) { + + this->MouseMovedToken = MouseDevice::GetForCurrentView()->MouseMoved += + ref new TypedEventHandler<MouseDevice^, MouseEventArgs^>(this, &App::OnMouseMoved); + + } else { + + MouseDevice::GetForCurrentView()->MouseMoved -= MouseMovedToken; + + } + + notifier->Enable(); + })); + + ResetEvent(os->mouse_mode_changed); + + +} + void App::OnPointerMoved(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args) { Windows::UI::Input::PointerPoint ^point = args->CurrentPoint; Windows::Foundation::Point pos = _get_pixel_position(window, point->Position, os); - if (_is_touch(point)) { + if (point->IsInContact && _is_touch(point)) { InputEvent event; event.type = InputEvent::SCREEN_DRAG; @@ -286,11 +378,15 @@ void App::OnPointerMoved(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Cor event.screen_drag.relative_y = event.screen_drag.y - last_touch_y[event.screen_drag.index]; os->input_event(event); - if (event.screen_drag.index != 0) + if (number_of_contacts > 1) return; }; // fallthrought of sorts + // In case the mouse grabbed, MouseMoved will handle this + if (os->get_mouse_mode() == OS::MouseMode::MOUSE_MODE_CAPTURED) + return; + InputEvent event; event.type = InputEvent::MOUSE_MOTION; event.device = 0; @@ -301,16 +397,90 @@ void App::OnPointerMoved(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Cor event.mouse_motion.relative_x = pos.X - last_touch_x[31]; event.mouse_motion.relative_y = pos.Y - last_touch_y[31]; + last_mouse_pos = pos; + os->input_event(event); -}; +} + +void App::OnMouseMoved(MouseDevice ^ mouse_device, MouseEventArgs ^ args) { + + // In case the mouse isn't grabbed, PointerMoved will handle this + if (os->get_mouse_mode() != OS::MouseMode::MOUSE_MODE_CAPTURED) + return; + + Windows::Foundation::Point pos; + pos.X = last_mouse_pos.X + args->MouseDelta.X; + pos.Y = last_mouse_pos.Y + args->MouseDelta.Y; + + InputEvent event; + event.type = InputEvent::MOUSE_MOTION; + event.device = 0; + event.mouse_motion.x = pos.X; + event.mouse_motion.y = pos.Y; + event.mouse_motion.global_x = pos.X; + event.mouse_motion.global_y = pos.Y; + event.mouse_motion.relative_x = args->MouseDelta.X; + event.mouse_motion.relative_y = args->MouseDelta.Y; + + last_mouse_pos = pos; + + os->input_event(event); +} + +void App::key_event(Windows::UI::Core::CoreWindow^ sender, bool p_pressed, Windows::UI::Core::KeyEventArgs^ key_args, Windows::UI::Core::CharacterReceivedEventArgs^ char_args) +{ + + OSWinrt::KeyEvent ke; + + InputModifierState mod; + mod.meta = false; + mod.command = false; + mod.control = sender->GetAsyncKeyState(VirtualKey::Control) == CoreVirtualKeyStates::Down; + mod.alt = sender->GetAsyncKeyState(VirtualKey::Menu) == CoreVirtualKeyStates::Down; + mod.shift = sender->GetAsyncKeyState(VirtualKey::Shift) == CoreVirtualKeyStates::Down; + ke.mod_state = mod; + + ke.pressed = p_pressed; + + if (key_args != nullptr) { + + ke.type = OSWinrt::KeyEvent::MessageType::KEY_EVENT_MESSAGE; + ke.unicode = 0; + ke.scancode = KeyMappingWindows::get_keysym((unsigned int)key_args->VirtualKey); + ke.echo = (!p_pressed && !key_args->KeyStatus.IsKeyReleased) || (p_pressed && key_args->KeyStatus.WasKeyDown); + + } else { + + ke.type = OSWinrt::KeyEvent::MessageType::CHAR_EVENT_MESSAGE; + ke.unicode = char_args->KeyCode; + ke.scancode = 0; + ke.echo = (!p_pressed && !char_args->KeyStatus.IsKeyReleased) || (p_pressed && char_args->KeyStatus.WasKeyDown); + } + + os->queue_key_event(ke); + +} +void App::OnKeyDown(CoreWindow^ sender, KeyEventArgs^ args) +{ + key_event(sender, true, args); +} + +void App::OnKeyUp(CoreWindow^ sender, KeyEventArgs^ args) +{ + key_event(sender, false, args); +} + +void App::OnCharacterReceived(CoreWindow^ sender, CharacterReceivedEventArgs^ args) +{ + key_event(sender, true, nullptr, args); +} // Initializes scene resources void App::Load(Platform::String^ entryPoint) { - //char* args[] = {"-test", "render", NULL}; - //Main::setup("winrt", 2, args); + } // This method is called after the window becomes active. @@ -383,3 +553,95 @@ void App::UpdateWindowSize(Size size) vm.resizable = false; os->set_video_mode(vm); } + +char** App::get_command_line(unsigned int* out_argc) { + + static char* fail_cl[] = { "-path", "game", NULL }; + *out_argc = 2; + + FILE* f = _wfopen(L"__cl__.cl", L"rb"); + + if (f == NULL) { + + wprintf(L"Couldn't open command line file."); + return fail_cl; + } + +#define READ_LE_4(v) ((int)(##v[3] & 0xFF) << 24) | ((int)(##v[2] & 0xFF) << 16) | ((int)(##v[1] & 0xFF) << 8) | ((int)(##v[0] & 0xFF)) +#define CMD_MAX_LEN 65535 + + uint8_t len[4]; + int r = fread(len, sizeof(uint8_t), 4, f); + + Platform::Collections::Vector<Platform::String^> cl; + + if (r < 4) { + fclose(f); + wprintf(L"Wrong cmdline length."); + return(fail_cl); + } + + int argc = READ_LE_4(len); + + for (int i = 0; i < argc; i++) { + + r = fread(len, sizeof(uint8_t), 4, f); + + if (r < 4) { + fclose(f); + wprintf(L"Wrong cmdline param length."); + return(fail_cl); + } + + int strlen = READ_LE_4(len); + + if (strlen > CMD_MAX_LEN) { + fclose(f); + wprintf(L"Wrong command length."); + return(fail_cl); + } + + char* arg = new char[strlen + 1]; + r = fread(arg, sizeof(char), strlen, f); + arg[strlen] = '\0'; + + if (r == strlen) { + + int warg_size = MultiByteToWideChar(CP_UTF8, 0, arg, -1, NULL, 0); + wchar_t* warg = new wchar_t[warg_size]; + + MultiByteToWideChar(CP_UTF8, 0, arg, -1, warg, warg_size); + + cl.Append(ref new Platform::String(warg, warg_size)); + + } else { + + delete[] arg; + fclose(f); + wprintf(L"Error reading command."); + return(fail_cl); + } + } + +#undef READ_LE_4 +#undef CMD_MAX_LEN + + fclose(f); + + char** ret = new char*[cl.Size + 1]; + + for (int i = 0; i < cl.Size; i++) { + + int arg_size = WideCharToMultiByte(CP_UTF8, 0, cl.GetAt(i)->Data(), -1, NULL, 0, NULL, NULL); + char* arg = new char[arg_size]; + + WideCharToMultiByte(CP_UTF8, 0, cl.GetAt(i)->Data(), -1, arg, arg_size, NULL, NULL); + + ret[i] = arg; + + } + ret[cl.Size] = NULL; + *out_argc = cl.Size; + + return ret; +} diff --git a/platform/winrt/app.h b/platform/winrt/app.h index 25b0d524ae..652ec86e1f 100644 --- a/platform/winrt/app.h +++ b/platform/winrt/app.h @@ -1,4 +1,32 @@ -#pragma once +/*************************************************************************/ +/* app.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#pragma once #include <string> @@ -7,7 +35,7 @@ #include "os_winrt.h" #include "GLES2/gl2.h" -namespace $ext_safeprojectname$ +namespace GodotWinRT { ref class App sealed : public Windows::ApplicationModel::Core::IFrameworkView { @@ -21,6 +49,11 @@ namespace $ext_safeprojectname$ virtual void Run(); virtual void Uninitialize(); + property Windows::Foundation::EventRegistrationToken MouseMovedToken { + Windows::Foundation::EventRegistrationToken get() { return this->mouseMovedToken; } + void set(Windows::Foundation::EventRegistrationToken p_token) { this->mouseMovedToken = p_token; } + }; + private: void RecreateRenderer(); @@ -32,16 +65,28 @@ namespace $ext_safeprojectname$ void OnVisibilityChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::VisibilityChangedEventArgs^ args); void OnWindowClosed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::CoreWindowEventArgs^ args); - void pointer_event(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args, bool p_pressed); + void pointer_event(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args, bool p_pressed, bool p_is_wheel = false); void OnPointerPressed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args); void OnPointerReleased(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args); void OnPointerMoved(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args); + void OnMouseMoved(Windows::Devices::Input::MouseDevice^ mouse_device, Windows::Devices::Input::MouseEventArgs^ args); + void OnPointerWheelChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args); + + Windows::System::Threading::Core::SignalNotifier^ mouseChangedNotifier; + Windows::Foundation::EventRegistrationToken mouseMovedToken; + void OnMouseModeChanged(Windows::System::Threading::Core::SignalNotifier^ signalNotifier, bool timedOut); + void key_event(Windows::UI::Core::CoreWindow^ sender, bool p_pressed, Windows::UI::Core::KeyEventArgs^ key_args = nullptr, Windows::UI::Core::CharacterReceivedEventArgs^ char_args = nullptr); + void OnKeyDown(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args); + void OnKeyUp(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args); + void OnCharacterReceived(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::CharacterReceivedEventArgs^ args); void UpdateWindowSize(Windows::Foundation::Size size); void InitializeEGL(Windows::UI::Core::CoreWindow^ window); void CleanupEGL(); + char** get_command_line(unsigned int* out_argc); + bool mWindowClosed; bool mWindowVisible; GLsizei mWindowWidth; @@ -56,6 +101,8 @@ namespace $ext_safeprojectname$ int last_touch_x[32]; // 20 fingers, index 31 reserved for the mouse int last_touch_y[32]; + int number_of_contacts; + Windows::Foundation::Point last_mouse_pos; }; } diff --git a/platform/winrt/audio_driver_winrt.cpp b/platform/winrt/audio_driver_winrt.cpp new file mode 100644 index 0000000000..ff46244ac3 --- /dev/null +++ b/platform/winrt/audio_driver_winrt.cpp @@ -0,0 +1,244 @@ +/*************************************************************************/ +/* audio_driver_winrt.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#include "audio_driver_winrt.h" + +#include "globals.h" +#include "os/os.h" + +using namespace Windows::Media; +using namespace Windows::Media::Core; +using namespace Windows::Media::MediaProperties; +using namespace Windows::Media::Editing; +using namespace Windows::Foundation; + +const char * AudioDriverWinRT::get_name() const +{ + return "WinRT"; +} + +Error AudioDriverWinRT::init() { + + active = false; + thread_exited = false; + exit_thread = false; + pcm_open = false; + samples_in = NULL; + + + mix_rate = 48000; + output_format = OUTPUT_STEREO; + channels = 2; + + int latency = GLOBAL_DEF("audio/output_latency", 25); + buffer_size = nearest_power_of_2(latency * mix_rate / 1000); + + samples_in = memnew_arr(int32_t, buffer_size*channels); + for (int i = 0; i < AUDIO_BUFFERS; i++) { + samples_out[i] = memnew_arr(int16_t, buffer_size*channels); + xaudio_buffer[i].AudioBytes = buffer_size * channels * sizeof(int16_t); + xaudio_buffer[i].pAudioData = (const BYTE*)(samples_out[i]); + xaudio_buffer[i].Flags = 0; + } + + HRESULT hr; + hr = XAudio2Create(&xaudio, 0, XAUDIO2_DEFAULT_PROCESSOR); + if (hr != S_OK) { + ERR_EXPLAIN("Error creating XAudio2 engine."); + ERR_FAIL_V(ERR_UNAVAILABLE); + } + hr = xaudio->CreateMasteringVoice(&mastering_voice); + if (hr != S_OK) { + ERR_EXPLAIN("Error creating XAudio2 mastering voice."); + ERR_FAIL_V(ERR_UNAVAILABLE); + } + + wave_format.nChannels = channels; + wave_format.cbSize = 0; + wave_format.nSamplesPerSec = mix_rate; + wave_format.wFormatTag = WAVE_FORMAT_PCM; + wave_format.wBitsPerSample = 16; + wave_format.nBlockAlign = channels * wave_format.wBitsPerSample >> 3; + wave_format.nAvgBytesPerSec = mix_rate * wave_format.nBlockAlign; + + voice_callback = memnew(XAudio2DriverVoiceCallback); + + hr = xaudio->CreateSourceVoice(&source_voice, &wave_format, 0, XAUDIO2_MAX_FREQ_RATIO, voice_callback); + if (hr != S_OK) { + ERR_EXPLAIN("Error creating XAudio2 source voice. " + itos(hr)); + ERR_FAIL_V(ERR_UNAVAILABLE); + } + + mutex = Mutex::create(); + thread = Thread::create(AudioDriverWinRT::thread_func, this); + + return OK; +}; + +void AudioDriverWinRT::thread_func(void* p_udata) { + + AudioDriverWinRT* ad = (AudioDriverWinRT*)p_udata; + + uint64_t usdelay = (ad->buffer_size / float(ad->mix_rate)) * 1000000; + + while (!ad->exit_thread) { + + + if (!ad->active) { + + for (int i = 0; i < AUDIO_BUFFERS; i++) { + ad->xaudio_buffer[i].Flags = XAUDIO2_END_OF_STREAM; + } + + } else { + + ad->lock(); + + ad->audio_server_process(ad->buffer_size, ad->samples_in); + + ad->unlock(); + + for (unsigned int i = 0;i < ad->buffer_size*ad->channels;i++) { + + ad->samples_out[ad->current_buffer][i] = ad->samples_in[i] >> 16; + } + + ad->xaudio_buffer[ad->current_buffer].Flags = 0; + ad->xaudio_buffer[ad->current_buffer].AudioBytes = ad->buffer_size * ad->channels * sizeof(int16_t); + ad->xaudio_buffer[ad->current_buffer].pAudioData = (const BYTE*)(ad->samples_out[ad->current_buffer]); + ad->xaudio_buffer[ad->current_buffer].PlayBegin = 0; + ad->source_voice->SubmitSourceBuffer(&(ad->xaudio_buffer[ad->current_buffer])); + + ad->current_buffer = (ad->current_buffer + 1) % AUDIO_BUFFERS; + + XAUDIO2_VOICE_STATE state; + while (ad->source_voice->GetState(&state), state.BuffersQueued > AUDIO_BUFFERS - 1) + { + WaitForSingleObject(ad->voice_callback->buffer_end_event, INFINITE); + } + } + + }; + + ad->thread_exited = true; + +}; + +void AudioDriverWinRT::start() { + + active = true; + HRESULT hr = source_voice->Start(0); + if (hr != S_OK) { + ERR_EXPLAIN("XAudio2 start error " + itos(hr)); + ERR_FAIL(); + } +}; + +int AudioDriverWinRT::get_mix_rate() const { + + return mix_rate; +}; + +AudioDriverSW::OutputFormat AudioDriverWinRT::get_output_format() const { + + return output_format; +}; + +float AudioDriverWinRT::get_latency() { + + XAUDIO2_PERFORMANCE_DATA perf_data; + xaudio->GetPerformanceData(&perf_data); + if (perf_data.CurrentLatencyInSamples) { + return (float)(perf_data.CurrentLatencyInSamples / ((float)mix_rate)); + } else { + return 0; + } +} + +void AudioDriverWinRT::lock() { + + if (!thread || !mutex) + return; + mutex->lock(); +}; +void AudioDriverWinRT::unlock() { + + if (!thread || !mutex) + return; + mutex->unlock(); +}; + +void AudioDriverWinRT::finish() { + + if (!thread) + return; + + exit_thread = true; + Thread::wait_to_finish(thread); + + if (source_voice) { + source_voice->Stop(0); + memdelete(source_voice); + } + + if (samples_in) { + memdelete_arr(samples_in); + }; + if (samples_out[0]) { + for (int i = 0; i < AUDIO_BUFFERS; i++) { + memdelete_arr(samples_out[i]); + } + }; + + memdelete(voice_callback); + memdelete(mastering_voice); + + memdelete(thread); + if (mutex) + memdelete(mutex); + thread = NULL; +}; + +AudioDriverWinRT::AudioDriverWinRT() { + + mutex = NULL; + thread = NULL; + wave_format = { 0 }; + for (int i = 0; i < AUDIO_BUFFERS; i++) { + xaudio_buffer[i] = { 0 }; + samples_out[i] = 0; + } + current_buffer = 0; +}; + +AudioDriverWinRT::~AudioDriverWinRT() { + + +}; + + diff --git a/platform/winrt/audio_driver_winrt.h b/platform/winrt/audio_driver_winrt.h new file mode 100644 index 0000000000..d7a69994f8 --- /dev/null +++ b/platform/winrt/audio_driver_winrt.h @@ -0,0 +1,109 @@ +/*************************************************************************/ +/* audio_driver_winrt.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#ifndef AUDIO_DRIVER_WINRT_H +#define AUDIO_DRIVER_WINRT_H + +#include "servers/audio/audio_server_sw.h" + +#include "core/os/thread.h" +#include "core/os/mutex.h" + +#include <windows.h> +#include <mmsystem.h> +#include <mmreg.h> +#include <xaudio2.h> +#include <wrl/client.h> + +class AudioDriverWinRT : public AudioDriverSW { + + enum { + AUDIO_BUFFERS = 2 + }; + + struct XAudio2DriverVoiceCallback : public IXAudio2VoiceCallback { + + HANDLE buffer_end_event; + XAudio2DriverVoiceCallback() : buffer_end_event(CreateEvent(NULL, FALSE, FALSE, NULL)) {} + void STDMETHODCALLTYPE OnBufferEnd(void* pBufferContext) { /*print_line("buffer ended");*/ SetEvent(buffer_end_event); } + + //Unused methods are stubs + void STDMETHODCALLTYPE OnStreamEnd() { } + void STDMETHODCALLTYPE OnVoiceProcessingPassEnd() { } + void STDMETHODCALLTYPE OnVoiceProcessingPassStart(UINT32 SamplesRequired) { } + void STDMETHODCALLTYPE OnBufferStart(void * pBufferContext) { } + void STDMETHODCALLTYPE OnLoopEnd(void * pBufferContext) { } + void STDMETHODCALLTYPE OnVoiceError(void * pBufferContext, HRESULT Error) { } + + }; + + Thread* thread; + Mutex* mutex; + + int32_t* samples_in; + int16_t* samples_out[AUDIO_BUFFERS]; + + static void thread_func(void* p_udata); + int buffer_size; + + unsigned int mix_rate; + OutputFormat output_format; + + int channels; + + bool active; + bool thread_exited; + mutable bool exit_thread; + bool pcm_open; + + WAVEFORMATEX wave_format; + Microsoft::WRL::ComPtr<IXAudio2> xaudio; + int current_buffer; + IXAudio2MasteringVoice* mastering_voice; + XAUDIO2_BUFFER xaudio_buffer[AUDIO_BUFFERS]; + IXAudio2SourceVoice* source_voice; + XAudio2DriverVoiceCallback* voice_callback; + +public: + + const char* get_name() const; + + virtual Error init(); + virtual void start(); + virtual int get_mix_rate() const; + virtual OutputFormat get_output_format() const; + virtual float get_latency(); + virtual void lock(); + virtual void unlock(); + virtual void finish(); + + AudioDriverWinRT(); + ~AudioDriverWinRT(); +}; + +#endif diff --git a/platform/winrt/detect.py b/platform/winrt/detect.py index 86028d3af8..6ba4cf5cbc 100644 --- a/platform/winrt/detect.py +++ b/platform/winrt/detect.py @@ -1,9 +1,8 @@ - - import os import sys import string +import methods def is_active(): @@ -16,6 +15,15 @@ def can_build(): if (os.name=="nt"): #building natively on windows! if (os.getenv("VSINSTALLDIR")): + + if (os.getenv("ANGLE_SRC_PATH") == None): + print("You need to define ANGLE_SRC_PATH to the path of ANGLE source root.") + return False + + if not os.path.isfile(str(os.getenv("ANGLE_SRC_PATH")) + "/winrt/10/src/angle.sln"): + print ("Couldn't find the ANGLE solution. Is ANGLE_SRC_PATH configured to the right path?") + return False + return True return False @@ -24,133 +32,136 @@ def get_opts(): def get_flags(): - return [] + return [ + ('tools', 'no'), + ('openssl', 'builtin'), + ] def configure(env): - env.Append(CPPPATH=['#platform/winrt', '#platform/winrt/include']) - arch = "" - - if os.getenv('PLATFORM') == "ARM": - - # compiler commandline - # debug: /Yu"pch.h" /MP /GS /analyze- /W3 /wd"4453" /wd"28204" /Zc:wchar_t /I"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\App2\App2.WindowsPhone\" /I"Generated Files\" /I"ARM\Debug\" /I"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\App2\App2.Shared\" /ZW:nostdlib /Zi /Gm- /Od /sdl /Fd"ARM\Debug\vc120.pdb" /fp:precise /D "PSAPI_VERSION=2" /D "WINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP" /D "_UITHREADCTXT_SUPPORT=0" /D "_UNICODE" /D "UNICODE" /D "_DEBUG" /errorReport:prompt /WX- /Zc:forScope /RTC1 /ZW /Gd /Oy- /MDd /Fa"ARM\Debug\" /EHsc /nologo /Fo"ARM\Debug\" /Fp"ARM\Debug\App2.WindowsPhone.pch" - # release: /Yu"pch.h" /MP /GS /GL /analyze- /W3 /wd"4453" /wd"28204" /Gy /Zc:wchar_t /I"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\App2\App2.WindowsPhone\" /I"Generated Files\" /I"ARM\Release\" /I"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\App2\App2.Shared\" /ZW:nostdlib /Zi /Gm- /O2 /sdl /Fd"ARM\Release\vc120.pdb" /fp:precise /D "PSAPI_VERSION=2" /D "WINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP" /D "_UITHREADCTXT_SUPPORT=0" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /ZW /Gd /Oy- /Oi /MD /Fa"ARM\Release\" /EHsc /nologo /Fo"ARM\Release\" /Fp"ARM\Release\App2.WindowsPhone.pch" - - # linker commandline - # debug: /OUT:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Debug\App2.WindowsPhone\App2.WindowsPhone.exe" /MANIFEST:NO /NXCOMPAT /PDB:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Debug\App2.WindowsPhone\App2.WindowsPhone.pdb" /DYNAMICBASE "WindowsPhoneCore.lib" "RuntimeObject.lib" "PhoneAppModelHost.lib" /DEBUG /MACHINE:ARM /NODEFAULTLIB:"kernel32.lib" /NODEFAULTLIB:"ole32.lib" /WINMD /APPCONTAINER /INCREMENTAL /PGD:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Debug\App2.WindowsPhone\App2.WindowsPhone.pgd" /WINMDFILE:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Debug\App2.WindowsPhone\App2.winmd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:NO /ManifestFile:"ARM\Debug\App2.WindowsPhone.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1 - # release: /OUT:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Release\App2.WindowsPhone\App2.WindowsPhone.exe" /MANIFEST:NO /LTCG /NXCOMPAT /PDB:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Release\App2.WindowsPhone\App2.WindowsPhone.pdb" /DYNAMICBASE "WindowsPhoneCore.lib" "RuntimeObject.lib" "PhoneAppModelHost.lib" /DEBUG /MACHINE:ARM /NODEFAULTLIB:"kernel32.lib" /NODEFAULTLIB:"ole32.lib" /WINMD /APPCONTAINER /OPT:REF /PGD:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Release\App2.WindowsPhone\App2.WindowsPhone.pgd" /WINMDFILE:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Release\App2.WindowsPhone\App2.winmd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:NO /ManifestFile:"ARM\Release\App2.WindowsPhone.exe.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /TLBID:1 - - arch = "arm" + if(env["bits"] != "default"): + print "Error: bits argument is disabled for MSVC" + print ("Bits argument is not supported for MSVC compilation. Architecture depends on the Native/Cross Compile Tools Prompt/Developer Console (or Visual Studio settings)" + +" that is being used to run SCons. As a consequence, bits argument is disabled. Run scons again without bits argument (example: scons p=winrt) and SCons will attempt to detect what MSVC compiler" + +" will be executed and inform you.") + sys.exit() - env.Append(LINKFLAGS=['/INCREMENTAL:NO', '/MANIFEST:NO', '/NXCOMPAT', '/DYNAMICBASE', "WindowsPhoneCore.lib", "RuntimeObject.lib", "PhoneAppModelHost.lib", "/DEBUG", "/MACHINE:ARM", '/NODEFAULTLIB:"kernel32.lib"', '/NODEFAULTLIB:"ole32.lib"', '/WINMD', '/APPCONTAINER', '/MANIFESTUAC:NO', '/ERRORREPORT:PROMPT', '/NOLOGO', '/TLBID:1']) - env.Append(LIBPATH=['#platform/winrt/ARM/lib']) - - env.Append(CCFLAGS=string.split('/MP /GS /wd"4453" /wd"28204" /analyze- /Zc:wchar_t /Zi /Gm- /Od /fp:precise /fp:precise /D "PSAPI_VERSION=2" /D "WINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP" /DWINDOWSPHONE_ENABLED /D "_UITHREADCTXT_SUPPORT=0" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MD /RTC1 /Gd /EHsc /nologo')) - env.Append(CXXFLAGS=string.split('/ZW')) + arch = "" + env['ENV'] = os.environ; - if (env["target"]=="release"): + # ANGLE + angle_root = os.getenv("ANGLE_SRC_PATH") + env.Append(CPPPATH=[angle_root + '/include']) + jobs = str(env.GetOption("num_jobs")) + angle_build_cmd = "msbuild.exe " + angle_root + "/winrt/10/src/angle.sln /nologo /v:m /m:" + jobs + " /p:Configuration=Release /p:Platform=" - env.Append(CCFLAGS=['/O2']) - env.Append(LINKFLAGS=['/SUBSYSTEM:WINDOWS']) + if os.getenv('Platform') == "ARM": - elif (env["target"]=="test"): + print "Compiled program architecture will be an ARM executable. (forcing bits=32)." - env.Append(CCFLAGS=['/O2','/DDEBUG_ENABLED','/DD3D_DEBUG_INFO']) - env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE']) + arch="arm" + env["bits"]="32" + env.Append(LINKFLAGS=['/MACHINE:ARM']) + env.Append(LIBPATH=[os.environ['VCINSTALLDIR'] + 'lib/store/arm']) - elif (env["target"]=="debug"): + angle_build_cmd += "ARM" - env.Append(CCFLAGS=['/Zi','/DDEBUG_ENABLED','/DD3D_DEBUG_INFO']) - env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE']) - env.Append(LINKFLAGS=['/DEBUG', '/D_DEBUG']) + env.Append(LIBPATH=[angle_root + '/winrt/10/src/Release_ARM/lib']) - elif (env["target"]=="profile"): + else: - env.Append(CCFLAGS=['-g','-pg']) - env.Append(LINKFLAGS=['-pg']) + compiler_version_str = methods.detect_visual_c_compiler_version(env['ENV']) + if(compiler_version_str == "amd64" or compiler_version_str == "x86_amd64"): + env["bits"]="64" + print "Compiled program architecture will be a x64 executable (forcing bits=64)." + elif (compiler_version_str=="x86" or compiler_version_str == "amd64_x86"): + env["bits"]="32" + print "Compiled program architecture will be a x86 executable. (forcing bits=32)." + else: + print "Failed to detect MSVC compiler architecture version... Defaulting to 32bit executable settings (forcing bits=32). Compilation attempt will continue, but SCons can not detect for what architecture this build is compiled for. You should check your settings/compilation setup." + env["bits"]="32" - env['ENV'] = os.environ; - # fix environment for windows phone 8.1 - env['ENV']['WINDOWSPHONEKITDIR'] = env['ENV']['WINDOWSPHONEKITDIR'].replace("8.0", "8.1") # wtf - env['ENV']['INCLUDE'] = env['ENV']['INCLUDE'].replace("8.0", "8.1") - env['ENV']['LIB'] = env['ENV']['LIB'].replace("8.0", "8.1") - env['ENV']['PATH'] = env['ENV']['PATH'].replace("8.0", "8.1") - env['ENV']['LIBPATH'] = env['ENV']['LIBPATH'].replace("8.0\\Windows Metadata", "8.1\\References\\CommonConfiguration\\Neutral") + if (env["bits"] == "32"): + arch = "x86" - else: + angle_build_cmd += "Win32" - arch = "x64" - env.Append(LINKFLAGS=['/MANIFEST:NO', '/NXCOMPAT', '/DYNAMICBASE', "kernel32.lib", '/MACHINE:X64', '/WINMD', '/APPCONTAINER', '/MANIFESTUAC:NO', '/ERRORREPORT:PROMPT', '/NOLOGO', '/TLBID:1']) + env.Append(CPPFLAGS=['/DPNG_ABORT=abort']) + env.Append(LINKFLAGS=['/MACHINE:X86']) + env.Append(LIBPATH=[os.environ['VCINSTALLDIR'] + 'lib/store']) + env.Append(LIBPATH=[angle_root + '/winrt/10/src/Release_Win32/lib']) - env.Append(LIBPATH=['#platform/winrt/x64/lib']) + else: + arch = "x64" + angle_build_cmd += "x64" - if (env["target"]=="release"): + env.Append(LINKFLAGS=['/MACHINE:X64']) + env.Append(LIBPATH=[os.environ['VCINSTALLDIR'] + 'lib/store/amd64']) + env.Append(LIBPATH=[angle_root + '/winrt/10/src/Release_x64/lib']) - env.Append(CCFLAGS=['/O2']) - env.Append(LINKFLAGS=['/SUBSYSTEM:WINDOWS']) - env.Append(LINKFLAGS=['/ENTRY:mainCRTStartup']) + env.Append(CPPPATH=['#platform/winrt','#drivers/windows']) + env.Append(LINKFLAGS=['/MANIFEST:NO', '/NXCOMPAT', '/DYNAMICBASE', '/WINMD', '/APPCONTAINER', '/ERRORREPORT:PROMPT', '/NOLOGO', '/TLBID:1', '/NODEFAULTLIB:"kernel32.lib"', '/NODEFAULTLIB:"ole32.lib"']) + env.Append(CPPFLAGS=['/D','__WRL_NO_DEFAULT_LIB__','/D','WIN32']) + env.Append(CPPFLAGS=['/FU', os.environ['VCINSTALLDIR'] + 'lib/store/references/platform.winmd']) + env.Append(CPPFLAGS=['/AI', os.environ['VCINSTALLDIR'] + 'lib/store/references']) - elif (env["target"]=="test"): + env.Append(LIBPATH=[os.environ['VCINSTALLDIR'] + 'lib/store/references']) - env.Append(CCFLAGS=['/O2','/DDEBUG_ENABLED','/DD3D_DEBUG_INFO']) - env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE']) + if (env["target"]=="release"): - elif (env["target"]=="debug"): + env.Append(CPPFLAGS=['/O2', '/GL']) + env.Append(CPPFLAGS=['/MD']) + env.Append(LINKFLAGS=['/SUBSYSTEM:WINDOWS', '/LTCG']) - env.Append(CCFLAGS=['/Zi','/DDEBUG_ENABLED','/DD3D_DEBUG_INFO']) - env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE']) - env.Append(LINKFLAGS=['/DEBUG', '/D_DEBUG']) + elif (env["target"]=="release_debug"): - elif (env["target"]=="profile"): + env.Append(CCFLAGS=['/O2','/Zi','/DDEBUG_ENABLED']) + env.Append(CPPFLAGS=['/MD']) + env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE']) - env.Append(CCFLAGS=['-g','-pg']) - env.Append(LINKFLAGS=['-pg']) + elif (env["target"]=="debug"): + env.Append(CCFLAGS=['/Zi','/DDEBUG_ENABLED','/DDEBUG_MEMORY_ENABLED']) + env.Append(CPPFLAGS=['/MDd']) + env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE']) + env.Append(LINKFLAGS=['/DEBUG']) - env.Append(CCFLAGS=string.split('/MP /GS /wd"4453" /wd"28204" /Zc:wchar_t /Gm- /Od /fp:precise /D "_UNICODE" /D "UNICODE" /D "WINAPI_FAMILY=WINAPI_FAMILY_APP" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /EHsc /nologo')) - env.Append(CXXFLAGS=string.split('/ZW')) - env.Append(CCFLAGS=['/AI', os.environ['VCINSTALLDIR']+'\\vcpackages', '/AI', os.environ['WINDOWSSDKDIR']+'\\References\\CommonConfiguration\\Neutral']) - env.Append(CCFLAGS=['/DWINAPI_FAMILY=WINAPI_FAMILY_APP', '/D_WIN32_WINNT=0x0603', '/DNTDDI_VERSION=0x06030000']) - env['ENV'] = os.environ; + env.Append(CCFLAGS=string.split('/FS /MP /GS /wd"4453" /wd"28204" /wd"4291" /Zc:wchar_t /Gm- /fp:precise /D "_UNICODE" /D "UNICODE" /D "WINAPI_FAMILY=WINAPI_FAMILY_APP" /errorReport:prompt /WX- /Zc:forScope /Gd /EHsc /nologo')) + env.Append(CXXFLAGS=string.split('/ZW /FS')) + env.Append(CCFLAGS=['/AI', os.environ['VCINSTALLDIR']+'\\vcpackages', '/AI', os.environ['WINDOWSSDKDIR']+'\\References\\CommonConfiguration\\Neutral']) env["PROGSUFFIX"]="."+arch+env["PROGSUFFIX"] env["OBJSUFFIX"]="."+arch+env["OBJSUFFIX"] env["LIBSUFFIX"]="."+arch+env["LIBSUFFIX"] - - #env.Append(CCFLAGS=['/Gd','/GR','/nologo', '/EHsc']) - #env.Append(CXXFLAGS=['/TP', '/ZW']) - #env.Append(CPPFLAGS=['/DMSVC', '/GR', ]) - ##env.Append(CCFLAGS=['/I'+os.getenv("WindowsSdkDir")+"/Include"]) env.Append(CCFLAGS=['/DWINRT_ENABLED']) env.Append(CCFLAGS=['/DWINDOWS_ENABLED']) - env.Append(CCFLAGS=['/DRTAUDIO_ENABLED']) - #env.Append(CCFLAGS=['/DWIN32']) env.Append(CCFLAGS=['/DTYPED_METHOD_BIND']) - env.Append(CCFLAGS=['/DGLES2_ENABLED']) - #env.Append(CCFLAGS=['/DGLES1_ENABLED']) + env.Append(CCFLAGS=['/DGLES2_ENABLED','/DGL_GLEXT_PROTOTYPES','/DEGL_EGLEXT_PROTOTYPES','/DANGLE_ENABLED']) - LIBS=[ - #'winmm', + LIBS = [ + 'xaudio2', + 'WindowsApp', + 'mincore', + 'libANGLE', 'libEGL', 'libGLESv2', - 'libANGLE', - #'kernel32','ole32','user32', 'advapi32' ] env.Append(LINKFLAGS=[p+".lib" for p in LIBS]) - import methods + # Incremental linking fix + env['BUILDERS']['ProgramOriginal'] = env['BUILDERS']['Program'] + env['BUILDERS']['Program'] = methods.precious_program + + env.Append( BUILDERS = { 'ANGLE' : env.Builder(action = angle_build_cmd) } ) + env.Append( BUILDERS = { 'GLSL120' : env.Builder(action = methods.build_legacygl_headers, suffix = 'glsl.h',src_suffix = '.glsl') } ) env.Append( BUILDERS = { 'GLSL' : env.Builder(action = methods.build_glsl_headers, suffix = 'glsl.h',src_suffix = '.glsl') } ) env.Append( BUILDERS = { 'HLSL9' : env.Builder(action = methods.build_hlsl_dx9_headers, suffix = 'hlsl.h',src_suffix = '.hlsl') } ) env.Append( BUILDERS = { 'GLSL120GLES' : env.Builder(action = methods.build_gles2_headers, suffix = 'glsl.h',src_suffix = '.glsl') } ) - - -#/c/Program Files (x86)/Windows Phone Kits/8.1/lib/ARM/WindowsPhoneCore.lib diff --git a/platform/winrt/export/export.cpp b/platform/winrt/export/export.cpp new file mode 100644 index 0000000000..ed294b438f --- /dev/null +++ b/platform/winrt/export/export.cpp @@ -0,0 +1,2391 @@ +/*************************************************************************/ +/* export.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +/************************************************************************* + * The code for signing the package was ported from fb-util-for-appx + * available at https://github.com/facebook/fb-util-for-appx + * and distributed also under the following license: + +BSD License + +For fb-util-for-appx software + +Copyright (c) 2016, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*************************************************************************/ + + +#include "version.h" +#include "export.h" +#include "object.h" +#include "tools/editor/editor_import_export.h" +#include "tools/editor/editor_node.h" +#include "platform/winrt/logo.h" +#include "os/file_access.h" +#include "io/zip.h" +#include "io/unzip.h" +#include "io/zip_io.h" +#include "io/sha256.h" +#include "io/base64.h" +#include "bind/core_bind.h" +#include "globals.h" +#include "io/marshalls.h" + +#include <zlib.h> + +#ifdef OPENSSL_ENABLED +#include <openssl/bio.h> +#include <openssl/asn1.h> +#include <openssl/pkcs7.h> +#include <openssl/pkcs12.h> +#include <openssl/err.h> +#include <openssl/asn1t.h> +#include <openssl/x509.h> +#include <openssl/ossl_typ.h> + +// Capabilities +static const char* uwp_capabilities[] = { + "allJoyn", + "codeGeneration", + "internetClient", + "internetClientServer", + "privateNetworkClientServer", + NULL +}; +static const char* uwp_uap_capabilities[] = { + "appointments", + "blockedChatMessages", + "chat", + "contacts", + "enterpriseAuthentication", + "musicLibrary", + "objects3D", + "picturesLibrary", + "phoneCall", + "removableStorage", + "sharedUserCertificates", + "userAccountInformation", + "videosLibrary", + "voipCall", + NULL +}; +static const char* uwp_device_capabilites[] = { + "bluetooth", + "location", + "microphone", + "proximity", + "webcam", + NULL +}; + +namespace asn1 { + // https://msdn.microsoft.com/en-us/gg463180.aspx + + struct SPCStatementType { + ASN1_OBJECT *type; + }; + DECLARE_ASN1_FUNCTIONS(SPCStatementType) + + struct SPCSpOpusInfo { + ASN1_TYPE *programName; + ASN1_TYPE *moreInfo; + }; + DECLARE_ASN1_FUNCTIONS(SPCSpOpusInfo) + + struct DigestInfo { + X509_ALGOR *digestAlgorithm; + ASN1_OCTET_STRING *digest; + }; + DECLARE_ASN1_FUNCTIONS(DigestInfo) + + struct SPCAttributeTypeAndOptionalValue { + ASN1_OBJECT *type; + ASN1_TYPE *value; // SPCInfoValue + }; + DECLARE_ASN1_FUNCTIONS(SPCAttributeTypeAndOptionalValue) + + // Undocumented. + struct SPCInfoValue { + ASN1_INTEGER *i1; + ASN1_OCTET_STRING *s1; + ASN1_INTEGER *i2; + ASN1_INTEGER *i3; + ASN1_INTEGER *i4; + ASN1_INTEGER *i5; + ASN1_INTEGER *i6; + }; + DECLARE_ASN1_FUNCTIONS(SPCInfoValue) + + struct SPCIndirectDataContent { + SPCAttributeTypeAndOptionalValue *data; + DigestInfo *messageDigest; + }; + DECLARE_ASN1_FUNCTIONS(SPCIndirectDataContent) + + IMPLEMENT_ASN1_FUNCTIONS(SPCIndirectDataContent) + ASN1_SEQUENCE(SPCIndirectDataContent) = { + ASN1_SIMPLE(SPCIndirectDataContent, data, + SPCAttributeTypeAndOptionalValue), + ASN1_SIMPLE(SPCIndirectDataContent, messageDigest, DigestInfo), + } ASN1_SEQUENCE_END(SPCIndirectDataContent) + + IMPLEMENT_ASN1_FUNCTIONS(SPCAttributeTypeAndOptionalValue) + ASN1_SEQUENCE(SPCAttributeTypeAndOptionalValue) = { + ASN1_SIMPLE(SPCAttributeTypeAndOptionalValue, type, + ASN1_OBJECT), + ASN1_OPT(SPCAttributeTypeAndOptionalValue, value, ASN1_ANY), + } ASN1_SEQUENCE_END(SPCAttributeTypeAndOptionalValue) + + IMPLEMENT_ASN1_FUNCTIONS(SPCInfoValue) + ASN1_SEQUENCE(SPCInfoValue) = { + ASN1_SIMPLE(SPCInfoValue, i1, ASN1_INTEGER), + ASN1_SIMPLE(SPCInfoValue, s1, ASN1_OCTET_STRING), + ASN1_SIMPLE(SPCInfoValue, i2, ASN1_INTEGER), + ASN1_SIMPLE(SPCInfoValue, i3, ASN1_INTEGER), + ASN1_SIMPLE(SPCInfoValue, i4, ASN1_INTEGER), + ASN1_SIMPLE(SPCInfoValue, i5, ASN1_INTEGER), + ASN1_SIMPLE(SPCInfoValue, i6, ASN1_INTEGER), + } ASN1_SEQUENCE_END(SPCInfoValue) + + IMPLEMENT_ASN1_FUNCTIONS(DigestInfo) + ASN1_SEQUENCE(DigestInfo) = { + ASN1_SIMPLE(DigestInfo, digestAlgorithm, X509_ALGOR), + ASN1_SIMPLE(DigestInfo, digest, ASN1_OCTET_STRING), + } ASN1_SEQUENCE_END(DigestInfo) + + ASN1_SEQUENCE(SPCSpOpusInfo) = { + ASN1_OPT(SPCSpOpusInfo, programName, ASN1_ANY), + ASN1_OPT(SPCSpOpusInfo, moreInfo, ASN1_ANY), + } ASN1_SEQUENCE_END(SPCSpOpusInfo) + IMPLEMENT_ASN1_FUNCTIONS(SPCSpOpusInfo) + + ASN1_SEQUENCE(SPCStatementType) = { + ASN1_SIMPLE(SPCStatementType, type, ASN1_OBJECT), + } ASN1_SEQUENCE_END(SPCStatementType) + IMPLEMENT_ASN1_FUNCTIONS(SPCStatementType) +} + +class EncodedASN1 { + + uint8_t* i_data; + size_t i_size; + + EncodedASN1(uint8_t** p_data, size_t p_size) { + + i_data = *p_data; + i_size = p_size; + } + +public: + + template <typename T, int(*TEncode)(T *, uint8_t **)> + static EncodedASN1 FromItem(T *item) { + uint8_t *dataRaw = NULL; + int size = TEncode(item, &dataRaw); + + return EncodedASN1(&dataRaw, size); + } + + const uint8_t *data() const { + return i_data; + } + + size_t size() const { + return i_size; + } + + // Assumes the encoded ASN.1 represents a SEQUENCE and puts it into + // an ASN1_STRING. + // + // The returned object holds a copy of this object's data. + ASN1_STRING* ToSequenceString() { + ASN1_STRING* string = ASN1_STRING_new(); + if (!string) { + return NULL; + } + if (!ASN1_STRING_set(string, i_data, i_size)) { + return NULL; + } + return string; + } + + // Assumes the encoded ASN.1 represents a SEQUENCE and puts it into + // an ASN1_TYPE. + // + // The returned object holds a copy of this object's data. + ASN1_TYPE* ToSequenceType() { + ASN1_STRING* string = ToSequenceString(); + ASN1_TYPE* type = ASN1_TYPE_new(); + if (!type) { + return NULL; + } + type->type = V_ASN1_SEQUENCE; + type->value.sequence = string; + return type; + } + +}; + +#endif // OPENSSL_ENABLED + +class AppxPackager { + + enum { + FILE_HEADER_MAGIC = 0x04034b50, + DATA_DESCRIPTOR_MAGIC = 0x08074b50, + CENTRAL_DIR_MAGIC = 0x02014b50, + END_OF_CENTRAL_DIR_MAGIC = 0x06054b50, + ZIP64_END_OF_CENTRAL_DIR_MAGIC = 0x06064b50, + ZIP64_END_DIR_LOCATOR_MAGIC = 0x07064b50, + P7X_SIGNATURE = 0x58434b50, + ZIP64_HEADER_ID = 0x0001, + ZIP_VERSION = 20, + ZIP_ARCHIVE_VERSION = 45, + GENERAL_PURPOSE = 0x00, + BASE_FILE_HEADER_SIZE = 30, + DATA_DESCRIPTOR_SIZE = 24, + BASE_CENTRAL_DIR_SIZE = 46, + EXTRA_FIELD_LENGTH = 28, + ZIP64_HEADER_SIZE = 24, + ZIP64_END_OF_CENTRAL_DIR_SIZE = (56 - 12), + END_OF_CENTRAL_DIR_SIZE = 42, + BLOCK_SIZE = 65536, + }; + + struct BlockHash { + + String base64_hash; + size_t compressed_size; + }; + + struct FileMeta { + + String name; + int lfh_size; + bool compressed; + size_t compressed_size; + size_t uncompressed_size; + Vector<BlockHash> hashes; + uLong file_crc32; + ZPOS64_T zip_offset; + }; + + String progress_task; + FileAccess *package; + String tmp_blockmap_file_path; + String tmp_content_types_file_path; + + Set<String> mime_types; + + Vector<FileMeta> file_metadata; + + ZPOS64_T central_dir_offset; + ZPOS64_T end_of_central_dir_offset; + Vector<uint8_t> central_dir_data; + + String hash_block(uint8_t* p_block_data, size_t p_block_len); + + void make_block_map(); + void make_content_types(); + + + _FORCE_INLINE_ unsigned int buf_put_int16(uint16_t p_val, uint8_t * p_buf) { + for (int i = 0; i < 2; i++) { + *p_buf++ = (p_val >> (i * 8)) & 0xFF; + } + return 2; + } + + _FORCE_INLINE_ unsigned int buf_put_int32(uint32_t p_val, uint8_t * p_buf) { + for (int i = 0; i < 4; i++) { + *p_buf++ = (p_val >> (i * 8)) & 0xFF; + } + return 4; + } + + _FORCE_INLINE_ unsigned int buf_put_int64(uint64_t p_val, uint8_t * p_buf) { + for (int i = 0; i < 8; i++) { + *p_buf++ = (p_val >> (i * 8)) & 0xFF; + } + return 8; + } + + _FORCE_INLINE_ unsigned int buf_put_string(String p_val, uint8_t * p_buf) { + for (int i = 0; i < p_val.length(); i++) { + *p_buf++ = p_val.utf8().get(i); + } + return p_val.length(); + } + + Vector<uint8_t> make_file_header(FileMeta p_file_meta); + void store_central_dir_header(const FileMeta p_file, bool p_do_hash = true); + Vector<uint8_t> make_end_of_central_record(); + + String content_type(String p_extension); + +#ifdef OPENSSL_ENABLED + + // Signing methods and structs: + + String certificate_path; + String certificate_pass; + bool sign_package; + + struct CertFile { + + EVP_PKEY* private_key; + X509* certificate; + }; + + SHA256_CTX axpc_context; // SHA256 context for ZIP file entries + SHA256_CTX axcd_context; // SHA256 context for ZIP directory entries + + struct AppxDigests { + + uint8_t axpc[SHA256_DIGEST_LENGTH]; // ZIP file entries + uint8_t axcd[SHA256_DIGEST_LENGTH]; // ZIP directory entry + uint8_t axct[SHA256_DIGEST_LENGTH]; // Content types XML + uint8_t axbm[SHA256_DIGEST_LENGTH]; // Block map XML + uint8_t axci[SHA256_DIGEST_LENGTH]; // Code Integrity file (optional) + }; + + CertFile cert_file; + AppxDigests digests; + + void MakeSPCInfoValue(asn1::SPCInfoValue &info); + Error MakeIndirectDataContent(asn1::SPCIndirectDataContent &idc); + Error add_attributes(PKCS7_SIGNER_INFO *signerInfo); + void make_digests(); + void write_digest(Vector<uint8_t> &p_out_buffer); + + Error openssl_error(unsigned long p_err); + Error read_cert_file(const String &p_path, const String &p_password, CertFile* p_out_cf); + Error sign(const CertFile &p_cert, const AppxDigests &digests, PKCS7* p_out_signature); + +#endif // OPENSSL_ENABLED + +public: + + enum SignOption { + + SIGN, + DONT_SIGN, + }; + + void set_progress_task(String p_task) { progress_task = p_task; } + void init(FileAccess* p_fa, SignOption p_sign, String &p_certificate_path, String &p_certificate_password); + void add_file(String p_file_name, const uint8_t* p_buffer, size_t p_len, int p_file_no, int p_total_files, bool p_compress = false); + void finish(); + + AppxPackager(); + ~AppxPackager(); +}; + +class EditorExportPlatformWinrt : public EditorExportPlatform { + + OBJ_TYPE(EditorExportPlatformWinrt, EditorExportPlatform); + + Ref<ImageTexture> logo; + + enum Platform { + ARM, + X86, + X64 + } arch; + + bool is_debug; + + String custom_release_package; + String custom_debug_package; + + String cmdline; + + String display_name; + String short_name; + String unique_name; + String description; + String publisher; + String publisher_display_name; + + String product_guid; + String publisher_guid; + + int version_major; + int version_minor; + int version_build; + int version_revision; + + bool orientation_landscape; + bool orientation_portrait; + bool orientation_landscape_flipped; + bool orientation_portrait_flipped; + + String background_color; + Ref<ImageTexture> store_logo; + Ref<ImageTexture> square44; + Ref<ImageTexture> square71; + Ref<ImageTexture> square150; + Ref<ImageTexture> square310; + Ref<ImageTexture> wide310; + Ref<ImageTexture> splash; + + bool name_on_square150; + bool name_on_square310; + bool name_on_wide; + + Set<String> capabilities; + Set<String> uap_capabilities; + Set<String> device_capabilities; + + bool sign_package; + String certificate_path; + String certificate_pass; + + _FORCE_INLINE_ bool array_has(const char** p_array, const char* p_value) const { + while (*p_array) { + if (String(*p_array) == String(p_value)) return true; + p_array++; + } + return false; + } + + bool _valid_resource_name(const String &p_name) const; + bool _valid_guid(const String &p_guid) const; + bool _valid_bgcolor(const String &p_color) const; + bool _valid_image(const Ref<ImageTexture> p_image, int p_width, int p_height) const; + + Vector<uint8_t> _fix_manifest(const Vector<uint8_t> &p_template, bool p_give_internet) const; + Vector<uint8_t> _get_image_data(const String &p_path); + + static Error save_appx_file(void *p_userdata, const String& p_path, const Vector<uint8_t>& p_data, int p_file, int p_total); + static bool _should_compress_asset(const String& p_path, const Vector<uint8_t>& p_data); + +protected: + + bool _set(const StringName& p_name, const Variant& p_value); + bool _get(const StringName& p_name, Variant &r_ret) const; + void _get_property_list(List<PropertyInfo> *p_list) const; + +public: + + virtual String get_name() const { return "Windows Universal"; } + virtual ImageCompression get_image_compression() const { return IMAGE_COMPRESSION_ETC1; } + virtual Ref<Texture> get_logo() const { return logo; } + + virtual bool can_export(String *r_error = NULL) const; + virtual String get_binary_extension() const { return "appx"; } + + virtual Error export_project(const String& p_path, bool p_debug, int p_flags = 0); + + EditorExportPlatformWinrt(); + ~EditorExportPlatformWinrt(); +}; + + +/////////////////////////////////////////////////////////////////////////// + +String AppxPackager::hash_block(uint8_t * p_block_data, size_t p_block_len) { + + char hash[32]; + char base64[45]; + + sha256_context ctx; + sha256_init(&ctx); + sha256_hash(&ctx, p_block_data, p_block_len); + sha256_done(&ctx, (uint8_t*)hash); + + base64_encode(base64, hash, 32); + base64[44] = '\0'; + + return String(base64); +} + +void AppxPackager::make_block_map() { + + FileAccess* tmp_file = FileAccess::open(tmp_blockmap_file_path, FileAccess::WRITE); + + tmp_file->store_string("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"); + tmp_file->store_string("<BlockMap xmlns=\"http://schemas.microsoft.com/appx/2010/blockmap\" HashMethod=\"http://www.w3.org/2001/04/xmlenc#sha256\">"); + + for (int i = 0; i < file_metadata.size(); i++) { + + FileMeta file = file_metadata[i]; + + tmp_file->store_string( + "<File Name=\"" + file.name.replace("/", "\\") + + "\" Size=\"" + itos(file.uncompressed_size) + + "\" LfhSize=\"" + itos(file.lfh_size) + "\">"); + + + for (int j = 0; j < file.hashes.size(); j++) { + + tmp_file->store_string("<Block Hash=\"" + + file.hashes[j].base64_hash + "\" "); + if (file.compressed) + tmp_file->store_string("Size=\"" + itos(file.hashes[j].compressed_size) + "\" "); + tmp_file->store_string("/>"); + } + + tmp_file->store_string("</File>"); + } + + tmp_file->store_string("</BlockMap>"); + + tmp_file->close(); + memdelete(tmp_file); + tmp_file = NULL; +} + +String AppxPackager::content_type(String p_extension) { + + if (p_extension == "png") + return "image/png"; + else if (p_extension == "jpg") + return "image/jpg"; + else if (p_extension == "xml") + return "application/xml"; + else if (p_extension == "exe" || p_extension == "dll") + return "application/x-msdownload"; + else + return "application/octet-stream"; +} + +void AppxPackager::make_content_types() { + + FileAccess* tmp_file = FileAccess::open(tmp_content_types_file_path, FileAccess::WRITE); + + tmp_file->store_string("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); + tmp_file->store_string("<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">"); + + Map<String, String> types; + + for (int i = 0; i < file_metadata.size(); i++) { + + String ext = file_metadata[i].name.extension(); + + if (types.has(ext)) continue; + + types[ext] = content_type(ext); + + tmp_file->store_string("<Default Extension=\"" + ext + + "\" ContentType=\"" + + types[ext] + "\" />"); + } + + // Appx signature file + tmp_file->store_string("<Default Extension=\"p7x\" ContentType=\"application/octet-stream\" />"); + + // Override for package files + tmp_file->store_string("<Override PartName=\"/AppxManifest.xml\" ContentType=\"application/vnd.ms-appx.manifest+xml\" />"); + tmp_file->store_string("<Override PartName=\"/AppxBlockMap.xml\" ContentType=\"application/vnd.ms-appx.blockmap+xml\" />"); + tmp_file->store_string("<Override PartName=\"/AppxSignature.p7x\" ContentType=\"application/vnd.ms-appx.signature\" />"); + tmp_file->store_string("<Override PartName=\"/AppxMetadata/CodeIntegrity.cat\" ContentType=\"application/vnd.ms-pkiseccat\" />"); + + tmp_file->store_string("</Types>"); + + tmp_file->close(); + memdelete(tmp_file); + tmp_file = NULL; +} + +Vector<uint8_t> AppxPackager::make_file_header(FileMeta p_file_meta) { + + Vector<uint8_t> buf; + buf.resize(BASE_FILE_HEADER_SIZE + p_file_meta.name.length()); + + int offs = 0; + // Write magic + offs += buf_put_int32(FILE_HEADER_MAGIC, &buf[offs]); + + // Version + offs += buf_put_int16(ZIP_VERSION, &buf[offs]); + + // Special flag + offs += buf_put_int16(GENERAL_PURPOSE, &buf[offs]); + + // Compression + offs += buf_put_int16(p_file_meta.compressed ? Z_DEFLATED : 0, &buf[offs]); + + // File date and time + offs += buf_put_int32(0, &buf[offs]); + + // CRC-32 + offs += buf_put_int32(p_file_meta.file_crc32, &buf[offs]); + + // Compressed size + offs += buf_put_int32(p_file_meta.compressed_size, &buf[offs]); + + // Uncompressed size + offs += buf_put_int32(p_file_meta.uncompressed_size, &buf[offs]); + + // File name length + offs += buf_put_int16(p_file_meta.name.length(), &buf[offs]); + + // Extra data length + offs += buf_put_int16(0, &buf[offs]); + + // File name + offs += buf_put_string(p_file_meta.name, &buf[offs]); + + // Done! + return buf; +} + +void AppxPackager::store_central_dir_header(const FileMeta p_file, bool p_do_hash) { + + Vector<uint8_t> &buf = central_dir_data; + int offs = buf.size(); + buf.resize(buf.size() + BASE_CENTRAL_DIR_SIZE + p_file.name.length()); + + + // Write magic + offs += buf_put_int32(CENTRAL_DIR_MAGIC, &buf[offs]); + + // ZIP versions + offs += buf_put_int16(ZIP_ARCHIVE_VERSION, &buf[offs]); + offs += buf_put_int16(ZIP_VERSION, &buf[offs]); + + // General purpose flag + offs += buf_put_int16(GENERAL_PURPOSE, &buf[offs]); + + // Compression + offs += buf_put_int16(p_file.compressed ? Z_DEFLATED : 0, &buf[offs]); + + // Modification date/time + offs += buf_put_int32(0, &buf[offs]); + + // Crc-32 + offs += buf_put_int32(p_file.file_crc32, &buf[offs]); + + // File sizes + offs += buf_put_int32(p_file.compressed_size, &buf[offs]); + offs += buf_put_int32(p_file.uncompressed_size, &buf[offs]); + + // File name length + offs += buf_put_int16(p_file.name.length(), &buf[offs]); + + // Extra field length + offs += buf_put_int16(0, &buf[offs]); + + // Comment length + offs += buf_put_int16(0, &buf[offs]); + + // Disk number start, internal/external file attributes + for (int i = 0; i < 8; i++) { + buf[offs++] = 0; + } + + // Relative offset + offs += buf_put_int32(p_file.zip_offset, &buf[offs]); + + // File name + offs += buf_put_string(p_file.name, &buf[offs]); + +#ifdef OPENSSL_ENABLED + // Calculate the hash for signing + if (p_do_hash) + SHA256_Update(&axcd_context, buf.ptr(), buf.size()); +#endif // OPENSSL_ENABLED + + // Done! +} + +Vector<uint8_t> AppxPackager::make_end_of_central_record() { + + Vector<uint8_t> buf; + buf.resize(ZIP64_END_OF_CENTRAL_DIR_SIZE + 12 + END_OF_CENTRAL_DIR_SIZE); // Size plus magic + + int offs = 0; + + // Write magic + offs += buf_put_int32(ZIP64_END_OF_CENTRAL_DIR_MAGIC, &buf[offs]); + + // Size of this record + offs += buf_put_int64(ZIP64_END_OF_CENTRAL_DIR_SIZE, &buf[offs]); + + // Version (yes, twice) + offs += buf_put_int16(ZIP_ARCHIVE_VERSION, &buf[offs]); + offs += buf_put_int16(ZIP_ARCHIVE_VERSION, &buf[offs]); + + // Disk number + for (int i = 0; i < 8; i++) { + buf[offs++] = 0; + } + + // Number of entries (total and per disk) + offs += buf_put_int64(file_metadata.size(), &buf[offs]); + offs += buf_put_int64(file_metadata.size(), &buf[offs]); + + // Size of central dir + offs += buf_put_int64(central_dir_data.size(), &buf[offs]); + + // Central dir offset + offs += buf_put_int64(central_dir_offset, &buf[offs]); + + ////// ZIP64 locator + + // Write magic for zip64 central dir locator + offs += buf_put_int32(ZIP64_END_DIR_LOCATOR_MAGIC, &buf[offs]); + + // Disk number + for (int i = 0; i < 4; i++) { + buf[offs++] = 0; + } + + // Relative offset + offs += buf_put_int64(end_of_central_dir_offset, &buf[offs]); + + // Number of disks + offs += buf_put_int32(1, &buf[offs]); + + /////// End of zip directory + + // Write magic for end central dir + offs += buf_put_int32(END_OF_CENTRAL_DIR_MAGIC, &buf[offs]); + + // Dummy stuff for Zip64 + for (int i = 0; i < 4; i++) { + buf[offs++] = 0x0; + } + for (int i = 0; i < 12; i++) { + buf[offs++] = 0xFF; + } + + // Size of comments + for (int i = 0; i < 2; i++) { + buf[offs++] = 0; + } + + // Done! + return buf; +} + +void AppxPackager::init(FileAccess * p_fa, SignOption p_sign, String &p_certificate_path, String &p_certificate_password) { + + package = p_fa; + central_dir_offset = 0; + end_of_central_dir_offset = 0; + tmp_blockmap_file_path = EditorSettings::get_singleton()->get_settings_path() + "/tmp/tmpblockmap.xml"; + tmp_content_types_file_path = EditorSettings::get_singleton()->get_settings_path() + "/tmp/tmpcontenttypes.xml"; +#ifdef OPENSSL_ENABLED + certificate_path = p_certificate_path; + certificate_pass = p_certificate_password; + sign_package = p_sign == SIGN; + SHA256_Init(&axpc_context); + SHA256_Init(&axcd_context); +#endif // OPENSSL_ENABLED +} + +void AppxPackager::add_file(String p_file_name, const uint8_t * p_buffer, size_t p_len, int p_file_no, int p_total_files, bool p_compress) { + + if (p_file_no >= 1 && p_total_files >= 1) { + EditorNode::progress_task_step(progress_task, "File: " + p_file_name, (p_file_no * 100) / p_total_files); + } + + bool do_hash = p_file_name != "AppxSignature.p7x"; + + FileMeta meta; + meta.name = p_file_name; + meta.uncompressed_size = p_len; + meta.compressed_size = p_len; + meta.compressed = p_compress; + meta.zip_offset = package->get_pos(); + + Vector<uint8_t> file_buffer; + + // Data for compression + z_stream strm; + FileAccess* strm_f = NULL; + Vector<uint8_t> strm_in; + strm_in.resize(BLOCK_SIZE); + Vector<uint8_t> strm_out; + + if (p_compress) { + + strm.zalloc = zipio_alloc; + strm.zfree = zipio_free; + strm.opaque = &strm_f; + + strm_out.resize(BLOCK_SIZE + 8); + + deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY); + } + + int step = 0; + + while (p_len - step > 0) { + + size_t block_size = (p_len - step) > BLOCK_SIZE ? BLOCK_SIZE : (p_len - step); + + for (int i = 0; i < block_size; i++) { + strm_in[i] = p_buffer[step + i]; + } + + BlockHash bh; + bh.base64_hash = hash_block(strm_in.ptr(), block_size); + + if (p_compress) { + + strm.avail_in = block_size; + strm.avail_out = strm_out.size(); + strm.next_in = strm_in.ptr(); + strm.next_out = strm_out.ptr(); + + int total_out_before = strm.total_out; + + deflate(&strm, Z_FULL_FLUSH); + bh.compressed_size = strm.total_out - total_out_before; + + //package->store_buffer(strm_out.ptr(), strm.total_out - total_out_before); + int start = file_buffer.size(); + file_buffer.resize(file_buffer.size() + bh.compressed_size); + for (int i = 0; i < bh.compressed_size; i++) + file_buffer[start + i] = strm_out[i]; +#ifdef OPENSSL_ENABLED + if (do_hash) + SHA256_Update(&axpc_context, strm_out.ptr(), strm.total_out - total_out_before); +#endif // OPENSSL_ENABLED + + } else { + bh.compressed_size = block_size; + //package->store_buffer(strm_in.ptr(), block_size); + int start = file_buffer.size(); + file_buffer.resize(file_buffer.size() + block_size); + for (int i = 0; i < bh.compressed_size; i++) + file_buffer[start + i] = strm_in[i]; +#ifdef OPENSSL_ENABLED + if (do_hash) + SHA256_Update(&axpc_context, strm_in.ptr(), block_size); +#endif // OPENSSL_ENABLED + } + + meta.hashes.push_back(bh); + + step += block_size; + } + + if (p_compress) { + + strm.avail_in = 0; + strm.avail_out = strm_out.size(); + strm.next_in = strm_in.ptr(); + strm.next_out = strm_out.ptr(); + + int total_out_before = strm.total_out; + + deflate(&strm, Z_FINISH); + + //package->store_buffer(strm_out.ptr(), strm.total_out - total_out_before); + int start = file_buffer.size(); + file_buffer.resize(file_buffer.size() + (strm.total_out - total_out_before)); + for (int i = 0; i < (strm.total_out - total_out_before); i++) + file_buffer[start + i] = strm_out[i]; +#ifdef OPENSSL_ENABLED + if (do_hash) + SHA256_Update(&axpc_context, strm_out.ptr(), strm.total_out - total_out_before); +#endif // OPENSSL_ENABLED + + deflateEnd(&strm); + meta.compressed_size = strm.total_out; + + } else { + + meta.compressed_size = p_len; + } + + // Calculate file CRC-32 + uLong crc = crc32(0L, Z_NULL, 0); + crc = crc32(crc, p_buffer, p_len); + meta.file_crc32 = crc; + + // Create file header + Vector<uint8_t> file_header = make_file_header(meta); + meta.lfh_size = file_header.size(); + +#ifdef OPENSSL_ENABLED + // Hash the data for signing + if (do_hash) { + SHA256_Update(&axpc_context, file_header.ptr(), file_header.size()); + SHA256_Update(&axpc_context, file_buffer.ptr(), file_buffer.size()); + } +#endif // OPENSSL_ENABLED + + // Store the header and file; + package->store_buffer(file_header.ptr(), file_header.size()); + package->store_buffer(file_buffer.ptr(), file_buffer.size()); + + file_metadata.push_back(meta); +} + +void AppxPackager::finish() { + + // Create and add block map file + EditorNode::progress_task_step("export", "Creating block map...", 4); + + make_block_map(); + FileAccess* blockmap_file = FileAccess::open(tmp_blockmap_file_path, FileAccess::READ); + Vector<uint8_t> blockmap_buffer; + blockmap_buffer.resize(blockmap_file->get_len()); + + blockmap_file->get_buffer(blockmap_buffer.ptr(), blockmap_buffer.size()); + +#ifdef OPENSSL_ENABLED + // Hash the file for signing + if (sign_package) { + SHA256_CTX axbm_context; + SHA256_Init(&axbm_context); + SHA256_Update(&axbm_context, blockmap_buffer.ptr(), blockmap_buffer.size()); + SHA256_Final(digests.axbm, &axbm_context); + } +#endif // OPENSSL_ENABLED + + add_file("AppxBlockMap.xml", blockmap_buffer.ptr(), blockmap_buffer.size(), -1, -1, true); + + blockmap_file->close(); + memdelete(blockmap_file); + blockmap_file = NULL; + + // Add content types + EditorNode::progress_task_step("export", "Setting content types...", 5); + make_content_types(); + + FileAccess* types_file = FileAccess::open(tmp_content_types_file_path, FileAccess::READ); + Vector<uint8_t> types_buffer; + types_buffer.resize(types_file->get_len()); + + types_file->get_buffer(types_buffer.ptr(), types_buffer.size()); + +#ifdef OPENSSL_ENABLED + if (sign_package) { + // Hash the file for signing + SHA256_CTX axct_context; + SHA256_Init(&axct_context); + SHA256_Update(&axct_context, types_buffer.ptr(), types_buffer.size()); + SHA256_Final(digests.axct, &axct_context); + } +#endif // OPENSSL_ENABLED + + add_file("[Content_Types].xml", types_buffer.ptr(), types_buffer.size(), -1, -1, true); + + types_file->close(); + memdelete(types_file); + types_file = NULL; + + // Pre-process central directory before signing + for (int i = 0; i < file_metadata.size(); i++) { + store_central_dir_header(file_metadata[i]); + } + +#ifdef OPENSSL_ENABLED + // Create the signature file + if (sign_package) { + + Error err = read_cert_file(certificate_path, certificate_pass, &cert_file); + + if (err != OK) { + EditorNode::add_io_error(TTR("Couldn't read the certficate file. Are the path and password both correct?")); + package->close(); + memdelete(package); + package = NULL; + return; + } + + + // Make a temp end of the zip for hashing + central_dir_offset = package->get_pos(); + end_of_central_dir_offset = central_dir_offset + central_dir_data.size(); + Vector<uint8_t> zip_end_dir = make_end_of_central_record(); + + // Hash the end directory + SHA256_Update(&axcd_context, zip_end_dir.ptr(), zip_end_dir.size()); + + // Finish the hashes + make_digests(); + + PKCS7* signature = PKCS7_new(); + if (!signature) { + EditorNode::add_io_error(TTR("Error creating the signature object.")); + package->close(); + memdelete(package); + package = NULL; + return; + } + + err = sign(cert_file, digests, signature); + + if (err != OK) { + EditorNode::add_io_error(TTR("Error creating the package signature.")); + package->close(); + memdelete(package); + package = NULL; + return; + } + + // Read the signature as bytes + BIO* bio_out = BIO_new(BIO_s_mem()); + i2d_PKCS7_bio(bio_out, signature); + + BIO_flush(bio_out); + + uint8_t* bio_ptr; + size_t bio_size = BIO_get_mem_data(bio_out, &bio_ptr); + + // Create the signature buffer with magic number + Vector<uint8_t> signature_file; + signature_file.resize(4 + bio_size); + buf_put_int32(P7X_SIGNATURE, signature_file.ptr()); + for (int i = 0; i < bio_size; i++) + signature_file[i + 4] = bio_ptr[i]; + + // Add the signature to the package + add_file("AppxSignature.p7x", signature_file.ptr(), signature_file.size(), -1, -1, true); + + // Add central directory entry + store_central_dir_header(file_metadata[file_metadata.size() - 1], false); + } +#endif // OPENSSL_ENABLED + + + // Write central directory + EditorNode::progress_task_step("export", "Finishing package...", 6); + central_dir_offset = package->get_pos(); + package->store_buffer(central_dir_data.ptr(), central_dir_data.size()); + + // End record + end_of_central_dir_offset = package->get_pos(); + Vector<uint8_t> end_record = make_end_of_central_record(); + package->store_buffer(end_record.ptr(), end_record.size()); + + package->close(); + memdelete(package); + package = NULL; +} + +#ifdef OPENSSL_ENABLED +// https://support.microsoft.com/en-us/kb/287547 +const char SPC_INDIRECT_DATA_OBJID[] = "1.3.6.1.4.1.311.2.1.4"; +const char SPC_STATEMENT_TYPE_OBJID[] = "1.3.6.1.4.1.311.2.1.11"; +const char SPC_SP_OPUS_INFO_OBJID[] = "1.3.6.1.4.1.311.2.1.12"; +const char SPC_SIPINFO_OBJID[] = "1.3.6.1.4.1.311.2.1.30"; +#endif // OPENSSL_ENABLED + +AppxPackager::AppxPackager() {} + +AppxPackager::~AppxPackager() {} + + +//////////////////////////////////////////////////////////////////// + +#ifdef OPENSSL_ENABLED +Error AppxPackager::openssl_error(unsigned long p_err) { + + ERR_load_crypto_strings(); + + char buffer[256]; + ERR_error_string_n(p_err, buffer, sizeof(buffer)); + + String err(buffer); + + ERR_EXPLAIN(err); + ERR_FAIL_V(FAILED); +} + +void AppxPackager::MakeSPCInfoValue(asn1::SPCInfoValue &info) { + + // I have no idea what these numbers mean. + static uint8_t s1Magic[] = { + 0x4B, 0xDF, 0xC5, 0x0A, 0x07, 0xCE, 0xE2, 0x4D, + 0xB7, 0x6E, 0x23, 0xC8, 0x39, 0xA0, 0x9F, 0xD1, + }; + ASN1_INTEGER_set(info.i1, 0x01010000); + ASN1_OCTET_STRING_set(info.s1, s1Magic, sizeof(s1Magic)); + ASN1_INTEGER_set(info.i2, 0x00000000); + ASN1_INTEGER_set(info.i3, 0x00000000); + ASN1_INTEGER_set(info.i4, 0x00000000); + ASN1_INTEGER_set(info.i5, 0x00000000); + ASN1_INTEGER_set(info.i6, 0x00000000); +} + +Error AppxPackager::MakeIndirectDataContent(asn1::SPCIndirectDataContent &idc) { + + using namespace asn1; + + ASN1_TYPE* algorithmParameter = ASN1_TYPE_new(); + if (!algorithmParameter) { + return openssl_error(ERR_peek_last_error()); + } + algorithmParameter->type = V_ASN1_NULL; + + SPCInfoValue* infoValue = SPCInfoValue_new(); + if (!infoValue) { + return openssl_error(ERR_peek_last_error()); + } + MakeSPCInfoValue(*infoValue); + + ASN1_TYPE* value = + EncodedASN1::FromItem<asn1::SPCInfoValue, + asn1::i2d_SPCInfoValue>(infoValue) + .ToSequenceType(); + + { + Vector<uint8_t> digest; + write_digest(digest); + if (!ASN1_OCTET_STRING_set(idc.messageDigest->digest, + digest.ptr(), digest.size())) { + + return openssl_error(ERR_peek_last_error()); + } + } + + idc.data->type = OBJ_txt2obj(SPC_SIPINFO_OBJID, 1); + idc.data->value = value; + idc.messageDigest->digestAlgorithm->algorithm = OBJ_nid2obj(NID_sha256); + idc.messageDigest->digestAlgorithm->parameter = algorithmParameter; + + return OK; +} + +Error AppxPackager::add_attributes(PKCS7_SIGNER_INFO * p_signer_info) { + + // Add opus attribute + asn1::SPCSpOpusInfo* opus = asn1::SPCSpOpusInfo_new(); + if (!opus) return openssl_error(ERR_peek_last_error()); + + ASN1_STRING* opus_value = EncodedASN1::FromItem<asn1::SPCSpOpusInfo, asn1::i2d_SPCSpOpusInfo>(opus) + .ToSequenceString(); + + if (!PKCS7_add_signed_attribute( + p_signer_info, + OBJ_txt2nid(SPC_SP_OPUS_INFO_OBJID), + V_ASN1_SEQUENCE, + opus_value + )) { + + asn1::SPCSpOpusInfo_free(opus); + + ASN1_STRING_free(opus_value); + return openssl_error(ERR_peek_last_error()); + } + + // Add content type attribute + if (!PKCS7_add_signed_attribute( + p_signer_info, + NID_pkcs9_contentType, + V_ASN1_OBJECT, + OBJ_txt2obj(SPC_INDIRECT_DATA_OBJID, 1) + )) { + + asn1::SPCSpOpusInfo_free(opus); + ASN1_STRING_free(opus_value); + return openssl_error(ERR_peek_last_error()); + } + + // Add statement type attribute + asn1::SPCStatementType* statement_type = asn1::SPCStatementType_new(); + if (!statement_type) return openssl_error(ERR_peek_last_error()); + + statement_type->type = OBJ_nid2obj(NID_ms_code_ind); + ASN1_STRING* statement_type_value = + EncodedASN1::FromItem<asn1::SPCStatementType, asn1::i2d_SPCStatementType>(statement_type) + .ToSequenceString(); + + if (!PKCS7_add_signed_attribute( + p_signer_info, + OBJ_txt2nid(SPC_STATEMENT_TYPE_OBJID), + V_ASN1_SEQUENCE, + statement_type_value + )) { + + ASN1_STRING_free(opus_value); + asn1::SPCStatementType_free(statement_type); + ASN1_STRING_free(statement_type_value); + + return openssl_error(ERR_peek_last_error()); + } + + return OK; + +} + +void AppxPackager::make_digests() { + + // AXPC + SHA256_Final(digests.axpc, &axpc_context); + + // AXCD + SHA256_Final(digests.axcd, &axcd_context); + + // AXCI + for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) + digests.axci[i] = 0; + +} + +void AppxPackager::write_digest(Vector<uint8_t>& p_out_buffer) { + + // Size of digests plus 6 32-bit magic numbers + p_out_buffer.resize((SHA256_DIGEST_LENGTH * 5) + (6 * 4)); + + int offs = 0; + + // APPX + uint32_t sig = 0x58505041; + offs += buf_put_int32(sig, &p_out_buffer[offs]); + + // AXPC + uint32_t axpc_sig = 0x43505841; + offs += buf_put_int32(axpc_sig, &p_out_buffer[offs]); + for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) { + p_out_buffer[offs++] = digests.axpc[i]; + } + + // AXCD + uint32_t axcd_sig = 0x44435841; + offs += buf_put_int32(axcd_sig, &p_out_buffer[offs]); + for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) { + p_out_buffer[offs++] = digests.axcd[i]; + } + + // AXCT + uint32_t axct_sig = 0x54435841; + offs += buf_put_int32(axct_sig, &p_out_buffer[offs]); + for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) { + p_out_buffer[offs++] = digests.axct[i]; + } + + // AXBM + uint32_t axbm_sig = 0x4D425841; + offs += buf_put_int32(axbm_sig, &p_out_buffer[offs]); + for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) { + p_out_buffer[offs++] = digests.axbm[i]; + } + + // AXCI + uint32_t axci_sig = 0x49435841; + offs += buf_put_int32(axci_sig, &p_out_buffer[offs]); + for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) { + p_out_buffer[offs++] = digests.axci[i]; + } + + // Done! +} + +Error AppxPackager::read_cert_file(const String & p_path, const String &p_password, CertFile* p_out_cf) { + + ERR_FAIL_COND_V(!p_out_cf, ERR_INVALID_PARAMETER); + + BIO* bio = BIO_new_file(p_path.utf8().get_data(), "rb"); + if (!bio) { + return openssl_error(ERR_peek_last_error()); + } + + PKCS12* data = d2i_PKCS12_bio(bio, NULL); + if (!data) { + BIO_free(bio); + return openssl_error(ERR_peek_last_error()); + } + + /* Fails to link with GCC, need to solve when implement signing + if (!PKCS12_parse(data, p_password.utf8().get_data(), &p_out_cf->private_key, &p_out_cf->certificate, NULL)) { + PKCS12_free(data); + BIO_free(bio); + return openssl_error(ERR_peek_last_error()); + }*/ + + if (!p_out_cf->private_key) { + PKCS12_free(data); + BIO_free(bio); + return openssl_error(ERR_peek_last_error()); + } + + if (!p_out_cf->certificate) { + PKCS12_free(data); + BIO_free(bio); + return openssl_error(ERR_peek_last_error()); + } + + PKCS12_free(data); + BIO_free(bio); + + return OK; +} + +Error AppxPackager::sign(const CertFile & p_cert, const AppxDigests & digests, PKCS7 * p_out_signature) { + + OpenSSL_add_all_algorithms(); + + // Register object IDs + OBJ_create_and_add_object(SPC_INDIRECT_DATA_OBJID, NULL, NULL); + OBJ_create_and_add_object(SPC_SIPINFO_OBJID, NULL, NULL); + OBJ_create_and_add_object(SPC_SP_OPUS_INFO_OBJID, NULL, NULL); + OBJ_create_and_add_object(SPC_STATEMENT_TYPE_OBJID, NULL, NULL); + + if (!PKCS7_set_type(p_out_signature, NID_pkcs7_signed)) { + + return openssl_error(ERR_peek_last_error()); + } + + PKCS7_SIGNER_INFO *signer_info = PKCS7_add_signature(p_out_signature, p_cert.certificate, p_cert.private_key, EVP_sha256()); + if (!signer_info) return openssl_error(ERR_peek_last_error()); + + add_attributes(signer_info); + + if (!PKCS7_content_new(p_out_signature, NID_pkcs7_data)) { + + return openssl_error(ERR_peek_last_error()); + } + + if (!PKCS7_add_certificate(p_out_signature, p_cert.certificate)) { + + return openssl_error(ERR_peek_last_error()); + } + + asn1::SPCIndirectDataContent* idc = asn1::SPCIndirectDataContent_new(); + + MakeIndirectDataContent(*idc); + EncodedASN1 idc_encoded = + EncodedASN1::FromItem<asn1::SPCIndirectDataContent, asn1::i2d_SPCIndirectDataContent>(idc); + + BIO* signed_data = PKCS7_dataInit(p_out_signature, NULL); + + if (idc_encoded.size() < 2) { + + ERR_EXPLAIN("Invalid encoded size"); + ERR_FAIL_V(FAILED); + } + + if ((idc_encoded.data()[1] & 0x80) == 0x00) { + + ERR_EXPLAIN("Invalid encoded data"); + ERR_FAIL_V(FAILED); + } + + size_t skip = 4; + + if (BIO_write(signed_data, idc_encoded.data() + skip, idc_encoded.size() - skip) + != idc_encoded.size() - skip) { + + return openssl_error(ERR_peek_last_error()); + } + if (BIO_flush(signed_data) != 1) { + + return openssl_error(ERR_peek_last_error()); + } + + if (!PKCS7_dataFinal(p_out_signature, signed_data)) { + + return openssl_error(ERR_peek_last_error()); + } + + PKCS7* content = PKCS7_new(); + if (!content) { + + return openssl_error(ERR_peek_last_error()); + } + + content->type = OBJ_txt2obj(SPC_INDIRECT_DATA_OBJID, 1); + + ASN1_TYPE* idc_sequence = idc_encoded.ToSequenceType(); + content->d.other = idc_sequence; + + if (!PKCS7_set_content(p_out_signature, content)) { + + return openssl_error(ERR_peek_last_error()); + } + + return OK; +} + +#endif // OPENSSL_ENABLED + +//////////////////////////////////////////////////////////////////// + + +bool EditorExportPlatformWinrt::_valid_resource_name(const String &p_name) const { + + if (p_name.empty()) return false; + if (p_name.ends_with(".")) return false; + + static const char* invalid_names[] = { + "CON","PRN","AUX","NUL","COM1","COM2","COM3","COM4","COM5","COM6","COM7", + "COM8","COM9","LPT1","LPT2","LPT3","LPT4","LPT5","LPT6","LPT7","LPT8","LPT9", + NULL + }; + + const char** t = invalid_names; + while (*t) { + if (p_name == *t) return false; + t++; + } + + return true; +} + +bool EditorExportPlatformWinrt::_valid_guid(const String & p_guid) const { + + Vector<String> parts = p_guid.split("-"); + + if (parts.size() != 5) return false; + if (parts[0].length() != 8) return false; + for (int i = 1; i < 4; i++) + if (parts[i].length() != 4) return false; + if (parts[4].length() != 12) return false; + + return true; +} + +bool EditorExportPlatformWinrt::_valid_bgcolor(const String & p_color) const { + + if (p_color.empty()) return true; + if (p_color.begins_with("#") && p_color.is_valid_html_color()) return true; + + // Colors from https://msdn.microsoft.com/en-us/library/windows/apps/dn934817.aspx + static const char* valid_colors[] = { + "aliceBlue","antiqueWhite","aqua","aquamarine","azure","beige", + "bisque","black","blanchedAlmond","blue","blueViolet","brown", + "burlyWood","cadetBlue","chartreuse","chocolate","coral","cornflowerBlue", + "cornsilk","crimson","cyan","darkBlue","darkCyan","darkGoldenrod", + "darkGray","darkGreen","darkKhaki","darkMagenta","darkOliveGreen","darkOrange", + "darkOrchid","darkRed","darkSalmon","darkSeaGreen","darkSlateBlue","darkSlateGray", + "darkTurquoise","darkViolet","deepPink","deepSkyBlue","dimGray","dodgerBlue", + "firebrick","floralWhite","forestGreen","fuchsia","gainsboro","ghostWhite", + "gold","goldenrod","gray","green","greenYellow","honeydew", + "hotPink","indianRed","indigo","ivory","khaki","lavender", + "lavenderBlush","lawnGreen","lemonChiffon","lightBlue","lightCoral","lightCyan", + "lightGoldenrodYellow","lightGreen","lightGray","lightPink","lightSalmon","lightSeaGreen", + "lightSkyBlue","lightSlateGray","lightSteelBlue","lightYellow","lime","limeGreen", + "linen","magenta","maroon","mediumAquamarine","mediumBlue","mediumOrchid", + "mediumPurple","mediumSeaGreen","mediumSlateBlue","mediumSpringGreen","mediumTurquoise","mediumVioletRed", + "midnightBlue","mintCream","mistyRose","moccasin","navajoWhite","navy", + "oldLace","olive","oliveDrab","orange","orangeRed","orchid", + "paleGoldenrod","paleGreen","paleTurquoise","paleVioletRed","papayaWhip","peachPuff", + "peru","pink","plum","powderBlue","purple","red", + "rosyBrown","royalBlue","saddleBrown","salmon","sandyBrown","seaGreen", + "seaShell","sienna","silver","skyBlue","slateBlue","slateGray", + "snow","springGreen","steelBlue","tan","teal","thistle", + "tomato","transparent","turquoise","violet","wheat","white", + "whiteSmoke","yellow","yellowGreen", + NULL + }; + + const char** color = valid_colors; + + while(*color) { + if (p_color == *color) return true; + color++; + } + + return false; +} + +bool EditorExportPlatformWinrt::_valid_image(const Ref<ImageTexture> p_image, int p_width, int p_height) const { + + if (!p_image.is_valid()) return false; + + // TODO: Add resource creation or image rescaling to enable other scales: + // 1.25, 1.5, 2.0 + real_t scales[] = { 1.0 }; + bool valid_w = false; + bool valid_h = false; + + for (int i = 0; i < 1; i++) { + + int w = ceil(p_width * scales[i]); + int h = ceil(p_height * scales[i]); + + if (w == p_image->get_width()) + valid_w = true; + if (h == p_image->get_height()) + valid_h = true; + } + + return valid_w && valid_h; +} + +Vector<uint8_t> EditorExportPlatformWinrt::_fix_manifest(const Vector<uint8_t> &p_template, bool p_give_internet) const { + + String result = String::utf8((const char*)p_template.ptr(), p_template.size()); + + result = result.replace("$godot_version$", VERSION_FULL_NAME); + + result = result.replace("$identity_name$", unique_name); + result = result.replace("$publisher$", publisher); + + result = result.replace("$product_guid$", product_guid); + result = result.replace("$publisher_guid$", publisher_guid); + + String version = itos(version_major) + "." + itos(version_minor) + "." + itos(version_build) + "." + itos(version_revision); + result = result.replace("$version_string$", version); + + String architecture = arch == ARM ? "ARM" : arch == X86 ? "x86" : "x64"; + result = result.replace("$architecture$", architecture); + + result = result.replace("$display_name$", display_name.empty() ? (String)Globals::get_singleton()->get("application/name") : display_name); + result = result.replace("$publisher_display_name$", publisher_display_name); + result = result.replace("$app_description$", description); + result = result.replace("$bg_color$", background_color); + result = result.replace("$short_name$", short_name); + + String name_on_tiles = ""; + if (name_on_square150) { + name_on_tiles += " <uap:ShowOn Tile=\"square150x150Logo\" />\n"; + } + if (name_on_wide) { + name_on_tiles += " <uap:ShowOn Tile=\"wide310x150Logo\" />\n"; + } + if (name_on_square310) { + name_on_tiles += " <uap:ShowOn Tile=\"square310x310Logo\" />\n"; + } + + String show_name_on_tiles = ""; + if (!name_on_tiles.empty()) { + show_name_on_tiles = "<uap:ShowNameOnTiles>\n" + name_on_tiles + " </uap:ShowNameOnTiles>"; + } + + result = result.replace("$name_on_tiles$", name_on_tiles); + + String rotations = ""; + if (orientation_landscape) { + rotations += " <uap:Rotation Preference=\"landscape\" />\n"; + } + if (orientation_portrait) { + rotations += " <uap:Rotation Preference=\"portrait\" />\n"; + } + if (orientation_landscape_flipped) { + rotations += " <uap:Rotation Preference=\"landscapeFlipped\" />\n"; + } + if (orientation_portrait_flipped) { + rotations += " <uap:Rotation Preference=\"portraitFlipped\" />\n"; + } + + String rotation_preference = ""; + if (!rotations.empty()) { + rotation_preference = "<uap:InitialRotationPreference>\n" + rotations + " </uap:InitialRotationPreference>"; + } + + result = result.replace("$rotation_preference$", rotation_preference); + + String capabilities_elements = ""; + const char **basic = uwp_capabilities; + while (*basic) { + if (capabilities.has(*basic)) { + capabilities_elements += " <Capability Name=\"" + String(*basic) + "\" />\n"; + } + basic++; + } + const char **uap = uwp_uap_capabilities; + while (*uap) { + if (uap_capabilities.has(*uap)) { + capabilities_elements += " <uap:Capability Name=\"" + String(*uap) + "\" />\n"; + } + uap++; + } + const char **device = uwp_device_capabilites; + while (*device) { + if (uap_capabilities.has(*device)) { + capabilities_elements += " <DeviceCapability Name=\"" + String(*device) + "\" />\n"; + } + device++; + } + + if (!capabilities.has("internetClient") && p_give_internet) { + capabilities_elements += " <Capability Name=\"internetClient\" />\n"; + } + + String capabilities_string = "<Capabilities />"; + if (!capabilities_elements.empty()) { + capabilities_string = "<Capabilities>\n" + capabilities_elements + " </Capabilities>"; + } + + result = result.replace("$capabilities_place$", capabilities_string); + + Vector<uint8_t> r_ret; + r_ret.resize(result.length()); + + for (int i = 0; i < result.length(); i++) + r_ret[i] = result.utf8().get(i); + + return r_ret; +} + +Vector<uint8_t> EditorExportPlatformWinrt::_get_image_data(const String & p_path) { + + Vector<uint8_t> data; + Ref<ImageTexture> ref; + + if (p_path.find("StoreLogo") != -1) { + ref = store_logo; + } else if (p_path.find("Square44x44Logo") != -1) { + ref = square44; + } else if (p_path.find("Square71x71Logo") != -1) { + ref = square71; + } else if (p_path.find("Square150x150Logo") != -1) { + ref = square150; + } else if (p_path.find("Square310x310Logo") != -1) { + ref = square310; + } else if (p_path.find("Wide310x150Logo") != -1) { + ref = wide310; + } else if (p_path.find("SplashScreen") != -1) { + ref = splash; + } + + if (!ref.is_valid()) return data; + + + String tmp_path = EditorSettings::get_singleton()->get_settings_path().plus_file("tmp/uwp_tmp_logo.png"); + + Error err = ref->get_data().save_png(tmp_path); + + if (err != OK) { + + String err_string = "Couldn't save temp logo file."; + + EditorNode::add_io_error(err_string); + ERR_EXPLAIN(err_string); + ERR_FAIL_V(data); + } + + FileAccess* f = FileAccess::open(tmp_path, FileAccess::READ, &err); + + if (err != OK) { + + String err_string = "Couldn't open temp logo file."; + + EditorNode::add_io_error(err_string); + ERR_EXPLAIN(err_string); + ERR_FAIL_V(data); + } + + data.resize(f->get_len()); + f->get_buffer(data.ptr(), data.size()); + + f->close(); + memdelete(f); + + // Delete temp file + DirAccess* dir = DirAccess::open(tmp_path.get_base_dir(), &err); + + if (err != OK) { + + String err_string = "Couldn't open temp path to remove temp logo file."; + + EditorNode::add_io_error(err_string); + ERR_EXPLAIN(err_string); + ERR_FAIL_V(data); + } + + err = dir->remove(tmp_path); + + memdelete(dir); + + if (err != OK) { + + String err_string = "Couldn't remove temp logo file."; + + EditorNode::add_io_error(err_string); + ERR_EXPLAIN(err_string); + ERR_FAIL_V(data); + } + + return data; +} + +Error EditorExportPlatformWinrt::save_appx_file(void * p_userdata, const String & p_path, const Vector<uint8_t>& p_data, int p_file, int p_total) { + + AppxPackager *packager = (AppxPackager*)p_userdata; + String dst_path = p_path.replace_first("res://", "game/"); + + packager->add_file(dst_path, p_data.ptr(), p_data.size(), p_file, p_total, _should_compress_asset(p_path, p_data)); + + return OK; +} + +bool EditorExportPlatformWinrt::_should_compress_asset(const String & p_path, const Vector<uint8_t>& p_data) { + + /* TODO: This was copied verbatim from Android export. It should be + * refactored to the parent class and also be used for .zip export. + */ + + /* + * By not compressing files with little or not benefit in doing so, + * a performance gain is expected at runtime. Moreover, if the APK is + * zip-aligned, assets stored as they are can be efficiently read by + * Android by memory-mapping them. + */ + + // -- Unconditional uncompress to mimic AAPT plus some other + + static const char* unconditional_compress_ext[] = { + // From https://github.com/android/platform_frameworks_base/blob/master/tools/aapt/Package.cpp + // These formats are already compressed, or don't compress well: + ".jpg", ".jpeg", ".png", ".gif", + ".wav", ".mp2", ".mp3", ".ogg", ".aac", + ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet", + ".rtttl", ".imy", ".xmf", ".mp4", ".m4a", + ".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2", + ".amr", ".awb", ".wma", ".wmv", + // Godot-specific: + ".webp", // Same reasoning as .png + ".cfb", // Don't let small config files slow-down startup + // Trailer for easier processing + NULL + }; + + for (const char** ext = unconditional_compress_ext; *ext; ++ext) { + if (p_path.to_lower().ends_with(String(*ext))) { + return false; + } + } + + // -- Compressed resource? + + if (p_data.size() >= 4 && p_data[0] == 'R' && p_data[1] == 'S' && p_data[2] == 'C' && p_data[3] == 'C') { + // Already compressed + return false; + } + + // --- TODO: Decide on texture resources according to their image compression setting + + return true; +} + +bool EditorExportPlatformWinrt::_set(const StringName& p_name, const Variant& p_value) { + + String n = p_name; + + if (n == "architecture/target") + arch = (Platform)((int)p_value); + else if (n == "custom_package/debug") + custom_debug_package = p_value; + else if (n == "custom_package/release") + custom_release_package = p_value; + else if (n == "command_line/extra_args") + cmdline = p_value; + else if (n == "package/display_name") + display_name = p_value; + else if (n == "package/short_name") + short_name = p_value; + else if (n == "package/unique_name") + unique_name = p_value; + else if (n == "package/description") + description = p_value; + else if (n == "package/publisher") + publisher = p_value; + else if (n == "package/publisher_display_name") + publisher_display_name = p_value; + else if (n == "identity/product_guid") + product_guid = p_value; + else if (n == "identity/publisher_guid") + publisher_guid = p_value; + else if (n == "version/major") + version_major = p_value; + else if (n == "version/minor") + version_minor = p_value; + else if (n == "version/build") + version_build = p_value; + else if (n == "version/revision") + version_revision = p_value; + else if (n == "orientation/landscape") + orientation_landscape = p_value; + else if (n == "orientation/portrait") + orientation_portrait = p_value; + else if (n == "orientation/landscape_flipped") + orientation_landscape_flipped = p_value; + else if (n == "orientation/portrait_flipped") + orientation_portrait_flipped = p_value; + else if (n == "images/background_color") + background_color = p_value; + else if (n == "images/store_logo") + store_logo = p_value; + else if (n == "images/square44x44_logo") + square44 = p_value; + else if (n == "images/square71x71_logo") + square71 = p_value; + else if (n == "images/square150x150_logo") + square150 = p_value; + else if (n == "images/square310x310_logo") + square310 = p_value; + else if (n == "images/wide310x150_logo") + wide310 = p_value; + else if (n == "images/splash_screen") + splash = p_value; + else if (n == "tiles/show_name_on_square150x150") + name_on_square150 = p_value; + else if (n == "tiles/show_name_on_wide310x150") + name_on_wide = p_value; + else if (n == "tiles/show_name_on_square310x310") + name_on_square310 = p_value; + +#if 0 // Signing disabled + else if (n == "signing/sign") + sign_package = p_value; + else if (n == "signing/certificate_file") + certificate_path = p_value; + else if (n == "signing/certificate_password") + certificate_pass = p_value; +#endif + else if (n.begins_with("capabilities/")) { + + String what = n.get_slice("/", 1).replace("_", ""); + bool enable = p_value; + + if (array_has(uwp_capabilities, what.utf8().get_data())) { + + if (enable) + capabilities.insert(what); + else + capabilities.erase(what); + + } else if (array_has(uwp_uap_capabilities, what.utf8().get_data())) { + + if (enable) + uap_capabilities.insert(what); + else + uap_capabilities.erase(what); + + } else if (array_has(uwp_device_capabilites, what.utf8().get_data())) { + + if (enable) + device_capabilities.insert(what); + else + device_capabilities.erase(what); + } + } else return false; + + return true; +} + +bool EditorExportPlatformWinrt::_get(const StringName& p_name, Variant &r_ret) const { + + String n = p_name; + + if (n == "architecture/target") + r_ret = (int)arch; + else if (n == "custom_package/debug") + r_ret = custom_debug_package; + else if (n == "custom_package/release") + r_ret = custom_release_package; + else if (n == "command_line/extra_args") + r_ret = cmdline; + else if (n == "package/display_name") + r_ret = display_name; + else if (n == "package/short_name") + r_ret = short_name; + else if (n == "package/unique_name") + r_ret = unique_name; + else if (n == "package/description") + r_ret = description; + else if (n == "package/publisher") + r_ret = publisher; + else if (n == "package/publisher_display_name") + r_ret = publisher_display_name; + else if (n == "identity/product_guid") + r_ret = product_guid; + else if (n == "identity/publisher_guid") + r_ret = publisher_guid; + else if (n == "version/major") + r_ret = version_major; + else if (n == "version/minor") + r_ret = version_minor; + else if (n == "version/build") + r_ret = version_build; + else if (n == "version/revision") + r_ret = version_revision; + else if (n == "orientation/landscape") + r_ret = orientation_landscape; + else if (n == "orientation/portrait") + r_ret = orientation_portrait; + else if (n == "orientation/landscape_flipped") + r_ret = orientation_landscape_flipped; + else if (n == "orientation/portrait_flipped") + r_ret = orientation_portrait_flipped; + else if (n == "images/background_color") + r_ret = background_color; + else if (n == "images/store_logo") + r_ret = store_logo; + else if (n == "images/square44x44_logo") + r_ret = square44; + else if (n == "images/square71x71_logo") + r_ret = square71; + else if (n == "images/square150x150_logo") + r_ret = square150; + else if (n == "images/square310x310_logo") + r_ret = square310; + else if (n == "images/wide310x150_logo") + r_ret = wide310; + else if (n == "images/splash_screen") + r_ret = splash; + else if (n == "tiles/show_name_on_square150x150") + r_ret = name_on_square150; + else if (n == "tiles/show_name_on_wide310x150") + r_ret = name_on_wide; + else if (n == "tiles/show_name_on_square310x310") + r_ret = name_on_square310; + +#if 0 // Signing disabled + else if (n == "signing/sign") + r_ret = sign_package; + else if (n == "signing/certificate_file") + r_ret = certificate_path; + else if (n == "signing/certificate_password") + r_ret = certificate_pass; +#endif + else if (n.begins_with("capabilities/")) { + + String what = n.get_slice("/", 1).replace("_", ""); + + if (array_has(uwp_capabilities, what.utf8().get_data())) { + + r_ret = capabilities.has(what); + + } else if (array_has(uwp_uap_capabilities, what.utf8().get_data())) { + + r_ret = uap_capabilities.has(what); + + } else if (array_has(uwp_device_capabilites, what.utf8().get_data())) { + + r_ret = device_capabilities.has(what); + } + } else return false; + + return true; +} + +void EditorExportPlatformWinrt::_get_property_list(List<PropertyInfo>* p_list) const { + + p_list->push_back(PropertyInfo(Variant::STRING, "custom_package/debug", PROPERTY_HINT_GLOBAL_FILE, "appx")); + p_list->push_back(PropertyInfo(Variant::STRING, "custom_package/release", PROPERTY_HINT_GLOBAL_FILE, "appx")); + + p_list->push_back(PropertyInfo(Variant::INT, "architecture/target", PROPERTY_HINT_ENUM, "ARM,x86,x64")); + + p_list->push_back(PropertyInfo(Variant::STRING, "command_line/extra_args")); + + p_list->push_back(PropertyInfo(Variant::STRING, "package/display_name")); + p_list->push_back(PropertyInfo(Variant::STRING, "package/short_name")); + p_list->push_back(PropertyInfo(Variant::STRING, "package/unique_name")); + p_list->push_back(PropertyInfo(Variant::STRING, "package/description")); + p_list->push_back(PropertyInfo(Variant::STRING, "package/publisher")); + p_list->push_back(PropertyInfo(Variant::STRING, "package/publisher_display_name")); + + p_list->push_back(PropertyInfo(Variant::STRING, "identity/product_guid")); + p_list->push_back(PropertyInfo(Variant::STRING, "identity/publisher_guid")); + + p_list->push_back(PropertyInfo(Variant::INT, "version/major")); + p_list->push_back(PropertyInfo(Variant::INT, "version/minor")); + p_list->push_back(PropertyInfo(Variant::INT, "version/build")); + p_list->push_back(PropertyInfo(Variant::INT, "version/revision")); + + p_list->push_back(PropertyInfo(Variant::BOOL, "orientation/landscape")); + p_list->push_back(PropertyInfo(Variant::BOOL, "orientation/portrait")); + p_list->push_back(PropertyInfo(Variant::BOOL, "orientation/landscape_flipped")); + p_list->push_back(PropertyInfo(Variant::BOOL, "orientation/portrait_flipped")); + + p_list->push_back(PropertyInfo(Variant::STRING, "images/background_color")); + p_list->push_back(PropertyInfo(Variant::OBJECT, "images/store_logo", PROPERTY_HINT_RESOURCE_TYPE, "ImageTexture")); + p_list->push_back(PropertyInfo(Variant::OBJECT, "images/square44x44_logo", PROPERTY_HINT_RESOURCE_TYPE, "ImageTexture")); + p_list->push_back(PropertyInfo(Variant::OBJECT, "images/square71x71_logo", PROPERTY_HINT_RESOURCE_TYPE, "ImageTexture")); + p_list->push_back(PropertyInfo(Variant::OBJECT, "images/square150x150_logo", PROPERTY_HINT_RESOURCE_TYPE, "ImageTexture")); + p_list->push_back(PropertyInfo(Variant::OBJECT, "images/square310x310_logo", PROPERTY_HINT_RESOURCE_TYPE, "ImageTexture")); + p_list->push_back(PropertyInfo(Variant::OBJECT, "images/wide310x150_logo", PROPERTY_HINT_RESOURCE_TYPE, "ImageTexture")); + p_list->push_back(PropertyInfo(Variant::OBJECT, "images/splash_screen", PROPERTY_HINT_RESOURCE_TYPE, "ImageTexture")); + + p_list->push_back(PropertyInfo(Variant::BOOL, "tiles/show_name_on_square150x150")); + p_list->push_back(PropertyInfo(Variant::BOOL, "tiles/show_name_on_wide310x150")); + p_list->push_back(PropertyInfo(Variant::BOOL, "tiles/show_name_on_square310x310")); + +#if 0 // Signing does not work :( disabling for now + p_list->push_back(PropertyInfo(Variant::BOOL, "signing/sign")); + p_list->push_back(PropertyInfo(Variant::STRING, "signing/certificate_file", PROPERTY_HINT_GLOBAL_FILE, "pfx")); + p_list->push_back(PropertyInfo(Variant::STRING, "signing/certificate_password")); +#endif + + // Capabilites + const char **basic = uwp_capabilities; + while (*basic) { + p_list->push_back(PropertyInfo(Variant::BOOL, "capabilities/" + String(*basic).camelcase_to_underscore(false))); + basic++; + } + + const char **uap = uwp_uap_capabilities; + while (*uap) { + p_list->push_back(PropertyInfo(Variant::BOOL, "capabilities/" + String(*uap).camelcase_to_underscore(false))); + uap++; + } + + const char **device = uwp_device_capabilites; + while (*device) { + p_list->push_back(PropertyInfo(Variant::BOOL, "capabilities/" + String(*device).camelcase_to_underscore(false))); + device++; + } + +} + +bool EditorExportPlatformWinrt::can_export(String * r_error) const { + + String err; + bool valid = true; + + if (!exists_export_template("winrt_x86_debug.zip") || !exists_export_template("winrt_x86_release.zip") + || !exists_export_template("winrt_arm_debug.zip") || !exists_export_template("winrt_arm_release.zip") + || !exists_export_template("winrt_x64_debug.zip") || !exists_export_template("winrt_x64_release.zip")) { + valid = false; + err += TTR("No export templates found.\nDownload and install export templates.") + "\n"; + } + + if (custom_debug_package != "" && !FileAccess::exists(custom_debug_package)) { + valid = false; + err += TTR("Custom debug package not found.") + "\n"; + } + + if (custom_release_package != "" && !FileAccess::exists(custom_release_package)) { + valid = false; + err += TTR("Custom release package not found.") + "\n"; + } + + if (!_valid_resource_name(unique_name)) { + valid = false; + err += TTR("Invalid unique name.") + "\n"; + } + + if (!_valid_guid(product_guid)) { + valid = false; + err += TTR("Invalid product GUID.") + "\n"; + } + + if (!_valid_guid(publisher_guid)) { + valid = false; + err += TTR("Invalid publisher GUID.") + "\n"; + } + + if (!_valid_bgcolor(background_color)) { + valid = false; + err += TTR("Invalid background color.") + "\n"; + } + + if (store_logo.is_valid() && !_valid_image(store_logo, 50, 50)) { + valid = false; + err += TTR("Invalid Store Logo image dimensions (should be 50x50).") + "\n"; + } + + if (square44.is_valid() && !_valid_image(square44, 44, 44)) { + valid = false; + err += TTR("Invalid square 44x44 logo image dimensions (should be 44x44).") + "\n"; + } + + if (square71.is_valid() && !_valid_image(square71, 71, 71)) { + valid = false; + err += TTR("Invalid square 71x71 logo image dimensions (should be 71x71).") + "\n"; + } + + if (square150.is_valid() && !_valid_image(square150, 150, 150)) { + valid = false; + err += TTR("Invalid square 150x150 logo image dimensions (should be 150x150).") + "\n"; + } + + if (square310.is_valid() && !_valid_image(square310, 310, 310)) { + valid = false; + err += TTR("Invalid square 310x310 logo image dimensions (should be 310x310).") + "\n"; + } + + if (wide310.is_valid() && !_valid_image(wide310, 310, 150)) { + valid = false; + err += TTR("Invalid wide 310x150 logo image dimensions (should be 310x150).") + "\n"; + } + + if (splash.is_valid() && !_valid_image(splash, 620, 300)) { + valid = false; + err += TTR("Invalid splash screen image dimensions (should be 620x300).") + "\n"; + } + + if (r_error) + *r_error = err; + + return valid; +} + +Error EditorExportPlatformWinrt::export_project(const String & p_path, bool p_debug, int p_flags) { + + String src_appx; + + EditorProgress ep("export", "Exporting for Windows Universal", 7); + + if (is_debug) + src_appx = custom_debug_package; + else + src_appx = custom_release_package; + + if (src_appx == "") { + String err; + if (p_debug) { + switch (arch) { + case X86: { + src_appx = find_export_template("winrt_x86_debug.zip", &err); + break; + } + case X64: { + src_appx = find_export_template("winrt_x64_debug.zip", &err); + break; + } + case ARM: { + src_appx = find_export_template("winrt_arm_debug.zip", &err); + break; + } + } + } else { + switch (arch) { + case X86: { + src_appx = find_export_template("winrt_x86_release.zip", &err); + break; + } + case X64: { + src_appx = find_export_template("winrt_x64_release.zip", &err); + break; + } + case ARM: { + src_appx = find_export_template("winrt_arm_release.zip", &err); + break; + } + } + } + if (src_appx == "") { + EditorNode::add_io_error(err); + return ERR_FILE_NOT_FOUND; + } + } + + Error err = OK; + + FileAccess *fa_pack = FileAccess::open(p_path, FileAccess::WRITE, &err); + ERR_FAIL_COND_V(err != OK, ERR_CANT_CREATE); + + AppxPackager packager; + packager.init(fa_pack, sign_package ? AppxPackager::SIGN : AppxPackager::DONT_SIGN, certificate_path, certificate_pass); + + FileAccess *src_f = NULL; + zlib_filefunc_def io = zipio_create_io_from_file(&src_f); + + ep.step("Creating package...", 0); + + unzFile pkg = unzOpen2(src_appx.utf8().get_data(), &io); + + if (!pkg) { + + EditorNode::add_io_error("Could not find template appx to export:\n" + src_appx); + return ERR_FILE_NOT_FOUND; + } + + int ret = unzGoToFirstFile(pkg); + + ep.step("Copying template files...", 1); + + EditorNode::progress_add_task("template_files", "Template files", 100); + packager.set_progress_task("template_files"); + + int template_files_amount = 9; + int template_file_no = 1; + + while (ret == UNZ_OK) { + + // get file name + unz_file_info info; + char fname[16834]; + ret = unzGetCurrentFileInfo(pkg, &info, fname, 16834, NULL, 0, NULL, 0); + + String path = fname; + + if (path.ends_with("/")) { + // Ignore directories + ret = unzGoToNextFile(pkg); + continue; + } + + Vector<uint8_t> data; + bool do_read = true; + + if (path.begins_with("Assets/")) { + + path = path.replace(".scale-100", ""); + + data = _get_image_data(path); + if (data.size() > 0) do_read = false; + } + + //read + if (do_read) { + data.resize(info.uncompressed_size); + unzOpenCurrentFile(pkg); + unzReadCurrentFile(pkg, data.ptr(), data.size()); + unzCloseCurrentFile(pkg); + } + + if (path == "AppxManifest.xml") { + + data = _fix_manifest(data, p_flags&(EXPORT_DUMB_CLIENT | EXPORT_REMOTE_DEBUG)); + } + + print_line("ADDING: " + path); + + packager.add_file(path, data.ptr(), data.size(), template_file_no++, template_files_amount, _should_compress_asset(path, data)); + + ret = unzGoToNextFile(pkg); + } + + EditorNode::progress_end_task("template_files"); + + ep.step("Creating command line...", 2); + + Vector<String> cl = cmdline.strip_edges().split(" "); + for (int i = 0;i<cl.size();i++) { + if (cl[i].strip_edges().length() == 0) { + cl.remove(i); + i--; + } + } + + if (!(p_flags & EXPORT_DUMB_CLIENT)) { + cl.push_back("-path"); + cl.push_back("game"); + } + + gen_export_flags(cl, p_flags); + + // Command line file + Vector<uint8_t> clf; + + // Argc + clf.resize(4); + encode_uint32(cl.size(), clf.ptr()); + + for (int i = 0; i < cl.size(); i++) { + + CharString txt = cl[i].utf8(); + int base = clf.size(); + clf.resize(base + 4 + txt.length()); + encode_uint32(txt.length(), &clf[base]); + copymem(&clf[base + 4], txt.ptr(), txt.length()); + print_line(itos(i) + " param: " + cl[i]); + } + + packager.add_file("__cl__.cl", clf.ptr(), clf.size(), -1, -1, false); + + ep.step("Adding project files...", 3); + + EditorNode::progress_add_task("project_files", "Project Files", 100); + packager.set_progress_task("project_files"); + + err = export_project_files(save_appx_file, &packager, false); + + EditorNode::progress_end_task("project_files"); + + ep.step("Closing package...", 7); + + unzClose(pkg); + + packager.finish(); + + return OK; +} + +EditorExportPlatformWinrt::EditorExportPlatformWinrt() { + + Image img(_winrt_logo); + logo = Ref<ImageTexture>(memnew(ImageTexture)); + logo->create_from_image(img); + + is_debug = true; + + custom_release_package = ""; + custom_debug_package = ""; + + arch = X86; + + display_name = ""; + short_name = "Godot"; + unique_name = "Godot.Engine"; + description = "Godot Engine"; + publisher = "CN=GodotEngine"; + publisher_display_name = "Godot Engine"; + + product_guid = "00000000-0000-0000-0000-000000000000"; + publisher_guid = "00000000-0000-0000-0000-000000000000"; + + version_major = 1; + version_minor = 0; + version_build = 0; + version_revision = 0; + + orientation_landscape = true; + orientation_portrait = true; + orientation_landscape_flipped = true; + orientation_portrait_flipped = true; + + background_color = "transparent"; + + name_on_square150 = false; + name_on_square310 = false; + name_on_wide = false; + + sign_package = false; + certificate_path = ""; + certificate_pass = ""; +} + +EditorExportPlatformWinrt::~EditorExportPlatformWinrt() {} + + +void register_winrt_exporter() { + + Ref<EditorExportPlatformWinrt> exporter = Ref<EditorExportPlatformWinrt>(memnew(EditorExportPlatformWinrt)); + EditorImportExport::get_singleton()->add_export_platform(exporter); +} diff --git a/platform/winrt/export/export.h b/platform/winrt/export/export.h new file mode 100644 index 0000000000..278d6d23cd --- /dev/null +++ b/platform/winrt/export/export.h @@ -0,0 +1,29 @@ +/*************************************************************************/ +/* export.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +void register_winrt_exporter(); diff --git a/platform/winrt/gl_context_egl.cpp b/platform/winrt/gl_context_egl.cpp index 12ccd404a9..f7b514b3c0 100644 --- a/platform/winrt/gl_context_egl.cpp +++ b/platform/winrt/gl_context_egl.cpp @@ -103,9 +103,22 @@ Error ContextEGL::initialize() { const EGLint displayAttributes[] = { - EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, + /*EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE, 9, EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE, 3, + EGL_NONE,*/ + // These are the default display attributes, used to request ANGLE's D3D11 renderer. + // eglInitialize will only succeed with these attributes if the hardware supports D3D11 Feature Level 10_0+. + EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, + + // EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER is an optimization that can have large performance benefits on mobile devices. + // Its syntax is subject to change, though. Please update your Visual Studio templates if you experience compilation issues with it. + //EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER, EGL_TRUE, + + // EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE is an option that enables ANGLE to automatically call + // the IDXGIDevice3::Trim method on behalf of the application when it gets suspended. + // Calling IDXGIDevice3::Trim when an application is suspended is a Windows Store application certification requirement. + EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE, EGL_TRUE, EGL_NONE, }; diff --git a/platform/winrt/gl_context_egl.h b/platform/winrt/gl_context_egl.h index 68dcdd5035..8124c2903d 100644 --- a/platform/winrt/gl_context_egl.h +++ b/platform/winrt/gl_context_egl.h @@ -49,6 +49,8 @@ class ContextEGL : public ContextGL { EGLint width; EGLint height; + bool vsync; + public: virtual void release_current(); @@ -59,6 +61,9 @@ public: virtual int get_window_height(); virtual void swap_buffers(); + void set_use_vsync(bool use) { vsync = use; } + bool is_using_vsync() const { return vsync; } + virtual Error initialize(); void reset(); diff --git a/platform/winrt/include/EGL/egl.h b/platform/winrt/include/EGL/egl.h deleted file mode 100644 index 12590a0e20..0000000000 --- a/platform/winrt/include/EGL/egl.h +++ /dev/null @@ -1,298 +0,0 @@ -#ifndef __egl_h_ -#define __egl_h_ 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2013-2014 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ -/* -** This header is generated from the Khronos OpenGL / OpenGL ES XML -** API Registry. The current version of the Registry, generator scripts -** used to make the header, and the header can be found at -** http://www.opengl.org/registry/ -** -** Khronos $Revision: 27018 $ on $Date: 2014-06-10 08:06:12 -0700 (Tue, 10 Jun 2014) $ -*/ - -#include <EGL/eglplatform.h> - -/* Generated on date 20140610 */ - -/* Generated C header for: - * API: egl - * Versions considered: .* - * Versions emitted: .* - * Default extensions included: None - * Additional extensions included: _nomatch_^ - * Extensions removed: _nomatch_^ - */ - -#ifndef EGL_VERSION_1_0 -#define EGL_VERSION_1_0 1 -typedef unsigned int EGLBoolean; -typedef void *EGLDisplay; -#include <KHR/khrplatform.h> -#include <EGL/eglplatform.h> -typedef void *EGLConfig; -typedef void *EGLSurface; -typedef void *EGLContext; -typedef void (*__eglMustCastToProperFunctionPointerType)(void); -#define EGL_ALPHA_SIZE 0x3021 -#define EGL_BAD_ACCESS 0x3002 -#define EGL_BAD_ALLOC 0x3003 -#define EGL_BAD_ATTRIBUTE 0x3004 -#define EGL_BAD_CONFIG 0x3005 -#define EGL_BAD_CONTEXT 0x3006 -#define EGL_BAD_CURRENT_SURFACE 0x3007 -#define EGL_BAD_DISPLAY 0x3008 -#define EGL_BAD_MATCH 0x3009 -#define EGL_BAD_NATIVE_PIXMAP 0x300A -#define EGL_BAD_NATIVE_WINDOW 0x300B -#define EGL_BAD_PARAMETER 0x300C -#define EGL_BAD_SURFACE 0x300D -#define EGL_BLUE_SIZE 0x3022 -#define EGL_BUFFER_SIZE 0x3020 -#define EGL_CONFIG_CAVEAT 0x3027 -#define EGL_CONFIG_ID 0x3028 -#define EGL_CORE_NATIVE_ENGINE 0x305B -#define EGL_DEPTH_SIZE 0x3025 -#define EGL_DONT_CARE ((EGLint)-1) -#define EGL_DRAW 0x3059 -#define EGL_EXTENSIONS 0x3055 -#define EGL_FALSE 0 -#define EGL_GREEN_SIZE 0x3023 -#define EGL_HEIGHT 0x3056 -#define EGL_LARGEST_PBUFFER 0x3058 -#define EGL_LEVEL 0x3029 -#define EGL_MAX_PBUFFER_HEIGHT 0x302A -#define EGL_MAX_PBUFFER_PIXELS 0x302B -#define EGL_MAX_PBUFFER_WIDTH 0x302C -#define EGL_NATIVE_RENDERABLE 0x302D -#define EGL_NATIVE_VISUAL_ID 0x302E -#define EGL_NATIVE_VISUAL_TYPE 0x302F -#define EGL_NONE 0x3038 -#define EGL_NON_CONFORMANT_CONFIG 0x3051 -#define EGL_NOT_INITIALIZED 0x3001 -#define EGL_NO_CONTEXT ((EGLContext)0) -#define EGL_NO_DISPLAY ((EGLDisplay)0) -#define EGL_NO_SURFACE ((EGLSurface)0) -#define EGL_PBUFFER_BIT 0x0001 -#define EGL_PIXMAP_BIT 0x0002 -#define EGL_READ 0x305A -#define EGL_RED_SIZE 0x3024 -#define EGL_SAMPLES 0x3031 -#define EGL_SAMPLE_BUFFERS 0x3032 -#define EGL_SLOW_CONFIG 0x3050 -#define EGL_STENCIL_SIZE 0x3026 -#define EGL_SUCCESS 0x3000 -#define EGL_SURFACE_TYPE 0x3033 -#define EGL_TRANSPARENT_BLUE_VALUE 0x3035 -#define EGL_TRANSPARENT_GREEN_VALUE 0x3036 -#define EGL_TRANSPARENT_RED_VALUE 0x3037 -#define EGL_TRANSPARENT_RGB 0x3052 -#define EGL_TRANSPARENT_TYPE 0x3034 -#define EGL_TRUE 1 -#define EGL_VENDOR 0x3053 -#define EGL_VERSION 0x3054 -#define EGL_WIDTH 0x3057 -#define EGL_WINDOW_BIT 0x0004 -EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); -EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); -EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface); -EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); -EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); -EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void); -EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw); -EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id); -EGLAPI EGLint EGLAPIENTRY eglGetError (void); -EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); -EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor); -EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); -EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name); -EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); -EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface); -EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy); -EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void); -EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine); -#endif /* EGL_VERSION_1_0 */ - -#ifndef EGL_VERSION_1_1 -#define EGL_VERSION_1_1 1 -#define EGL_BACK_BUFFER 0x3084 -#define EGL_BIND_TO_TEXTURE_RGB 0x3039 -#define EGL_BIND_TO_TEXTURE_RGBA 0x303A -#define EGL_CONTEXT_LOST 0x300E -#define EGL_MIN_SWAP_INTERVAL 0x303B -#define EGL_MAX_SWAP_INTERVAL 0x303C -#define EGL_MIPMAP_TEXTURE 0x3082 -#define EGL_MIPMAP_LEVEL 0x3083 -#define EGL_NO_TEXTURE 0x305C -#define EGL_TEXTURE_2D 0x305F -#define EGL_TEXTURE_FORMAT 0x3080 -#define EGL_TEXTURE_RGB 0x305D -#define EGL_TEXTURE_RGBA 0x305E -#define EGL_TEXTURE_TARGET 0x3081 -EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); -EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); -EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); -EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval); -#endif /* EGL_VERSION_1_1 */ - -#ifndef EGL_VERSION_1_2 -#define EGL_VERSION_1_2 1 -typedef unsigned int EGLenum; -typedef void *EGLClientBuffer; -#define EGL_ALPHA_FORMAT 0x3088 -#define EGL_ALPHA_FORMAT_NONPRE 0x308B -#define EGL_ALPHA_FORMAT_PRE 0x308C -#define EGL_ALPHA_MASK_SIZE 0x303E -#define EGL_BUFFER_PRESERVED 0x3094 -#define EGL_BUFFER_DESTROYED 0x3095 -#define EGL_CLIENT_APIS 0x308D -#define EGL_COLORSPACE 0x3087 -#define EGL_COLORSPACE_sRGB 0x3089 -#define EGL_COLORSPACE_LINEAR 0x308A -#define EGL_COLOR_BUFFER_TYPE 0x303F -#define EGL_CONTEXT_CLIENT_TYPE 0x3097 -#define EGL_DISPLAY_SCALING 10000 -#define EGL_HORIZONTAL_RESOLUTION 0x3090 -#define EGL_LUMINANCE_BUFFER 0x308F -#define EGL_LUMINANCE_SIZE 0x303D -#define EGL_OPENGL_ES_BIT 0x0001 -#define EGL_OPENVG_BIT 0x0002 -#define EGL_OPENGL_ES_API 0x30A0 -#define EGL_OPENVG_API 0x30A1 -#define EGL_OPENVG_IMAGE 0x3096 -#define EGL_PIXEL_ASPECT_RATIO 0x3092 -#define EGL_RENDERABLE_TYPE 0x3040 -#define EGL_RENDER_BUFFER 0x3086 -#define EGL_RGB_BUFFER 0x308E -#define EGL_SINGLE_BUFFER 0x3085 -#define EGL_SWAP_BEHAVIOR 0x3093 -#define EGL_UNKNOWN ((EGLint)-1) -#define EGL_VERTICAL_RESOLUTION 0x3091 -EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api); -EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void); -EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void); -#endif /* EGL_VERSION_1_2 */ - -#ifndef EGL_VERSION_1_3 -#define EGL_VERSION_1_3 1 -#define EGL_CONFORMANT 0x3042 -#define EGL_CONTEXT_CLIENT_VERSION 0x3098 -#define EGL_MATCH_NATIVE_PIXMAP 0x3041 -#define EGL_OPENGL_ES2_BIT 0x0004 -#define EGL_VG_ALPHA_FORMAT 0x3088 -#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B -#define EGL_VG_ALPHA_FORMAT_PRE 0x308C -#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 -#define EGL_VG_COLORSPACE 0x3087 -#define EGL_VG_COLORSPACE_sRGB 0x3089 -#define EGL_VG_COLORSPACE_LINEAR 0x308A -#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 -#endif /* EGL_VERSION_1_3 */ - -#ifndef EGL_VERSION_1_4 -#define EGL_VERSION_1_4 1 -#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) -#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 -#define EGL_MULTISAMPLE_RESOLVE 0x3099 -#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A -#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B -#define EGL_OPENGL_API 0x30A2 -#define EGL_OPENGL_BIT 0x0008 -#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 -EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void); -#endif /* EGL_VERSION_1_4 */ - -#ifndef EGL_VERSION_1_5 -#define EGL_VERSION_1_5 1 -typedef void *EGLSync; -typedef intptr_t EGLAttrib; -typedef khronos_utime_nanoseconds_t EGLTime; -#define EGL_CONTEXT_MAJOR_VERSION 0x3098 -#define EGL_CONTEXT_MINOR_VERSION 0x30FB -#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD -#define EGL_NO_RESET_NOTIFICATION 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF -#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001 -#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0 -#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 -#define EGL_OPENGL_ES3_BIT 0x00000040 -#define EGL_CL_EVENT_HANDLE 0x309C -#define EGL_SYNC_CL_EVENT 0x30FE -#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0 -#define EGL_SYNC_TYPE 0x30F7 -#define EGL_SYNC_STATUS 0x30F1 -#define EGL_SYNC_CONDITION 0x30F8 -#define EGL_SIGNALED 0x30F2 -#define EGL_UNSIGNALED 0x30F3 -#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001 -#define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull -#define EGL_TIMEOUT_EXPIRED 0x30F5 -#define EGL_CONDITION_SATISFIED 0x30F6 -#define EGL_NO_SYNC ((EGLSync)0) -#define EGL_SYNC_FENCE 0x30F9 -#define EGL_GL_COLORSPACE 0x309D -#define EGL_GL_COLORSPACE_SRGB 0x3089 -#define EGL_GL_COLORSPACE_LINEAR 0x308A -#define EGL_GL_RENDERBUFFER 0x30B9 -#define EGL_GL_TEXTURE_2D 0x30B1 -#define EGL_GL_TEXTURE_LEVEL 0x30BC -#define EGL_GL_TEXTURE_3D 0x30B2 -#define EGL_GL_TEXTURE_ZOFFSET 0x30BD -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8 -EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync); -EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); -EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value); -EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags); -#endif /* EGL_VERSION_1_5 */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/platform/winrt/include/EGL/eglext.h b/platform/winrt/include/EGL/eglext.h deleted file mode 100644 index 05b2555f31..0000000000 --- a/platform/winrt/include/EGL/eglext.h +++ /dev/null @@ -1,766 +0,0 @@ -#ifndef __eglext_h_ -#define __eglext_h_ 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2013-2014 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ -/* -** This header is generated from the Khronos OpenGL / OpenGL ES XML -** API Registry. The current version of the Registry, generator scripts -** used to make the header, and the header can be found at -** http://www.opengl.org/registry/ -** -** Khronos $Revision: 27018 $ on $Date: 2014-06-10 08:06:12 -0700 (Tue, 10 Jun 2014) $ -*/ - -#include <EGL/eglplatform.h> - -#define EGL_EGLEXT_VERSION 20140610 - -/* Generated C header for: - * API: egl - * Versions considered: .* - * Versions emitted: _nomatch_^ - * Default extensions included: egl - * Additional extensions included: _nomatch_^ - * Extensions removed: _nomatch_^ - */ - -#ifndef EGL_KHR_cl_event -#define EGL_KHR_cl_event 1 -#define EGL_CL_EVENT_HANDLE_KHR 0x309C -#define EGL_SYNC_CL_EVENT_KHR 0x30FE -#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF -#endif /* EGL_KHR_cl_event */ - -#ifndef EGL_KHR_cl_event2 -#define EGL_KHR_cl_event2 1 -typedef void *EGLSyncKHR; -typedef intptr_t EGLAttribKHR; -typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); -#endif -#endif /* EGL_KHR_cl_event2 */ - -#ifndef EGL_KHR_client_get_all_proc_addresses -#define EGL_KHR_client_get_all_proc_addresses 1 -#endif /* EGL_KHR_client_get_all_proc_addresses */ - -#ifndef EGL_KHR_config_attribs -#define EGL_KHR_config_attribs 1 -#define EGL_CONFORMANT_KHR 0x3042 -#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 -#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 -#endif /* EGL_KHR_config_attribs */ - -#ifndef EGL_KHR_create_context -#define EGL_KHR_create_context 1 -#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 -#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB -#define EGL_CONTEXT_FLAGS_KHR 0x30FC -#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD -#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF -#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 -#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 -#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 -#endif /* EGL_KHR_create_context */ - -#ifndef EGL_KHR_fence_sync -#define EGL_KHR_fence_sync 1 -#ifdef KHRONOS_SUPPORT_INT64 -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 -#define EGL_SYNC_CONDITION_KHR 0x30F8 -#define EGL_SYNC_FENCE_KHR 0x30F9 -#endif /* KHRONOS_SUPPORT_INT64 */ -#endif /* EGL_KHR_fence_sync */ - -#ifndef EGL_KHR_get_all_proc_addresses -#define EGL_KHR_get_all_proc_addresses 1 -#endif /* EGL_KHR_get_all_proc_addresses */ - -#ifndef EGL_KHR_gl_colorspace -#define EGL_KHR_gl_colorspace 1 -#define EGL_GL_COLORSPACE_KHR 0x309D -#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 -#define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A -#endif /* EGL_KHR_gl_colorspace */ - -#ifndef EGL_KHR_gl_renderbuffer_image -#define EGL_KHR_gl_renderbuffer_image 1 -#define EGL_GL_RENDERBUFFER_KHR 0x30B9 -#endif /* EGL_KHR_gl_renderbuffer_image */ - -#ifndef EGL_KHR_gl_texture_2D_image -#define EGL_KHR_gl_texture_2D_image 1 -#define EGL_GL_TEXTURE_2D_KHR 0x30B1 -#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC -#endif /* EGL_KHR_gl_texture_2D_image */ - -#ifndef EGL_KHR_gl_texture_3D_image -#define EGL_KHR_gl_texture_3D_image 1 -#define EGL_GL_TEXTURE_3D_KHR 0x30B2 -#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD -#endif /* EGL_KHR_gl_texture_3D_image */ - -#ifndef EGL_KHR_gl_texture_cubemap_image -#define EGL_KHR_gl_texture_cubemap_image 1 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 -#endif /* EGL_KHR_gl_texture_cubemap_image */ - -#ifndef EGL_KHR_image -#define EGL_KHR_image 1 -typedef void *EGLImageKHR; -#define EGL_NATIVE_PIXMAP_KHR 0x30B0 -#define EGL_NO_IMAGE_KHR ((EGLImageKHR)0) -typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image); -#endif -#endif /* EGL_KHR_image */ - -#ifndef EGL_KHR_image_base -#define EGL_KHR_image_base 1 -#define EGL_IMAGE_PRESERVED_KHR 0x30D2 -#endif /* EGL_KHR_image_base */ - -#ifndef EGL_KHR_image_pixmap -#define EGL_KHR_image_pixmap 1 -#endif /* EGL_KHR_image_pixmap */ - -#ifndef EGL_KHR_lock_surface -#define EGL_KHR_lock_surface 1 -#define EGL_READ_SURFACE_BIT_KHR 0x0001 -#define EGL_WRITE_SURFACE_BIT_KHR 0x0002 -#define EGL_LOCK_SURFACE_BIT_KHR 0x0080 -#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 -#define EGL_MATCH_FORMAT_KHR 0x3043 -#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 -#define EGL_FORMAT_RGB_565_KHR 0x30C1 -#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 -#define EGL_FORMAT_RGBA_8888_KHR 0x30C3 -#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 -#define EGL_LOCK_USAGE_HINT_KHR 0x30C5 -#define EGL_BITMAP_POINTER_KHR 0x30C6 -#define EGL_BITMAP_PITCH_KHR 0x30C7 -#define EGL_BITMAP_ORIGIN_KHR 0x30C8 -#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 -#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA -#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB -#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC -#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD -#define EGL_LOWER_LEFT_KHR 0x30CE -#define EGL_UPPER_LEFT_KHR 0x30CF -typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay dpy, EGLSurface surface); -#endif -#endif /* EGL_KHR_lock_surface */ - -#ifndef EGL_KHR_lock_surface2 -#define EGL_KHR_lock_surface2 1 -#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 -#endif /* EGL_KHR_lock_surface2 */ - -#ifndef EGL_KHR_lock_surface3 -#define EGL_KHR_lock_surface3 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); -#endif -#endif /* EGL_KHR_lock_surface3 */ - -#ifndef EGL_KHR_platform_android -#define EGL_KHR_platform_android 1 -#define EGL_PLATFORM_ANDROID_KHR 0x3141 -#endif /* EGL_KHR_platform_android */ - -#ifndef EGL_KHR_platform_gbm -#define EGL_KHR_platform_gbm 1 -#define EGL_PLATFORM_GBM_KHR 0x31D7 -#endif /* EGL_KHR_platform_gbm */ - -#ifndef EGL_KHR_platform_wayland -#define EGL_KHR_platform_wayland 1 -#define EGL_PLATFORM_WAYLAND_KHR 0x31D8 -#endif /* EGL_KHR_platform_wayland */ - -#ifndef EGL_KHR_platform_x11 -#define EGL_KHR_platform_x11 1 -#define EGL_PLATFORM_X11_KHR 0x31D5 -#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6 -#endif /* EGL_KHR_platform_x11 */ - -#ifndef EGL_KHR_reusable_sync -#define EGL_KHR_reusable_sync 1 -typedef khronos_utime_nanoseconds_t EGLTimeKHR; -#ifdef KHRONOS_SUPPORT_INT64 -#define EGL_SYNC_STATUS_KHR 0x30F1 -#define EGL_SIGNALED_KHR 0x30F2 -#define EGL_UNSIGNALED_KHR 0x30F3 -#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 -#define EGL_CONDITION_SATISFIED_KHR 0x30F6 -#define EGL_SYNC_TYPE_KHR 0x30F7 -#define EGL_SYNC_REUSABLE_KHR 0x30FA -#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 -#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull -#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0) -typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); -typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync); -EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); -EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); -EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); -#endif -#endif /* KHRONOS_SUPPORT_INT64 */ -#endif /* EGL_KHR_reusable_sync */ - -#ifndef EGL_KHR_stream -#define EGL_KHR_stream 1 -typedef void *EGLStreamKHR; -typedef khronos_uint64_t EGLuint64KHR; -#ifdef KHRONOS_SUPPORT_INT64 -#define EGL_NO_STREAM_KHR ((EGLStreamKHR)0) -#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210 -#define EGL_PRODUCER_FRAME_KHR 0x3212 -#define EGL_CONSUMER_FRAME_KHR 0x3213 -#define EGL_STREAM_STATE_KHR 0x3214 -#define EGL_STREAM_STATE_CREATED_KHR 0x3215 -#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216 -#define EGL_STREAM_STATE_EMPTY_KHR 0x3217 -#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218 -#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219 -#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A -#define EGL_BAD_STREAM_KHR 0x321B -#define EGL_BAD_STATE_KHR 0x321C -typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR (EGLDisplay dpy, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR (EGLDisplay dpy, EGLStreamKHR stream); -EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); -#endif -#endif /* KHRONOS_SUPPORT_INT64 */ -#endif /* EGL_KHR_stream */ - -#ifndef EGL_KHR_stream_consumer_gltexture -#define EGL_KHR_stream_consumer_gltexture 1 -#ifdef EGL_KHR_stream -#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR (EGLDisplay dpy, EGLStreamKHR stream); -EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR (EGLDisplay dpy, EGLStreamKHR stream); -EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLStreamKHR stream); -#endif -#endif /* EGL_KHR_stream */ -#endif /* EGL_KHR_stream_consumer_gltexture */ - -#ifndef EGL_KHR_stream_cross_process_fd -#define EGL_KHR_stream_cross_process_fd 1 -typedef int EGLNativeFileDescriptorKHR; -#ifdef EGL_KHR_stream -#define EGL_NO_FILE_DESCRIPTOR_KHR ((EGLNativeFileDescriptorKHR)(-1)) -typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); -typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR (EGLDisplay dpy, EGLStreamKHR stream); -EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); -#endif -#endif /* EGL_KHR_stream */ -#endif /* EGL_KHR_stream_cross_process_fd */ - -#ifndef EGL_KHR_stream_fifo -#define EGL_KHR_stream_fifo 1 -#ifdef EGL_KHR_stream -#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC -#define EGL_STREAM_TIME_NOW_KHR 0x31FD -#define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE -#define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); -#endif -#endif /* EGL_KHR_stream */ -#endif /* EGL_KHR_stream_fifo */ - -#ifndef EGL_KHR_stream_producer_aldatalocator -#define EGL_KHR_stream_producer_aldatalocator 1 -#ifdef EGL_KHR_stream -#endif /* EGL_KHR_stream */ -#endif /* EGL_KHR_stream_producer_aldatalocator */ - -#ifndef EGL_KHR_stream_producer_eglsurface -#define EGL_KHR_stream_producer_eglsurface 1 -#ifdef EGL_KHR_stream -#define EGL_STREAM_BIT_KHR 0x0800 -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); -#endif -#endif /* EGL_KHR_stream */ -#endif /* EGL_KHR_stream_producer_eglsurface */ - -#ifndef EGL_KHR_surfaceless_context -#define EGL_KHR_surfaceless_context 1 -#endif /* EGL_KHR_surfaceless_context */ - -#ifndef EGL_KHR_vg_parent_image -#define EGL_KHR_vg_parent_image 1 -#define EGL_VG_PARENT_IMAGE_KHR 0x30BA -#endif /* EGL_KHR_vg_parent_image */ - -#ifndef EGL_KHR_wait_sync -#define EGL_KHR_wait_sync 1 -typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); -#endif -#endif /* EGL_KHR_wait_sync */ - -#ifndef EGL_ANDROID_blob_cache -#define EGL_ANDROID_blob_cache 1 -typedef khronos_ssize_t EGLsizeiANDROID; -typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); -typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); -typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); -#endif -#endif /* EGL_ANDROID_blob_cache */ - -#ifndef EGL_ANDROID_framebuffer_target -#define EGL_ANDROID_framebuffer_target 1 -#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 -#endif /* EGL_ANDROID_framebuffer_target */ - -#ifndef EGL_ANDROID_image_native_buffer -#define EGL_ANDROID_image_native_buffer 1 -#define EGL_NATIVE_BUFFER_ANDROID 0x3140 -#endif /* EGL_ANDROID_image_native_buffer */ - -#ifndef EGL_ANDROID_native_fence_sync -#define EGL_ANDROID_native_fence_sync 1 -#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 -#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145 -#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146 -#define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 -typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR sync); -#endif -#endif /* EGL_ANDROID_native_fence_sync */ - -#ifndef EGL_ANDROID_recordable -#define EGL_ANDROID_recordable 1 -#define EGL_RECORDABLE_ANDROID 0x3142 -#endif /* EGL_ANDROID_recordable */ - -#ifndef EGL_ANGLE_d3d_share_handle_client_buffer -#define EGL_ANGLE_d3d_share_handle_client_buffer 1 -#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 -#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */ - -#ifndef EGL_ANGLE_window_fixed_size -#define EGL_ANGLE_window_fixed_size 1 -#define EGL_FIXED_SIZE_ANGLE 0x3201 -#endif /* EGL_ANGLE_window_fixed_size */ - -#ifndef EGL_ANGLE_query_surface_pointer -#define EGL_ANGLE_query_surface_pointer 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); -#endif -#endif /* EGL_ANGLE_query_surface_pointer */ - -#ifndef EGL_ANGLE_software_display -#define EGL_ANGLE_software_display 1 -#define EGL_SOFTWARE_DISPLAY_ANGLE ((EGLNativeDisplayType)-1) -#endif /* EGL_ANGLE_software_display */ - -#ifndef EGL_ANGLE_direct3d_display -#define EGL_ANGLE_direct3d_display 1 -#define EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ((EGLNativeDisplayType)-2) -#define EGL_D3D11_ONLY_DISPLAY_ANGLE ((EGLNativeDisplayType)-3) -#endif /* EGL_ANGLE_direct3d_display */ - -#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle -#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 -#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */ - -#ifndef EGL_ANGLE_surface_d3d_render_to_back_buffer -#define EGL_ANGLE_surface_d3d_render_to_back_buffer 1 -#define EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER 0x320B -#define EGL_ANGLE_SURFACE_RENDER_TO_BACK_BUFFER 0x320C -#endif /* EGL_ANGLE_surface_d3d_render_to_back_buffer */ - -#ifndef EGL_ANGLE_platform_angle -#define EGL_ANGLE_platform_angle 1 -#define EGL_PLATFORM_ANGLE_ANGLE 0x3201 -#define EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3202 -#define EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE 0x3203 -#define EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE 0x3204 -#define EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE 0x3205 -#endif /* EGL_ANGLE_platform_angle */ - -#ifndef EGL_ANGLE_platform_angle_d3d -#define EGL_ANGLE_platform_angle_d3d 1 -#define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3206 -#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3207 -#define EGL_PLATFORM_ANGLE_USE_WARP_ANGLE 0x3208 -#endif /* EGL_ANGLE_platform_angle_d3d */ - -#ifndef EGL_ANGLE_platform_angle_opengl -#define EGL_ANGLE_platform_angle_opengl 1 -#define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x3209 -#define EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x320A -#endif /* EGL_ANGLE_platform_angle_opengl */ - -#ifndef EGL_ARM_pixmap_multisample_discard -#define EGL_ARM_pixmap_multisample_discard 1 -#define EGL_DISCARD_SAMPLES_ARM 0x3286 -#endif /* EGL_ARM_pixmap_multisample_discard */ - -#ifndef EGL_EXT_buffer_age -#define EGL_EXT_buffer_age 1 -#define EGL_BUFFER_AGE_EXT 0x313D -#endif /* EGL_EXT_buffer_age */ - -#ifndef EGL_EXT_client_extensions -#define EGL_EXT_client_extensions 1 -#endif /* EGL_EXT_client_extensions */ - -#ifndef EGL_EXT_create_context_robustness -#define EGL_EXT_create_context_robustness 1 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 -#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF -#endif /* EGL_EXT_create_context_robustness */ - -#ifndef EGL_EXT_device_base -#define EGL_EXT_device_base 1 -typedef void *EGLDeviceEXT; -#define EGL_NO_DEVICE_EXT ((EGLDeviceEXT)(0)) -#define EGL_BAD_DEVICE_EXT 0x322B -#define EGL_DEVICE_EXT 0x322C -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); -typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); -EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); -#endif -#endif /* EGL_EXT_device_base */ - -#ifndef EGL_EXT_image_dma_buf_import -#define EGL_EXT_image_dma_buf_import 1 -#define EGL_LINUX_DMA_BUF_EXT 0x3270 -#define EGL_LINUX_DRM_FOURCC_EXT 0x3271 -#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272 -#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273 -#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274 -#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275 -#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276 -#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277 -#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 -#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 -#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A -#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B -#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C -#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D -#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E -#define EGL_ITU_REC601_EXT 0x327F -#define EGL_ITU_REC709_EXT 0x3280 -#define EGL_ITU_REC2020_EXT 0x3281 -#define EGL_YUV_FULL_RANGE_EXT 0x3282 -#define EGL_YUV_NARROW_RANGE_EXT 0x3283 -#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284 -#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285 -#endif /* EGL_EXT_image_dma_buf_import */ - -#ifndef EGL_EXT_multiview_window -#define EGL_EXT_multiview_window 1 -#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 -#endif /* EGL_EXT_multiview_window */ - -#ifndef EGL_EXT_platform_base -#define EGL_EXT_platform_base 1 -typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list); -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); -#endif -#endif /* EGL_EXT_platform_base */ - -#ifndef EGL_EXT_platform_device -#define EGL_EXT_platform_device 1 -#define EGL_PLATFORM_DEVICE_EXT 0x313F -#endif /* EGL_EXT_platform_device */ - -#ifndef EGL_EXT_platform_wayland -#define EGL_EXT_platform_wayland 1 -#define EGL_PLATFORM_WAYLAND_EXT 0x31D8 -#endif /* EGL_EXT_platform_wayland */ - -#ifndef EGL_EXT_platform_x11 -#define EGL_EXT_platform_x11 1 -#define EGL_PLATFORM_X11_EXT 0x31D5 -#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6 -#endif /* EGL_EXT_platform_x11 */ - -#ifndef EGL_EXT_protected_surface -#define EGL_EXT_protected_surface 1 -#define EGL_PROTECTED_CONTENT_EXT 0x32C0 -#endif /* EGL_EXT_protected_surface */ - -#ifndef EGL_EXT_swap_buffers_with_damage -#define EGL_EXT_swap_buffers_with_damage 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); -#endif -#endif /* EGL_EXT_swap_buffers_with_damage */ - -#ifndef EGL_HI_clientpixmap -#define EGL_HI_clientpixmap 1 -struct EGLClientPixmapHI { - void *pData; - EGLint iWidth; - EGLint iHeight; - EGLint iStride; -}; -#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); -#endif -#endif /* EGL_HI_clientpixmap */ - -#ifndef EGL_HI_colorformats -#define EGL_HI_colorformats 1 -#define EGL_COLOR_FORMAT_HI 0x8F70 -#define EGL_COLOR_RGB_HI 0x8F71 -#define EGL_COLOR_RGBA_HI 0x8F72 -#define EGL_COLOR_ARGB_HI 0x8F73 -#endif /* EGL_HI_colorformats */ - -#ifndef EGL_IMG_context_priority -#define EGL_IMG_context_priority 1 -#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100 -#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101 -#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102 -#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103 -#endif /* EGL_IMG_context_priority */ - -#ifndef EGL_MESA_drm_image -#define EGL_MESA_drm_image 1 -#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 -#define EGL_DRM_BUFFER_USE_MESA 0x31D1 -#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 -#define EGL_DRM_BUFFER_MESA 0x31D3 -#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 -#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 -#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 -typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); -#endif -#endif /* EGL_MESA_drm_image */ - -#ifndef EGL_MESA_platform_gbm -#define EGL_MESA_platform_gbm 1 -#define EGL_PLATFORM_GBM_MESA 0x31D7 -#endif /* EGL_MESA_platform_gbm */ - -#ifndef EGL_NOK_swap_region -#define EGL_NOK_swap_region 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); -#endif -#endif /* EGL_NOK_swap_region */ - -#ifndef EGL_NOK_swap_region2 -#define EGL_NOK_swap_region2 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); -#endif -#endif /* EGL_NOK_swap_region2 */ - -#ifndef EGL_NOK_texture_from_pixmap -#define EGL_NOK_texture_from_pixmap 1 -#define EGL_Y_INVERTED_NOK 0x307F -#endif /* EGL_NOK_texture_from_pixmap */ - -#ifndef EGL_NV_3dvision_surface -#define EGL_NV_3dvision_surface 1 -#define EGL_AUTO_STEREO_NV 0x3136 -#endif /* EGL_NV_3dvision_surface */ - -#ifndef EGL_NV_coverage_sample -#define EGL_NV_coverage_sample 1 -#define EGL_COVERAGE_BUFFERS_NV 0x30E0 -#define EGL_COVERAGE_SAMPLES_NV 0x30E1 -#endif /* EGL_NV_coverage_sample */ - -#ifndef EGL_NV_coverage_sample_resolve -#define EGL_NV_coverage_sample_resolve 1 -#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 -#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 -#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 -#endif /* EGL_NV_coverage_sample_resolve */ - -#ifndef EGL_NV_depth_nonlinear -#define EGL_NV_depth_nonlinear 1 -#define EGL_DEPTH_ENCODING_NV 0x30E2 -#define EGL_DEPTH_ENCODING_NONE_NV 0 -#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 -#endif /* EGL_NV_depth_nonlinear */ - -#ifndef EGL_NV_native_query -#define EGL_NV_native_query 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV (EGLDisplay dpy, EGLNativeDisplayType *display_id); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); -#endif -#endif /* EGL_NV_native_query */ - -#ifndef EGL_NV_post_convert_rounding -#define EGL_NV_post_convert_rounding 1 -#endif /* EGL_NV_post_convert_rounding */ - -#ifndef EGL_NV_post_sub_buffer -#define EGL_NV_post_sub_buffer 1 -#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE -typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); -#endif -#endif /* EGL_NV_post_sub_buffer */ - -#ifndef EGL_NV_stream_sync -#define EGL_NV_stream_sync 1 -#define EGL_SYNC_NEW_FRAME_NV 0x321F -typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateStreamSyncNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); -#endif -#endif /* EGL_NV_stream_sync */ - -#ifndef EGL_NV_sync -#define EGL_NV_sync 1 -typedef void *EGLSyncNV; -typedef khronos_utime_nanoseconds_t EGLTimeNV; -#ifdef KHRONOS_SUPPORT_INT64 -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6 -#define EGL_SYNC_STATUS_NV 0x30E7 -#define EGL_SIGNALED_NV 0x30E8 -#define EGL_UNSIGNALED_NV 0x30E9 -#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 -#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull -#define EGL_ALREADY_SIGNALED_NV 0x30EA -#define EGL_TIMEOUT_EXPIRED_NV 0x30EB -#define EGL_CONDITION_SATISFIED_NV 0x30EC -#define EGL_SYNC_TYPE_NV 0x30ED -#define EGL_SYNC_CONDITION_NV 0x30EE -#define EGL_SYNC_FENCE_NV 0x30EF -#define EGL_NO_SYNC_NV ((EGLSyncNV)0) -typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync); -typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync); -EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync); -EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); -EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode); -EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value); -#endif -#endif /* KHRONOS_SUPPORT_INT64 */ -#endif /* EGL_NV_sync */ - -#ifndef EGL_NV_system_time -#define EGL_NV_system_time 1 -typedef khronos_utime_nanoseconds_t EGLuint64NV; -#ifdef KHRONOS_SUPPORT_INT64 -typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void); -typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV (void); -EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void); -#endif -#endif /* KHRONOS_SUPPORT_INT64 */ -#endif /* EGL_NV_system_time */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/platform/winrt/include/EGL/eglplatform.h b/platform/winrt/include/EGL/eglplatform.h deleted file mode 100644 index 71dadc79d5..0000000000 --- a/platform/winrt/include/EGL/eglplatform.h +++ /dev/null @@ -1,131 +0,0 @@ -#ifndef __eglplatform_h_ -#define __eglplatform_h_ - -/* -** Copyright (c) 2007-2013 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -/* Platform-specific types and definitions for egl.h - * $Revision: 23432 $ on $Date: 2013-10-09 00:57:24 -0700 (Wed, 09 Oct 2013) $ - * - * Adopters may modify khrplatform.h and this file to suit their platform. - * You are encouraged to submit all modifications to the Khronos group so that - * they can be included in future versions of this file. Please submit changes - * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) - * by filing a bug against product "EGL" component "Registry". - */ - -#include <KHR/khrplatform.h> - -/* Macros used in EGL function prototype declarations. - * - * EGL functions should be prototyped as: - * - * EGLAPI return-type EGLAPIENTRY eglFunction(arguments); - * typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments); - * - * KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h - */ - -#ifndef EGLAPI -#define EGLAPI KHRONOS_APICALL -#endif - -#ifndef EGLAPIENTRY -#define EGLAPIENTRY KHRONOS_APIENTRY -#endif -#define EGLAPIENTRYP EGLAPIENTRY* - -/* The types NativeDisplayType, NativeWindowType, and NativePixmapType - * are aliases of window-system-dependent types, such as X Display * or - * Windows Device Context. They must be defined in platform-specific - * code below. The EGL-prefixed versions of Native*Type are the same - * types, renamed in EGL 1.3 so all types in the API start with "EGL". - * - * Khronos STRONGLY RECOMMENDS that you use the default definitions - * provided below, since these changes affect both binary and source - * portability of applications using EGL running on different EGL - * implementations. - */ - -#if defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */ -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#include <windows.h> - -typedef HDC EGLNativeDisplayType; -typedef HBITMAP EGLNativePixmapType; - -#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_PC_APP || WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) /* Windows Store */ -#include <inspectable.h> -typedef IInspectable* EGLNativeWindowType; -#else -typedef HWND EGLNativeWindowType; -#endif - -#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */ - -typedef int EGLNativeDisplayType; -typedef void *EGLNativeWindowType; -typedef void *EGLNativePixmapType; - -#elif defined(__ANDROID__) || defined(ANDROID) - -#include <android/native_window.h> - -struct egl_native_pixmap_t; - -typedef struct ANativeWindow* EGLNativeWindowType; -typedef struct egl_native_pixmap_t* EGLNativePixmapType; -typedef void* EGLNativeDisplayType; - -#elif defined(__unix__) - -/* X11 (tentative) */ -#include <X11/Xlib.h> -#include <X11/Xutil.h> - -typedef Display *EGLNativeDisplayType; -typedef Pixmap EGLNativePixmapType; -typedef Window EGLNativeWindowType; - -#else -#error "Platform not recognized" -#endif - -/* EGL 1.2 types, renamed for consistency in EGL 1.3 */ -typedef EGLNativeDisplayType NativeDisplayType; -typedef EGLNativePixmapType NativePixmapType; -typedef EGLNativeWindowType NativeWindowType; - - -/* Define EGLint. This must be a signed integral type large enough to contain - * all legal attribute names and values passed into and out of EGL, whether - * their type is boolean, bitmask, enumerant (symbolic constant), integer, - * handle, or other. While in general a 32-bit integer will suffice, if - * handles are 64 bit types, then EGLint should be defined as a signed 64-bit - * integer type. - */ -typedef khronos_int32_t EGLint; - -#endif /* __eglplatform_h */ diff --git a/platform/winrt/include/GLES2/gl2.h b/platform/winrt/include/GLES2/gl2.h deleted file mode 100644 index c2d8357268..0000000000 --- a/platform/winrt/include/GLES2/gl2.h +++ /dev/null @@ -1,620 +0,0 @@ -#ifndef __gl2_h_ -#define __gl2_h_ - -/* $Revision: 20555 $ on $Date:: 2013-02-12 14:32:47 -0800 #$ */ - -#include <GLES2/gl2platform.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -/*------------------------------------------------------------------------- - * Data type definitions - *-----------------------------------------------------------------------*/ - -typedef void GLvoid; -typedef char GLchar; -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef khronos_int8_t GLbyte; -typedef short GLshort; -typedef int GLint; -typedef int GLsizei; -typedef khronos_uint8_t GLubyte; -typedef unsigned short GLushort; -typedef unsigned int GLuint; -typedef khronos_float_t GLfloat; -typedef khronos_float_t GLclampf; -typedef khronos_int32_t GLfixed; - -/* GL types for handling large vertex buffer objects */ -typedef khronos_intptr_t GLintptr; -typedef khronos_ssize_t GLsizeiptr; - -/* OpenGL ES core versions */ -#define GL_ES_VERSION_2_0 1 - -/* ClearBufferMask */ -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 - -/* Boolean */ -#define GL_FALSE 0 -#define GL_TRUE 1 - -/* BeginMode */ -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 - -/* AlphaFunction (not supported in ES20) */ -/* GL_NEVER */ -/* GL_LESS */ -/* GL_EQUAL */ -/* GL_LEQUAL */ -/* GL_GREATER */ -/* GL_NOTEQUAL */ -/* GL_GEQUAL */ -/* GL_ALWAYS */ - -/* BlendingFactorDest */ -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 - -/* BlendingFactorSrc */ -/* GL_ZERO */ -/* GL_ONE */ -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -/* GL_SRC_ALPHA */ -/* GL_ONE_MINUS_SRC_ALPHA */ -/* GL_DST_ALPHA */ -/* GL_ONE_MINUS_DST_ALPHA */ - -/* BlendEquationSeparate */ -#define GL_FUNC_ADD 0x8006 -#define GL_BLEND_EQUATION 0x8009 -#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */ -#define GL_BLEND_EQUATION_ALPHA 0x883D - -/* BlendSubtract */ -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B - -/* Separate Blend Functions */ -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 - -/* Buffer Objects */ -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 - -#define GL_STREAM_DRAW 0x88E0 -#define GL_STATIC_DRAW 0x88E4 -#define GL_DYNAMIC_DRAW 0x88E8 - -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 - -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 - -/* CullFaceMode */ -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_FRONT_AND_BACK 0x0408 - -/* DepthFunction */ -/* GL_NEVER */ -/* GL_LESS */ -/* GL_EQUAL */ -/* GL_LEQUAL */ -/* GL_GREATER */ -/* GL_NOTEQUAL */ -/* GL_GEQUAL */ -/* GL_ALWAYS */ - -/* EnableCap */ -#define GL_TEXTURE_2D 0x0DE1 -#define GL_CULL_FACE 0x0B44 -#define GL_BLEND 0x0BE2 -#define GL_DITHER 0x0BD0 -#define GL_STENCIL_TEST 0x0B90 -#define GL_DEPTH_TEST 0x0B71 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_COVERAGE 0x80A0 - -/* ErrorCode */ -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_OUT_OF_MEMORY 0x0505 - -/* FrontFaceDirection */ -#define GL_CW 0x0900 -#define GL_CCW 0x0901 - -/* GetPName */ -#define GL_LINE_WIDTH 0x0B21 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_VIEWPORT 0x0BA2 -#define GL_SCISSOR_BOX 0x0C10 -/* GL_SCISSOR_TEST */ -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -/* GL_POLYGON_OFFSET_FILL */ -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB - -/* GetTextureParameter */ -/* GL_TEXTURE_MAG_FILTER */ -/* GL_TEXTURE_MIN_FILTER */ -/* GL_TEXTURE_WRAP_S */ -/* GL_TEXTURE_WRAP_T */ - -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 - -/* HintMode */ -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 - -/* HintTarget */ -#define GL_GENERATE_MIPMAP_HINT 0x8192 - -/* DataType */ -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_FIXED 0x140C - -/* PixelFormat */ -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A - -/* PixelType */ -/* GL_UNSIGNED_BYTE */ -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 - -/* Shaders */ -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_SHADER_TYPE 0x8B4F -#define GL_DELETE_STATUS 0x8B80 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D - -/* StencilFunction */ -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 - -/* StencilOp */ -/* GL_ZERO */ -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_INVERT 0x150A -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 - -/* StringName */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 - -/* TextureMagFilter */ -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 - -/* TextureMinFilter */ -/* GL_NEAREST */ -/* GL_LINEAR */ -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 - -/* TextureParameterName */ -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 - -/* TextureTarget */ -/* GL_TEXTURE_2D */ -#define GL_TEXTURE 0x1702 - -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C - -/* TextureUnit */ -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 - -/* TextureWrapMode */ -#define GL_REPEAT 0x2901 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_MIRRORED_REPEAT 0x8370 - -/* Uniform Types */ -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_CUBE 0x8B60 - -/* Vertex Arrays */ -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F - -/* Read Format */ -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B - -/* Shader Source */ -#define GL_COMPILE_STATUS 0x8B81 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_SHADER_COMPILER 0x8DFA - -/* Shader Binary */ -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 - -/* Shader Precision-Specified Types */ -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 - -/* Framebuffer Object. */ -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 - -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGB565 0x8D62 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_STENCIL_INDEX8 0x8D48 - -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 - -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 - -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 - -#define GL_NONE 0 - -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD - -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 - -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 - -/*------------------------------------------------------------------------- - * GL core functions. - *-----------------------------------------------------------------------*/ - -GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); -GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); -GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); -GL_APICALL void GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GL_APICALL void GL_APIENTRY glBlendEquation ( GLenum mode ); -GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); -GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); -GL_APICALL void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth); -GL_APICALL void GL_APIENTRY glClearStencil (GLint s); -GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); -GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); -GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); -GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); -GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); -GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); -GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); -GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); -GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); -GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); -GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); -GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); -GL_APICALL void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); -GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glDisable (GLenum cap); -GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); -GL_APICALL void GL_APIENTRY glEnable (GLenum cap); -GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glFinish (void); -GL_APICALL void GL_APIENTRY glFlush (void); -GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); -GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); -GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); -GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); -GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); -GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); -GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); -GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); -GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); -GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL GLenum GL_APIENTRY glGetError (void); -GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); -GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); -GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); -GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); -GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); -GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); -GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); -GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); -GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); -GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); -GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); -GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); -GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); -GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); -GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); -GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); -GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); -GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); -GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); -GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); -GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); -GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); -GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); -GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); -GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); -GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x); -GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x); -GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); -GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); -GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); -GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); -GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); -GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); -GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); -GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); - -#ifdef __cplusplus -} -#endif - -#endif /* __gl2_h_ */ diff --git a/platform/winrt/include/GLES2/gl2ext.h b/platform/winrt/include/GLES2/gl2ext.h deleted file mode 100644 index d5a9dd195b..0000000000 --- a/platform/winrt/include/GLES2/gl2ext.h +++ /dev/null @@ -1,2013 +0,0 @@ -#ifndef __gl2ext_h_ -#define __gl2ext_h_ - -/* $Revision: 20795 $ on $Date:: 2013-03-07 01:01:58 -0800 #$ */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -#ifndef GL_APIENTRYP -# define GL_APIENTRYP GL_APIENTRY* -#endif - -/*------------------------------------------------------------------------* - * OES extension tokens - *------------------------------------------------------------------------*/ - -/* GL_OES_compressed_ETC1_RGB8_texture */ -#ifndef GL_OES_compressed_ETC1_RGB8_texture -#define GL_ETC1_RGB8_OES 0x8D64 -#endif - -/* GL_OES_compressed_paletted_texture */ -#ifndef GL_OES_compressed_paletted_texture -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 -#endif - -/* GL_OES_depth24 */ -#ifndef GL_OES_depth24 -#define GL_DEPTH_COMPONENT24_OES 0x81A6 -#endif - -/* GL_OES_depth32 */ -#ifndef GL_OES_depth32 -#define GL_DEPTH_COMPONENT32_OES 0x81A7 -#endif - -/* GL_OES_depth_texture */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_EGL_image */ -#ifndef GL_OES_EGL_image -typedef void* GLeglImageOES; -#endif - -/* GL_OES_EGL_image_external */ -#ifndef GL_OES_EGL_image_external -/* GLeglImageOES defined in GL_OES_EGL_image already. */ -#define GL_TEXTURE_EXTERNAL_OES 0x8D65 -#define GL_SAMPLER_EXTERNAL_OES 0x8D66 -#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 -#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 -#endif - -/* GL_OES_element_index_uint */ -#ifndef GL_OES_element_index_uint -#define GL_UNSIGNED_INT 0x1405 -#endif - -/* GL_OES_get_program_binary */ -#ifndef GL_OES_get_program_binary -#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE -#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF -#endif - -/* GL_OES_mapbuffer */ -#ifndef GL_OES_mapbuffer -#define GL_WRITE_ONLY_OES 0x88B9 -#define GL_BUFFER_ACCESS_OES 0x88BB -#define GL_BUFFER_MAPPED_OES 0x88BC -#define GL_BUFFER_MAP_POINTER_OES 0x88BD -#endif - -/* GL_OES_packed_depth_stencil */ -#ifndef GL_OES_packed_depth_stencil -#define GL_DEPTH_STENCIL_OES 0x84F9 -#define GL_UNSIGNED_INT_24_8_OES 0x84FA -#define GL_DEPTH24_STENCIL8_OES 0x88F0 -#endif - -/* GL_OES_required_internalformat */ -#ifndef GL_OES_required_internalformat -#define GL_ALPHA8_OES 0x803C -#define GL_DEPTH_COMPONENT16_OES 0x81A5 -/* reuse GL_DEPTH_COMPONENT24_OES */ -/* reuse GL_DEPTH24_STENCIL8_OES */ -/* reuse GL_DEPTH_COMPONENT32_OES */ -#define GL_LUMINANCE4_ALPHA4_OES 0x8043 -#define GL_LUMINANCE8_ALPHA8_OES 0x8045 -#define GL_LUMINANCE8_OES 0x8040 -#define GL_RGBA4_OES 0x8056 -#define GL_RGB5_A1_OES 0x8057 -#define GL_RGB565_OES 0x8D62 -/* reuse GL_RGB8_OES */ -/* reuse GL_RGBA8_OES */ -/* reuse GL_RGB10_EXT */ -/* reuse GL_RGB10_A2_EXT */ -#endif - -/* GL_OES_rgb8_rgba8 */ -#ifndef GL_OES_rgb8_rgba8 -#define GL_RGB8_OES 0x8051 -#define GL_RGBA8_OES 0x8058 -#endif - -/* GL_OES_standard_derivatives */ -#ifndef GL_OES_standard_derivatives -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B -#endif - -/* GL_OES_stencil1 */ -#ifndef GL_OES_stencil1 -#define GL_STENCIL_INDEX1_OES 0x8D46 -#endif - -/* GL_OES_stencil4 */ -#ifndef GL_OES_stencil4 -#define GL_STENCIL_INDEX4_OES 0x8D47 -#endif - -#ifndef GL_OES_surfaceless_context -#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 -#endif - -/* GL_OES_texture_3D */ -#ifndef GL_OES_texture_3D -#define GL_TEXTURE_WRAP_R_OES 0x8072 -#define GL_TEXTURE_3D_OES 0x806F -#define GL_TEXTURE_BINDING_3D_OES 0x806A -#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 -#define GL_SAMPLER_3D_OES 0x8B5F -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 -#endif - -/* GL_OES_texture_float */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_float_linear */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_half_float */ -#ifndef GL_OES_texture_half_float -#define GL_HALF_FLOAT_OES 0x8D61 -#endif - -/* GL_OES_texture_half_float_linear */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_npot */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_vertex_array_object */ -#ifndef GL_OES_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 -#endif - -/* GL_OES_vertex_half_float */ -/* GL_HALF_FLOAT_OES defined in GL_OES_texture_half_float already. */ - -/* GL_OES_vertex_type_10_10_10_2 */ -#ifndef GL_OES_vertex_type_10_10_10_2 -#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 -#define GL_INT_10_10_10_2_OES 0x8DF7 -#endif - -/*------------------------------------------------------------------------* - * KHR extension tokens - *------------------------------------------------------------------------*/ - -#ifndef GL_KHR_debug -typedef void (GL_APIENTRYP GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION 0x824A -#define GL_DEBUG_SOURCE_OTHER 0x824B -#define GL_DEBUG_TYPE_ERROR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 -#define GL_DEBUG_TYPE_OTHER 0x8251 -#define GL_DEBUG_TYPE_MARKER 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D -#define GL_BUFFER 0x82E0 -#define GL_SHADER 0x82E1 -#define GL_PROGRAM 0x82E2 -#define GL_QUERY 0x82E3 -/* PROGRAM_PIPELINE only in GL */ -#define GL_SAMPLER 0x82E6 -/* DISPLAY_LIST only in GL */ -#define GL_MAX_LABEL_LENGTH 0x82E8 -#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES 0x9145 -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 -#define GL_DEBUG_SEVERITY_LOW 0x9148 -#define GL_DEBUG_OUTPUT 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#endif - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD -#endif - -/*------------------------------------------------------------------------* - * AMD extension tokens - *------------------------------------------------------------------------*/ - -/* GL_AMD_compressed_3DC_texture */ -#ifndef GL_AMD_compressed_3DC_texture -#define GL_3DC_X_AMD 0x87F9 -#define GL_3DC_XY_AMD 0x87FA -#endif - -/* GL_AMD_compressed_ATC_texture */ -#ifndef GL_AMD_compressed_ATC_texture -#define GL_ATC_RGB_AMD 0x8C92 -#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 -#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE -#endif - -/* GL_AMD_performance_monitor */ -#ifndef GL_AMD_performance_monitor -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 -#endif - -/* GL_AMD_program_binary_Z400 */ -#ifndef GL_AMD_program_binary_Z400 -#define GL_Z400_BINARY_AMD 0x8740 -#endif - -/*------------------------------------------------------------------------* - * ANGLE extension tokens - *------------------------------------------------------------------------*/ - -/* GL_ANGLE_depth_texture */ -#ifndef GL_ANGLE_depth_texture -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_DEPTH_STENCIL_OES 0x84F9 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_UNSIGNED_INT 0x1405 -#define GL_UNSIGNED_INT_24_8_OES 0x84FA -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT32_OES 0x81A7 -#define GL_DEPTH24_STENCIL8_OES 0x88F0 -#endif - -/* GL_ANGLE_framebuffer_blit */ -#ifndef GL_ANGLE_framebuffer_blit -#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA -#endif - -/* GL_ANGLE_framebuffer_multisample */ -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 -#define GL_MAX_SAMPLES_ANGLE 0x8D57 -#endif - -/* GL_ANGLE_instanced_arrays */ -#ifndef GL_ANGLE_instanced_arrays -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE -#endif - -/* GL_ANGLE_pack_reverse_row_order */ -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 -#endif - -/* GL_ANGLE_program_binary */ -#ifndef GL_ANGLE_program_binary -#define GL_PROGRAM_BINARY_ANGLE 0x93A6 -#endif - -/* GL_ANGLE_texture_compression_dxt3 */ -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#endif - -/* GL_ANGLE_texture_compression_dxt5 */ -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 -#endif - -/* GL_ANGLE_texture_usage */ -#ifndef GL_ANGLE_texture_usage -#define GL_TEXTURE_USAGE_ANGLE 0x93A2 -#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 -#endif - -/* GL_ANGLE_translated_shader_source */ -#ifndef GL_ANGLE_translated_shader_source -#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 -#endif - -/*------------------------------------------------------------------------* - * APPLE extension tokens - *------------------------------------------------------------------------*/ - -/* GL_APPLE_copy_texture_levels */ -/* No new tokens introduced by this extension. */ - -/* GL_APPLE_framebuffer_multisample */ -#ifndef GL_APPLE_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 -#define GL_MAX_SAMPLES_APPLE 0x8D57 -#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA -#endif - -/* GL_APPLE_rgb_422 */ -#ifndef GL_APPLE_rgb_422 -#define GL_RGB_422_APPLE 0x8A1F -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#endif - -/* GL_APPLE_sync */ -#ifndef GL_APPLE_sync - -#ifndef __gl3_h_ -/* These types are defined with reference to <inttypes.h> - * in the Apple extension spec, but here we use the Khronos - * portable types in khrplatform.h, and assume those types - * are always defined. - * If any other extensions using these types are defined, - * the typedefs must move out of this block and be shared. - */ -typedef khronos_int64_t GLint64; -typedef khronos_uint64_t GLuint64; -typedef struct __GLsync *GLsync; -#endif - -#define GL_SYNC_OBJECT_APPLE 0x8A53 -#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 -#define GL_OBJECT_TYPE_APPLE 0x9112 -#define GL_SYNC_CONDITION_APPLE 0x9113 -#define GL_SYNC_STATUS_APPLE 0x9114 -#define GL_SYNC_FLAGS_APPLE 0x9115 -#define GL_SYNC_FENCE_APPLE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 -#define GL_UNSIGNALED_APPLE 0x9118 -#define GL_SIGNALED_APPLE 0x9119 -#define GL_ALREADY_SIGNALED_APPLE 0x911A -#define GL_TIMEOUT_EXPIRED_APPLE 0x911B -#define GL_CONDITION_SATISFIED_APPLE 0x911C -#define GL_WAIT_FAILED_APPLE 0x911D -#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 -#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull -#endif - -/* GL_APPLE_texture_format_BGRA8888 */ -#ifndef GL_APPLE_texture_format_BGRA8888 -#define GL_BGRA_EXT 0x80E1 -#endif - -/* GL_APPLE_texture_max_level */ -#ifndef GL_APPLE_texture_max_level -#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D -#endif - -/*------------------------------------------------------------------------* - * ARM extension tokens - *------------------------------------------------------------------------*/ - -/* GL_ARM_mali_program_binary */ -#ifndef GL_ARM_mali_program_binary -#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 -#endif - -/* GL_ARM_mali_shader_binary */ -#ifndef GL_ARM_mali_shader_binary -#define GL_MALI_SHADER_BINARY_ARM 0x8F60 -#endif - -/* GL_ARM_rgba8 */ -/* No new tokens introduced by this extension. */ - -/*------------------------------------------------------------------------* - * EXT extension tokens - *------------------------------------------------------------------------*/ - -/* GL_EXT_blend_minmax */ -#ifndef GL_EXT_blend_minmax -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#endif - -/* GL_EXT_color_buffer_half_float */ -#ifndef GL_EXT_color_buffer_half_float -#define GL_RGBA16F_EXT 0x881A -#define GL_RGB16F_EXT 0x881B -#define GL_RG16F_EXT 0x822F -#define GL_R16F_EXT 0x822D -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 -#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 -#endif - -/* GL_EXT_debug_label */ -#ifndef GL_EXT_debug_label -#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F -#define GL_PROGRAM_OBJECT_EXT 0x8B40 -#define GL_SHADER_OBJECT_EXT 0x8B48 -#define GL_BUFFER_OBJECT_EXT 0x9151 -#define GL_QUERY_OBJECT_EXT 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 -#endif - -/* GL_EXT_debug_marker */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_discard_framebuffer */ -#ifndef GL_EXT_discard_framebuffer -#define GL_COLOR_EXT 0x1800 -#define GL_DEPTH_EXT 0x1801 -#define GL_STENCIL_EXT 0x1802 -#endif - -/* GL_EXT_map_buffer_range */ -#ifndef GL_EXT_map_buffer_range -#define GL_MAP_READ_BIT_EXT 0x0001 -#define GL_MAP_WRITE_BIT_EXT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 -#endif - -/* GL_EXT_multisampled_render_to_texture */ -#ifndef GL_EXT_multisampled_render_to_texture -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C -/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */ -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -#endif - -/* GL_EXT_multiview_draw_buffers */ -#ifndef GL_EXT_multiview_draw_buffers -#define GL_COLOR_ATTACHMENT_EXT 0x90F0 -#define GL_MULTIVIEW_EXT 0x90F1 -#define GL_DRAW_BUFFER_EXT 0x0C01 -#define GL_READ_BUFFER_EXT 0x0C02 -#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 -#endif - -/* GL_EXT_multi_draw_arrays */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_occlusion_query_boolean */ -#ifndef GL_EXT_occlusion_query_boolean -#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A -#define GL_CURRENT_QUERY_EXT 0x8865 -#define GL_QUERY_RESULT_EXT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 -#endif - -/* GL_EXT_read_format_bgra */ -#ifndef GL_EXT_read_format_bgra -#define GL_BGRA_EXT 0x80E1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 -#endif - -/* GL_EXT_robustness */ -#ifndef GL_EXT_robustness -/* reuse GL_NO_ERROR */ -#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 -#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 -#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 -#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 -#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 -#endif - -/* GL_EXT_separate_shader_objects */ -#ifndef GL_EXT_separate_shader_objects -#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 -#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE_EXT 0x8258 -#define GL_ACTIVE_PROGRAM_EXT 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A -#endif - -/* GL_EXT_shader_framebuffer_fetch */ -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 -#endif - -/* GL_EXT_shader_texture_lod */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_shadow_samplers */ -#ifndef GL_EXT_shadow_samplers -#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C -#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D -#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E -#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 -#endif - -/* GL_EXT_sRGB */ -#ifndef GL_EXT_sRGB -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 -#endif - -/* GL_EXT_texture_compression_dxt1 */ -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#endif - -/* GL_EXT_texture_filter_anisotropic */ -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif - -/* GL_EXT_texture_format_BGRA8888 */ -#ifndef GL_EXT_texture_format_BGRA8888 -#define GL_BGRA_EXT 0x80E1 -#endif - -/* GL_EXT_texture_rg */ -#ifndef GL_EXT_texture_rg -#define GL_RED_EXT 0x1903 -#define GL_RG_EXT 0x8227 -#define GL_R8_EXT 0x8229 -#define GL_RG8_EXT 0x822B -#endif - -/* GL_EXT_texture_storage */ -#ifndef GL_EXT_texture_storage -#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F -#define GL_ALPHA8_EXT 0x803C -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_RGBA32F_EXT 0x8814 -#define GL_RGB32F_EXT 0x8815 -#define GL_ALPHA32F_EXT 0x8816 -#define GL_LUMINANCE32F_EXT 0x8818 -#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 -/* reuse GL_RGBA16F_EXT */ -/* reuse GL_RGB16F_EXT */ -#define GL_ALPHA16F_EXT 0x881C -#define GL_LUMINANCE16F_EXT 0x881E -#define GL_LUMINANCE_ALPHA16F_EXT 0x881F -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGB10_EXT 0x8052 -#define GL_BGRA8_EXT 0x93A1 -#define GL_R8_EXT 0x8229 -#define GL_RG8_EXT 0x822B -#define GL_R32F_EXT 0x822E -#define GL_RG32F_EXT 0x8230 -#define GL_R16F_EXT 0x822D -#define GL_RG16F_EXT 0x822F -#endif - -/* GL_EXT_texture_type_2_10_10_10_REV */ -#ifndef GL_EXT_texture_type_2_10_10_10_REV -#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 -#endif - -/* GL_EXT_unpack_subimage */ -#ifndef GL_EXT_unpack_subimage -#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 -#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 -#endif - -/*------------------------------------------------------------------------* - * DMP extension tokens - *------------------------------------------------------------------------*/ - -/* GL_DMP_shader_binary */ -#ifndef GL_DMP_shader_binary -#define GL_SHADER_BINARY_DMP 0x9250 -#endif - -/*------------------------------------------------------------------------* - * FJ extension tokens - *------------------------------------------------------------------------*/ - -/* GL_FJ_shader_binary_GCCSO */ -#ifndef GL_FJ_shader_binary_GCCSO -#define GL_GCCSO_SHADER_BINARY_F 0x9260 -#endif - -/*------------------------------------------------------------------------* - * IMG extension tokens - *------------------------------------------------------------------------*/ - -/* GL_IMG_program_binary */ -#ifndef GL_IMG_program_binary -#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 -#endif - -/* GL_IMG_read_format */ -#ifndef GL_IMG_read_format -#define GL_BGRA_IMG 0x80E1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 -#endif - -/* GL_IMG_shader_binary */ -#ifndef GL_IMG_shader_binary -#define GL_SGX_BINARY_IMG 0x8C0A -#endif - -/* GL_IMG_texture_compression_pvrtc */ -#ifndef GL_IMG_texture_compression_pvrtc -#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 -#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 -#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 -#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 -#endif - -/* GL_IMG_texture_compression_pvrtc2 */ -#ifndef GL_IMG_texture_compression_pvrtc2 -#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 -#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 -#endif - -/* GL_IMG_multisampled_render_to_texture */ -#ifndef GL_IMG_multisampled_render_to_texture -#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 -#define GL_MAX_SAMPLES_IMG 0x9135 -#define GL_TEXTURE_SAMPLES_IMG 0x9136 -#endif - -/*------------------------------------------------------------------------* - * NV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_NV_coverage_sample */ -#ifndef GL_NV_coverage_sample -#define GL_COVERAGE_COMPONENT_NV 0x8ED0 -#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 -#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 -#define GL_COVERAGE_BUFFERS_NV 0x8ED3 -#define GL_COVERAGE_SAMPLES_NV 0x8ED4 -#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 -#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 -#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 -#define GL_COVERAGE_BUFFER_BIT_NV 0x8000 -#endif - -/* GL_NV_depth_nonlinear */ -#ifndef GL_NV_depth_nonlinear -#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C -#endif - -/* GL_NV_draw_buffers */ -#ifndef GL_NV_draw_buffers -#define GL_MAX_DRAW_BUFFERS_NV 0x8824 -#define GL_DRAW_BUFFER0_NV 0x8825 -#define GL_DRAW_BUFFER1_NV 0x8826 -#define GL_DRAW_BUFFER2_NV 0x8827 -#define GL_DRAW_BUFFER3_NV 0x8828 -#define GL_DRAW_BUFFER4_NV 0x8829 -#define GL_DRAW_BUFFER5_NV 0x882A -#define GL_DRAW_BUFFER6_NV 0x882B -#define GL_DRAW_BUFFER7_NV 0x882C -#define GL_DRAW_BUFFER8_NV 0x882D -#define GL_DRAW_BUFFER9_NV 0x882E -#define GL_DRAW_BUFFER10_NV 0x882F -#define GL_DRAW_BUFFER11_NV 0x8830 -#define GL_DRAW_BUFFER12_NV 0x8831 -#define GL_DRAW_BUFFER13_NV 0x8832 -#define GL_DRAW_BUFFER14_NV 0x8833 -#define GL_DRAW_BUFFER15_NV 0x8834 -#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 -#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 -#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 -#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 -#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 -#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 -#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 -#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 -#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 -#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 -#define GL_COLOR_ATTACHMENT10_NV 0x8CEA -#define GL_COLOR_ATTACHMENT11_NV 0x8CEB -#define GL_COLOR_ATTACHMENT12_NV 0x8CEC -#define GL_COLOR_ATTACHMENT13_NV 0x8CED -#define GL_COLOR_ATTACHMENT14_NV 0x8CEE -#define GL_COLOR_ATTACHMENT15_NV 0x8CEF -#endif - -/* GL_EXT_draw_buffers */ -#ifndef GL_EXT_draw_buffers -#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 -#define GL_DRAW_BUFFER0_EXT 0x8825 -#define GL_DRAW_BUFFER1_EXT 0x8826 -#define GL_DRAW_BUFFER2_EXT 0x8827 -#define GL_DRAW_BUFFER3_EXT 0x8828 -#define GL_DRAW_BUFFER4_EXT 0x8829 -#define GL_DRAW_BUFFER5_EXT 0x882A -#define GL_DRAW_BUFFER6_EXT 0x882B -#define GL_DRAW_BUFFER7_EXT 0x882C -#define GL_DRAW_BUFFER8_EXT 0x882D -#define GL_DRAW_BUFFER9_EXT 0x882E -#define GL_DRAW_BUFFER10_EXT 0x882F -#define GL_DRAW_BUFFER11_EXT 0x8830 -#define GL_DRAW_BUFFER12_EXT 0x8831 -#define GL_DRAW_BUFFER13_EXT 0x8832 -#define GL_DRAW_BUFFER14_EXT 0x8833 -#define GL_DRAW_BUFFER15_EXT 0x8834 -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#endif - -/* GL_NV_draw_instanced */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_fbo_color_attachments */ -#ifndef GL_NV_fbo_color_attachments -#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF -/* GL_COLOR_ATTACHMENT{0-15}_NV defined in GL_NV_draw_buffers already. */ -#endif - -/* GL_NV_fence */ -#ifndef GL_NV_fence -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -#endif - -/* GL_NV_framebuffer_blit */ -#ifndef GL_NV_framebuffer_blit -#define GL_READ_FRAMEBUFFER_NV 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA -#endif - -/* GL_NV_framebuffer_multisample */ -#ifndef GL_NV_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 -#define GL_MAX_SAMPLES_NV 0x8D57 -#endif - -/* GL_NV_generate_mipmap_sRGB */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_instanced_arrays */ -#ifndef GL_NV_instanced_arrays -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE -#endif - -/* GL_NV_read_buffer */ -#ifndef GL_NV_read_buffer -#define GL_READ_BUFFER_NV 0x0C02 -#endif - -/* GL_NV_read_buffer_front */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_depth */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_depth_stencil */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_stencil */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_shadow_samplers_array */ -#ifndef GL_NV_shadow_samplers_array -#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 -#endif - -/* GL_NV_shadow_samplers_cube */ -#ifndef GL_NV_shadow_samplers_cube -#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 -#endif - -/* GL_NV_sRGB_formats */ -#ifndef GL_NV_sRGB_formats -#define GL_SLUMINANCE_NV 0x8C46 -#define GL_SLUMINANCE_ALPHA_NV 0x8C44 -#define GL_SRGB8_NV 0x8C41 -#define GL_SLUMINANCE8_NV 0x8C47 -#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 -#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F -#define GL_ETC1_SRGB8_NV 0x88EE -#endif - -/* GL_NV_texture_border_clamp */ -#ifndef GL_NV_texture_border_clamp -#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 -#define GL_CLAMP_TO_BORDER_NV 0x812D -#endif - -/* GL_NV_texture_compression_s3tc_update */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_texture_npot_2D_mipmap */ -/* No new tokens introduced by this extension. */ - -/*------------------------------------------------------------------------* - * QCOM extension tokens - *------------------------------------------------------------------------*/ - -/* GL_QCOM_alpha_test */ -#ifndef GL_QCOM_alpha_test -#define GL_ALPHA_TEST_QCOM 0x0BC0 -#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 -#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 -#endif - -/* GL_QCOM_binning_control */ -#ifndef GL_QCOM_binning_control -#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 -#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 -#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 -#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 -#endif - -/* GL_QCOM_driver_control */ -/* No new tokens introduced by this extension. */ - -/* GL_QCOM_extended_get */ -#ifndef GL_QCOM_extended_get -#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 -#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 -#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 -#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 -#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 -#define GL_TEXTURE_TYPE_QCOM 0x8BD7 -#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 -#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 -#define GL_TEXTURE_TARGET_QCOM 0x8BDA -#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB -#define GL_STATE_RESTORE 0x8BDC -#endif - -/* GL_QCOM_extended_get2 */ -/* No new tokens introduced by this extension. */ - -/* GL_QCOM_perfmon_global_mode */ -#ifndef GL_QCOM_perfmon_global_mode -#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 -#endif - -/* GL_QCOM_writeonly_rendering */ -#ifndef GL_QCOM_writeonly_rendering -#define GL_WRITEONLY_RENDERING_QCOM 0x8823 -#endif - -/* GL_QCOM_tiled_rendering */ -#ifndef GL_QCOM_tiled_rendering -#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 -#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 -#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 -#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 -#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 -#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 -#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 -#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 -#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 -#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 -#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 -#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 -#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 -#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 -#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 -#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 -#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 -#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 -#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 -#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 -#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 -#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 -#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 -#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 -#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 -#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 -#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 -#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 -#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 -#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 -#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 -#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 -#endif - -/*------------------------------------------------------------------------* - * VIV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_VIV_shader_binary */ -#ifndef GL_VIV_shader_binary -#define GL_SHADER_BINARY_VIV 0x8FC4 -#endif - -/*------------------------------------------------------------------------* - * End of extension tokens, start of corresponding extension functions - *------------------------------------------------------------------------*/ - -/*------------------------------------------------------------------------* - * OES extension functions - *------------------------------------------------------------------------*/ - -/* GL_OES_compressed_ETC1_RGB8_texture */ -#ifndef GL_OES_compressed_ETC1_RGB8_texture -#define GL_OES_compressed_ETC1_RGB8_texture 1 -#endif - -/* GL_OES_compressed_paletted_texture */ -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 -#endif - -/* GL_OES_depth24 */ -#ifndef GL_OES_depth24 -#define GL_OES_depth24 1 -#endif - -/* GL_OES_depth32 */ -#ifndef GL_OES_depth32 -#define GL_OES_depth32 1 -#endif - -/* GL_OES_depth_texture */ -#ifndef GL_OES_depth_texture -#define GL_OES_depth_texture 1 -#endif - -/* GL_OES_EGL_image */ -#ifndef GL_OES_EGL_image -#define GL_OES_EGL_image 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); -GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); -#endif -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); -#endif - -/* GL_OES_EGL_image_external */ -#ifndef GL_OES_EGL_image_external -#define GL_OES_EGL_image_external 1 -/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */ -#endif - -/* GL_OES_element_index_uint */ -#ifndef GL_OES_element_index_uint -#define GL_OES_element_index_uint 1 -#endif - -/* GL_OES_fbo_render_mipmap */ -#ifndef GL_OES_fbo_render_mipmap -#define GL_OES_fbo_render_mipmap 1 -#endif - -/* GL_OES_fragment_precision_high */ -#ifndef GL_OES_fragment_precision_high -#define GL_OES_fragment_precision_high 1 -#endif - -/* GL_OES_get_program_binary */ -#ifndef GL_OES_get_program_binary -#define GL_OES_get_program_binary 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); -#endif -typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); -#endif - -/* GL_OES_mapbuffer */ -#ifndef GL_OES_mapbuffer -#define GL_OES_mapbuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); -GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); -GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid** params); -#endif -typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); -typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid** params); -#endif - -/* GL_OES_packed_depth_stencil */ -#ifndef GL_OES_packed_depth_stencil -#define GL_OES_packed_depth_stencil 1 -#endif - -/* GL_OES_required_internalformat */ -#ifndef GL_OES_required_internalformat -#define GL_OES_required_internalformat 1 -#endif - -/* GL_OES_rgb8_rgba8 */ -#ifndef GL_OES_rgb8_rgba8 -#define GL_OES_rgb8_rgba8 1 -#endif - -/* GL_OES_standard_derivatives */ -#ifndef GL_OES_standard_derivatives -#define GL_OES_standard_derivatives 1 -#endif - -/* GL_OES_stencil1 */ -#ifndef GL_OES_stencil1 -#define GL_OES_stencil1 1 -#endif - -/* GL_OES_stencil4 */ -#ifndef GL_OES_stencil4 -#define GL_OES_stencil4 1 -#endif - -#ifndef GL_OES_surfaceless_context -#define GL_OES_surfaceless_context 1 -#endif - -/* GL_OES_texture_3D */ -#ifndef GL_OES_texture_3D -#define GL_OES_texture_3D 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -#endif -typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); -typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOES) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -#endif - -/* GL_OES_texture_float */ -#ifndef GL_OES_texture_float -#define GL_OES_texture_float 1 -#endif - -/* GL_OES_texture_float_linear */ -#ifndef GL_OES_texture_float_linear -#define GL_OES_texture_float_linear 1 -#endif - -/* GL_OES_texture_half_float */ -#ifndef GL_OES_texture_half_float -#define GL_OES_texture_half_float 1 -#endif - -/* GL_OES_texture_half_float_linear */ -#ifndef GL_OES_texture_half_float_linear -#define GL_OES_texture_half_float_linear 1 -#endif - -/* GL_OES_texture_npot */ -#ifndef GL_OES_texture_npot -#define GL_OES_texture_npot 1 -#endif - -/* GL_OES_vertex_array_object */ -#ifndef GL_OES_vertex_array_object -#define GL_OES_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); -GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); -GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); -GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); -#endif -typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); -typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); -typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); -#endif - -/* GL_OES_vertex_half_float */ -#ifndef GL_OES_vertex_half_float -#define GL_OES_vertex_half_float 1 -#endif - -/* GL_OES_vertex_type_10_10_10_2 */ -#ifndef GL_OES_vertex_type_10_10_10_2 -#define GL_OES_vertex_type_10_10_10_2 1 -#endif - -/*------------------------------------------------------------------------* - * KHR extension functions - *------------------------------------------------------------------------*/ - -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GL_APICALL void GL_APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GL_APICALL void GL_APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); -GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GL_APICALL void GL_APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); -GL_APICALL void GL_APIENTRY glPopDebugGroup (void); -GL_APICALL void GL_APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GL_APICALL void GL_APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -GL_APICALL void GL_APIENTRY glGetPointerv (GLenum pname, void **params); -#endif -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); -typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); -typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); -typedef void (GL_APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETPOINTERVPROC) (GLenum pname, void **params); -#endif - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 -#endif - - -/*------------------------------------------------------------------------* - * AMD extension functions - *------------------------------------------------------------------------*/ - -/* GL_AMD_compressed_3DC_texture */ -#ifndef GL_AMD_compressed_3DC_texture -#define GL_AMD_compressed_3DC_texture 1 -#endif - -/* GL_AMD_compressed_ATC_texture */ -#ifndef GL_AMD_compressed_ATC_texture -#define GL_AMD_compressed_ATC_texture 1 -#endif - -/* AMD_performance_monitor */ -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); -GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); -GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); -GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); -GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); -typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif - -/* GL_AMD_program_binary_Z400 */ -#ifndef GL_AMD_program_binary_Z400 -#define GL_AMD_program_binary_Z400 1 -#endif - -/*------------------------------------------------------------------------* - * ANGLE extension functions - *------------------------------------------------------------------------*/ - -/* GL_ANGLE_depth_texture */ -#ifndef GL_ANGLE_depth_texture -#define GL_ANGLE_depth_texture 1 -#endif - -/* GL_ANGLE_framebuffer_blit */ -#ifndef GL_ANGLE_framebuffer_blit -#define GL_ANGLE_framebuffer_blit 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif -typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - -/* GL_ANGLE_framebuffer_multisample */ -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_ANGLE_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_ANGLE_instanced_arrays -#define GL_ANGLE_instanced_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); -#endif -typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); -#endif - -/* GL_ANGLE_pack_reverse_row_order */ -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_ANGLE_pack_reverse_row_order 1 -#endif - -/* GL_ANGLE_program_binary */ -#ifndef GL_ANGLE_program_binary -#define GL_ANGLE_program_binary 1 -#endif - -/* GL_ANGLE_texture_compression_dxt3 */ -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_ANGLE_texture_compression_dxt3 1 -#endif - -/* GL_ANGLE_texture_compression_dxt5 */ -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_ANGLE_texture_compression_dxt5 1 -#endif - -/* GL_ANGLE_texture_usage */ -#ifndef GL_ANGLE_texture_usage -#define GL_ANGLE_texture_usage 1 -#endif - -#ifndef GL_ANGLE_translated_shader_source -#define GL_ANGLE_translated_shader_source 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); -#endif -typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); -#endif - -/*------------------------------------------------------------------------* - * APPLE extension functions - *------------------------------------------------------------------------*/ - -/* GL_APPLE_copy_texture_levels */ -#ifndef GL_APPLE_copy_texture_levels -#define GL_APPLE_copy_texture_levels 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); -#endif -typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); -#endif - -/* GL_APPLE_framebuffer_multisample */ -#ifndef GL_APPLE_framebuffer_multisample -#define GL_APPLE_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); -#endif - -/* GL_APPLE_rgb_422 */ -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -#endif - -/* GL_APPLE_sync */ -#ifndef GL_APPLE_sync -#define GL_APPLE_sync 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); -GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); -GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); -GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); -GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif -typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); -typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); -typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); -typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif - -/* GL_APPLE_texture_format_BGRA8888 */ -#ifndef GL_APPLE_texture_format_BGRA8888 -#define GL_APPLE_texture_format_BGRA8888 1 -#endif - -/* GL_APPLE_texture_max_level */ -#ifndef GL_APPLE_texture_max_level -#define GL_APPLE_texture_max_level 1 -#endif - -/*------------------------------------------------------------------------* - * ARM extension functions - *------------------------------------------------------------------------*/ - -/* GL_ARM_mali_program_binary */ -#ifndef GL_ARM_mali_program_binary -#define GL_ARM_mali_program_binary 1 -#endif - -/* GL_ARM_mali_shader_binary */ -#ifndef GL_ARM_mali_shader_binary -#define GL_ARM_mali_shader_binary 1 -#endif - -/* GL_ARM_rgba8 */ -#ifndef GL_ARM_rgba8 -#define GL_ARM_rgba8 1 -#endif - -/*------------------------------------------------------------------------* - * EXT extension functions - *------------------------------------------------------------------------*/ - -/* GL_EXT_blend_minmax */ -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#endif - -/* GL_EXT_color_buffer_half_float */ -#ifndef GL_EXT_color_buffer_half_float -#define GL_EXT_color_buffer_half_float 1 -#endif - -/* GL_EXT_debug_label */ -#ifndef GL_EXT_debug_label -#define GL_EXT_debug_label 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif -typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif - -/* GL_EXT_debug_marker */ -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); -GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); -GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); -#endif -typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); -#endif - -/* GL_EXT_discard_framebuffer */ -#ifndef GL_EXT_discard_framebuffer -#define GL_EXT_discard_framebuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); -#endif -typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); -#endif - -/* GL_EXT_map_buffer_range */ -#ifndef GL_EXT_map_buffer_range -#define GL_EXT_map_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void* GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); -#endif -typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -#endif - -/* GL_EXT_multisampled_render_to_texture */ -#ifndef GL_EXT_multisampled_render_to_texture -#define GL_EXT_multisampled_render_to_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif - -/* GL_EXT_multiview_draw_buffers */ -#ifndef GL_EXT_multiview_draw_buffers -#define GL_EXT_multiview_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); -GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); -GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); -#endif -typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); -typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); -#endif - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum, const GLint *, const GLsizei *, GLsizei); -GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif - -/* GL_EXT_occlusion_query_boolean */ -#ifndef GL_EXT_occlusion_query_boolean -#define GL_EXT_occlusion_query_boolean 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); -GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); -GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); -GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); -GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); -GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); -#endif -typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); -typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); -typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); -typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -/* GL_EXT_read_format_bgra */ -#ifndef GL_EXT_read_format_bgra -#define GL_EXT_read_format_bgra 1 -#endif - -/* GL_EXT_robustness */ -#ifndef GL_EXT_robustness -#define GL_EXT_robustness 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); -GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, float *params); -GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); -#endif -typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); -typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, float *params); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -#endif - -/* GL_EXT_separate_shader_objects */ -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); -GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); -GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); -GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); -GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); -GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); -GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint x); -GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint x, GLint y); -GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z); -GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); -GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat x); -GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif -typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); -typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); -typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); -typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); -typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint x); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint x, GLint y); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat x); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif - -/* GL_EXT_shader_framebuffer_fetch */ -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_EXT_shader_framebuffer_fetch 1 -#endif - -/* GL_EXT_shader_texture_lod */ -#ifndef GL_EXT_shader_texture_lod -#define GL_EXT_shader_texture_lod 1 -#endif - -/* GL_EXT_shadow_samplers */ -#ifndef GL_EXT_shadow_samplers -#define GL_EXT_shadow_samplers 1 -#endif - -/* GL_EXT_sRGB */ -#ifndef GL_EXT_sRGB -#define GL_EXT_sRGB 1 -#endif - -/* GL_EXT_texture_compression_dxt1 */ -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_EXT_texture_compression_dxt1 1 -#endif - -/* GL_EXT_texture_filter_anisotropic */ -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#endif - -/* GL_EXT_texture_format_BGRA8888 */ -#ifndef GL_EXT_texture_format_BGRA8888 -#define GL_EXT_texture_format_BGRA8888 1 -#endif - -/* GL_EXT_texture_rg */ -#ifndef GL_EXT_texture_rg -#define GL_EXT_texture_rg 1 -#endif - -/* GL_EXT_texture_storage */ -#ifndef GL_EXT_texture_storage -#define GL_EXT_texture_storage 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif - -/* GL_EXT_texture_type_2_10_10_10_REV */ -#ifndef GL_EXT_texture_type_2_10_10_10_REV -#define GL_EXT_texture_type_2_10_10_10_REV 1 -#endif - -/* GL_EXT_unpack_subimage */ -#ifndef GL_EXT_unpack_subimage -#define GL_EXT_unpack_subimage 1 -#endif - -/*------------------------------------------------------------------------* - * DMP extension functions - *------------------------------------------------------------------------*/ - -/* GL_DMP_shader_binary */ -#ifndef GL_DMP_shader_binary -#define GL_DMP_shader_binary 1 -#endif - -/*------------------------------------------------------------------------* - * FJ extension functions - *------------------------------------------------------------------------*/ - -/* GL_FJ_shader_binary_GCCSO */ -#ifndef GL_FJ_shader_binary_GCCSO -#define GL_FJ_shader_binary_GCCSO 1 -#endif - -/*------------------------------------------------------------------------* - * IMG extension functions - *------------------------------------------------------------------------*/ - -/* GL_IMG_program_binary */ -#ifndef GL_IMG_program_binary -#define GL_IMG_program_binary 1 -#endif - -/* GL_IMG_read_format */ -#ifndef GL_IMG_read_format -#define GL_IMG_read_format 1 -#endif - -/* GL_IMG_shader_binary */ -#ifndef GL_IMG_shader_binary -#define GL_IMG_shader_binary 1 -#endif - -/* GL_IMG_texture_compression_pvrtc */ -#ifndef GL_IMG_texture_compression_pvrtc -#define GL_IMG_texture_compression_pvrtc 1 -#endif - -/* GL_IMG_texture_compression_pvrtc2 */ -#ifndef GL_IMG_texture_compression_pvrtc2 -#define GL_IMG_texture_compression_pvrtc2 1 -#endif - -/* GL_IMG_multisampled_render_to_texture */ -#ifndef GL_IMG_multisampled_render_to_texture -#define GL_IMG_multisampled_render_to_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif - -/*------------------------------------------------------------------------* - * NV extension functions - *------------------------------------------------------------------------*/ - -/* GL_NV_coverage_sample */ -#ifndef GL_NV_coverage_sample -#define GL_NV_coverage_sample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); -GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); -#endif -typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); -typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); -#endif - -/* GL_NV_depth_nonlinear */ -#ifndef GL_NV_depth_nonlinear -#define GL_NV_depth_nonlinear 1 -#endif - -/* GL_NV_draw_buffers */ -#ifndef GL_NV_draw_buffers -#define GL_NV_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); -#endif -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); -#endif - -/* GL_EXT_draw_buffers */ -#ifndef GL_EXT_draw_buffers -#define GL_EXT_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs); -#endif -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs); -#endif - -/* GL_NV_draw_instanced */ -#ifndef GL_NV_draw_instanced -#define GL_NV_draw_instanced 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif -typedef void (GL_APIENTRYP PFNDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif - -/* GL_NV_fbo_color_attachments */ -#ifndef GL_NV_fbo_color_attachments -#define GL_NV_fbo_color_attachments 1 -#endif - -/* GL_NV_fence */ -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); -GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei, GLuint *); -GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint); -GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint); -GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); -GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint); -GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint, GLenum); -#endif -typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#endif - -/* GL_NV_framebuffer_blit */ -#ifndef GL_NV_framebuffer_blit -#define GL_NV_framebuffer_blit 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBlitFramebufferNV (int srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif -typedef void (GL_APIENTRYP PFNBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - -/* GL_NV_framebuffer_multisample */ -#ifndef GL_NV_framebuffer_multisample -#define GL_NV_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -typedef void (GL_APIENTRYP PFNRENDERBUFFERSTORAGEMULTISAMPLENVPROC) ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -/* GL_NV_generate_mipmap_sRGB */ -#ifndef GL_NV_generate_mipmap_sRGB -#define GL_NV_generate_mipmap_sRGB 1 -#endif - -/* GL_NV_instanced_arrays */ -#ifndef GL_NV_instanced_arrays -#define GL_NV_instanced_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor); -#endif -typedef void (GL_APIENTRYP PFNVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); -#endif - -/* GL_NV_read_buffer */ -#ifndef GL_NV_read_buffer -#define GL_NV_read_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); -#endif -typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); -#endif - -/* GL_NV_read_buffer_front */ -#ifndef GL_NV_read_buffer_front -#define GL_NV_read_buffer_front 1 -#endif - -/* GL_NV_read_depth */ -#ifndef GL_NV_read_depth -#define GL_NV_read_depth 1 -#endif - -/* GL_NV_read_depth_stencil */ -#ifndef GL_NV_read_depth_stencil -#define GL_NV_read_depth_stencil 1 -#endif - -/* GL_NV_read_stencil */ -#ifndef GL_NV_read_stencil -#define GL_NV_read_stencil 1 -#endif - -/* GL_NV_shadow_samplers_array */ -#ifndef GL_NV_shadow_samplers_array -#define GL_NV_shadow_samplers_array 1 -#endif - -/* GL_NV_shadow_samplers_cube */ -#ifndef GL_NV_shadow_samplers_cube -#define GL_NV_shadow_samplers_cube 1 -#endif - -/* GL_NV_sRGB_formats */ -#ifndef GL_NV_sRGB_formats -#define GL_NV_sRGB_formats 1 -#endif - -/* GL_NV_texture_border_clamp */ -#ifndef GL_NV_texture_border_clamp -#define GL_NV_texture_border_clamp 1 -#endif - -/* GL_NV_texture_compression_s3tc_update */ -#ifndef GL_NV_texture_compression_s3tc_update -#define GL_NV_texture_compression_s3tc_update 1 -#endif - -/* GL_NV_texture_npot_2D_mipmap */ -#ifndef GL_NV_texture_npot_2D_mipmap -#define GL_NV_texture_npot_2D_mipmap 1 -#endif - -/*------------------------------------------------------------------------* - * QCOM extension functions - *------------------------------------------------------------------------*/ - -/* GL_QCOM_alpha_test */ -#ifndef GL_QCOM_alpha_test -#define GL_QCOM_alpha_test 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); -#endif -typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); -#endif - -/* GL_QCOM_binning_control */ -#ifndef GL_QCOM_binning_control -#define GL_QCOM_binning_control 1 -#endif - -/* GL_QCOM_driver_control */ -#ifndef GL_QCOM_driver_control -#define GL_QCOM_driver_control 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); -GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); -GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); -GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); -#endif -typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); -typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); -typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); -typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); -#endif - -/* GL_QCOM_extended_get */ -#ifndef GL_QCOM_extended_get -#define GL_QCOM_extended_get 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); -GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); -GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); -GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); -GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); -GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params); -#endif -typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); -typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); -typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params); -#endif - -/* GL_QCOM_extended_get2 */ -#ifndef GL_QCOM_extended_get2 -#define GL_QCOM_extended_get2 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); -GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); -GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); -GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); -#endif -typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); -typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); -typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); -typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); -#endif - -/* GL_QCOM_perfmon_global_mode */ -#ifndef GL_QCOM_perfmon_global_mode -#define GL_QCOM_perfmon_global_mode 1 -#endif - -/* GL_QCOM_writeonly_rendering */ -#ifndef GL_QCOM_writeonly_rendering -#define GL_QCOM_writeonly_rendering 1 -#endif - -/* GL_QCOM_tiled_rendering */ -#ifndef GL_QCOM_tiled_rendering -#define GL_QCOM_tiled_rendering 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); -GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); -#endif -typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); -typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); -#endif - -/*------------------------------------------------------------------------* - * VIV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_VIV_shader_binary */ -#ifndef GL_VIV_shader_binary -#define GL_VIV_shader_binary 1 -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __gl2ext_h_ */ diff --git a/platform/winrt/include/GLES2/gl2platform.h b/platform/winrt/include/GLES2/gl2platform.h deleted file mode 100644 index c9fa3c4d64..0000000000 --- a/platform/winrt/include/GLES2/gl2platform.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef __gl2platform_h_ -#define __gl2platform_h_ - -/* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */ - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h - * - * Adopters may modify khrplatform.h and this file to suit their platform. - * You are encouraged to submit all modifications to the Khronos group so that - * they can be included in future versions of this file. Please submit changes - * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) - * by filing a bug against product "OpenGL-ES" component "Registry". - */ - -#include <KHR/khrplatform.h> - -#ifndef GL_APICALL -#define GL_APICALL KHRONOS_APICALL -#endif - -#ifndef GL_APIENTRY -#define GL_APIENTRY KHRONOS_APIENTRY -#endif - -#endif /* __gl2platform_h_ */ diff --git a/platform/winrt/include/GLES3/gl3.h b/platform/winrt/include/GLES3/gl3.h deleted file mode 100644 index b7e91e6881..0000000000 --- a/platform/winrt/include/GLES3/gl3.h +++ /dev/null @@ -1,1061 +0,0 @@ -#ifndef __gl3_h_ -#define __gl3_h_ - -/* - * gl3.h last updated on $Date: 2013-02-12 14:37:24 -0800 (Tue, 12 Feb 2013) $ - */ - -#include <GLES3/gl3platform.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2007-2013 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -/*------------------------------------------------------------------------- - * Data type definitions - *-----------------------------------------------------------------------*/ - -/* OpenGL ES 2.0 */ - -typedef void GLvoid; -typedef char GLchar; -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef khronos_int8_t GLbyte; -typedef short GLshort; -typedef int GLint; -typedef int GLsizei; -typedef khronos_uint8_t GLubyte; -typedef unsigned short GLushort; -typedef unsigned int GLuint; -typedef khronos_float_t GLfloat; -typedef khronos_float_t GLclampf; -typedef khronos_int32_t GLfixed; -typedef khronos_intptr_t GLintptr; -typedef khronos_ssize_t GLsizeiptr; - -/* OpenGL ES 3.0 */ - -typedef unsigned short GLhalf; -typedef khronos_int64_t GLint64; -typedef khronos_uint64_t GLuint64; -typedef struct __GLsync *GLsync; - -/*------------------------------------------------------------------------- - * Token definitions - *-----------------------------------------------------------------------*/ - -/* OpenGL ES core versions */ -#define GL_ES_VERSION_3_0 1 -#define GL_ES_VERSION_2_0 1 - -/* OpenGL ES 2.0 */ - -/* ClearBufferMask */ -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 - -/* Boolean */ -#define GL_FALSE 0 -#define GL_TRUE 1 - -/* BeginMode */ -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 - -/* BlendingFactorDest */ -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 - -/* BlendingFactorSrc */ -/* GL_ZERO */ -/* GL_ONE */ -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -/* GL_SRC_ALPHA */ -/* GL_ONE_MINUS_SRC_ALPHA */ -/* GL_DST_ALPHA */ -/* GL_ONE_MINUS_DST_ALPHA */ - -/* BlendEquationSeparate */ -#define GL_FUNC_ADD 0x8006 -#define GL_BLEND_EQUATION 0x8009 -#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */ -#define GL_BLEND_EQUATION_ALPHA 0x883D - -/* BlendSubtract */ -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B - -/* Separate Blend Functions */ -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 - -/* Buffer Objects */ -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 - -#define GL_STREAM_DRAW 0x88E0 -#define GL_STATIC_DRAW 0x88E4 -#define GL_DYNAMIC_DRAW 0x88E8 - -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 - -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 - -/* CullFaceMode */ -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_FRONT_AND_BACK 0x0408 - -/* DepthFunction */ -/* GL_NEVER */ -/* GL_LESS */ -/* GL_EQUAL */ -/* GL_LEQUAL */ -/* GL_GREATER */ -/* GL_NOTEQUAL */ -/* GL_GEQUAL */ -/* GL_ALWAYS */ - -/* EnableCap */ -#define GL_TEXTURE_2D 0x0DE1 -#define GL_CULL_FACE 0x0B44 -#define GL_BLEND 0x0BE2 -#define GL_DITHER 0x0BD0 -#define GL_STENCIL_TEST 0x0B90 -#define GL_DEPTH_TEST 0x0B71 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_COVERAGE 0x80A0 - -/* ErrorCode */ -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_OUT_OF_MEMORY 0x0505 - -/* FrontFaceDirection */ -#define GL_CW 0x0900 -#define GL_CCW 0x0901 - -/* GetPName */ -#define GL_LINE_WIDTH 0x0B21 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_VIEWPORT 0x0BA2 -#define GL_SCISSOR_BOX 0x0C10 -/* GL_SCISSOR_TEST */ -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -/* GL_POLYGON_OFFSET_FILL */ -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB - -/* GetTextureParameter */ -/* GL_TEXTURE_MAG_FILTER */ -/* GL_TEXTURE_MIN_FILTER */ -/* GL_TEXTURE_WRAP_S */ -/* GL_TEXTURE_WRAP_T */ - -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 - -/* HintMode */ -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 - -/* HintTarget */ -#define GL_GENERATE_MIPMAP_HINT 0x8192 - -/* DataType */ -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_FIXED 0x140C - -/* PixelFormat */ -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A - -/* PixelType */ -/* GL_UNSIGNED_BYTE */ -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 - -/* Shaders */ -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_SHADER_TYPE 0x8B4F -#define GL_DELETE_STATUS 0x8B80 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D - -/* StencilFunction */ -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 - -/* StencilOp */ -/* GL_ZERO */ -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_INVERT 0x150A -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 - -/* StringName */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 - -/* TextureMagFilter */ -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 - -/* TextureMinFilter */ -/* GL_NEAREST */ -/* GL_LINEAR */ -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 - -/* TextureParameterName */ -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 - -/* TextureTarget */ -/* GL_TEXTURE_2D */ -#define GL_TEXTURE 0x1702 - -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C - -/* TextureUnit */ -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 - -/* TextureWrapMode */ -#define GL_REPEAT 0x2901 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_MIRRORED_REPEAT 0x8370 - -/* Uniform Types */ -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_CUBE 0x8B60 - -/* Vertex Arrays */ -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F - -/* Read Format */ -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B - -/* Shader Source */ -#define GL_COMPILE_STATUS 0x8B81 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_SHADER_COMPILER 0x8DFA - -/* Shader Binary */ -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 - -/* Shader Precision-Specified Types */ -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 - -/* Framebuffer Object. */ -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 - -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGB565 0x8D62 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_STENCIL_INDEX8 0x8D48 - -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 - -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 - -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 - -#define GL_NONE 0 - -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD - -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 - -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 - -/* OpenGL ES 3.0 */ - -#define GL_READ_BUFFER 0x0C02 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_RED 0x1903 -#define GL_RGB8 0x8051 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_COMPARE_REF_TO_TEXTURE 0x884E -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_MAX_VARYING_COMPONENTS 0x8B4B -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_DRAW_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 -#define GL_HALF_FLOAT 0x140B -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_RG8 0x822B -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C -#define GL_VERTEX_ARRAY_BINDING 0x85B5 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 -#define GL_COPY_READ_BUFFER_BINDING GL_COPY_READ_BUFFER -#define GL_COPY_WRITE_BUFFER_BINDING GL_COPY_WRITE_BUFFER -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFFu -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -#define GL_ANY_SAMPLES_PASSED 0x8C2F -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A -#define GL_SAMPLER_BINDING 0x8919 -#define GL_RGB10_A2UI 0x906F -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_INT_2_10_10_10_REV 0x8D9F -#define GL_TRANSFORM_FEEDBACK 0x8E22 -#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 -#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 -#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 -#define GL_PROGRAM_BINARY_LENGTH 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE -#define GL_PROGRAM_BINARY_FORMATS 0x87FF -#define GL_COMPRESSED_R11_EAC 0x9270 -#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 -#define GL_COMPRESSED_RG11_EAC 0x9272 -#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 -#define GL_COMPRESSED_RGB8_ETC2 0x9274 -#define GL_COMPRESSED_SRGB8_ETC2 0x9275 -#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 -#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 -#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 -#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 -#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F -#define GL_MAX_ELEMENT_INDEX 0x8D6B -#define GL_NUM_SAMPLE_COUNTS 0x9380 -#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF - -/*------------------------------------------------------------------------- - * Entrypoint definitions - *-----------------------------------------------------------------------*/ - -/* OpenGL ES 2.0 */ - -GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); -GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); -GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); -GL_APICALL void GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GL_APICALL void GL_APIENTRY glBlendEquation (GLenum mode); -GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); -GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); -GL_APICALL void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GL_APICALL void GL_APIENTRY glClearDepthf (GLfloat depth); -GL_APICALL void GL_APIENTRY glClearStencil (GLint s); -GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); -GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); -GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); -GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); -GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); -GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); -GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); -GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); -GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); -GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); -GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); -GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); -GL_APICALL void GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f); -GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glDisable (GLenum cap); -GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); -GL_APICALL void GL_APIENTRY glEnable (GLenum cap); -GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glFinish (void); -GL_APICALL void GL_APIENTRY glFlush (void); -GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); -GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); -GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); -GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); -GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); -GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); -GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); -GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); -GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); -GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL GLenum GL_APIENTRY glGetError (void); -GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); -GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); -GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); -GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); -GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); -GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); -GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); -GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); -GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); -GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); -GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); -GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); -GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); -GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); -GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); -GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); -GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); -GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); -GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); -GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); -GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); -GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); -GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); -GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); -GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); -GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x); -GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x); -GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); -GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); -GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); -GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); -GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); -GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); -GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); -GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); - -/* OpenGL ES 3.0 */ - -GL_APICALL void GL_APIENTRY glReadBuffer (GLenum mode); -GL_APICALL void GL_APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices); -GL_APICALL void GL_APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glGenQueries (GLsizei n, GLuint* ids); -GL_APICALL void GL_APIENTRY glDeleteQueries (GLsizei n, const GLuint* ids); -GL_APICALL GLboolean GL_APIENTRY glIsQuery (GLuint id); -GL_APICALL void GL_APIENTRY glBeginQuery (GLenum target, GLuint id); -GL_APICALL void GL_APIENTRY glEndQuery (GLenum target); -GL_APICALL void GL_APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint* params); -GL_APICALL GLboolean GL_APIENTRY glUnmapBuffer (GLenum target); -GL_APICALL void GL_APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, GLvoid** params); -GL_APICALL void GL_APIENTRY glDrawBuffers (GLsizei n, const GLenum* bufs); -GL_APICALL void GL_APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GL_APICALL GLvoid* GL_APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GL_APICALL void GL_APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); -GL_APICALL void GL_APIENTRY glBindVertexArray (GLuint array); -GL_APICALL void GL_APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint* arrays); -GL_APICALL void GL_APIENTRY glGenVertexArrays (GLsizei n, GLuint* arrays); -GL_APICALL GLboolean GL_APIENTRY glIsVertexArray (GLuint array); -GL_APICALL void GL_APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint* data); -GL_APICALL void GL_APIENTRY glBeginTransformFeedback (GLenum primitiveMode); -GL_APICALL void GL_APIENTRY glEndTransformFeedback (void); -GL_APICALL void GL_APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GL_APICALL void GL_APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); -GL_APICALL void GL_APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode); -GL_APICALL void GL_APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name); -GL_APICALL void GL_APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer); -GL_APICALL void GL_APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint* params); -GL_APICALL void GL_APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); -GL_APICALL void GL_APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GL_APICALL void GL_APIENTRY glVertexAttribI4iv (GLuint index, const GLint* v); -GL_APICALL void GL_APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint* v); -GL_APICALL void GL_APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint* params); -GL_APICALL GLint GL_APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); -GL_APICALL void GL_APIENTRY glUniform1ui (GLint location, GLuint v0); -GL_APICALL void GL_APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); -GL_APICALL void GL_APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); -GL_APICALL void GL_APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GL_APICALL void GL_APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint* value); -GL_APICALL void GL_APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint* value); -GL_APICALL void GL_APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint* value); -GL_APICALL void GL_APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint* value); -GL_APICALL void GL_APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint* value); -GL_APICALL void GL_APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint* value); -GL_APICALL void GL_APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat* value); -GL_APICALL void GL_APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GL_APICALL const GLubyte* GL_APIENTRY glGetStringi (GLenum name, GLuint index); -GL_APICALL void GL_APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GL_APICALL void GL_APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices); -GL_APICALL void GL_APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -GL_APICALL GLuint GL_APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar* uniformBlockName); -GL_APICALL void GL_APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -GL_APICALL void GL_APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -GL_APICALL void GL_APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instanceCount); -GL_APICALL void GL_APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount); -GL_APICALL GLsync GL_APIENTRY glFenceSync (GLenum condition, GLbitfield flags); -GL_APICALL GLboolean GL_APIENTRY glIsSync (GLsync sync); -GL_APICALL void GL_APIENTRY glDeleteSync (GLsync sync); -GL_APICALL GLenum GL_APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glGetInteger64v (GLenum pname, GLint64* params); -GL_APICALL void GL_APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -GL_APICALL void GL_APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64* data); -GL_APICALL void GL_APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64* params); -GL_APICALL void GL_APIENTRY glGenSamplers (GLsizei count, GLuint* samplers); -GL_APICALL void GL_APIENTRY glDeleteSamplers (GLsizei count, const GLuint* samplers); -GL_APICALL GLboolean GL_APIENTRY glIsSampler (GLuint sampler); -GL_APICALL void GL_APIENTRY glBindSampler (GLuint unit, GLuint sampler); -GL_APICALL void GL_APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint* param); -GL_APICALL void GL_APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); -GL_APICALL void GL_APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat* param); -GL_APICALL void GL_APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); -GL_APICALL void GL_APIENTRY glBindTransformFeedback (GLenum target, GLuint id); -GL_APICALL void GL_APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint* ids); -GL_APICALL void GL_APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint* ids); -GL_APICALL GLboolean GL_APIENTRY glIsTransformFeedback (GLuint id); -GL_APICALL void GL_APIENTRY glPauseTransformFeedback (void); -GL_APICALL void GL_APIENTRY glResumeTransformFeedback (void); -GL_APICALL void GL_APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary); -GL_APICALL void GL_APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -GL_APICALL void GL_APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); -GL_APICALL void GL_APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum* attachments); -GL_APICALL void GL_APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GL_APICALL void GL_APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/platform/winrt/include/GLES3/gl3ext.h b/platform/winrt/include/GLES3/gl3ext.h deleted file mode 100644 index 4d4ea96c4d..0000000000 --- a/platform/winrt/include/GLES3/gl3ext.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __gl3ext_h_ -#define __gl3ext_h_ - -/* $Revision: 17809 $ on $Date:: 2012-05-14 08:03:36 -0700 #$ */ - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -/* OpenGL ES 3 Extensions - * - * After an OES extension's interactions with OpenGl ES 3.0 have been documented, - * its tokens and function definitions should be added to this file in a manner - * that does not conflict with gl2ext.h or gl3.h. - * - * Tokens and function definitions for extensions that have become standard - * features in OpenGL ES 3.0 will not be added to this file. - * - * Applications using OpenGL-ES-2-only extensions should include gl2ext.h - */ - -#endif /* __gl3ext_h_ */ - diff --git a/platform/winrt/include/GLES3/gl3platform.h b/platform/winrt/include/GLES3/gl3platform.h deleted file mode 100644 index 1bd1a850fa..0000000000 --- a/platform/winrt/include/GLES3/gl3platform.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef __gl3platform_h_ -#define __gl3platform_h_ - -/* $Revision: 18437 $ on $Date:: 2012-07-08 23:31:39 -0700 #$ */ - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -/* Platform-specific types and definitions for OpenGL ES 3.X gl3.h - * - * Adopters may modify khrplatform.h and this file to suit their platform. - * You are encouraged to submit all modifications to the Khronos group so that - * they can be included in future versions of this file. Please submit changes - * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) - * by filing a bug against product "OpenGL-ES" component "Registry". - */ - -#include <KHR/khrplatform.h> - -#ifndef GL_APICALL -#define GL_APICALL KHRONOS_APICALL -#endif - -#ifndef GL_APIENTRY -#define GL_APIENTRY KHRONOS_APIENTRY -#endif - -#endif /* __gl3platform_h_ */ diff --git a/platform/winrt/include/GLSLANG/ShaderLang.h b/platform/winrt/include/GLSLANG/ShaderLang.h deleted file mode 100644 index e486692482..0000000000 --- a/platform/winrt/include/GLSLANG/ShaderLang.h +++ /dev/null @@ -1,411 +0,0 @@ -// -// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -#ifndef _COMPILER_INTERFACE_INCLUDED_ -#define _COMPILER_INTERFACE_INCLUDED_ - -#if defined(COMPONENT_BUILD) && !defined(ANGLE_TRANSLATOR_STATIC) -#if defined(_WIN32) || defined(_WIN64) - -#if defined(ANGLE_TRANSLATOR_IMPLEMENTATION) -#define COMPILER_EXPORT __declspec(dllexport) -#else -#define COMPILER_EXPORT __declspec(dllimport) -#endif // defined(ANGLE_TRANSLATOR_IMPLEMENTATION) - -#else // defined(_WIN32) || defined(_WIN64) -#define COMPILER_EXPORT __attribute__((visibility("default"))) -#endif - -#else // defined(COMPONENT_BUILD) && !defined(ANGLE_TRANSLATOR_STATIC) -#define COMPILER_EXPORT -#endif - -#include <stddef.h> - -#include "KHR/khrplatform.h" - -#include <map> -#include <string> -#include <vector> - -// -// This is the platform independent interface between an OGL driver -// and the shading language compiler. -// - -namespace sh -{ -// GLenum alias -typedef unsigned int GLenum; -} - -// Must be included after GLenum proxy typedef -// Note: make sure to increment ANGLE_SH_VERSION when changing ShaderVars.h -#include "ShaderVars.h" - -// Version number for shader translation API. -// It is incremented every time the API changes. -#define ANGLE_SH_VERSION 132 - -typedef enum { - SH_GLES2_SPEC = 0x8B40, - SH_WEBGL_SPEC = 0x8B41, - - SH_GLES3_SPEC = 0x8B86, - SH_WEBGL2_SPEC = 0x8B87, - - // The CSS Shaders spec is a subset of the WebGL spec. - // - // In both CSS vertex and fragment shaders, ANGLE: - // (1) Reserves the "css_" prefix. - // (2) Renames the main function to css_main. - // (3) Disables the gl_MaxDrawBuffers built-in. - // - // In CSS fragment shaders, ANGLE: - // (1) Disables the gl_FragColor built-in. - // (2) Disables the gl_FragData built-in. - // (3) Enables the css_MixColor built-in. - // (4) Enables the css_ColorMatrix built-in. - // - // After passing a CSS shader through ANGLE, the browser is expected to append - // a new main function to it. - // This new main function will call the css_main function. - // It may also perform additional operations like varying assignment, texture - // access, and gl_FragColor assignment in order to implement the CSS Shaders - // blend modes. - // - SH_CSS_SHADERS_SPEC = 0x8B42 -} ShShaderSpec; - -typedef enum { - SH_ESSL_OUTPUT = 0x8B45, - SH_GLSL_OUTPUT = 0x8B46, - SH_HLSL_OUTPUT = 0x8B47, - SH_HLSL9_OUTPUT = 0x8B47, - SH_HLSL11_OUTPUT = 0x8B48 -} ShShaderOutput; - -// Compile options. -typedef enum { - SH_VALIDATE = 0, - SH_VALIDATE_LOOP_INDEXING = 0x0001, - SH_INTERMEDIATE_TREE = 0x0002, - SH_OBJECT_CODE = 0x0004, - SH_VARIABLES = 0x0008, - SH_LINE_DIRECTIVES = 0x0010, - SH_SOURCE_PATH = 0x0020, - SH_UNROLL_FOR_LOOP_WITH_INTEGER_INDEX = 0x0040, - // If a sampler array index happens to be a loop index, - // 1) if its type is integer, unroll the loop. - // 2) if its type is float, fail the shader compile. - // This is to work around a mac driver bug. - SH_UNROLL_FOR_LOOP_WITH_SAMPLER_ARRAY_INDEX = 0x0080, - - // This is needed only as a workaround for certain OpenGL driver bugs. - SH_EMULATE_BUILT_IN_FUNCTIONS = 0x0100, - - // This is an experimental flag to enforce restrictions that aim to prevent - // timing attacks. - // It generates compilation errors for shaders that could expose sensitive - // texture information via the timing channel. - // To use this flag, you must compile the shader under the WebGL spec - // (using the SH_WEBGL_SPEC flag). - SH_TIMING_RESTRICTIONS = 0x0200, - - // This flag prints the dependency graph that is used to enforce timing - // restrictions on fragment shaders. - // This flag only has an effect if all of the following are true: - // - The shader spec is SH_WEBGL_SPEC. - // - The compile options contain the SH_TIMING_RESTRICTIONS flag. - // - The shader type is GL_FRAGMENT_SHADER. - SH_DEPENDENCY_GRAPH = 0x0400, - - // Enforce the GLSL 1.017 Appendix A section 7 packing restrictions. - // This flag only enforces (and can only enforce) the packing - // restrictions for uniform variables in both vertex and fragment - // shaders. ShCheckVariablesWithinPackingLimits() lets embedders - // enforce the packing restrictions for varying variables during - // program link time. - SH_ENFORCE_PACKING_RESTRICTIONS = 0x0800, - - // This flag ensures all indirect (expression-based) array indexing - // is clamped to the bounds of the array. This ensures, for example, - // that you cannot read off the end of a uniform, whether an array - // vec234, or mat234 type. The ShArrayIndexClampingStrategy enum, - // specified in the ShBuiltInResources when constructing the - // compiler, selects the strategy for the clamping implementation. - SH_CLAMP_INDIRECT_ARRAY_BOUNDS = 0x1000, - - // This flag limits the complexity of an expression. - SH_LIMIT_EXPRESSION_COMPLEXITY = 0x2000, - - // This flag limits the depth of the call stack. - SH_LIMIT_CALL_STACK_DEPTH = 0x4000, - - // This flag initializes gl_Position to vec4(0,0,0,0) at the - // beginning of the vertex shader's main(), and has no effect in the - // fragment shader. It is intended as a workaround for drivers which - // incorrectly fail to link programs if gl_Position is not written. - SH_INIT_GL_POSITION = 0x8000, - - // This flag replaces - // "a && b" with "a ? b : false", - // "a || b" with "a ? true : b". - // This is to work around a MacOSX driver bug that |b| is executed - // independent of |a|'s value. - SH_UNFOLD_SHORT_CIRCUIT = 0x10000, - - // This flag initializes varyings without static use in vertex shader - // at the beginning of main(), and has no effects in the fragment shader. - // It is intended as a workaround for drivers which incorrectly optimize - // out such varyings and cause a link failure. - SH_INIT_VARYINGS_WITHOUT_STATIC_USE = 0x20000, - - // This flag scalarizes vec/ivec/bvec/mat constructor args. - // It is intended as a workaround for Linux/Mac driver bugs. - SH_SCALARIZE_VEC_AND_MAT_CONSTRUCTOR_ARGS = 0x40000, - - // This flag overwrites a struct name with a unique prefix. - // It is intended as a workaround for drivers that do not handle - // struct scopes correctly, including all Mac drivers and Linux AMD. - SH_REGENERATE_STRUCT_NAMES = 0x80000, -} ShCompileOptions; - -// Defines alternate strategies for implementing array index clamping. -typedef enum { - // Use the clamp intrinsic for array index clamping. - SH_CLAMP_WITH_CLAMP_INTRINSIC = 1, - - // Use a user-defined function for array index clamping. - SH_CLAMP_WITH_USER_DEFINED_INT_CLAMP_FUNCTION -} ShArrayIndexClampingStrategy; - -// -// Driver must call this first, once, before doing any other -// compiler operations. -// If the function succeeds, the return value is true, else false. -// -COMPILER_EXPORT bool ShInitialize(); -// -// Driver should call this at shutdown. -// If the function succeeds, the return value is true, else false. -// -COMPILER_EXPORT bool ShFinalize(); - -// The 64 bits hash function. The first parameter is the input string; the -// second parameter is the string length. -typedef khronos_uint64_t (*ShHashFunction64)(const char*, size_t); - -// -// Implementation dependent built-in resources (constants and extensions). -// The names for these resources has been obtained by stripping gl_/GL_. -// -typedef struct -{ - // Constants. - int MaxVertexAttribs; - int MaxVertexUniformVectors; - int MaxVaryingVectors; - int MaxVertexTextureImageUnits; - int MaxCombinedTextureImageUnits; - int MaxTextureImageUnits; - int MaxFragmentUniformVectors; - int MaxDrawBuffers; - - // Extensions. - // Set to 1 to enable the extension, else 0. - int OES_standard_derivatives; - int OES_EGL_image_external; - int ARB_texture_rectangle; - int EXT_draw_buffers; - int EXT_frag_depth; - int EXT_shader_texture_lod; - - // Set to 1 to enable replacing GL_EXT_draw_buffers #extension directives - // with GL_NV_draw_buffers in ESSL output. This flag can be used to emulate - // EXT_draw_buffers by using it in combination with GLES3.0 glDrawBuffers - // function. This applies to Tegra K1 devices. - int NV_draw_buffers; - - // Set to 1 if highp precision is supported in the fragment language. - // Default is 0. - int FragmentPrecisionHigh; - - // GLSL ES 3.0 constants. - int MaxVertexOutputVectors; - int MaxFragmentInputVectors; - int MinProgramTexelOffset; - int MaxProgramTexelOffset; - - // Name Hashing. - // Set a 64 bit hash function to enable user-defined name hashing. - // Default is NULL. - ShHashFunction64 HashFunction; - - // Selects a strategy to use when implementing array index clamping. - // Default is SH_CLAMP_WITH_CLAMP_INTRINSIC. - ShArrayIndexClampingStrategy ArrayIndexClampingStrategy; - - // The maximum complexity an expression can be. - int MaxExpressionComplexity; - - // The maximum depth a call stack can be. - int MaxCallStackDepth; -} ShBuiltInResources; - -// -// Initialize built-in resources with minimum expected values. -// Parameters: -// resources: The object to initialize. Will be comparable with memcmp. -// -COMPILER_EXPORT void ShInitBuiltInResources(ShBuiltInResources *resources); - -// -// ShHandle held by but opaque to the driver. It is allocated, -// managed, and de-allocated by the compiler. Its contents -// are defined by and used by the compiler. -// -// If handle creation fails, 0 will be returned. -// -typedef void *ShHandle; - -// -// Returns the a concatenated list of the items in ShBuiltInResources as a -// null-terminated string. -// This function must be updated whenever ShBuiltInResources is changed. -// Parameters: -// handle: Specifies the handle of the compiler to be used. -COMPILER_EXPORT const std::string &ShGetBuiltInResourcesString(const ShHandle handle); - -// -// Driver calls these to create and destroy compiler objects. -// -// Returns the handle of constructed compiler, null if the requested compiler is -// not supported. -// Parameters: -// type: Specifies the type of shader - GL_FRAGMENT_SHADER or GL_VERTEX_SHADER. -// spec: Specifies the language spec the compiler must conform to - -// SH_GLES2_SPEC or SH_WEBGL_SPEC. -// output: Specifies the output code type - SH_ESSL_OUTPUT, SH_GLSL_OUTPUT, -// SH_HLSL9_OUTPUT or SH_HLSL11_OUTPUT. -// resources: Specifies the built-in resources. -COMPILER_EXPORT ShHandle ShConstructCompiler( - sh::GLenum type, - ShShaderSpec spec, - ShShaderOutput output, - const ShBuiltInResources *resources); -COMPILER_EXPORT void ShDestruct(ShHandle handle); - -// -// Compiles the given shader source. -// If the function succeeds, the return value is true, else false. -// Parameters: -// handle: Specifies the handle of compiler to be used. -// shaderStrings: Specifies an array of pointers to null-terminated strings -// containing the shader source code. -// numStrings: Specifies the number of elements in shaderStrings array. -// compileOptions: A mask containing the following parameters: -// SH_VALIDATE: Validates shader to ensure that it conforms to the spec -// specified during compiler construction. -// SH_VALIDATE_LOOP_INDEXING: Validates loop and indexing in the shader to -// ensure that they do not exceed the minimum -// functionality mandated in GLSL 1.0 spec, -// Appendix A, Section 4 and 5. -// There is no need to specify this parameter when -// compiling for WebGL - it is implied. -// SH_INTERMEDIATE_TREE: Writes intermediate tree to info log. -// Can be queried by calling ShGetInfoLog(). -// SH_OBJECT_CODE: Translates intermediate tree to glsl or hlsl shader. -// Can be queried by calling ShGetObjectCode(). -// SH_VARIABLES: Extracts attributes, uniforms, and varyings. -// Can be queried by calling ShGetVariableInfo(). -// -COMPILER_EXPORT bool ShCompile( - const ShHandle handle, - const char * const shaderStrings[], - size_t numStrings, - int compileOptions); - -// Return the version of the shader language. -COMPILER_EXPORT int ShGetShaderVersion(const ShHandle handle); - -// Return the currently set language output type. -COMPILER_EXPORT ShShaderOutput ShGetShaderOutputType( - const ShHandle handle); - -// Returns null-terminated information log for a compiled shader. -// Parameters: -// handle: Specifies the compiler -COMPILER_EXPORT const std::string &ShGetInfoLog(const ShHandle handle); - -// Returns null-terminated object code for a compiled shader. -// Parameters: -// handle: Specifies the compiler -COMPILER_EXPORT const std::string &ShGetObjectCode(const ShHandle handle); - -// Returns a (original_name, hash) map containing all the user defined -// names in the shader, including variable names, function names, struct -// names, and struct field names. -// Parameters: -// handle: Specifies the compiler -COMPILER_EXPORT const std::map<std::string, std::string> *ShGetNameHashingMap( - const ShHandle handle); - -// Shader variable inspection. -// Returns a pointer to a list of variables of the designated type. -// (See ShaderVars.h for type definitions, included above) -// Returns NULL on failure. -// Parameters: -// handle: Specifies the compiler -COMPILER_EXPORT const std::vector<sh::Uniform> *ShGetUniforms(const ShHandle handle); -COMPILER_EXPORT const std::vector<sh::Varying> *ShGetVaryings(const ShHandle handle); -COMPILER_EXPORT const std::vector<sh::Attribute> *ShGetAttributes(const ShHandle handle); -COMPILER_EXPORT const std::vector<sh::Attribute> *ShGetOutputVariables(const ShHandle handle); -COMPILER_EXPORT const std::vector<sh::InterfaceBlock> *ShGetInterfaceBlocks(const ShHandle handle); - -typedef struct -{ - sh::GLenum type; - int size; -} ShVariableInfo; - -// Returns true if the passed in variables pack in maxVectors following -// the packing rules from the GLSL 1.017 spec, Appendix A, section 7. -// Returns false otherwise. Also look at the SH_ENFORCE_PACKING_RESTRICTIONS -// flag above. -// Parameters: -// maxVectors: the available rows of registers. -// varInfoArray: an array of variable info (types and sizes). -// varInfoArraySize: the size of the variable array. -COMPILER_EXPORT bool ShCheckVariablesWithinPackingLimits( - int maxVectors, - ShVariableInfo *varInfoArray, - size_t varInfoArraySize); - -// Gives the compiler-assigned register for an interface block. -// The method writes the value to the output variable "indexOut". -// Returns true if it found a valid interface block, false otherwise. -// Parameters: -// handle: Specifies the compiler -// interfaceBlockName: Specifies the interface block -// indexOut: output variable that stores the assigned register -COMPILER_EXPORT bool ShGetInterfaceBlockRegister(const ShHandle handle, - const std::string &interfaceBlockName, - unsigned int *indexOut); - -// Gives the compiler-assigned register for uniforms in the default -// interface block. -// The method writes the value to the output variable "indexOut". -// Returns true if it found a valid default uniform, false otherwise. -// Parameters: -// handle: Specifies the compiler -// interfaceBlockName: Specifies the uniform -// indexOut: output variable that stores the assigned register -COMPILER_EXPORT bool ShGetUniformRegister(const ShHandle handle, - const std::string &uniformName, - unsigned int *indexOut); - -#endif // _COMPILER_INTERFACE_INCLUDED_ diff --git a/platform/winrt/include/GLSLANG/ShaderVars.h b/platform/winrt/include/GLSLANG/ShaderVars.h deleted file mode 100644 index da21c3e76e..0000000000 --- a/platform/winrt/include/GLSLANG/ShaderVars.h +++ /dev/null @@ -1,185 +0,0 @@ -// -// Copyright (c) 2013-2014 The ANGLE Project Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// ShaderVars.h: -// Types to represent GL variables (varyings, uniforms, etc) -// - -#ifndef _COMPILER_INTERFACE_VARIABLES_ -#define _COMPILER_INTERFACE_VARIABLES_ - -#include <string> -#include <vector> -#include <algorithm> - -// Assume ShaderLang.h is included before ShaderVars.h, for sh::GLenum -// Note: make sure to increment ANGLE_SH_VERSION when changing ShaderVars.h - -namespace sh -{ - -// Varying interpolation qualifier, see section 4.3.9 of the ESSL 3.00.4 spec -enum InterpolationType -{ - INTERPOLATION_SMOOTH, - INTERPOLATION_CENTROID, - INTERPOLATION_FLAT -}; - -// Uniform block layout qualifier, see section 4.3.8.3 of the ESSL 3.00.4 spec -enum BlockLayoutType -{ - BLOCKLAYOUT_STANDARD, - BLOCKLAYOUT_PACKED, - BLOCKLAYOUT_SHARED -}; - -// Base class for all variables defined in shaders, including Varyings, Uniforms, etc -// Note: we must override the copy constructor and assignment operator so we can -// work around excessive GCC binary bloating: -// See https://code.google.com/p/angleproject/issues/detail?id=697 -struct COMPILER_EXPORT ShaderVariable -{ - ShaderVariable(); - ShaderVariable(GLenum typeIn, unsigned int arraySizeIn); - ~ShaderVariable(); - ShaderVariable(const ShaderVariable &other); - ShaderVariable &operator=(const ShaderVariable &other); - - bool isArray() const { return arraySize > 0; } - unsigned int elementCount() const { return std::max(1u, arraySize); } - bool isStruct() const { return !fields.empty(); } - - // All of the shader's variables are described using nested data - // structures. This is needed in order to disambiguate similar looking - // types, such as two structs containing the same fields, but in - // different orders. "findInfoByMappedName" provides an easy query for - // users to dive into the data structure and fetch the unique variable - // instance corresponding to a dereferencing chain of the top-level - // variable. - // Given a mapped name like 'a[0].b.c[0]', return the ShaderVariable - // that defines 'c' in |leafVar|, and the original name 'A[0].B.C[0]' - // in |originalName|, based on the assumption that |this| defines 'a'. - // If no match is found, return false. - bool findInfoByMappedName(const std::string &mappedFullName, - const ShaderVariable **leafVar, - std::string* originalFullName) const; - - GLenum type; - GLenum precision; - std::string name; - std::string mappedName; - unsigned int arraySize; - bool staticUse; - std::vector<ShaderVariable> fields; - std::string structName; - - protected: - bool isSameVariableAtLinkTime(const ShaderVariable &other, - bool matchPrecision) const; - - bool operator==(const ShaderVariable &other) const; - bool operator!=(const ShaderVariable &other) const - { - return !operator==(other); - } -}; - -struct COMPILER_EXPORT Uniform : public ShaderVariable -{ - Uniform(); - ~Uniform(); - Uniform(const Uniform &other); - Uniform &operator=(const Uniform &other); - bool operator==(const Uniform &other) const; - bool operator!=(const Uniform &other) const - { - return !operator==(other); - } - - // Decide whether two uniforms are the same at shader link time, - // assuming one from vertex shader and the other from fragment shader. - // See GLSL ES Spec 3.00.3, sec 4.3.5. - bool isSameUniformAtLinkTime(const Uniform &other) const; -}; - -struct COMPILER_EXPORT Attribute : public ShaderVariable -{ - Attribute(); - ~Attribute(); - Attribute(const Attribute &other); - Attribute &operator=(const Attribute &other); - bool operator==(const Attribute &other) const; - bool operator!=(const Attribute &other) const - { - return !operator==(other); - } - - int location; -}; - -struct COMPILER_EXPORT InterfaceBlockField : public ShaderVariable -{ - InterfaceBlockField(); - ~InterfaceBlockField(); - InterfaceBlockField(const InterfaceBlockField &other); - InterfaceBlockField &operator=(const InterfaceBlockField &other); - bool operator==(const InterfaceBlockField &other) const; - bool operator!=(const InterfaceBlockField &other) const - { - return !operator==(other); - } - - // Decide whether two InterfaceBlock fields are the same at shader - // link time, assuming one from vertex shader and the other from - // fragment shader. - // See GLSL ES Spec 3.00.3, sec 4.3.7. - bool isSameInterfaceBlockFieldAtLinkTime( - const InterfaceBlockField &other) const; - - bool isRowMajorLayout; -}; - -struct COMPILER_EXPORT Varying : public ShaderVariable -{ - Varying(); - ~Varying(); - Varying(const Varying &otherg); - Varying &operator=(const Varying &other); - bool operator==(const Varying &other) const; - bool operator!=(const Varying &other) const - { - return !operator==(other); - } - - // Decide whether two varyings are the same at shader link time, - // assuming one from vertex shader and the other from fragment shader. - // See GLSL ES Spec 3.00.3, sec 4.3.9. - bool isSameVaryingAtLinkTime(const Varying &other) const; - - InterpolationType interpolation; - bool isInvariant; -}; - -struct COMPILER_EXPORT InterfaceBlock -{ - InterfaceBlock(); - ~InterfaceBlock(); - InterfaceBlock(const InterfaceBlock &other); - InterfaceBlock &operator=(const InterfaceBlock &other); - - std::string name; - std::string mappedName; - std::string instanceName; - unsigned int arraySize; - BlockLayoutType layout; - bool isRowMajorLayout; - bool staticUse; - std::vector<InterfaceBlockField> fields; -}; - -} - -#endif // _COMPILER_INTERFACE_VARIABLES_ diff --git a/platform/winrt/include/KHR/khrplatform.h b/platform/winrt/include/KHR/khrplatform.h deleted file mode 100644 index 43aac97a73..0000000000 --- a/platform/winrt/include/KHR/khrplatform.h +++ /dev/null @@ -1,282 +0,0 @@ -#ifndef __khrplatform_h_ -#define __khrplatform_h_ - -/* -** Copyright (c) 2008-2009 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -/* Khronos platform-specific types and definitions. - * - * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $ - * - * Adopters may modify this file to suit their platform. Adopters are - * encouraged to submit platform specific modifications to the Khronos - * group so that they can be included in future versions of this file. - * Please submit changes by sending them to the public Khronos Bugzilla - * (http://khronos.org/bugzilla) by filing a bug against product - * "Khronos (general)" component "Registry". - * - * A predefined template which fills in some of the bug fields can be - * reached using http://tinyurl.com/khrplatform-h-bugreport, but you - * must create a Bugzilla login first. - * - * - * See the Implementer's Guidelines for information about where this file - * should be located on your system and for more details of its use: - * http://www.khronos.org/registry/implementers_guide.pdf - * - * This file should be included as - * #include <KHR/khrplatform.h> - * by Khronos client API header files that use its types and defines. - * - * The types in khrplatform.h should only be used to define API-specific types. - * - * Types defined in khrplatform.h: - * khronos_int8_t signed 8 bit - * khronos_uint8_t unsigned 8 bit - * khronos_int16_t signed 16 bit - * khronos_uint16_t unsigned 16 bit - * khronos_int32_t signed 32 bit - * khronos_uint32_t unsigned 32 bit - * khronos_int64_t signed 64 bit - * khronos_uint64_t unsigned 64 bit - * khronos_intptr_t signed same number of bits as a pointer - * khronos_uintptr_t unsigned same number of bits as a pointer - * khronos_ssize_t signed size - * khronos_usize_t unsigned size - * khronos_float_t signed 32 bit floating point - * khronos_time_ns_t unsigned 64 bit time in nanoseconds - * khronos_utime_nanoseconds_t unsigned time interval or absolute time in - * nanoseconds - * khronos_stime_nanoseconds_t signed time interval in nanoseconds - * khronos_boolean_enum_t enumerated boolean type. This should - * only be used as a base type when a client API's boolean type is - * an enum. Client APIs which use an integer or other type for - * booleans cannot use this as the base type for their boolean. - * - * Tokens defined in khrplatform.h: - * - * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. - * - * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. - * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. - * - * Calling convention macros defined in this file: - * KHRONOS_APICALL - * KHRONOS_APIENTRY - * KHRONOS_APIATTRIBUTES - * - * These may be used in function prototypes as: - * - * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( - * int arg1, - * int arg2) KHRONOS_APIATTRIBUTES; - */ - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APICALL - *------------------------------------------------------------------------- - * This precedes the return type of the function in the function prototype. - */ -#if defined(_WIN32) && !defined(__SCITECH_SNAP__) -# define KHRONOS_APICALL __declspec(dllimport) -#elif defined (__SYMBIAN32__) -# define KHRONOS_APICALL IMPORT_C -#else -# define KHRONOS_APICALL -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIENTRY - *------------------------------------------------------------------------- - * This follows the return type of the function and precedes the function - * name in the function prototype. - */ -#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) - /* Win32 but not WinCE */ -# define KHRONOS_APIENTRY __stdcall -#else -# define KHRONOS_APIENTRY -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIATTRIBUTES - *------------------------------------------------------------------------- - * This follows the closing parenthesis of the function prototype arguments. - */ -#if defined (__ARMCC_2__) -#define KHRONOS_APIATTRIBUTES __softfp -#else -#define KHRONOS_APIATTRIBUTES -#endif - -/*------------------------------------------------------------------------- - * basic type definitions - *-----------------------------------------------------------------------*/ -#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) - - -/* - * Using <stdint.h> - */ -#include <stdint.h> -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__VMS ) || defined(__sgi) - -/* - * Using <inttypes.h> - */ -#include <inttypes.h> -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) - -/* - * Win32 - */ -typedef __int32 khronos_int32_t; -typedef unsigned __int32 khronos_uint32_t; -typedef __int64 khronos_int64_t; -typedef unsigned __int64 khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__sun__) || defined(__digital__) - -/* - * Sun or Digital - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#if defined(__arch64__) || defined(_LP64) -typedef long int khronos_int64_t; -typedef unsigned long int khronos_uint64_t; -#else -typedef long long int khronos_int64_t; -typedef unsigned long long int khronos_uint64_t; -#endif /* __arch64__ */ -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif 0 - -/* - * Hypothetical platform with no float or int64 support - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#define KHRONOS_SUPPORT_INT64 0 -#define KHRONOS_SUPPORT_FLOAT 0 - -#else - -/* - * Generic fallback - */ -#include <stdint.h> -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#endif - - -/* - * Types that are (so far) the same on all platforms - */ -typedef signed char khronos_int8_t; -typedef unsigned char khronos_uint8_t; -typedef signed short int khronos_int16_t; -typedef unsigned short int khronos_uint16_t; - -/* - * Types that differ between LLP64 and LP64 architectures - in LLP64, - * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears - * to be the only LLP64 architecture in current use. - */ -#ifdef _WIN64 -typedef signed long long int khronos_intptr_t; -typedef unsigned long long int khronos_uintptr_t; -typedef signed long long int khronos_ssize_t; -typedef unsigned long long int khronos_usize_t; -#else -typedef signed long int khronos_intptr_t; -typedef unsigned long int khronos_uintptr_t; -typedef signed long int khronos_ssize_t; -typedef unsigned long int khronos_usize_t; -#endif - -#if KHRONOS_SUPPORT_FLOAT -/* - * Float type - */ -typedef float khronos_float_t; -#endif - -#if KHRONOS_SUPPORT_INT64 -/* Time types - * - * These types can be used to represent a time interval in nanoseconds or - * an absolute Unadjusted System Time. Unadjusted System Time is the number - * of nanoseconds since some arbitrary system event (e.g. since the last - * time the system booted). The Unadjusted System Time is an unsigned - * 64 bit value that wraps back to 0 every 584 years. Time intervals - * may be either signed or unsigned. - */ -typedef khronos_uint64_t khronos_utime_nanoseconds_t; -typedef khronos_int64_t khronos_stime_nanoseconds_t; -#endif - -/* - * Dummy value used to pad enum types to 32 bits. - */ -#ifndef KHRONOS_MAX_ENUM -#define KHRONOS_MAX_ENUM 0x7FFFFFFF -#endif - -/* - * Enumerated boolean type - * - * Values other than zero should be considered to be true. Therefore - * comparisons should not be made against KHRONOS_TRUE. - */ -typedef enum { - KHRONOS_FALSE = 0, - KHRONOS_TRUE = 1, - KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM -} khronos_boolean_enum_t; - -#endif /* __khrplatform_h_ */ diff --git a/platform/winrt/include/LICENSE.ANGLE.txt b/platform/winrt/include/LICENSE.ANGLE.txt deleted file mode 100644 index bdacb32e36..0000000000 --- a/platform/winrt/include/LICENSE.ANGLE.txt +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2002-2013 The ANGLE Project Authors. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. -// Ltd., nor the names of their contributors may be used to endorse -// or promote products derived from this software without specific -// prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. diff --git a/platform/winrt/include/angle_gl.h b/platform/winrt/include/angle_gl.h deleted file mode 100644 index d093f75ee2..0000000000 --- a/platform/winrt/include/angle_gl.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// angle_gl.h: -// Includes all necessary GL headers and definitions for ANGLE. -// - -#ifndef ANGLE_GL_H_ -#define ANGLE_GL_H_ - -#include "GLES2/gl2.h" -#include "GLES2/gl2ext.h" -#include "GLES3/gl3.h" -#include "GLES3/gl3ext.h" - -// The following enum is used in ANGLE, but is from desktop GL -#ifndef GL_SAMPLER_2D_RECT_ARB -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#endif - -#endif // ANGLE_GL_H_ diff --git a/platform/winrt/include/angle_windowsstore.h b/platform/winrt/include/angle_windowsstore.h deleted file mode 100644 index 53ec93e037..0000000000 --- a/platform/winrt/include/angle_windowsstore.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// angle_windowsstore.h: - -#ifndef ANGLE_WINDOWSSTORE_H_ -#define ANGLE_WINDOWSSTORE_H_ - -// The following properties can be set on the CoreApplication to support additional -// ANGLE configuration options. -// -// The Visual Studio sample templates provided with this version of ANGLE have examples -// of how to set these property values. - -// -// Property: EGLNativeWindowTypeProperty -// Type: IInspectable -// Description: Set this property to specify the window type to use for creating a surface. -// If this property is missing, surface creation will fail. -// -const wchar_t EGLNativeWindowTypeProperty[] = L"EGLNativeWindowTypeProperty"; - -// -// Property: EGLRenderSurfaceSizeProperty -// Type: Size -// Description: Set this property to specify a preferred size in pixels of the render surface. -// The render surface size width and height must be greater than 0. -// If this property is set, then the render surface size is fixed. -// If this property is missing, a default behavior will be provided. -// The default behavior uses the window size if a CoreWindow is specified or -// the size of the SwapChainPanel control if one is specified. -// -const wchar_t EGLRenderSurfaceSizeProperty[] = L"EGLRenderSurfaceSizeProperty"; - -#endif // ANGLE_WINDOWSSTORE_H_ diff --git a/platform/winrt/joystick_winrt.cpp b/platform/winrt/joystick_winrt.cpp new file mode 100644 index 0000000000..4816e9c831 --- /dev/null +++ b/platform/winrt/joystick_winrt.cpp @@ -0,0 +1,146 @@ +/*************************************************************************/ +/* joystick.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "joystick_winrt.h" + +using namespace Windows::Gaming::Input; +using namespace Windows::Foundation; + +void JoystickWinrt::register_events() { + + Gamepad::GamepadAdded += + ref new EventHandler<Gamepad^>(this, &JoystickWinrt::OnGamepadAdded); + Gamepad::GamepadRemoved += + ref new EventHandler<Gamepad^>(this, &JoystickWinrt::OnGamepadRemoved); +} + +uint32_t JoystickWinrt::process_controllers(uint32_t p_last_id) { + + for (int i = 0; i < MAX_CONTROLLERS; i++) { + + if (!controllers[i].connected) break; + + switch (controllers[i].type) { + + case ControllerType::GAMEPAD_CONTROLLER: { + + GamepadReading reading = ((Gamepad^)controllers[i].controller_reference)->GetCurrentReading(); + + int button_mask = (int)GamepadButtons::Menu; + for (int j = 0; j < 14; j++) { + + p_last_id = input->joy_button(p_last_id, controllers[i].id, j,(int)reading.Buttons & button_mask); + button_mask *= 2; + } + + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_0, axis_correct(reading.LeftThumbstickX)); + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_1, axis_correct(reading.LeftThumbstickY, true)); + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_2, axis_correct(reading.RightThumbstickX)); + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_3, axis_correct(reading.RightThumbstickY, true)); + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_4, axis_correct(reading.LeftTrigger, false, true)); + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_5, axis_correct(reading.RightTrigger, false, true)); + + break; + } + } + } + + return p_last_id; +} + +JoystickWinrt::JoystickWinrt() { + + for (int i = 0; i < MAX_CONTROLLERS; i++) + controllers[i].id = i; +} + +JoystickWinrt::JoystickWinrt(InputDefault * p_input) { + + input = p_input; + + JoystickWinrt(); +} + +void JoystickWinrt::OnGamepadAdded(Platform::Object ^ sender, Windows::Gaming::Input::Gamepad ^ value) { + + short idx = -1; + + for (int i = 0; i < MAX_CONTROLLERS; i++) { + + if (!controllers[i].connected) { + idx = i; + break; + } + } + + ERR_FAIL_COND(idx == -1); + + controllers[idx].connected = true; + controllers[idx].controller_reference = value; + controllers[idx].type = ControllerType::GAMEPAD_CONTROLLER; + + input->joy_connection_changed(idx, true, "Xbox Controller", "__WINRT_GAMEPAD__"); +} + +void JoystickWinrt::OnGamepadRemoved(Platform::Object ^ sender, Windows::Gaming::Input::Gamepad ^ value) { + + short idx = -1; + + for (int i = 0; i < MAX_CONTROLLERS; i++) { + + if (controllers[i].controller_reference == value) { + idx = i; + break; + } + } + + ERR_FAIL_COND(idx == -1); + + for (int i = idx + 1; i < MAX_CONTROLLERS - 1; i++) { + + if (!controllers[i].connected) { + break; + } + + controllers[i - 1] = controllers[i]; + } + controllers[MAX_CONTROLLERS - 1] = ControllerDevice(); + + input->joy_connection_changed(idx, false, "Xbox Controller"); +} + +InputDefault::JoyAxis JoystickWinrt::axis_correct(double p_val, bool p_negate, bool p_trigger) const { + + InputDefault::JoyAxis jx; + + jx.min = p_trigger ? 0 : -1; + jx.value = (float)(p_negate ? -p_val : p_val); + + return jx; +} diff --git a/platform/winrt/joystick_winrt.h b/platform/winrt/joystick_winrt.h new file mode 100644 index 0000000000..17f9565708 --- /dev/null +++ b/platform/winrt/joystick_winrt.h @@ -0,0 +1,81 @@ +/*************************************************************************/ +/* joystick.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#ifndef JOYSTICK_WINRT_H +#define JOYSTICK_WINRT_H + +#include "main/input_default.h" + +ref class JoystickWinrt sealed { + +internal: + + void register_events(); + uint32_t process_controllers(uint32_t p_last_id); + + JoystickWinrt(); + JoystickWinrt(InputDefault* p_input); + +private: + + enum { + MAX_CONTROLLERS = 4, + }; + + enum ControllerType { + GAMEPAD_CONTROLLER, + ARCADE_STICK_CONTROLLER, + RACING_WHEEL_CONTROLLER, + }; + + struct ControllerDevice { + + Windows::Gaming::Input::IGameController^ controller_reference; + + int id; + bool connected; + ControllerType type; + + ControllerDevice() { + id = -1; + connected = false; + type = ControllerType::GAMEPAD_CONTROLLER; + } + }; + + ControllerDevice controllers[MAX_CONTROLLERS]; + + InputDefault* input; + + void OnGamepadAdded(Platform::Object^ sender, Windows::Gaming::Input::Gamepad^ value); + void OnGamepadRemoved(Platform::Object^ sender, Windows::Gaming::Input::Gamepad^ value); + + InputDefault::JoyAxis axis_correct(double p_val, bool p_negate = false, bool p_trigger = false) const; +}; + +#endif diff --git a/platform/winrt/os_winrt.cpp b/platform/winrt/os_winrt.cpp index f045f54bf6..0ce561f88a 100644 --- a/platform/winrt/os_winrt.cpp +++ b/platform/winrt/os_winrt.cpp @@ -32,7 +32,7 @@ #include "drivers/unix/memory_pool_static_malloc.h" #include "os/memory_pool_dynamic_static.h" #include "thread_winrt.h" -//#include "drivers/windows/semaphore_windows.h" +#include "drivers/windows/semaphore_windows.h" #include "drivers/windows/mutex_windows.h" #include "main/main.h" #include "drivers/windows/file_access_windows.h" @@ -47,15 +47,27 @@ #include "globals.h" #include "io/marshalls.h" +#include "platform/windows/packet_peer_udp_winsock.h" +#include "platform/windows/stream_peer_winsock.h" +#include "platform/windows/tcp_server_winsock.h" +#include "drivers/unix/ip_unix.h" + #include <wrl.h> +#include <ppltasks.h> using namespace Windows::ApplicationModel::Core; using namespace Windows::ApplicationModel::Activation; using namespace Windows::UI::Core; using namespace Windows::UI::Input; +using namespace Windows::UI::Popups; using namespace Windows::Foundation; using namespace Windows::Graphics::Display; using namespace Microsoft::WRL; +using namespace Windows::UI::ViewManagement; +using namespace Windows::Devices::Input; +using namespace Windows::Devices::Sensors; +using namespace Windows::ApplicationModel::DataTransfer; +using namespace concurrency; int OSWinrt::get_video_driver_count() const { @@ -72,6 +84,66 @@ OS::VideoMode OSWinrt::get_default_video_mode() const { return video_mode; } +Size2 OSWinrt::get_window_size() const { + Size2 size; + size.width = video_mode.width; + size.height = video_mode.height; + return size; +} + +void OSWinrt::set_window_size(const Size2 p_size) { + + Windows::Foundation::Size new_size; + new_size.Width = p_size.width; + new_size.Height = p_size.height; + + ApplicationView^ view = ApplicationView::GetForCurrentView(); + + if (view->TryResizeView(new_size)) { + + video_mode.width = p_size.width; + video_mode.height = p_size.height; + } +} + +void OSWinrt::set_window_fullscreen(bool p_enabled) { + + ApplicationView^ view = ApplicationView::GetForCurrentView(); + + video_mode.fullscreen = view->IsFullScreenMode; + + if (video_mode.fullscreen == p_enabled) + return; + + if (p_enabled) { + + video_mode.fullscreen = view->TryEnterFullScreenMode(); + + } else { + + view->ExitFullScreenMode(); + video_mode.fullscreen = false; + + } +} + +bool OSWinrt::is_window_fullscreen() const { + + return ApplicationView::GetForCurrentView()->IsFullScreenMode; +} + +void OSWinrt::set_keep_screen_on(bool p_enabled) { + + if (is_keep_screen_on() == p_enabled) return; + + if (p_enabled) + display_request->RequestActive(); + else + display_request->RequestRelease(); + + OS::set_keep_screen_on(p_enabled); +} + int OSWinrt::get_audio_driver_count() const { return AudioDriverManagerSW::get_driver_count(); @@ -94,7 +166,7 @@ void OSWinrt::initialize_core() { //RedirectIOToConsole(); ThreadWinrt::make_default(); - //SemaphoreWindows::make_default(); + SemaphoreWindows::make_default(); MutexWindows::make_default(); FileAccess::make_default<FileAccessWindows>(FileAccess::ACCESS_RESOURCES); @@ -108,6 +180,10 @@ void OSWinrt::initialize_core() { //TCPServerWinsock::make_default(); //StreamPeerWinsock::make_default(); + TCPServerWinsock::make_default(); + StreamPeerWinsock::make_default(); + PacketPeerUDPWinsock::make_default(); + mempool_static = new MemoryPoolStaticMalloc; #if 1 mempool_dynamic = memnew( MemoryPoolDynamicStatic ); @@ -126,6 +202,8 @@ void OSWinrt::initialize_core() { ticks_start = 0; ticks_start = get_ticks_usec(); + IP_Unix::make_default(); + cursor_shape=CURSOR_ARROW; } @@ -154,9 +232,38 @@ void OSWinrt::initialize(const VideoMode& p_desired,int p_video_driver,int p_aud VideoMode vm; vm.width = gl_context->get_window_width(); vm.height = gl_context->get_window_height(); - vm.fullscreen = true; vm.resizable = false; + ApplicationView^ view = ApplicationView::GetForCurrentView(); + vm.fullscreen = view->IsFullScreenMode; + + view->SetDesiredBoundsMode(ApplicationViewBoundsMode::UseVisible); + view->PreferredLaunchWindowingMode = ApplicationViewWindowingMode::PreferredLaunchViewSize; + + if (p_desired.fullscreen != view->IsFullScreenMode) { + if (p_desired.fullscreen) { + + vm.fullscreen = view->TryEnterFullScreenMode(); + + } else { + + view->ExitFullScreenMode(); + vm.fullscreen = false; + } + } + + Windows::Foundation::Size desired; + desired.Width = p_desired.width; + desired.Height = p_desired.height; + + view->PreferredLaunchViewSize = desired; + + if (view->TryResizeView(desired)) { + + vm.width = view->VisibleBounds.Width; + vm.height = view->VisibleBounds.Height; + } + set_video_mode(vm); gl_context->make_current(); @@ -179,6 +286,9 @@ void OSWinrt::initialize(const VideoMode& p_desired,int p_video_driver,int p_aud input = memnew( InputDefault ); + joystick = ref new JoystickWinrt(input); + joystick->register_events(); + AudioDriverManagerSW::get_driver(p_audio_driver)->set_singleton(); if (AudioDriverManagerSW::get_driver(p_audio_driver)->init()!=OK) { @@ -196,96 +306,77 @@ void OSWinrt::initialize(const VideoMode& p_desired,int p_video_driver,int p_aud spatial_sound_2d_server = memnew( SpatialSound2DServerSW ); spatial_sound_2d_server->init(); + managed_object->update_clipboard(); - _ensure_data_dir(); -} - -void OSWinrt::set_clipboard(const String& p_text) { - - /* - if (!OpenClipboard(hWnd)) { - ERR_EXPLAIN("Unable to open clipboard."); - ERR_FAIL(); - }; - EmptyClipboard(); - - HGLOBAL mem = GlobalAlloc(GMEM_MOVEABLE, (p_text.length() + 1) * sizeof(CharType)); - if (mem == NULL) { - ERR_EXPLAIN("Unable to allocate memory for clipboard contents."); - ERR_FAIL(); - }; - LPWSTR lptstrCopy = (LPWSTR)GlobalLock(mem); - memcpy(lptstrCopy, p_text.c_str(), (p_text.length() + 1) * sizeof(CharType)); - //memset((lptstrCopy + p_text.length()), 0, sizeof(CharType)); - GlobalUnlock(mem); - - SetClipboardData(CF_UNICODETEXT, mem); - - // set the CF_TEXT version (not needed?) - CharString utf8 = p_text.utf8(); - mem = GlobalAlloc(GMEM_MOVEABLE, utf8.length() + 1); - if (mem == NULL) { - ERR_EXPLAIN("Unable to allocate memory for clipboard contents."); - ERR_FAIL(); - }; - LPTSTR ptr = (LPTSTR)GlobalLock(mem); - memcpy(ptr, utf8.get_data(), utf8.length()); - ptr[utf8.length()] = 0; - GlobalUnlock(mem); - - SetClipboardData(CF_TEXT, mem); - - CloseClipboard(); - */ -}; + Clipboard::ContentChanged += ref new EventHandler<Platform::Object^>(managed_object, &ManagedType::on_clipboard_changed); -String OSWinrt::get_clipboard() const { + accelerometer = Accelerometer::GetDefault(); + if (accelerometer != nullptr) { + // 60 FPS + accelerometer->ReportInterval = (1.0f / 60.0f) * 1000; + accelerometer->ReadingChanged += + ref new TypedEventHandler<Accelerometer^, AccelerometerReadingChangedEventArgs^> + (managed_object, &ManagedType::on_accelerometer_reading_changed); + } - /* - String ret; - if (!OpenClipboard(hWnd)) { - ERR_EXPLAIN("Unable to open clipboard."); - ERR_FAIL_V(""); - }; + magnetometer = Magnetometer::GetDefault(); + if (magnetometer != nullptr) { + // 60 FPS + magnetometer->ReportInterval = (1.0f / 60.0f) * 1000; + magnetometer->ReadingChanged += + ref new TypedEventHandler<Magnetometer^, MagnetometerReadingChangedEventArgs^> + (managed_object, &ManagedType::on_magnetometer_reading_changed); + } - if (IsClipboardFormatAvailable(CF_UNICODETEXT)) { + gyrometer = Gyrometer::GetDefault(); + if (gyrometer != nullptr) { + // 60 FPS + gyrometer->ReportInterval = (1.0f / 60.0f) * 1000; + gyrometer->ReadingChanged += + ref new TypedEventHandler<Gyrometer^, GyrometerReadingChangedEventArgs^> + (managed_object, &ManagedType::on_gyroscope_reading_changed); + } - HGLOBAL mem = GetClipboardData(CF_UNICODETEXT); - if (mem != NULL) { + _ensure_data_dir(); - LPWSTR ptr = (LPWSTR)GlobalLock(mem); - if (ptr != NULL) { + if (is_keep_screen_on()) + display_request->RequestActive(); - ret = String((CharType*)ptr); - GlobalUnlock(mem); - }; - }; + set_keep_screen_on(GLOBAL_DEF("display/keep_screen_on", true)); - } else if (IsClipboardFormatAvailable(CF_TEXT)) { +} - HGLOBAL mem = GetClipboardData(CF_UNICODETEXT); - if (mem != NULL) { +void OSWinrt::set_clipboard(const String& p_text) { - LPTSTR ptr = (LPTSTR)GlobalLock(mem); - if (ptr != NULL) { + DataPackage^ clip = ref new DataPackage(); + clip->RequestedOperation = DataPackageOperation::Copy; + clip->SetText(ref new Platform::String((const wchar_t*)p_text.c_str())); - ret.parse_utf8((const char*)ptr); - GlobalUnlock(mem); - }; - }; - }; + Clipboard::SetContent(clip); +}; - CloseClipboard(); +String OSWinrt::get_clipboard() const { - return ret; - */ - return ""; + if (managed_object->clipboard != nullptr) + return managed_object->clipboard->Data(); + else + return ""; }; void OSWinrt::input_event(InputEvent &p_event) { + p_event.ID = ++last_id; + input->parse_input_event(p_event); + + if (p_event.type == InputEvent::MOUSE_BUTTON && p_event.mouse_button.pressed && p_event.mouse_button.button_index>3) { + + //send release for mouse wheel + p_event.mouse_button.pressed = false; + p_event.ID = ++last_id; + input->parse_input_event(p_event); + } }; void OSWinrt::delete_main_loop() { @@ -339,6 +430,8 @@ void OSWinrt::finalize() { physics_2d_server->finish(); memdelete(physics_2d_server); + joystick = nullptr; + } void OSWinrt::finalize_core() { @@ -370,9 +463,6 @@ void OSWinrt::vprint(const char* p_format, va_list p_list, bool p_stderr) { else wprintf(L"%s",wbuf); -#ifdef STDOUT_FILE - //vwfprintf(stdo,p_format,p_list); -#endif free(wbuf); fflush(stdout); @@ -380,11 +470,101 @@ void OSWinrt::vprint(const char* p_format, va_list p_list, bool p_stderr) { void OSWinrt::alert(const String& p_alert,const String& p_title) { - print_line("ALERT: "+p_alert); + Platform::String^ alert = ref new Platform::String(p_alert.c_str()); + Platform::String^ title = ref new Platform::String(p_title.c_str()); + + MessageDialog^ msg = ref new MessageDialog(alert, title); + + UICommand^ close = ref new UICommand("Close", ref new UICommandInvokedHandler(managed_object, &OSWinrt::ManagedType::alert_close)); + msg->Commands->Append(close); + msg->DefaultCommandIndex = 0; + + managed_object->alert_close_handle = true; + + msg->ShowAsync(); +} + +void OSWinrt::ManagedType::alert_close(IUICommand^ command) { + + alert_close_handle = false; +} + +void OSWinrt::ManagedType::on_clipboard_changed(Platform::Object ^ sender, Platform::Object ^ ev) { + + update_clipboard(); +} + +void OSWinrt::ManagedType::update_clipboard() { + + DataPackageView^ data = Clipboard::GetContent(); + + if (data->Contains(StandardDataFormats::Text)) { + + create_task(data->GetTextAsync()).then( + [this](Platform::String^ clipboard_content) { + + this->clipboard = clipboard_content; + }); + } +} + +void OSWinrt::ManagedType::on_accelerometer_reading_changed(Accelerometer ^ sender, AccelerometerReadingChangedEventArgs ^ args) { + + AccelerometerReading^ reading = args->Reading; + + os->input->set_accelerometer(Vector3( + reading->AccelerationX, + reading->AccelerationY, + reading->AccelerationZ + )); +} + +void OSWinrt::ManagedType::on_magnetometer_reading_changed(Magnetometer ^ sender, MagnetometerReadingChangedEventArgs ^ args) { + + MagnetometerReading^ reading = args->Reading; + + os->input->set_magnetometer(Vector3( + reading->MagneticFieldX, + reading->MagneticFieldY, + reading->MagneticFieldZ + )); +} + +void OSWinrt::ManagedType::on_gyroscope_reading_changed(Gyrometer ^ sender, GyrometerReadingChangedEventArgs ^ args) { + + GyrometerReading^ reading = args->Reading; + + os->input->set_magnetometer(Vector3( + reading->AngularVelocityX, + reading->AngularVelocityY, + reading->AngularVelocityZ + )); } void OSWinrt::set_mouse_mode(MouseMode p_mode) { + if (p_mode == MouseMode::MOUSE_MODE_CAPTURED) { + + CoreWindow::GetForCurrentThread()->SetPointerCapture(); + + } else { + + CoreWindow::GetForCurrentThread()->ReleasePointerCapture(); + + } + + if (p_mode == MouseMode::MOUSE_MODE_CAPTURED || p_mode == MouseMode::MOUSE_MODE_HIDDEN) { + + CoreWindow::GetForCurrentThread()->PointerCursor = nullptr; + + } else { + + CoreWindow::GetForCurrentThread()->PointerCursor = ref new CoreCursor(CoreCursorType::Arrow, 0); + } + + mouse_mode = p_mode; + + SetEvent(mouse_mode_changed); } OSWinrt::MouseMode OSWinrt::get_mouse_mode() const{ @@ -482,7 +662,7 @@ OS::Time OSWinrt::get_time(bool utc) const { return time; } -OS::TimeZoneInfo OS_Windows::get_time_zone_info() const { +OS::TimeZoneInfo OSWinrt::get_time_zone_info() const { TIME_ZONE_INFORMATION info; bool daylight = false; if (GetTimeZoneInformation(&info) == TIME_ZONE_ID_DAYLIGHT) @@ -503,7 +683,7 @@ uint64_t OSWinrt::get_unix_time() const { FILETIME ft; SYSTEMTIME st; - GetSystemTime(&systemtime); + GetSystemTime(&st); SystemTimeToFileTime(&st, &ft); SYSTEMTIME ep; @@ -546,10 +726,79 @@ uint64_t OSWinrt::get_ticks_usec() const { void OSWinrt::process_events() { + last_id = joystick->process_controllers(last_id); + process_key_events(); +} + +void OSWinrt::process_key_events() +{ + + for (int i = 0; i < key_event_pos; i++) { + + KeyEvent &kev = key_event_buffer[i]; + InputEvent iev; + + iev.type = InputEvent::KEY; + iev.key.mod = kev.mod_state; + iev.key.echo = kev.echo; + iev.key.scancode = kev.scancode; + iev.key.unicode = kev.unicode; + iev.key.pressed = kev.pressed; + + input_event(iev); + + } + key_event_pos = 0; +} + +void OSWinrt::queue_key_event(KeyEvent & p_event) +{ + // This merges Char events with the previous Key event, so + // the unicode can be retrieved without sending duplicate events. + if (p_event.type == KeyEvent::MessageType::CHAR_EVENT_MESSAGE && key_event_pos > 0) { + + KeyEvent &old = key_event_buffer[key_event_pos - 1]; + ERR_FAIL_COND(old.type != KeyEvent::MessageType::KEY_EVENT_MESSAGE); + + key_event_buffer[key_event_pos - 1].unicode = p_event.unicode; + return; + } + + ERR_FAIL_COND(key_event_pos >= KEY_EVENT_BUFFER_SIZE); + + key_event_buffer[key_event_pos++] = p_event; } void OSWinrt::set_cursor_shape(CursorShape p_shape) { + ERR_FAIL_INDEX(p_shape, CURSOR_MAX); + + if (cursor_shape == p_shape) + return; + + static const CoreCursorType uwp_cursors[CURSOR_MAX] = { + CoreCursorType::Arrow, + CoreCursorType::IBeam, + CoreCursorType::Hand, + CoreCursorType::Cross, + CoreCursorType::Wait, + CoreCursorType::Wait, + CoreCursorType::Arrow, + CoreCursorType::Arrow, + CoreCursorType::UniversalNo, + CoreCursorType::SizeNorthSouth, + CoreCursorType::SizeWestEast, + CoreCursorType::SizeNortheastSouthwest, + CoreCursorType::SizeNorthwestSoutheast, + CoreCursorType::SizeAll, + CoreCursorType::SizeNorthSouth, + CoreCursorType::SizeWestEast, + CoreCursorType::Help + }; + + CoreWindow::GetForCurrentThread()->PointerCursor = ref new CoreCursor(uwp_cursors[p_shape], 0); + + cursor_shape = p_shape; } Error OSWinrt::execute(const String& p_path, const List<String>& p_arguments,bool p_blocking,ProcessID *r_child_id,String* r_pipe,int *r_exitcode) { @@ -609,7 +858,7 @@ String OSWinrt::get_locale() const { return "en"; #else Platform::String ^language = Windows::Globalization::Language::CurrentInputMethodLanguageTag; - return language->Data(); + return String(language->Data()).replace("-", "_"); #endif } @@ -628,6 +877,29 @@ void OSWinrt::swap_buffers() { gl_context->swap_buffers(); } +bool OSWinrt::has_touchscreen_ui_hint() const { + + TouchCapabilities^ tc = ref new TouchCapabilities(); + return tc->TouchPresent != 0 || UIViewSettings::GetForCurrentView()->UserInteractionMode == UserInteractionMode::Touch; +} + +bool OSWinrt::has_virtual_keyboard() const { + + return UIViewSettings::GetForCurrentView()->UserInteractionMode == UserInteractionMode::Touch; +} + +void OSWinrt::show_virtual_keyboard(const String & p_existing_text, const Rect2 & p_screen_rect) { + + InputPane^ pane = InputPane::GetForCurrentView(); + pane->TryShow(); +} + +void OSWinrt::hide_virtual_keyboard() { + + InputPane^ pane = InputPane::GetForCurrentView(); + pane->TryHide(); +} + void OSWinrt::run() { @@ -644,6 +916,7 @@ void OSWinrt::run() { while (!force_quit) { CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent); + if (managed_object->alert_close_handle) continue; process_events(); // get rid of pending events if (Main::iteration()==true) break; @@ -665,7 +938,7 @@ String OSWinrt::get_data_dir() const { Windows::Storage::StorageFolder ^data_folder = Windows::Storage::ApplicationData::Current->LocalFolder; - return data_folder->Path->Data(); + return String(data_folder->Path->Data()).replace("\\", "/"); } @@ -690,6 +963,13 @@ OSWinrt::OSWinrt() { gl_context = NULL; + display_request = ref new Windows::System::Display::DisplayRequest(); + + managed_object = ref new ManagedType; + managed_object->os = this; + + mouse_mode_changed = CreateEvent(NULL, TRUE, FALSE, L"os_mouse_mode_changed"); + AudioDriverManagerSW::add_driver(&audio_driver); } diff --git a/platform/winrt/os_winrt.h b/platform/winrt/os_winrt.h index 145ccf0f7a..1816e0cec7 100644 --- a/platform/winrt/os_winrt.h +++ b/platform/winrt/os_winrt.h @@ -40,10 +40,13 @@ #include "servers/spatial_sound/spatial_sound_server_sw.h" #include "servers/spatial_sound_2d/spatial_sound_2d_server_sw.h" #include "servers/physics_2d/physics_2d_server_sw.h" -#include "servers/audio/audio_driver_dummy.h" +#include "audio_driver_winrt.h" #include "gl_context_egl.h" +#include "core/math/math_2d.h" +#include "core/ustring.h" + #include <windows.h> #include <io.h> @@ -52,11 +55,35 @@ #include <stdio.h> #include "main/input_default.h" +#include "joystick_winrt.h" + /** @author Juan Linietsky <reduzio@gmail.com> */ class OSWinrt : public OS { +public: + + struct KeyEvent { + + enum MessageType + { + KEY_EVENT_MESSAGE, + CHAR_EVENT_MESSAGE + }; + + InputModifierState mod_state; + MessageType type; + bool pressed; + unsigned int scancode; + unsigned int unicode; + bool echo; + CorePhysicalKeyStatus status; + + }; + +private: + enum { JOYSTICKS_MAX = 8, JOY_AXIS_COUNT = 6, @@ -66,16 +93,6 @@ class OSWinrt : public OS { FILE *stdo; - - struct KeyEvent { - - InputModifierState mod_state; - UINT uMsg; - WPARAM wParam; - LPARAM lParam; - - }; - KeyEvent key_event_buffer[KEY_EVENT_BUFFER_SIZE]; int key_event_pos; @@ -97,37 +114,11 @@ class OSWinrt : public OS { ContextEGL* gl_context; - struct Joystick { - - int id; - bool attached; - - DWORD last_axis[JOY_AXIS_COUNT]; - DWORD last_buttons; - DWORD last_pov; - String name; - - Joystick() { - id = -1; - attached = false; - for (int i=0; i<JOY_AXIS_COUNT; i++) { - - last_axis[i] = 0; - }; - last_buttons = 0; - last_pov = 0; - }; - }; - - List<Joystick> joystick_change_queue; - int joystick_count; - Joystick joysticks[JOYSTICKS_MAX]; - VideoMode video_mode; MainLoop *main_loop; - AudioDriverDummy audio_driver; + AudioDriverWinRT audio_driver; AudioServerSW *audio_server; SampleManagerMallocSW *sample_manager; SpatialSoundServerSW *spatial_sound_server; @@ -146,11 +137,34 @@ class OSWinrt : public OS { InputDefault *input; + JoystickWinrt^ joystick; + + Windows::System::Display::DisplayRequest^ display_request; + void _post_dpad(DWORD p_dpad, int p_device, bool p_pressed); void _drag_event(int idx,UINT uMsg, WPARAM wParam, LPARAM lParam); void _touch_event(int idx, UINT uMsg, WPARAM wParam, LPARAM lParam); + ref class ManagedType { + public: + property bool alert_close_handle; + property Platform::String^ clipboard; + void alert_close(Windows::UI::Popups::IUICommand^ command); + void on_clipboard_changed(Platform::Object^ sender, Platform::Object^ ev); + void update_clipboard(); + void on_accelerometer_reading_changed(Windows::Devices::Sensors::Accelerometer^ sender, Windows::Devices::Sensors::AccelerometerReadingChangedEventArgs^ args); + void on_magnetometer_reading_changed(Windows::Devices::Sensors::Magnetometer^ sender, Windows::Devices::Sensors::MagnetometerReadingChangedEventArgs^ args); + void on_gyroscope_reading_changed(Windows::Devices::Sensors::Gyrometer^ sender, Windows::Devices::Sensors::GyrometerReadingChangedEventArgs^ args); + + internal: + ManagedType() { alert_close_handle = false; } + property OSWinrt* os; + }; + ManagedType^ managed_object; + Windows::Devices::Sensors::Accelerometer^ accelerometer; + Windows::Devices::Sensors::Magnetometer^ magnetometer; + Windows::Devices::Sensors::Gyrometer^ gyrometer; // functions used by main to initialize/deintialize the OS protected: @@ -173,12 +187,13 @@ protected: void process_events(); - void probe_joysticks(); - void process_joysticks(); void process_key_events(); public: + // Event to send to the app wrapper + HANDLE mouse_mode_changed; + void print_error(const char* p_function,const char* p_file,int p_line,const char *p_code,const char*p_rationale,ErrorType p_type); virtual void vprint(const char *p_format, va_list p_list, bool p_stderr=false); @@ -195,6 +210,11 @@ public: virtual void set_video_mode(const VideoMode& p_video_mode,int p_screen=0); virtual VideoMode get_video_mode(int p_screen=0) const; virtual void get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen=0) const; + virtual Size2 get_window_size() const; + virtual void set_window_size(const Size2 p_size); + virtual void set_window_fullscreen(bool p_enabled); + virtual bool is_window_fullscreen() const; + virtual void set_keep_screen_on(bool p_enabled); virtual MainLoop *get_main_loop() const; @@ -237,7 +257,11 @@ public: virtual void make_rendering_thread(); virtual void swap_buffers(); - virtual bool has_touchscreen_ui_hint() const { return true; }; + virtual bool has_touchscreen_ui_hint() const; + + virtual bool has_virtual_keyboard() const; + virtual void show_virtual_keyboard(const String& p_existing_text, const Rect2& p_screen_rect = Rect2()); + virtual void hide_virtual_keyboard(); virtual Error shell_open(String p_uri); @@ -247,6 +271,8 @@ public: void input_event(InputEvent &p_event); + void queue_key_event(KeyEvent &p_event); + OSWinrt(); ~OSWinrt(); diff --git a/platform/winrt/thread_winrt.cpp b/platform/winrt/thread_winrt.cpp index e7028bd9dc..8e3e0d5bef 100644 --- a/platform/winrt/thread_winrt.cpp +++ b/platform/winrt/thread_winrt.cpp @@ -59,7 +59,9 @@ Thread::ID ThreadWinrt::get_ID() const { }; void ThreadWinrt::make_default() { - + create_func = create_func_winrt; + get_thread_ID_func = get_thread_ID_func_winrt; + wait_to_finish_func = wait_to_finish_func_winrt; }; ThreadWinrt::ThreadWinrt() { diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 490030398e..9a2d610e78 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -127,10 +127,10 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi int xrandr_minor = 0; int event_base, error_base; xrandr_ext_ok = XRRQueryExtension(x11_display,&event_base, &error_base); - xrandr_handle = dlopen("libXrandr.so", RTLD_LAZY); - err = dlerror(); + xrandr_handle = dlopen("libXrandr.so.2", RTLD_LAZY); if (!xrandr_handle) { - fprintf(stderr, "could not load libXrandr.so, Error: %s\n", err); + err = dlerror(); + fprintf(stderr, "could not load libXrandr.so.2, Error: %s\n", err); } else { XRRQueryVersion(x11_display, &xrandr_major, &xrandr_minor); diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index f98a50e3e0..e576aa10e0 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -29,6 +29,8 @@ #include "camera_2d.h" #include "scene/scene_string_names.h" #include "servers/visual_server.h" +#include "core/math/math_funcs.h" +#include <editor/editor_node.h> void Camera2D::_update_scroll() { @@ -114,7 +116,25 @@ Matrix32 Camera2D::get_camera_transform() { camera_pos=new_camera_pos; } - + Point2 screen_offset = (anchor_mode==ANCHOR_MODE_DRAG_CENTER ? (screen_size * 0.5 * zoom) : Point2()); + Rect2 screen_rect(-screen_offset+camera_pos,screen_size*zoom); + + if (offset!=Vector2()) + screen_rect.pos+=offset; + + if (limit_smoothing_enabled) { + if (screen_rect.pos.x < limit[MARGIN_LEFT]) + camera_pos.x -= screen_rect.pos.x - limit[MARGIN_LEFT]; + + if (screen_rect.pos.x + screen_rect.size.x > limit[MARGIN_RIGHT]) + camera_pos.x -= screen_rect.pos.x + screen_rect.size.x - limit[MARGIN_RIGHT]; + + if (screen_rect.pos.y + screen_rect.size.y > limit[MARGIN_BOTTOM]) + camera_pos.y -= screen_rect.pos.y + screen_rect.size.y - limit[MARGIN_BOTTOM]; + + if (screen_rect.pos.y < limit[MARGIN_TOP]) + camera_pos.y -= screen_rect.pos.y - limit[MARGIN_TOP]; + } if (smoothing_enabled && !get_tree()->is_editor_hint()) { @@ -144,19 +164,19 @@ Matrix32 Camera2D::get_camera_transform() { } Rect2 screen_rect(-screen_offset+ret_camera_pos,screen_size*zoom); + if (screen_rect.pos.x < limit[MARGIN_LEFT]) + screen_rect.pos.x = limit[MARGIN_LEFT]; + if (screen_rect.pos.x + screen_rect.size.x > limit[MARGIN_RIGHT]) screen_rect.pos.x = limit[MARGIN_RIGHT] - screen_rect.size.x; if (screen_rect.pos.y + screen_rect.size.y > limit[MARGIN_BOTTOM]) screen_rect.pos.y = limit[MARGIN_BOTTOM] - screen_rect.size.y; - - if (screen_rect.pos.x < limit[MARGIN_LEFT]) - screen_rect.pos.x=limit[MARGIN_LEFT]; - if (screen_rect.pos.y < limit[MARGIN_TOP]) screen_rect.pos.y =limit[MARGIN_TOP]; - + + if (offset!=Vector2()) { screen_rect.pos+=offset; @@ -382,6 +402,17 @@ int Camera2D::get_limit(Margin p_margin) const{ } +void Camera2D::set_limit_smoothing_enabled(bool enable) { + + limit_smoothing_enabled = enable; + _update_scroll(); +} + +bool Camera2D::is_limit_smoothing_enabled() const{ + + return limit_smoothing_enabled; +} + void Camera2D::set_drag_margin(Margin p_margin,float p_drag_margin) { ERR_FAIL_INDEX(p_margin,4); @@ -536,13 +567,15 @@ void Camera2D::_bind_methods() { ObjectTypeDB::bind_method(_MD("_update_scroll"),&Camera2D::_update_scroll); - ObjectTypeDB::bind_method(_MD("_set_current","current"),&Camera2D::_set_current); ObjectTypeDB::bind_method(_MD("is_current"),&Camera2D::is_current); ObjectTypeDB::bind_method(_MD("set_limit","margin","limit"),&Camera2D::set_limit); ObjectTypeDB::bind_method(_MD("get_limit","margin"),&Camera2D::get_limit); + ObjectTypeDB::bind_method(_MD("set_limit_smoothing_enabled","limit_smoothing_enabled"),&Camera2D::set_limit_smoothing_enabled); + ObjectTypeDB::bind_method(_MD("is_limit_smoothing_enabled"),&Camera2D::is_limit_smoothing_enabled); + ObjectTypeDB::bind_method(_MD("set_v_drag_enabled","enabled"),&Camera2D::set_v_drag_enabled); ObjectTypeDB::bind_method(_MD("is_v_drag_enabled"),&Camera2D::is_v_drag_enabled); @@ -587,6 +620,7 @@ void Camera2D::_bind_methods() { ADD_PROPERTYI( PropertyInfo(Variant::INT,"limit/top"),_SCS("set_limit"),_SCS("get_limit"),MARGIN_TOP); ADD_PROPERTYI( PropertyInfo(Variant::INT,"limit/right"),_SCS("set_limit"),_SCS("get_limit"),MARGIN_RIGHT); ADD_PROPERTYI( PropertyInfo(Variant::INT,"limit/bottom"),_SCS("set_limit"),_SCS("get_limit"),MARGIN_BOTTOM); + ADD_PROPERTY( PropertyInfo(Variant::BOOL,"limit/smoothed"),_SCS("set_limit_smoothing_enabled"),_SCS("is_limit_smoothing_enabled") ); ADD_PROPERTY( PropertyInfo(Variant::BOOL,"drag_margin/h_enabled"),_SCS("set_h_drag_enabled"),_SCS("is_h_drag_enabled") ); ADD_PROPERTY( PropertyInfo(Variant::BOOL,"drag_margin/v_enabled"),_SCS("set_v_drag_enabled"),_SCS("is_v_drag_enabled") ); @@ -619,6 +653,7 @@ Camera2D::Camera2D() { limit[MARGIN_TOP]=-10000000; limit[MARGIN_RIGHT]=10000000; limit[MARGIN_BOTTOM]=10000000; + drag_margin[MARGIN_LEFT]=0.2; drag_margin[MARGIN_TOP]=0.2; drag_margin[MARGIN_RIGHT]=0.2; @@ -626,6 +661,7 @@ Camera2D::Camera2D() { camera_pos=Vector2(); first=true; smoothing_enabled=false; + limit_smoothing_enabled=false; smoothing=5.0; zoom = Vector2(1, 1); diff --git a/scene/2d/camera_2d.h b/scene/2d/camera_2d.h index b3f55d798d..9f3e4254bb 100644 --- a/scene/2d/camera_2d.h +++ b/scene/2d/camera_2d.h @@ -61,6 +61,7 @@ protected: float smoothing; bool smoothing_enabled; int limit[4]; + bool limit_smoothing_enabled; float drag_margin[4]; bool h_drag_enabled; @@ -68,7 +69,6 @@ protected: float h_ofs; float v_ofs; - Point2 camera_screen_center; void _update_scroll(); @@ -95,6 +95,8 @@ public: void set_limit(Margin p_margin,int p_limit); int get_limit(Margin p_margin) const; + void set_limit_smoothing_enabled(bool enable); + bool is_limit_smoothing_enabled() const; void set_h_drag_enabled(bool p_enabled); bool is_h_drag_enabled() const; diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index eb4f457975..ed1d606ba8 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -650,21 +650,22 @@ int CanvasItem::get_light_mask() const{ } -void CanvasItem::item_rect_changed() { +void CanvasItem::item_rect_changed(bool p_size_changed) { - update(); + if (p_size_changed) + update(); emit_signal(SceneStringNames::get_singleton()->item_rect_changed); } -void CanvasItem::draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width) { +void CanvasItem::draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased) { if (!drawing) { ERR_EXPLAIN("Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); ERR_FAIL(); } - VisualServer::get_singleton()->canvas_item_add_line(canvas_item,p_from,p_to,p_color,p_width); + VisualServer::get_singleton()->canvas_item_add_line(canvas_item,p_from,p_to,p_color,p_width,p_antialiased); } void CanvasItem::draw_rect(const Rect2& p_rect, const Color& p_color) { @@ -1028,7 +1029,7 @@ void CanvasItem::_bind_methods() { ObjectTypeDB::bind_method(_MD("_is_on_top"),&CanvasItem::_is_on_top); //ObjectTypeDB::bind_method(_MD("get_transform"),&CanvasItem::get_transform); - ObjectTypeDB::bind_method(_MD("draw_line","from","to","color","width"),&CanvasItem::draw_line,DEFVAL(1.0)); + ObjectTypeDB::bind_method(_MD("draw_line","from","to","color","width","antialiased"),&CanvasItem::draw_line,DEFVAL(1.0),DEFVAL(false)); ObjectTypeDB::bind_method(_MD("draw_rect","rect","color"),&CanvasItem::draw_rect); ObjectTypeDB::bind_method(_MD("draw_circle","pos","radius","color"),&CanvasItem::draw_circle); ObjectTypeDB::bind_method(_MD("draw_texture","texture:Texture","pos","modulate"),&CanvasItem::draw_texture,DEFVAL(Color(1,1,1,1))); diff --git a/scene/2d/canvas_item.h b/scene/2d/canvas_item.h index b894310ce2..7849a66185 100644 --- a/scene/2d/canvas_item.h +++ b/scene/2d/canvas_item.h @@ -157,7 +157,7 @@ protected: _FORCE_INLINE_ void _notify_transform() { if (!is_inside_tree()) return; _notify_transform(this); if (!block_transform_notify && notify_local_transform) notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED); } - void item_rect_changed(); + void item_rect_changed(bool p_size_changed=true); void _notification(int p_what); static void _bind_methods(); @@ -207,7 +207,7 @@ public: /* DRAWING API */ - void draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width=1.0); + void draw_line(const Point2& p_from, const Point2& p_to, const Color& p_color, float p_width=1.0, bool p_antialiased=false); void draw_rect(const Rect2& p_rect, const Color& p_color); void draw_circle(const Point2& p_pos, float p_radius, const Color& p_color); void draw_texture(const Ref<Texture>& p_texture, const Point2& p_pos, const Color &p_modulate=Color(1,1,1,1)); diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp index 134e0153b3..df43e8e373 100644 --- a/scene/2d/node_2d.cpp +++ b/scene/2d/node_2d.cpp @@ -295,6 +295,53 @@ void Node2D::set_global_pos(const Point2& p_pos) { } } + +float Node2D::get_global_rot() const { + + return get_global_transform().get_rotation(); +} + +void Node2D::set_global_rot(float p_radians) { + + CanvasItem *pi = get_parent_item(); + if (pi) { + const float parent_global_rot = pi->get_global_transform().get_rotation(); + set_rot(p_radians - parent_global_rot); + } else { + set_rot(p_radians); + } +} + + +float Node2D::get_global_rotd() const { + + return Math::rad2deg(get_global_rot()); +} + +void Node2D::set_global_rotd(float p_degrees) { + + set_global_rot(Math::deg2rad(p_degrees)); +} + + +Size2 Node2D::get_global_scale() const { + + return get_global_transform().get_scale(); +} + +void Node2D::set_global_scale(const Size2& p_scale) { + + CanvasItem *pi = get_parent_item(); + if (pi) { + const Size2 parent_global_scale = pi->get_global_transform().get_scale(); + set_scale(p_scale - parent_global_scale); + } else { + set_scale(p_scale); + } + +} + + void Node2D::set_transform(const Matrix32& p_transform) { _mat=p_transform; @@ -398,6 +445,12 @@ void Node2D::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_global_pos","pos"),&Node2D::set_global_pos); ObjectTypeDB::bind_method(_MD("get_global_pos"),&Node2D::get_global_pos); + ObjectTypeDB::bind_method(_MD("set_global_rot","radians"),&Node2D::set_global_rot); + ObjectTypeDB::bind_method(_MD("get_global_rot"),&Node2D::get_global_rot); + ObjectTypeDB::bind_method(_MD("set_global_rotd","degrees"),&Node2D::set_global_rotd); + ObjectTypeDB::bind_method(_MD("get_global_rotd"),&Node2D::get_global_rotd); + ObjectTypeDB::bind_method(_MD("set_global_scale","scale"),&Node2D::set_global_scale); + ObjectTypeDB::bind_method(_MD("get_global_scale"),&Node2D::get_global_scale); ObjectTypeDB::bind_method(_MD("set_transform","xform"),&Node2D::set_transform); ObjectTypeDB::bind_method(_MD("set_global_transform","xform"),&Node2D::set_global_transform); diff --git a/scene/2d/node_2d.h b/scene/2d/node_2d.h index b0c628fd94..aa8d0ef33c 100644 --- a/scene/2d/node_2d.h +++ b/scene/2d/node_2d.h @@ -87,11 +87,17 @@ public: Size2 get_scale() const; Point2 get_global_pos() const; + float get_global_rot() const; + float get_global_rotd() const; + Size2 get_global_scale() const; virtual Rect2 get_item_rect() const; void set_transform(const Matrix32& p_transform); void set_global_transform(const Matrix32& p_transform); void set_global_pos(const Point2& p_pos); + void set_global_rot(float p_radians); + void set_global_rotd(float p_degrees); + void set_global_scale(const Size2& p_scale); void set_z(int p_z); int get_z() const; diff --git a/scene/2d/parallax_layer.cpp b/scene/2d/parallax_layer.cpp index e9378b1d02..05136de5d6 100644 --- a/scene/2d/parallax_layer.cpp +++ b/scene/2d/parallax_layer.cpp @@ -123,26 +123,15 @@ void ParallaxLayer::set_base_offset_and_scale(const Point2& p_offset,float p_sca Point2 new_ofs = ((orig_offset+p_offset)*motion_scale)*p_scale+motion_offset; if (mirroring.x) { - - while( new_ofs.x>=0) { - new_ofs.x -= mirroring.x*p_scale; - } - while(new_ofs.x < -mirroring.x*p_scale) { - new_ofs.x += mirroring.x*p_scale; - } + double den = mirroring.x*p_scale; + new_ofs.x -= den*ceil(new_ofs.x/den); } if (mirroring.y) { - - while( new_ofs.y>=0) { - new_ofs.y -= mirroring.y*p_scale; - } - while(new_ofs.y < -mirroring.y*p_scale) { - new_ofs.y += mirroring.y*p_scale; - } + double den = mirroring.y*p_scale; + new_ofs.y -= den*ceil(new_ofs.y/den); } - set_pos(new_ofs); set_scale(Vector2(1,1)*p_scale); diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index 26c4ea385f..0c5c353766 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -436,7 +436,7 @@ bool RigidBody2D::_test_motion(const Vector2& p_motion,float p_margin,const Ref< Physics2DServer::MotionResult *r=NULL; if (p_result.is_valid()) r=p_result->get_result_ptr(); - return Physics2DServer::get_singleton()->body_test_motion(get_rid(),p_motion,p_margin,r); + return Physics2DServer::get_singleton()->body_test_motion(get_rid(),get_global_transform(),p_motion,p_margin,r); } @@ -1057,8 +1057,10 @@ Vector2 KinematicBody2D::get_travel() const { Vector2 KinematicBody2D::move(const Vector2& p_motion) { #if 1 + + Matrix32 gt = get_global_transform(); Physics2DServer::MotionResult result; - colliding = Physics2DServer::get_singleton()->body_test_motion(get_rid(),p_motion,margin,&result); + colliding = Physics2DServer::get_singleton()->body_test_motion(get_rid(),gt,p_motion,margin,&result); collider_metadata=result.collider_metadata; collider_shape=result.collider_shape; @@ -1067,10 +1069,12 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) { normal=result.collision_normal; collider=result.collider_id; - Matrix32 gt = get_global_transform(); + gt.elements[2]+=result.motion; set_global_transform(gt); travel=result.motion; + + return result.remainder; #else @@ -1081,7 +1085,6 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) { //this took about a week to get right.. //but is it right? who knows at this point.. - colliding=false; ERR_FAIL_COND_V(!is_inside_tree(),Vector2()); Physics2DDirectSpaceState *dss = Physics2DServer::get_singleton()->space_get_direct_state(get_world_2d()->get_space()); @@ -1099,17 +1102,15 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) { bool collided=false; uint32_t mask=0; - if (collide_static) + if (true) mask|=Physics2DDirectSpaceState::TYPE_MASK_STATIC_BODY; - if (collide_kinematic) + if (true) mask|=Physics2DDirectSpaceState::TYPE_MASK_KINEMATIC_BODY; - if (collide_rigid) + if (true) mask|=Physics2DDirectSpaceState::TYPE_MASK_RIGID_BODY; - if (collide_character) + if (true) mask|=Physics2DDirectSpaceState::TYPE_MASK_CHARACTER_BODY; -// print_line("motion: "+p_motion+" margin: "+rtos(margin)); - //print_line("margin: "+rtos(margin)); do { @@ -1145,6 +1146,8 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) { break; } + + Matrix32 gt = get_global_transform(); gt.elements[2]+=recover_motion; set_global_transform(gt); @@ -1191,6 +1194,8 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) { if (safe>=1) { //not collided colliding=false; + + } else { //it collided, let's get the rest info in unsafe advance @@ -1226,16 +1231,94 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) { #endif } + + +Vector2 KinematicBody2D::move_and_slide(const Vector2& p_linear_velocity,const Vector2& p_floor_direction,float p_slope_stop_min_velocity,int p_max_bounces) { + + Vector2 motion = (move_and_slide_floor_velocity+p_linear_velocity)*get_fixed_process_delta_time(); + Vector2 lv = p_linear_velocity; + + move_and_slide_on_floor=false; + move_and_slide_on_ceiling=false; + move_and_slide_on_wall=false; + move_and_slide_colliders.clear(); + move_and_slide_floor_velocity=Vector2(); + + while(p_max_bounces) { + + motion=move(motion); + + if (is_colliding()) { + + + if (p_floor_direction==Vector2()) { + //all is a wall + move_and_slide_on_wall=true; + } else { + if ( get_collision_normal().dot(p_floor_direction) > Math::cos(Math::deg2rad(45))) { //floor + + + move_and_slide_on_floor=true; + move_and_slide_floor_velocity=get_collider_velocity(); + + if (get_travel().length()<1 && ABS((lv.x-move_and_slide_floor_velocity.x))<p_slope_stop_min_velocity) { + revert_motion(); + return Vector2(); + } + } else if ( get_collision_normal().dot(p_floor_direction) < Math::cos(Math::deg2rad(45))) { //ceiling + move_and_slide_on_ceiling=true; + } else { + move_and_slide_on_wall=true; + } + + } + + motion=get_collision_normal().slide(motion); + lv=get_collision_normal().slide(lv); + Variant collider = _get_collider(); + if (collider.get_type()!=Variant::NIL) { + move_and_slide_colliders.push_back(collider); + } + + } else { + break; + } + + p_max_bounces--; + if (motion==Vector2()) + break; + } + + return lv; +} + +bool KinematicBody2D::is_move_and_slide_on_floor() const { + + return move_and_slide_on_floor; +} +bool KinematicBody2D::is_move_and_slide_on_wall() const{ + + return move_and_slide_on_wall; +} +bool KinematicBody2D::is_move_and_slide_on_ceiling() const{ + + return move_and_slide_on_ceiling; +} +Array KinematicBody2D::get_move_and_slide_colliders() const{ + + return move_and_slide_colliders; +} + Vector2 KinematicBody2D::move_to(const Vector2& p_position) { return move(p_position-get_global_pos()); } -bool KinematicBody2D::test_move(const Vector2& p_motion) { +bool KinematicBody2D::test_move(const Matrix32& p_from,const Vector2& p_motion) { ERR_FAIL_COND_V(!is_inside_tree(),false); - return Physics2DServer::get_singleton()->body_test_motion(get_rid(),p_motion,margin); + return Physics2DServer::get_singleton()->body_test_motion(get_rid(),p_from,p_motion,margin); } @@ -1300,8 +1383,9 @@ void KinematicBody2D::_bind_methods() { ObjectTypeDB::bind_method(_MD("move","rel_vec"),&KinematicBody2D::move); ObjectTypeDB::bind_method(_MD("move_to","position"),&KinematicBody2D::move_to); + ObjectTypeDB::bind_method(_MD("move_and_slide","linear_velocity","floor_normal","slope_stop_min_velocity","max_bounces"),&KinematicBody2D::move_and_slide,DEFVAL(Vector2(0,0)),DEFVAL(5),DEFVAL(4)); - ObjectTypeDB::bind_method(_MD("test_move","rel_vec"),&KinematicBody2D::test_move); + ObjectTypeDB::bind_method(_MD("test_move","from","rel_vec"),&KinematicBody2D::test_move); ObjectTypeDB::bind_method(_MD("get_travel"),&KinematicBody2D::get_travel); ObjectTypeDB::bind_method(_MD("revert_motion"),&KinematicBody2D::revert_motion); @@ -1313,6 +1397,10 @@ void KinematicBody2D::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_collider:Object"),&KinematicBody2D::_get_collider); ObjectTypeDB::bind_method(_MD("get_collider_shape"),&KinematicBody2D::get_collider_shape); ObjectTypeDB::bind_method(_MD("get_collider_metadata:Variant"),&KinematicBody2D::get_collider_metadata); + ObjectTypeDB::bind_method(_MD("get_move_and_slide_colliders"),&KinematicBody2D::get_move_and_slide_colliders); + ObjectTypeDB::bind_method(_MD("is_move_and_slide_on_floor"),&KinematicBody2D::is_move_and_slide_on_floor); + ObjectTypeDB::bind_method(_MD("is_move_and_slide_on_ceiling"),&KinematicBody2D::is_move_and_slide_on_ceiling); + ObjectTypeDB::bind_method(_MD("is_move_and_slide_on_wall"),&KinematicBody2D::is_move_and_slide_on_wall); ObjectTypeDB::bind_method(_MD("set_collision_margin","pixels"),&KinematicBody2D::set_collision_margin); ObjectTypeDB::bind_method(_MD("get_collision_margin","pixels"),&KinematicBody2D::get_collision_margin); @@ -1330,6 +1418,11 @@ KinematicBody2D::KinematicBody2D() : PhysicsBody2D(Physics2DServer::BODY_MODE_KI collider_shape=0; margin=0.08; + + move_and_slide_on_floor=false; + move_and_slide_on_ceiling=false; + move_and_slide_on_wall=false; + } KinematicBody2D::~KinematicBody2D() { diff --git a/scene/2d/physics_body_2d.h b/scene/2d/physics_body_2d.h index 5af65bff33..ea29d873bd 100644 --- a/scene/2d/physics_body_2d.h +++ b/scene/2d/physics_body_2d.h @@ -302,6 +302,12 @@ class KinematicBody2D : public PhysicsBody2D { Variant collider_metadata; Vector2 travel; + Vector2 move_and_slide_floor_velocity; + bool move_and_slide_on_floor; + bool move_and_slide_on_ceiling; + bool move_and_slide_on_wall; + Array move_and_slide_colliders; + Variant _get_collider() const; _FORCE_INLINE_ bool _ignores_mode(Physics2DServer::BodyMode) const; @@ -313,7 +319,7 @@ public: Vector2 move(const Vector2& p_motion); Vector2 move_to(const Vector2& p_position); - bool test_move(const Vector2& p_motion); + bool test_move(const Matrix32 &p_from, const Vector2& p_motion); bool is_colliding() const; Vector2 get_travel() const; @@ -329,6 +335,13 @@ public: void set_collision_margin(float p_margin); float get_collision_margin() const; + Vector2 move_and_slide(const Vector2& p_linear_velocity, const Vector2& p_floor_direction=Vector2(0,0), float p_slope_stop_min_velocity=5, int p_max_bounces=4); + bool is_move_and_slide_on_floor() const; + bool is_move_and_slide_on_wall() const; + bool is_move_and_slide_on_ceiling() const; + Array get_move_and_slide_colliders() const; + + KinematicBody2D(); ~KinematicBody2D(); diff --git a/scene/2d/ray_cast_2d.cpp b/scene/2d/ray_cast_2d.cpp index 6cda52fa4e..b5d62adfb4 100644 --- a/scene/2d/ray_cast_2d.cpp +++ b/scene/2d/ray_cast_2d.cpp @@ -29,6 +29,7 @@ #include "ray_cast_2d.h" #include "servers/physics_2d_server.h" #include "collision_object_2d.h" +#include "physics_body_2d.h" void RayCast2D::set_cast_to(const Vector2& p_point) { @@ -106,6 +107,30 @@ bool RayCast2D::is_enabled() const { return enabled; } +void RayCast2D::set_exclude_parent_body(bool p_exclude_parent_body) { + + if (exclude_parent_body==p_exclude_parent_body) + return; + + exclude_parent_body=p_exclude_parent_body; + + if (!is_inside_tree()) + return; + + + + if (get_parent()->cast_to<PhysicsBody2D>()) { + if (exclude_parent_body) + exclude.insert( get_parent()->cast_to<PhysicsBody2D>()->get_rid() ); + else + exclude.erase( get_parent()->cast_to<PhysicsBody2D>()->get_rid() ); + } +} + +bool RayCast2D::get_exclude_parent_body() const{ + + return exclude_parent_body; +} void RayCast2D::_notification(int p_what) { @@ -118,6 +143,12 @@ void RayCast2D::_notification(int p_what) { else set_fixed_process(false); + if (get_parent()->cast_to<PhysicsBody2D>()) { + if (exclude_parent_body) + exclude.insert( get_parent()->cast_to<PhysicsBody2D>()->get_rid() ); + else + exclude.erase( get_parent()->cast_to<PhysicsBody2D>()->get_rid() ); + } } break; case NOTIFICATION_EXIT_TREE: { @@ -254,7 +285,11 @@ void RayCast2D::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_type_mask","mask"),&RayCast2D::set_type_mask); ObjectTypeDB::bind_method(_MD("get_type_mask"),&RayCast2D::get_type_mask); + ObjectTypeDB::bind_method(_MD("set_exclude_parent_body","mask"),&RayCast2D::set_exclude_parent_body); + ObjectTypeDB::bind_method(_MD("get_exclude_parent_body"),&RayCast2D::get_exclude_parent_body); + ADD_PROPERTY(PropertyInfo(Variant::BOOL,"enabled"),_SCS("set_enabled"),_SCS("is_enabled")); + ADD_PROPERTY(PropertyInfo(Variant::BOOL,"exclude_parent"),_SCS("set_exclude_parent_body"),_SCS("get_exclude_parent_body")); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2,"cast_to"),_SCS("set_cast_to"),_SCS("get_cast_to")); ADD_PROPERTY(PropertyInfo(Variant::INT,"layer_mask",PROPERTY_HINT_ALL_FLAGS),_SCS("set_layer_mask"),_SCS("get_layer_mask")); ADD_PROPERTY(PropertyInfo(Variant::INT,"type_mask",PROPERTY_HINT_FLAGS,"Static,Kinematic,Rigid,Character,Area"),_SCS("set_type_mask"),_SCS("get_type_mask")); @@ -269,4 +304,5 @@ RayCast2D::RayCast2D() { layer_mask=1; type_mask=Physics2DDirectSpaceState::TYPE_MASK_COLLISION; cast_to=Vector2(0,50); + exclude_parent_body=true; } diff --git a/scene/2d/ray_cast_2d.h b/scene/2d/ray_cast_2d.h index 54ec42c53e..e1caa8b63e 100644 --- a/scene/2d/ray_cast_2d.h +++ b/scene/2d/ray_cast_2d.h @@ -45,6 +45,7 @@ class RayCast2D : public Node2D { Set<RID> exclude; uint32_t layer_mask; uint32_t type_mask; + bool exclude_parent_body; Vector2 cast_to; @@ -66,6 +67,9 @@ public: void set_type_mask(uint32_t p_mask); uint32_t get_type_mask() const; + void set_exclude_parent_body(bool p_exclude_parent_body); + bool get_exclude_parent_body() const; + bool is_colliding() const; Object *get_collider() const; int get_collider_shape() const; diff --git a/scene/2d/visibility_notifier_2d.cpp b/scene/2d/visibility_notifier_2d.cpp index 5411950976..852bc187d2 100644 --- a/scene/2d/visibility_notifier_2d.cpp +++ b/scene/2d/visibility_notifier_2d.cpp @@ -40,6 +40,9 @@ void VisibilityNotifier2D::_enter_viewport(Viewport* p_viewport) { ERR_FAIL_COND(viewports.has(p_viewport)); viewports.insert(p_viewport); + if (is_inside_tree() && get_tree()->is_editor_hint()) + return; + if (viewports.size()==1) { emit_signal(SceneStringNames::get_singleton()->enter_screen); @@ -54,6 +57,9 @@ void VisibilityNotifier2D::_exit_viewport(Viewport* p_viewport){ ERR_FAIL_COND(!viewports.has(p_viewport)); viewports.erase(p_viewport); + if (is_inside_tree() && get_tree()->is_editor_hint()) + return; + emit_signal(SceneStringNames::get_singleton()->exit_viewport,p_viewport); if (viewports.size()==0) { emit_signal(SceneStringNames::get_singleton()->exit_screen); diff --git a/scene/3d/baked_light_instance.cpp b/scene/3d/baked_light_instance.cpp index fafa62866f..ca3a309568 100644 --- a/scene/3d/baked_light_instance.cpp +++ b/scene/3d/baked_light_instance.cpp @@ -60,6 +60,8 @@ void BakedLightInstance::set_baked_light(const Ref<BakedLight>& p_baked_light) { // VS::get_singleton()->instance_geometry_set_baked_light(E->get()->get_instance(),baked_light.is_valid()?get_instance():RID()); // } } + + update_configuration_warning(); } Ref<BakedLight> BakedLightInstance::get_baked_light() const{ @@ -77,6 +79,14 @@ DVector<Face3> BakedLightInstance::get_faces(uint32_t p_usage_flags) const { } +String BakedLightInstance::get_configuration_warning() const { + if (get_baked_light().is_null()) { + return TTR("BakedLightInstance does not contain a BakedLight resource."); + } + return String(); +} + + void BakedLightInstance::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_baked_light","baked_light"),&BakedLightInstance::set_baked_light); diff --git a/scene/3d/baked_light_instance.h b/scene/3d/baked_light_instance.h index 92c2d50986..002e55df1d 100644 --- a/scene/3d/baked_light_instance.h +++ b/scene/3d/baked_light_instance.h @@ -55,6 +55,8 @@ public: virtual AABB get_aabb() const; virtual DVector<Face3> get_faces(uint32_t p_usage_flags) const; + String get_configuration_warning() const; + BakedLightInstance(); }; diff --git a/scene/3d/immediate_geometry.cpp b/scene/3d/immediate_geometry.cpp index e83fa69b4f..c9319904bd 100644 --- a/scene/3d/immediate_geometry.cpp +++ b/scene/3d/immediate_geometry.cpp @@ -102,7 +102,7 @@ DVector<Face3> ImmediateGeometry::get_faces(uint32_t p_usage_flags) const { -void ImmediateGeometry::add_sphere(int p_lats,int p_lons,float p_radius) { +void ImmediateGeometry::add_sphere(int p_lats, int p_lons, float p_radius, bool p_add_uv) { for(int i = 1; i <= p_lats; i++) { double lat0 = Math_PI * (-0.5 + (double) (i - 1) / p_lats); @@ -132,6 +132,10 @@ void ImmediateGeometry::add_sphere(int p_lats,int p_lons,float p_radius) { }; #define ADD_POINT(m_idx)\ + if (p_add_uv) {\ + set_uv(Vector2(Math::atan2(v[m_idx].x,v[m_idx].z)/Math_PI * 0.5+0.5,v[m_idx].y*0.5+0.5));\ + set_tangent(Plane(Vector3(-v[m_idx].z,v[m_idx].y,v[m_idx].x),1)); \ + }\ set_normal(v[m_idx]);\ add_vertex(v[m_idx]*p_radius); @@ -156,7 +160,7 @@ void ImmediateGeometry::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_uv","uv"),&ImmediateGeometry::set_uv); ObjectTypeDB::bind_method(_MD("set_uv2","uv"),&ImmediateGeometry::set_uv2); ObjectTypeDB::bind_method(_MD("add_vertex","pos"),&ImmediateGeometry::add_vertex); - ObjectTypeDB::bind_method(_MD("add_sphere","lats","lons","radius"),&ImmediateGeometry::add_sphere); + ObjectTypeDB::bind_method(_MD("add_sphere","lats","lons","radius","add_uv"),&ImmediateGeometry::add_sphere,DEFVAL(true)); ObjectTypeDB::bind_method(_MD("end"),&ImmediateGeometry::end); ObjectTypeDB::bind_method(_MD("clear"),&ImmediateGeometry::clear); diff --git a/scene/3d/immediate_geometry.h b/scene/3d/immediate_geometry.h index c1cc4f87d5..fc7f4de634 100644 --- a/scene/3d/immediate_geometry.h +++ b/scene/3d/immediate_geometry.h @@ -62,7 +62,7 @@ public: void clear(); - void add_sphere(int p_lats,int p_lons,float p_radius); + void add_sphere(int p_lats,int p_lons,float p_radius,bool p_add_uv=true); diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index 6f6f5d3aff..adc8f9c8cf 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -619,6 +619,8 @@ void Tween::_tween_process(float p_delta) { }; object->call(data.key, (const Variant **) arg, data.args, error); } + if (!repeat) + call_deferred("remove", object, data.key); } continue; } diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp index 41d766c1b7..6479dd2d02 100644 --- a/scene/gui/base_button.cpp +++ b/scene/gui/base_button.cpp @@ -55,6 +55,8 @@ void BaseButton::_input_event(InputEvent p_event) { if (b.pressed) { + emit_signal("button_down"); + if (!toggle_mode) { //mouse press attempt status.press_attempt=true; @@ -86,6 +88,8 @@ void BaseButton::_input_event(InputEvent p_event) { } else { + emit_signal("button_up"); + if (status.press_attempt && status.pressing_inside) { // released(); emit_signal("released"); @@ -100,9 +104,11 @@ void BaseButton::_input_event(InputEvent p_event) { status.press_attempt=true; status.pressing_inside=true; + emit_signal("button_down"); } else { + emit_signal("button_up"); if (status.press_attempt &&status.pressing_inside) { @@ -173,6 +179,7 @@ void BaseButton::_input_event(InputEvent p_event) { status.pressing_button++; status.press_attempt=true; status.pressing_inside=true; + emit_signal("button_down"); } else if (status.press_attempt) { @@ -185,6 +192,8 @@ void BaseButton::_input_event(InputEvent p_event) { status.press_attempt=false; status.pressing_inside=false; + emit_signal("button_up"); + if (!toggle_mode) { //mouse press attempt pressed(); @@ -467,6 +476,8 @@ void BaseButton::_bind_methods() { ADD_SIGNAL( MethodInfo("pressed" ) ); ADD_SIGNAL( MethodInfo("released" ) ); + ADD_SIGNAL( MethodInfo("button_up") ); + ADD_SIGNAL( MethodInfo("button_down") ); ADD_SIGNAL( MethodInfo("toggled", PropertyInfo( Variant::BOOL,"pressed") ) ); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "disabled"), _SCS("set_disabled"), _SCS("is_disabled")); ADD_PROPERTY( PropertyInfo( Variant::BOOL, "toggle_mode"), _SCS("set_toggle_mode"), _SCS("is_toggle_mode")); diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp index b69646432e..5e66544153 100644 --- a/scene/gui/color_picker.cpp +++ b/scene/gui/color_picker.cpp @@ -41,13 +41,13 @@ void update_material(Ref<CanvasItemMaterial>mat,const Color& p_color,float h,flo if (!sdr.is_valid()) return; - mat->set_shader_param("R",p_color.r); - mat->set_shader_param("G",p_color.g); - mat->set_shader_param("B",p_color.b); - mat->set_shader_param("H",h); - mat->set_shader_param("S",s); - mat->set_shader_param("V",v); - mat->set_shader_param("A",p_color.a); + mat->set_shader_param("R",p_color.r); + mat->set_shader_param("G",p_color.g); + mat->set_shader_param("B",p_color.b); + mat->set_shader_param("H",h); + mat->set_shader_param("S",s); + mat->set_shader_param("V",v); + mat->set_shader_param("A",p_color.a); } void ColorPicker::_notification(int p_what) { @@ -397,9 +397,10 @@ void ColorPicker::_screen_input(const InputEvent &ev) if (!r->get_rect().has_point(Point2(mev.global_x,mev.global_y))) return; Image img =r->get_screen_capture(); - if (!img.empty()) + if (!img.empty()) { last_capture=img; r->queue_screen_capture(); + } if (!last_capture.empty()) set_color(last_capture.get_pixel(mev.global_x,mev.global_y)); } diff --git a/scene/gui/container.cpp b/scene/gui/container.cpp index 920c6bf1e6..feaf516f42 100644 --- a/scene/gui/container.cpp +++ b/scene/gui/container.cpp @@ -41,6 +41,8 @@ void Container::_child_minsize_changed() { void Container::add_child_notify(Node *p_child) { + Control::add_child_notify(p_child); + Control *control = p_child->cast_to<Control>(); if (!control) return; @@ -50,18 +52,24 @@ void Container::add_child_notify(Node *p_child) { control->connect("visibility_changed",this,"_child_minsize_changed"); queue_sort(); + } void Container::move_child_notify(Node *p_child) { + Control::move_child_notify(p_child); + if (!p_child->cast_to<Control>()) return; queue_sort(); + + } void Container::remove_child_notify(Node *p_child) { + Control::remove_child_notify(p_child); Control *control = p_child->cast_to<Control>(); if (!control) diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index c08e10b9ff..bf35fd25bd 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -422,7 +422,40 @@ void Control::_resize(const Size2& p_size) { _size_changed(); } +//moved theme configuration here, so controls can set up even if still not inside active scene +void Control::add_child_notify(Node *p_child) { + + Control *child_c=p_child->cast_to<Control>(); + if (!child_c) + return; + + if (child_c->data.theme.is_null() && data.theme_owner) { + child_c->data.theme_owner=data.theme_owner; + child_c->notification(NOTIFICATION_THEME_CHANGED); + } +} + +void Control::remove_child_notify(Node *p_child) { + + Control *child_c=p_child->cast_to<Control>(); + if (!child_c) + return; + + if (child_c->data.theme_owner && child_c->data.theme.is_null()) { + child_c->data.theme_owner=NULL; + //notification(NOTIFICATION_THEME_CHANGED); + } + +} + +void Control::_update_canvas_item_transform() { + + Matrix32 xform=Matrix32(data.rotation,get_pos()); + xform.scale_basis(data.scale); + VisualServer::get_singleton()->canvas_item_set_transform(get_canvas_item(),xform); + +} void Control::_notification(int p_notification) { @@ -512,10 +545,10 @@ void Control::_notification(int p_notification) { } - if (data.theme.is_null() && data.parent && data.parent->data.theme_owner) { - data.theme_owner=data.parent->data.theme_owner; - notification(NOTIFICATION_THEME_CHANGED); - } + //if (data.theme.is_null() && data.parent && data.parent->data.theme_owner) { + // data.theme_owner=data.parent->data.theme_owner; + // notification(NOTIFICATION_THEME_CHANGED); + //} } break; case NOTIFICATION_EXIT_CANVAS: { @@ -547,10 +580,10 @@ void Control::_notification(int p_notification) { data.parent=NULL; data.parent_canvas_item=NULL; - if (data.theme_owner && data.theme.is_null()) { - data.theme_owner=NULL; + //if (data.theme_owner && data.theme.is_null()) { + // data.theme_owner=NULL; //notification(NOTIFICATION_THEME_CHANGED); - } + //} } break; case NOTIFICATION_MOVED_IN_PARENT: { @@ -574,10 +607,9 @@ void Control::_notification(int p_notification) { } break; case NOTIFICATION_DRAW: { - Matrix32 xform=Matrix32(data.rotation,get_pos()); - xform.scale_basis(data.scale); - VisualServer::get_singleton()->canvas_item_set_transform(get_canvas_item(),xform); - VisualServer::get_singleton()->canvas_item_set_custom_rect( get_canvas_item(),true, Rect2(Point2(),get_size())); + _update_canvas_item_transform(); + VisualServer::get_singleton()->canvas_item_set_custom_rect( get_canvas_item(),!data.disable_visibility_clip, Rect2(Point2(),get_size())); + //emit_signal(SceneStringNames::get_singleton()->draw); } break; @@ -1246,17 +1278,24 @@ void Control::_size_changed() { new_size_cache.x = MAX( minimum_size.x, new_size_cache.x ); new_size_cache.y = MAX( minimum_size.y, new_size_cache.y ); - - if (new_pos_cache == data.pos_cache && new_size_cache == data.size_cache) - return; // did not change, don't emit signal + bool pos_changed = new_pos_cache != data.pos_cache; + bool size_changed = new_size_cache != data.size_cache; data.pos_cache=new_pos_cache; data.size_cache=new_size_cache; - notification(NOTIFICATION_RESIZED); - item_rect_changed(); - _change_notify_margins(); - _notify_transform(); + if (size_changed) { + notification(NOTIFICATION_RESIZED); + } + if (pos_changed || size_changed) { + item_rect_changed(size_changed); + _change_notify_margins(); + _notify_transform(); + } + + if (pos_changed && !size_changed) { + _update_canvas_item_transform(); //move because it won't be updated + } } float Control::_get_parent_range(int p_idx) const { @@ -2188,7 +2227,7 @@ void Control::grab_click_focus() { void Control::minimum_size_changed() { - if (!is_inside_tree()) + if (!is_inside_tree() || data.block_minimum_size_adjust) return; if (data.pending_min_size_update) @@ -2348,7 +2387,26 @@ Control *Control::get_root_parent_control() const { return const_cast<Control*>(root); } +void Control::set_block_minimum_size_adjust(bool p_block) { + data.block_minimum_size_adjust=p_block; +} + +bool Control::is_minimum_size_adjust_blocked() const { + return data.block_minimum_size_adjust; +} + + +void Control::set_disable_visibility_clip(bool p_ignore) { + + data.disable_visibility_clip=p_ignore; + update(); +} + +bool Control::is_visibility_clip_disabled() const { + + return data.disable_visibility_clip; +} void Control::_bind_methods() { @@ -2577,6 +2635,8 @@ Control::Control() { data.scale=Vector2(1,1); data.drag_owner=0; data.modal_frame=0; + data.block_minimum_size_adjust=false; + data.disable_visibility_clip=false; for (int i=0;i<4;i++) { diff --git a/scene/gui/control.h b/scene/gui/control.h index 1337cbc4b9..558439efbf 100644 --- a/scene/gui/control.h +++ b/scene/gui/control.h @@ -128,6 +128,9 @@ private: bool ignore_mouse; bool stop_mouse; + bool block_minimum_size_adjust; + bool disable_visibility_clip; + Control *parent; ObjectID drag_owner; bool modal; @@ -193,6 +196,8 @@ private: void _unref_font( Ref<Font> p_sc); void _font_changed(); + void _update_canvas_item_transform(); + friend class Viewport; void _modal_stack_remove(); @@ -200,6 +205,9 @@ friend class Viewport; protected: + virtual void add_child_notify(Node *p_child); + virtual void remove_child_notify(Node *p_child); + //virtual void _window_input_event(InputEvent p_event); bool _set(const StringName& p_name, const Variant& p_value); @@ -392,6 +400,13 @@ public: Control *get_root_parent_control() const; + + void set_block_minimum_size_adjust(bool p_block); + bool is_minimum_size_adjust_blocked() const; + + void set_disable_visibility_clip(bool p_ignore); + bool is_visibility_clip_disabled() const; + Control(); ~Control(); diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp index 4dbc106834..93e46da82b 100644 --- a/scene/gui/dialogs.cpp +++ b/scene/gui/dialogs.cpp @@ -399,8 +399,6 @@ AcceptDialog::AcceptDialog() { add_child(label); hbc = memnew( HBoxContainer ); - hbc->set_area_as_parent_rect(margin); - hbc->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,button_margin); add_child(hbc); hbc->add_spacer(); diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp index d335399caa..6b43425edc 100644 --- a/scene/gui/file_dialog.cpp +++ b/scene/gui/file_dialog.cpp @@ -475,7 +475,7 @@ void FileDialog::update_filters() { String flt=filters[i].get_slice(";",0).strip_edges(); String desc=filters[i].get_slice(";",1).strip_edges(); if (desc.length()) - filter->add_item(desc+" ( "+flt+" )"); + filter->add_item(String(XL_MESSAGE(desc))+" ( "+flt+" )"); else filter->add_item("( "+flt+" )"); } @@ -498,6 +498,16 @@ void FileDialog::add_filter(const String& p_filter) { } +void FileDialog::set_filters(const Vector<String>& p_filters){ + filters=p_filters; + update_filters(); + invalidate(); +} + +Vector<String> FileDialog::get_filters() const{ + return filters; +} + String FileDialog::get_current_dir() const { return dir->get_text(); @@ -686,6 +696,8 @@ void FileDialog::_bind_methods() { ObjectTypeDB::bind_method(_MD("clear_filters"),&FileDialog::clear_filters); ObjectTypeDB::bind_method(_MD("add_filter","filter"),&FileDialog::add_filter); + ObjectTypeDB::bind_method(_MD("set_filters","filters"),&FileDialog::set_filters); + ObjectTypeDB::bind_method(_MD("get_filters"),&FileDialog::get_filters); ObjectTypeDB::bind_method(_MD("get_current_dir"),&FileDialog::get_current_dir); ObjectTypeDB::bind_method(_MD("get_current_file"),&FileDialog::get_current_file); ObjectTypeDB::bind_method(_MD("get_current_path"),&FileDialog::get_current_path); @@ -722,6 +734,11 @@ void FileDialog::_bind_methods() { BIND_CONSTANT( ACCESS_USERDATA ); BIND_CONSTANT( ACCESS_FILESYSTEM ); + ADD_PROPERTY( PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Open one,Open many,Open folder,Open any,Save"),_SCS("set_mode"),_SCS("get_mode") ); + ADD_PROPERTY( PropertyInfo(Variant::INT, "access", PROPERTY_HINT_ENUM, "Resources,User data,File system"),_SCS("set_access"),_SCS("get_access") ); + ADD_PROPERTY( PropertyInfo(Variant::STRING_ARRAY, "filters"),_SCS("set_filters"),_SCS("get_filters") ); + ADD_PROPERTY( PropertyInfo(Variant::BOOL, "show_hidden_files"),_SCS("set_show_hidden_files"),_SCS("is_showing_hidden_files") ); + } diff --git a/scene/gui/file_dialog.h b/scene/gui/file_dialog.h index 1fcf8387ce..150b24cb3f 100644 --- a/scene/gui/file_dialog.h +++ b/scene/gui/file_dialog.h @@ -131,6 +131,8 @@ public: void clear_filters(); void add_filter(const String& p_filter); + void set_filters(const Vector<String>& p_filters); + Vector<String> get_filters() const; void set_enable_multiple_selection(bool p_enable); Vector<String> get_selected_files() const; diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index 06b1c42690..0de6add8cb 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -61,6 +61,8 @@ Error GraphEdit::connect_node(const StringName& p_from, int p_from_port,const St c.to_port=p_to_port; connections.push_back(c); top_layer->update(); + update(); + connections_layer->update(); return OK; } @@ -85,6 +87,8 @@ void GraphEdit::disconnect_node(const StringName& p_from, int p_from_port,const connections.erase(E); top_layer->update(); + update(); + connections_layer->update(); return; } } @@ -100,6 +104,15 @@ void GraphEdit::get_connection_list(List<Connection> *r_connections) const { *r_connections=connections; } +void GraphEdit::set_scroll_ofs(const Vector2& p_ofs) { + + setting_scroll_ofs=true; + h_scroll->set_val(p_ofs.x); + v_scroll->set_val(p_ofs.y); + _update_scroll(); + setting_scroll_ofs=false; +} + Vector2 GraphEdit::get_scroll_ofs() const{ return Vector2(h_scroll->get_val(),v_scroll->get_val()); @@ -107,12 +120,23 @@ Vector2 GraphEdit::get_scroll_ofs() const{ void GraphEdit::_scroll_moved(double) { - _update_scroll_offset(); + + if (!awaiting_scroll_offset_update) { + call_deferred("_update_scroll_offset"); + awaiting_scroll_offset_update=true; + } top_layer->update(); + update(); + + if (!setting_scroll_ofs) {//in godot, signals on change value are avoided as a convention + emit_signal("scroll_offset_changed",get_scroll_ofs()); + } } void GraphEdit::_update_scroll_offset() { + set_block_minimum_size_adjust(true); + for(int i=0;i<get_child_count();i++) { GraphNode *gn=get_child(i)->cast_to<GraphNode>(); @@ -122,9 +146,15 @@ void GraphEdit::_update_scroll_offset() { Point2 pos=gn->get_offset()*zoom; pos-=Point2(h_scroll->get_val(),v_scroll->get_val()); gn->set_pos(pos); - gn->set_scale(Vector2(zoom,zoom)); + if (gn->get_scale()!=Vector2(zoom,zoom)) { + gn->set_scale(Vector2(zoom,zoom)); + } } + connections_layer->set_pos(-Point2(h_scroll->get_val(),v_scroll->get_val())*zoom); + set_block_minimum_size_adjust(false); + awaiting_scroll_offset_update=false; + } void GraphEdit::_update_scroll() { @@ -133,6 +163,9 @@ void GraphEdit::_update_scroll() { return; updating=true; + + set_block_minimum_size_adjust(true); + Rect2 screen; for(int i=0;i<get_child_count();i++) { @@ -167,7 +200,13 @@ void GraphEdit::_update_scroll() { else v_scroll->show(); - _update_scroll_offset(); + set_block_minimum_size_adjust(false); + + if (!awaiting_scroll_offset_update) { + call_deferred("_update_scroll_offset"); + awaiting_scroll_offset_update=true; + } + updating=false; } @@ -177,7 +216,21 @@ void GraphEdit::_graph_node_raised(Node* p_gn) { GraphNode *gn=p_gn->cast_to<GraphNode>(); ERR_FAIL_COND(!gn); gn->raise(); + if (gn->is_comment()) { + move_child(gn,0); + } + int first_not_comment=0; + for(int i=0;i<get_child_count();i++) { + GraphNode *gn=get_child(i)->cast_to<GraphNode>(); + if (gn && !gn->is_comment()) { + first_not_comment=i; + break; + } + } + + move_child(connections_layer,first_not_comment); top_layer->raise(); + emit_signal("node_selected",p_gn); } @@ -187,10 +240,14 @@ void GraphEdit::_graph_node_moved(Node *p_gn) { GraphNode *gn=p_gn->cast_to<GraphNode>(); ERR_FAIL_COND(!gn); top_layer->update(); + update(); + connections_layer->update(); } void GraphEdit::add_child_notify(Node *p_child) { + Control::add_child_notify(p_child); + top_layer->call_deferred("raise"); //top layer always on top! GraphNode *gn = p_child->cast_to<GraphNode>(); if (gn) { @@ -200,10 +257,14 @@ void GraphEdit::add_child_notify(Node *p_child) { _graph_node_moved(gn); gn->set_stop_mouse(false); } + + } void GraphEdit::remove_child_notify(Node *p_child) { + Control::remove_child_notify(p_child); + top_layer->call_deferred("raise"); //top layer always on top! GraphNode *gn = p_child->cast_to<GraphNode>(); if (gn) { @@ -228,18 +289,70 @@ void GraphEdit::_notification(int p_what) { h_scroll->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,hmin.height); h_scroll->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END,0); + + zoom_minus->set_icon(get_icon("minus")); + zoom_reset->set_icon(get_icon("reset")); + zoom_plus->set_icon(get_icon("more")); + snap_button->set_icon(get_icon("snap")); // zoom_icon->set_texture( get_icon("Zoom", "EditorIcons")); } if (p_what==NOTIFICATION_DRAW) { + + draw_style_box( get_stylebox("bg"),Rect2(Point2(),get_size()) ); VS::get_singleton()->canvas_item_set_clip(get_canvas_item(),true); + if (is_using_snap()) { + //draw grid + + int snap = get_snap(); + + Vector2 offset = get_scroll_ofs()/zoom; + Size2 size = get_size()/zoom; + + Point2i from = (offset/float(snap)).floor(); + Point2i len = (size/float(snap)).floor()+Vector2(1,1); + + Color grid_minor = get_color("grid_minor"); + Color grid_major = get_color("grid_major"); + + for(int i=from.x;i<from.x+len.x;i++) { + + Color color; + + if (ABS(i)%10==0) + color=grid_major; + else + color=grid_minor; + + float base_ofs = i*snap*zoom - offset.x*zoom; + draw_line(Vector2(base_ofs,0),Vector2(base_ofs,get_size().height),color); + } + + for(int i=from.y;i<from.y+len.y;i++) { + + Color color; + + if (ABS(i)%10==0) + color=grid_major; + else + color=grid_minor; + + float base_ofs = i*snap*zoom - offset.y*zoom; + draw_line(Vector2(0,base_ofs),Vector2(get_size().width,base_ofs),color); + } + + } + + + } if (p_what==NOTIFICATION_RESIZED) { _update_scroll(); top_layer->update(); + } } @@ -247,7 +360,8 @@ bool GraphEdit::_filter_input(const Point2& p_point) { Ref<Texture> port =get_icon("port","GraphNode"); - float grab_r=port->get_width()*0.5; + float grab_r_extend = 2.0; + float grab_r=port->get_width()*0.5*grab_r_extend; for(int i=get_child_count()-1;i>=0;i--) { GraphNode *gn=get_child(i)->cast_to<GraphNode>(); @@ -266,8 +380,9 @@ bool GraphEdit::_filter_input(const Point2& p_point) { for(int j=0;j<gn->get_connection_input_count();j++) { Vector2 pos = gn->get_connection_input_pos(j)+gn->get_pos(); - if (pos.distance_to(p_point)<grab_r) + if (pos.distance_to(p_point)<grab_r) { return true; + } } @@ -279,11 +394,13 @@ bool GraphEdit::_filter_input(const Point2& p_point) { void GraphEdit::_top_layer_input(const InputEvent& p_ev) { + + float grab_r_extend = 2.0; if (p_ev.type==InputEvent::MOUSE_BUTTON && p_ev.mouse_button.button_index==BUTTON_LEFT && p_ev.mouse_button.pressed) { Ref<Texture> port =get_icon("port","GraphNode"); Vector2 mpos(p_ev.mouse_button.x,p_ev.mouse_button.y); - float grab_r=port->get_width()*0.5; + float grab_r=port->get_width()*0.5*grab_r_extend; for(int i=get_child_count()-1;i>=0;i--) { GraphNode *gn=get_child(i)->cast_to<GraphNode>(); @@ -295,6 +412,37 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) { Vector2 pos = gn->get_connection_output_pos(j)+gn->get_pos(); if (pos.distance_to(mpos)<grab_r) { + + if (valid_left_disconnect_types.has(gn->get_connection_output_type(j))) { + //check disconnect + for (List<Connection>::Element*E=connections.front();E;E=E->next()) { + + if (E->get().from==gn->get_name() && E->get().from_port==j) { + + Node*to = get_node(String(E->get().to)); + if (to && to->cast_to<GraphNode>()) { + + connecting_from=E->get().to; + connecting_index=E->get().to_port; + connecting_out=false; + connecting_type=to->cast_to<GraphNode>()->get_connection_input_type(E->get().to_port); + connecting_color=to->cast_to<GraphNode>()->get_connection_input_color(E->get().to_port); + connecting_target=false; + connecting_to=pos; + just_disconected=true; + + emit_signal("disconnection_request",E->get().from,E->get().from_port,E->get().to,E->get().to_port); + to = get_node(String(connecting_from)); //maybe it was erased + if (to && to->cast_to<GraphNode>()) { + connecting=true; + } + return; + } + + } + } + } + connecting=true; connecting_from=gn->get_name(); connecting_index=j; @@ -303,6 +451,7 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) { connecting_color=gn->get_connection_output_color(j); connecting_target=false; connecting_to=pos; + just_disconected=false; return; } @@ -315,7 +464,7 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) { if (pos.distance_to(mpos)<grab_r) { - if (right_disconnects) { + if (right_disconnects || valid_right_disconnect_types.has(gn->get_connection_input_type(j))) { //check disconnect for (List<Connection>::Element*E=connections.front();E;E=E->next()) { @@ -331,6 +480,7 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) { connecting_color=fr->cast_to<GraphNode>()->get_connection_output_color(E->get().from_port); connecting_target=false; connecting_to=pos; + just_disconected=true; emit_signal("disconnection_request",E->get().from,E->get().from_port,E->get().to,E->get().to_port); fr = get_node(String(connecting_from)); //maybe it was erased @@ -353,6 +503,8 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) { connecting_color=gn->get_connection_input_color(j); connecting_target=false; connecting_to=pos; + just_disconected=true; + return; } @@ -365,11 +517,11 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) { connecting_to=Vector2(p_ev.mouse_motion.x,p_ev.mouse_motion.y); connecting_target=false; - top_layer->update(); + top_layer->update(); Ref<Texture> port =get_icon("port","GraphNode"); Vector2 mpos(p_ev.mouse_button.x,p_ev.mouse_button.y); - float grab_r=port->get_width()*0.5; + float grab_r=port->get_width()*0.5*grab_r_extend; for(int i=get_child_count()-1;i>=0;i--) { GraphNode *gn=get_child(i)->cast_to<GraphNode>(); @@ -381,7 +533,7 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) { Vector2 pos = gn->get_connection_output_pos(j)+gn->get_pos(); int type =gn->get_connection_output_type(j); - if (type==connecting_type && pos.distance_to(mpos)<grab_r) { + if ((type==connecting_type ||valid_connection_types.has(ConnType(type,connecting_type))) && pos.distance_to(mpos)<grab_r) { connecting_target=true; connecting_to=pos; @@ -398,7 +550,7 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) { Vector2 pos = gn->get_connection_input_pos(j)+gn->get_pos(); int type =gn->get_connection_input_type(j); - if (type==connecting_type && pos.distance_to(mpos)<grab_r) { + if ((type==connecting_type ||valid_connection_types.has(ConnType(type,connecting_type))) && pos.distance_to(mpos)<grab_r) { connecting_target=true; connecting_to=pos; connecting_target_to=gn->get_name(); @@ -425,18 +577,91 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) { } emit_signal("connection_request",from,from_slot,to,to_slot); + } else if (!just_disconected) { + String from = connecting_from; + int from_slot = connecting_index; + Vector2 ofs = Vector2(p_ev.mouse_button.x,p_ev.mouse_button.y); + emit_signal("connection_to_empty",from,from_slot,ofs); } connecting=false; top_layer->update(); + update(); + connections_layer->update(); } } -void GraphEdit::_draw_cos_line(const Vector2& p_from, const Vector2& p_to,const Color& p_color) { + +template<class Vector2> +static _FORCE_INLINE_ Vector2 _bezier_interp(real_t t, Vector2 start, Vector2 control_1, Vector2 control_2, Vector2 end) { + /* Formula from Wikipedia article on Bezier curves. */ + real_t omt = (1.0 - t); + real_t omt2 = omt*omt; + real_t omt3 = omt2*omt; + real_t t2 = t*t; + real_t t3 = t2*t; + + return start * omt3 + + control_1 * omt2 * t * 3.0 + + control_2 * omt * t2 * 3.0 + + end * t3; +} + + +void GraphEdit::_bake_segment2d(CanvasItem* p_where,float p_begin, float p_end,const Vector2& p_a,const Vector2& p_out,const Vector2& p_b, const Vector2& p_in,int p_depth,int p_min_depth,int p_max_depth,float p_tol,const Color& p_color,const Color& p_to_color,int &lines) const { + + float mp = p_begin+(p_end-p_begin)*0.5; + Vector2 beg = _bezier_interp(p_begin,p_a,p_a+p_out,p_b+p_in,p_b); + Vector2 mid = _bezier_interp(mp,p_a,p_a+p_out,p_b+p_in,p_b); + Vector2 end = _bezier_interp(p_end,p_a,p_a+p_out,p_b+p_in,p_b); + + Vector2 na = (mid-beg).normalized(); + Vector2 nb = (end-mid).normalized(); + float dp = Math::rad2deg(Math::acos(na.dot(nb))); + + if (p_depth>=p_min_depth && ( dp<p_tol || p_depth>=p_max_depth)) { + + + + p_where->draw_line(beg,end,p_color.linear_interpolate(p_to_color,mp),2,true); + lines++; + } else { + _bake_segment2d(p_where,p_begin,mp,p_a,p_out,p_b,p_in,p_depth+1,p_min_depth,p_max_depth,p_tol,p_color,p_to_color,lines); + _bake_segment2d(p_where,mp,p_end,p_a,p_out,p_b,p_in,p_depth+1,p_min_depth,p_max_depth,p_tol,p_color,p_to_color,lines); + } +} + + +void GraphEdit::_draw_cos_line(CanvasItem* p_where,const Vector2& p_from, const Vector2& p_to,const Color& p_color,const Color& p_to_color) { + + +#if 1 + + //cubic bezier code + float diff = p_to.x-p_from.x; + float cp_offset; + int cp_len = get_constant("bezier_len_pos"); + int cp_neg_len = get_constant("bezier_len_neg"); + + if (diff>0) { + cp_offset=MAX(cp_len,diff*0.5); + } else { + cp_offset=MAX(MIN(cp_len-diff,cp_neg_len),-diff*0.5); + } + + Vector2 c1 = Vector2(cp_offset,0); + Vector2 c2 = Vector2(-cp_offset,0); + + int lines=0; + _bake_segment2d(p_where,0,1,p_from,c1,p_to,c2,0,3,9,8,p_color,p_to_color,lines); + + +#else static const int steps = 20; + //old cosine code Rect2 r; r.pos=p_from; r.expand_to(p_to); @@ -446,6 +671,7 @@ void GraphEdit::_draw_cos_line(const Vector2& p_from, const Vector2& p_to,const Vector2 prev; for(int i=0;i<=steps;i++) { + float d = i/float(steps); float c=-Math::cos(d*Math_PI) * 0.5+0.5; if (flip) @@ -454,11 +680,65 @@ void GraphEdit::_draw_cos_line(const Vector2& p_from, const Vector2& p_to,const if (i>0) { - top_layer->draw_line(prev,p,p_color,2); + p_where->draw_line(prev,p,p_color.linear_interpolate(p_to_color,d),2); } prev=p; } +#endif +} + + +void GraphEdit::_connections_layer_draw() { + + + { + //draw connections + List<List<Connection>::Element* > to_erase; + for(List<Connection>::Element *E=connections.front();E;E=E->next()) { + + NodePath fromnp(E->get().from); + + Node * from = get_node(fromnp); + if (!from) { + to_erase.push_back(E); + continue; + } + + GraphNode *gfrom = from->cast_to<GraphNode>(); + + if (!gfrom) { + to_erase.push_back(E); + continue; + } + + NodePath tonp(E->get().to); + Node * to = get_node(tonp); + if (!to) { + to_erase.push_back(E); + continue; + } + + GraphNode *gto = to->cast_to<GraphNode>(); + + if (!gto) { + to_erase.push_back(E); + continue; + } + + Vector2 frompos=gfrom->get_connection_output_pos(E->get().from_port)+gfrom->get_offset(); + Color color = gfrom->get_connection_output_color(E->get().from_port); + Vector2 topos=gto->get_connection_input_pos(E->get().to_port)+gto->get_offset(); + Color tocolor = gto->get_connection_input_color(E->get().to_port); + _draw_cos_line(connections_layer,frompos,topos,color,tocolor); + + } + + while(to_erase.size()) { + connections.erase(to_erase.front()->get()); + to_erase.pop_front(); + } + } } void GraphEdit::_top_layer_draw() { @@ -488,54 +768,28 @@ void GraphEdit::_top_layer_draw() { col.g+=0.4; col.b+=0.4; } - _draw_cos_line(pos,topos,col); - } - List<List<Connection>::Element* > to_erase; - for(List<Connection>::Element *E=connections.front();E;E=E->next()) { - - NodePath fromnp(E->get().from); - - Node * from = get_node(fromnp); - if (!from) { - to_erase.push_back(E); - continue; + if (!connecting_out) { + SWAP(pos,topos); } + _draw_cos_line(top_layer,pos,topos,col,col); + } - GraphNode *gfrom = from->cast_to<GraphNode>(); - if (!gfrom) { - to_erase.push_back(E); - continue; - } + if (box_selecting) + top_layer->draw_rect(box_selecting_rect,Color(0.7,0.7,1.0,0.3)); +} - NodePath tonp(E->get().to); - Node * to = get_node(tonp); - if (!to) { - to_erase.push_back(E); - continue; - } +void GraphEdit::set_selected(Node* p_child) { - GraphNode *gto = to->cast_to<GraphNode>(); + for(int i=get_child_count()-1;i>=0;i--) { - if (!gto) { - to_erase.push_back(E); + GraphNode *gn=get_child(i)->cast_to<GraphNode>(); + if (!gn) continue; - } - - Vector2 frompos=gfrom->get_connection_output_pos(E->get().from_port)+gfrom->get_pos(); - Color color = gfrom->get_connection_output_color(E->get().from_port); - Vector2 topos=gto->get_connection_input_pos(E->get().to_port)+gto->get_pos(); - _draw_cos_line(frompos,topos,color); + gn->set_selected(gn==p_child); } - - while(to_erase.size()) { - connections.erase(to_erase.front()->get()); - to_erase.pop_front(); - } - if (box_selecting) - top_layer->draw_rect(box_selecting_rect,Color(0.7,0.7,1.0,0.3)); } void GraphEdit::_input_event(const InputEvent& p_ev) { @@ -548,11 +802,21 @@ void GraphEdit::_input_event(const InputEvent& p_ev) { if (p_ev.type==InputEvent::MOUSE_MOTION && dragging) { just_selected=true; - drag_accum+=Vector2(p_ev.mouse_motion.relative_x,p_ev.mouse_motion.relative_y); + // TODO: Remove local mouse pos hack if/when InputEventMouseMotion is fixed to support floats + //drag_accum+=Vector2(p_ev.mouse_motion.relative_x,p_ev.mouse_motion.relative_y); + drag_accum = get_local_mouse_pos() - drag_origin; for(int i=get_child_count()-1;i>=0;i--) { GraphNode *gn=get_child(i)->cast_to<GraphNode>(); - if (gn && gn->is_selected()) - gn->set_offset((gn->get_drag_from()*zoom+drag_accum)/zoom); + if (gn && gn->is_selected()) { + + Vector2 pos = (gn->get_drag_from()*zoom+drag_accum)/zoom; + if (is_using_snap()) { + int snap = get_snap(); + pos = pos.snapped(Vector2(snap,snap)); + } + + gn->set_offset(pos); + } } } @@ -641,6 +905,8 @@ void GraphEdit::_input_event(const InputEvent& p_ev) { dragging = false; top_layer->update(); + update(); + connections_layer->update(); } if (b.button_index==BUTTON_LEFT && b.pressed) { @@ -651,6 +917,10 @@ void GraphEdit::_input_event(const InputEvent& p_ev) { gn=get_child(i)->cast_to<GraphNode>(); if (gn) { + + if (gn->is_resizing()) + continue; + Rect2 r = gn->get_rect(); r.size*=zoom; if (r.has_point(get_local_mouse_pos())) @@ -665,6 +935,7 @@ void GraphEdit::_input_event(const InputEvent& p_ev) { dragging = true; drag_accum = Vector2(); + drag_origin = get_local_mouse_pos(); just_selected = !gn->is_selected(); if(!gn->is_selected() && !Input::get_singleton()->is_key_pressed(KEY_CONTROL)) { for (int i = 0; i < get_child_count(); i++) { @@ -761,6 +1032,7 @@ void GraphEdit::clear_connections() { connections.clear(); update(); + connections_layer->update(); } void GraphEdit::set_zoom(float p_zoom) { @@ -804,6 +1076,29 @@ bool GraphEdit::is_right_disconnects_enabled() const{ return right_disconnects; } +void GraphEdit::add_valid_right_disconnect_type(int p_type) { + + valid_right_disconnect_types.insert(p_type); +} + +void GraphEdit::remove_valid_right_disconnect_type(int p_type){ + + valid_right_disconnect_types.erase(p_type); + +} + +void GraphEdit::add_valid_left_disconnect_type(int p_type){ + + valid_left_disconnect_types.insert(p_type); + +} + +void GraphEdit::remove_valid_left_disconnect_type(int p_type){ + + valid_left_disconnect_types.erase(p_type); + +} + Array GraphEdit::_get_connection_list() const { List<Connection> conns; @@ -838,6 +1133,68 @@ void GraphEdit::_zoom_plus() { set_zoom(zoom*ZOOM_SCALE); } +void GraphEdit::add_valid_connection_type(int p_type,int p_with_type) { + + ConnType ct; + ct.type_a=p_type; + ct.type_b=p_with_type; + + valid_connection_types.insert(ct); +} + +void GraphEdit::remove_valid_connection_type(int p_type,int p_with_type) { + + ConnType ct; + ct.type_a=p_type; + ct.type_b=p_with_type; + + valid_connection_types.erase(ct); + +} + +bool GraphEdit::is_valid_connection_type(int p_type,int p_with_type) const { + + ConnType ct; + ct.type_a=p_type; + ct.type_b=p_with_type; + + return valid_connection_types.has(ct); + +} + +void GraphEdit::set_use_snap(bool p_enable) { + + snap_button->set_pressed(p_enable); + update(); + +} + +bool GraphEdit::is_using_snap() const{ + + return snap_button->is_pressed(); + +} + +int GraphEdit::get_snap() const{ + + return snap_amount->get_val(); +} + +void GraphEdit::set_snap(int p_snap) { + + ERR_FAIL_COND(p_snap<5); + snap_amount->set_val(p_snap); + update(); +} +void GraphEdit::_snap_toggled() { + update(); +} + +void GraphEdit::_snap_value_changed(double) { + + update(); +} + void GraphEdit::_bind_methods() { @@ -846,10 +1203,17 @@ void GraphEdit::_bind_methods() { ObjectTypeDB::bind_method(_MD("disconnect_node","from","from_port","to","to_port"),&GraphEdit::disconnect_node); ObjectTypeDB::bind_method(_MD("get_connection_list"),&GraphEdit::_get_connection_list); ObjectTypeDB::bind_method(_MD("get_scroll_ofs"),&GraphEdit::get_scroll_ofs); + ObjectTypeDB::bind_method(_MD("set_scroll_ofs","ofs"),&GraphEdit::set_scroll_ofs); ObjectTypeDB::bind_method(_MD("set_zoom","p_zoom"),&GraphEdit::set_zoom); ObjectTypeDB::bind_method(_MD("get_zoom"),&GraphEdit::get_zoom); + ObjectTypeDB::bind_method(_MD("set_snap","pixels"),&GraphEdit::set_snap); + ObjectTypeDB::bind_method(_MD("get_snap"),&GraphEdit::get_snap); + + ObjectTypeDB::bind_method(_MD("set_use_snap","enable"),&GraphEdit::set_use_snap); + ObjectTypeDB::bind_method(_MD("is_using_snap"),&GraphEdit::is_using_snap); + ObjectTypeDB::bind_method(_MD("set_right_disconnects","enable"),&GraphEdit::set_right_disconnects); ObjectTypeDB::bind_method(_MD("is_right_disconnects_enabled"),&GraphEdit::is_right_disconnects_enabled); @@ -862,16 +1226,27 @@ void GraphEdit::_bind_methods() { ObjectTypeDB::bind_method(_MD("_zoom_minus"),&GraphEdit::_zoom_minus); ObjectTypeDB::bind_method(_MD("_zoom_reset"),&GraphEdit::_zoom_reset); ObjectTypeDB::bind_method(_MD("_zoom_plus"),&GraphEdit::_zoom_plus); + ObjectTypeDB::bind_method(_MD("_snap_toggled"),&GraphEdit::_snap_toggled); + ObjectTypeDB::bind_method(_MD("_snap_value_changed"),&GraphEdit::_snap_value_changed); ObjectTypeDB::bind_method(_MD("_input_event"),&GraphEdit::_input_event); + ObjectTypeDB::bind_method(_MD("_update_scroll_offset"),&GraphEdit::_update_scroll_offset); + ObjectTypeDB::bind_method(_MD("_connections_layer_draw"),&GraphEdit::_connections_layer_draw); + + + + ObjectTypeDB::bind_method(_MD("set_selected","node"),&GraphEdit::set_selected); ADD_SIGNAL(MethodInfo("connection_request",PropertyInfo(Variant::STRING,"from"),PropertyInfo(Variant::INT,"from_slot"),PropertyInfo(Variant::STRING,"to"),PropertyInfo(Variant::INT,"to_slot"))); ADD_SIGNAL(MethodInfo("disconnection_request",PropertyInfo(Variant::STRING,"from"),PropertyInfo(Variant::INT,"from_slot"),PropertyInfo(Variant::STRING,"to"),PropertyInfo(Variant::INT,"to_slot"))); ADD_SIGNAL(MethodInfo("popup_request", PropertyInfo(Variant::VECTOR2,"p_position"))); ADD_SIGNAL(MethodInfo("duplicate_nodes_request")); + ADD_SIGNAL(MethodInfo("node_selected",PropertyInfo(Variant::OBJECT,"node"))); + ADD_SIGNAL(MethodInfo("connection_to_empty",PropertyInfo(Variant::STRING,"from"),PropertyInfo(Variant::INT,"from_slot"),PropertyInfo(Variant::VECTOR2,"release_pos"))); ADD_SIGNAL(MethodInfo("delete_nodes_request")); ADD_SIGNAL(MethodInfo("_begin_node_move")); ADD_SIGNAL(MethodInfo("_end_node_move")); + ADD_SIGNAL(MethodInfo("scroll_offset_changed",PropertyInfo(Variant::VECTOR2,"ofs"))); } @@ -879,6 +1254,7 @@ void GraphEdit::_bind_methods() { GraphEdit::GraphEdit() { set_focus_mode(FOCUS_ALL); + awaiting_scroll_offset_update=false; top_layer=NULL; top_layer=memnew(GraphEditFilter(this)); add_child(top_layer); @@ -888,6 +1264,12 @@ GraphEdit::GraphEdit() { top_layer->set_stop_mouse(false); top_layer->connect("input_event",this,"_top_layer_input"); + connections_layer = memnew( Control ); + add_child(connections_layer); + connections_layer->connect("draw",this,"_connections_layer_draw"); + connections_layer->set_name("CLAYER"); + connections_layer->set_disable_visibility_clip(true); // so it can draw freely and be offseted + h_scroll = memnew(HScrollBar); h_scroll->set_name("_h_scroll"); top_layer->add_child(h_scroll); @@ -902,6 +1284,13 @@ GraphEdit::GraphEdit() { box_selecting = false; dragging = false; + //set large minmax so it can scroll even if not resized yet + h_scroll->set_min(-10000); + h_scroll->set_max(10000); + + v_scroll->set_min(-10000); + v_scroll->set_max(10000); + h_scroll->connect("value_changed", this,"_scroll_moved"); v_scroll->connect("value_changed", this,"_scroll_moved"); @@ -915,17 +1304,36 @@ GraphEdit::GraphEdit() { zoom_minus = memnew( ToolButton ); zoom_hb->add_child(zoom_minus); zoom_minus->connect("pressed",this,"_zoom_minus"); - zoom_minus->set_icon(get_icon("minus")); + zoom_minus->set_focus_mode(FOCUS_NONE); zoom_reset = memnew( ToolButton ); zoom_hb->add_child(zoom_reset); zoom_reset->connect("pressed",this,"_zoom_reset"); - zoom_reset->set_icon(get_icon("reset")); + zoom_reset->set_focus_mode(FOCUS_NONE); zoom_plus = memnew( ToolButton ); zoom_hb->add_child(zoom_plus); zoom_plus->connect("pressed",this,"_zoom_plus"); - zoom_plus->set_icon(get_icon("more")); + zoom_plus->set_focus_mode(FOCUS_NONE); + + snap_button = memnew( ToolButton ); + snap_button->set_toggle_mode(true); + snap_button->connect("pressed",this,"_snap_toggled"); + snap_button->set_pressed(true); + snap_button->set_focus_mode(FOCUS_NONE); + zoom_hb->add_child(snap_button); + + snap_amount = memnew( SpinBox ); + snap_amount->set_min(5); + snap_amount->set_max(100); + snap_amount->set_step(1); + snap_amount->set_val(20); + snap_amount->connect("value_changed",this,"_snap_value_changed"); + zoom_hb->add_child(snap_amount); + + setting_scroll_ofs=false; + just_disconected=false; + } diff --git a/scene/gui/graph_edit.h b/scene/gui/graph_edit.h index ac4e71ba49..c5174f6699 100644 --- a/scene/gui/graph_edit.h +++ b/scene/gui/graph_edit.h @@ -33,6 +33,7 @@ #include "scene/gui/scroll_bar.h" #include "scene/gui/slider.h" #include "scene/gui/tool_button.h" +#include "scene/gui/spin_box.h" #include "texture_frame.h" class GraphEdit; @@ -70,6 +71,9 @@ private: ToolButton *zoom_reset; ToolButton *zoom_plus; + ToolButton *snap_button; + SpinBox *snap_amount; + void _zoom_minus(); void _zoom_reset(); void _zoom_plus(); @@ -88,10 +92,12 @@ private: Vector2 connecting_to; String connecting_target_to; int connecting_target_index; + bool just_disconected; bool dragging; bool just_selected; Vector2 drag_accum; + Point2 drag_origin; // Workaround for GH-5907 float zoom; @@ -102,11 +108,15 @@ private: Rect2 box_selecting_rect; List<GraphNode*> previus_selected; + bool setting_scroll_ofs; bool right_disconnects; bool updating; + bool awaiting_scroll_offset_update; List<Connection> connections; - void _draw_cos_line(const Vector2& p_from, const Vector2& p_to,const Color& p_color); + void _bake_segment2d(CanvasItem* p_where,float p_begin, float p_end, const Vector2& p_a, const Vector2& p_out, const Vector2& p_b, const Vector2& p_in, int p_depth, int p_min_depth, int p_max_depth, float p_tol, const Color& p_color, const Color& p_to_color, int &lines) const; + + void _draw_cos_line(CanvasItem* p_where,const Vector2& p_from, const Vector2& p_to, const Color& p_color, const Color &p_to_color); void _graph_node_raised(Node* p_gn); void _graph_node_moved(Node *p_gn); @@ -115,15 +125,47 @@ private: void _scroll_moved(double); void _input_event(const InputEvent& p_ev); + Control *connections_layer; GraphEditFilter *top_layer; void _top_layer_input(const InputEvent& p_ev); void _top_layer_draw(); + void _connections_layer_draw(); void _update_scroll_offset(); Array _get_connection_list() const; + bool lines_on_bg; + + + + struct ConnType { + + union { + struct { + uint32_t type_a; + uint32_t type_b; + }; + uint64_t key; + }; + + bool operator<(const ConnType& p_type) const { + return key<p_type.key; + } + + ConnType(uint32_t a=0, uint32_t b=0) { + type_a=a; + type_b=b; + } + }; + + Set<ConnType> valid_connection_types; + Set<int> valid_left_disconnect_types; + Set<int> valid_right_disconnect_types; + friend class GraphEditFilter; bool _filter_input(const Point2& p_point); + void _snap_toggled(); + void _snap_value_changed(double); protected: static void _bind_methods(); @@ -138,6 +180,10 @@ public: void disconnect_node(const StringName& p_from, int p_from_port,const StringName& p_to,int p_to_port); void clear_connections(); + void add_valid_connection_type(int p_type,int p_with_type); + void remove_valid_connection_type(int p_type,int p_with_type); + bool is_valid_connection_type(int p_type,int p_with_type) const; + void set_zoom(float p_zoom); float get_zoom() const; @@ -147,8 +193,23 @@ public: void set_right_disconnects(bool p_enable); bool is_right_disconnects_enabled() const; + void add_valid_right_disconnect_type(int p_type); + void remove_valid_right_disconnect_type(int p_type); + + void add_valid_left_disconnect_type(int p_type); + void remove_valid_left_disconnect_type(int p_type); + + void set_scroll_ofs(const Vector2& p_ofs); Vector2 get_scroll_ofs() const; + void set_selected(Node* p_child); + + void set_use_snap(bool p_enable); + bool is_using_snap() const; + + int get_snap() const; + void set_snap(int p_snap); + GraphEdit(); }; diff --git a/scene/gui/graph_node.cpp b/scene/gui/graph_node.cpp index 94001b2ac1..da298a795a 100644 --- a/scene/gui/graph_node.cpp +++ b/scene/gui/graph_node.cpp @@ -183,14 +183,45 @@ void GraphNode::_resort() { } +bool GraphNode::has_point(const Point2& p_point) const { + + if (comment) { + Ref<StyleBox> comment = get_stylebox("comment"); + Ref<Texture> resizer =get_icon("resizer"); + + if (Rect2(get_size()-resizer->get_size(), resizer->get_size()).has_point(p_point)) { + return true; + } + if (Rect2(0,0,get_size().width,comment->get_margin(MARGIN_TOP)).has_point(p_point)) { + return true; + } + + return false; + + } else { + return Control::has_point(p_point); + } +} void GraphNode::_notification(int p_what) { if (p_what==NOTIFICATION_DRAW) { - Ref<StyleBox> sb=get_stylebox(selected ? "selectedframe" : "frame"); + Ref<StyleBox> sb; + + if (comment) { + sb = get_stylebox( selected? "commentfocus" : "comment"); + + } else { + + sb = get_stylebox( selected ? "selectedframe" : "frame"); + } + + sb=sb->duplicate(); + sb->call("set_modulate",modulate); Ref<Texture> port =get_icon("port"); Ref<Texture> close =get_icon("close"); + Ref<Texture> resizer =get_icon("resizer"); int close_offset = get_constant("close_offset"); Ref<Font> title_font = get_font("title_font"); int title_offset = get_constant("title_offset"); @@ -198,8 +229,25 @@ void GraphNode::_notification(int p_what) { Point2i icofs = -port->get_size()*0.5; int edgeofs=get_constant("port_offset"); icofs.y+=sb->get_margin(MARGIN_TOP); + + + draw_style_box(sb,Rect2(Point2(),get_size())); + switch(overlay) { + case OVERLAY_DISABLED: { + + } break; + case OVERLAY_BREAKPOINT: { + + draw_style_box(get_stylebox("breakpoint"),Rect2(Point2(),get_size())); + } break; + case OVERLAY_POSITION: { + draw_style_box(get_stylebox("position"),Rect2(Point2(),get_size())); + + } break; + } + int w = get_size().width-sb->get_minimum_size().x; if (show_close) @@ -223,11 +271,26 @@ void GraphNode::_notification(int p_what) { continue; const Slot &s=slot_info[E->key()]; //left - if (s.enable_left) - port->draw(get_canvas_item(),icofs+Point2(edgeofs,cache_y[E->key()]),s.color_left); - if (s.enable_right) - port->draw(get_canvas_item(),icofs+Point2(get_size().x-edgeofs,cache_y[E->key()]),s.color_right); + if (s.enable_left) { + Ref<Texture> p = port; + if (s.custom_slot_left.is_valid()) { + p=s.custom_slot_left; + } + p->draw(get_canvas_item(),icofs+Point2(edgeofs,cache_y[E->key()]),s.color_left); + } + if (s.enable_right) { + Ref<Texture> p = port; + if (s.custom_slot_right.is_valid()) { + p=s.custom_slot_right; + } + p->draw(get_canvas_item(),icofs+Point2(get_size().x-edgeofs,cache_y[E->key()]),s.color_right); + } + + } + + if (resizeable) { + draw_texture(resizer,get_size()-resizer->get_size()); } } @@ -239,7 +302,7 @@ void GraphNode::_notification(int p_what) { } -void GraphNode::set_slot(int p_idx,bool p_enable_left,int p_type_left,const Color& p_color_left, bool p_enable_right,int p_type_right,const Color& p_color_right) { +void GraphNode::set_slot(int p_idx,bool p_enable_left,int p_type_left,const Color& p_color_left, bool p_enable_right,int p_type_right,const Color& p_color_right,const Ref<Texture>& p_custom_left,const Ref<Texture>& p_custom_right) { ERR_FAIL_COND(p_idx<0); @@ -255,6 +318,8 @@ void GraphNode::set_slot(int p_idx,bool p_enable_left,int p_type_left,const Colo s.enable_right=p_enable_right; s.type_right=p_type_right; s.color_right=p_color_right; + s.custom_slot_left=p_custom_left; + s.custom_slot_right=p_custom_right; slot_info[p_idx]=s; update(); connpos_dirty=true; @@ -559,18 +624,99 @@ Color GraphNode::get_connection_output_color(int p_idx) { void GraphNode::_input_event(const InputEvent& p_ev) { if (p_ev.type==InputEvent::MOUSE_BUTTON) { - get_parent_control()->grab_focus(); + + ERR_EXPLAIN("GraphNode must be the child of a GraphEdit node."); + ERR_FAIL_COND(get_parent_control() == NULL); + + print_line("INPUT EVENT BUTTON"); + if(p_ev.mouse_button.pressed && p_ev.mouse_button.button_index==BUTTON_LEFT) { Vector2 mpos = Vector2(p_ev.mouse_button.x,p_ev.mouse_button.y); if (close_rect.size!=Size2() && close_rect.has_point(mpos)) { emit_signal("close_request"); + accept_event(); return; } + + Ref<Texture> resizer =get_icon("resizer"); + + if (resizeable && mpos.x > get_size().x-resizer->get_width() && mpos.y > get_size().y-resizer->get_height()) { + + resizing=true; + resizing_from=mpos; + resizing_from_size=get_size(); + accept_event(); + return; + } + + //send focus to parent emit_signal("raise_request"); + get_parent_control()->grab_focus(); + } + + if(!p_ev.mouse_button.pressed && p_ev.mouse_button.button_index==BUTTON_LEFT) { + resizing=false; + } + } + + if (resizing && p_ev.type==InputEvent::MOUSE_MOTION) { + Vector2 mpos = Vector2(p_ev.mouse_motion.x,p_ev.mouse_motion.y); + + Vector2 diff = mpos - resizing_from; + + emit_signal("resize_request",resizing_from_size+diff); + + } + + +} + +void GraphNode::set_modulate(const Color &p_color) { + + modulate=p_color; + update(); +} + +Color GraphNode::get_modulate() const{ + + return modulate; +} +void GraphNode::set_overlay(Overlay p_overlay) { + + overlay=p_overlay; + update(); +} + +GraphNode::Overlay GraphNode::get_overlay() const{ + + return overlay; +} + +void GraphNode::set_comment(bool p_enable) { + + comment=p_enable; + update(); +} + +bool GraphNode::is_comment() const{ + + return comment; +} + + +void GraphNode::set_resizeable(bool p_enable) { + + resizeable=p_enable; + update(); +} + +bool GraphNode::is_resizeable() const{ + + return resizeable; } @@ -580,7 +726,7 @@ void GraphNode::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_title"),&GraphNode::get_title); ObjectTypeDB::bind_method(_MD("_input_event"),&GraphNode::_input_event); - ObjectTypeDB::bind_method(_MD("set_slot","idx","enable_left","type_left","color_left","enable_right","type_right","color_right"),&GraphNode::set_slot); + ObjectTypeDB::bind_method(_MD("set_slot","idx","enable_left","type_left","color_left","enable_right","type_right","color_right","custom_left","custom_right"),&GraphNode::set_slot,DEFVAL(Ref<Texture>()),DEFVAL(Ref<Texture>())); ObjectTypeDB::bind_method(_MD("clear_slot","idx"),&GraphNode::clear_slot); ObjectTypeDB::bind_method(_MD("clear_all_slots","idx"),&GraphNode::clear_all_slots); ObjectTypeDB::bind_method(_MD("is_slot_enabled_left","idx"),&GraphNode::is_slot_enabled_left); @@ -593,6 +739,12 @@ void GraphNode::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_offset","offset"),&GraphNode::set_offset); ObjectTypeDB::bind_method(_MD("get_offset"),&GraphNode::get_offset); + ObjectTypeDB::bind_method(_MD("set_comment","comment"),&GraphNode::set_comment); + ObjectTypeDB::bind_method(_MD("is_comment"),&GraphNode::is_comment); + + ObjectTypeDB::bind_method(_MD("set_resizeable","resizeable"),&GraphNode::set_resizeable); + ObjectTypeDB::bind_method(_MD("is_resizeable"),&GraphNode::is_resizeable); + ObjectTypeDB::bind_method(_MD("get_connection_output_count"),&GraphNode::get_connection_output_count); ObjectTypeDB::bind_method(_MD("get_connection_input_count"),&GraphNode::get_connection_input_count); @@ -603,10 +755,15 @@ void GraphNode::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_connection_input_type","idx"),&GraphNode::get_connection_input_type); ObjectTypeDB::bind_method(_MD("get_connection_input_color","idx"),&GraphNode::get_connection_input_color); + ObjectTypeDB::bind_method(_MD("set_modulate","color"),&GraphNode::set_modulate); + ObjectTypeDB::bind_method(_MD("get_modulate"),&GraphNode::get_modulate); ObjectTypeDB::bind_method(_MD("set_show_close_button","show"),&GraphNode::set_show_close_button); ObjectTypeDB::bind_method(_MD("is_close_button_visible"),&GraphNode::is_close_button_visible); + ObjectTypeDB::bind_method(_MD("set_overlay","overlay"),&GraphNode::set_overlay); + ObjectTypeDB::bind_method(_MD("get_overlay"),&GraphNode::get_overlay); + ADD_PROPERTY( PropertyInfo(Variant::STRING,"title"),_SCS("set_title"),_SCS("get_title")); ADD_PROPERTY( PropertyInfo(Variant::BOOL,"show_close"),_SCS("set_show_close_button"),_SCS("is_close_button_visible")); @@ -614,10 +771,21 @@ void GraphNode::_bind_methods() { ADD_SIGNAL(MethodInfo("dragged",PropertyInfo(Variant::VECTOR2,"from"),PropertyInfo(Variant::VECTOR2,"to"))); ADD_SIGNAL(MethodInfo("raise_request")); ADD_SIGNAL(MethodInfo("close_request")); + ADD_SIGNAL(MethodInfo("resize_request",PropertyInfo(Variant::VECTOR2,"new_minsize"))); + + BIND_CONSTANT( OVERLAY_DISABLED ); + BIND_CONSTANT( OVERLAY_BREAKPOINT ); + BIND_CONSTANT( OVERLAY_POSITION ); } GraphNode::GraphNode() { + + overlay=OVERLAY_DISABLED; show_close=false; connpos_dirty=true; set_stop_mouse(false); + modulate=Color(1,1,1,1); + comment=false; + resizeable=false; + resizing=false; } diff --git a/scene/gui/graph_node.h b/scene/gui/graph_node.h index 5a50d0d68d..cbfd34f556 100644 --- a/scene/gui/graph_node.h +++ b/scene/gui/graph_node.h @@ -34,8 +34,14 @@ class GraphNode : public Container { OBJ_TYPE(GraphNode,Container); +public: - + enum Overlay { + OVERLAY_DISABLED, + OVERLAY_BREAKPOINT, + OVERLAY_POSITION + }; +private: struct Slot { bool enable_left; @@ -44,6 +50,8 @@ class GraphNode : public Container { bool enable_right; int type_right; Color color_right; + Ref<Texture> custom_slot_left; + Ref<Texture> custom_slot_right; Slot() { enable_left=false; type_left=0; color_left=Color(1,1,1,1); enable_right=false; type_right=0; color_right=Color(1,1,1,1); } @@ -52,6 +60,12 @@ class GraphNode : public Container { String title; bool show_close; Vector2 offset; + bool comment; + bool resizeable; + + bool resizing; + Vector2 resizing_from; + Vector2 resizing_from_size; Rect2 close_rect; @@ -75,6 +89,13 @@ class GraphNode : public Container { Vector2 drag_from; bool selected; + + Overlay overlay; + + Color modulate; + + bool has_point(const Point2& p_point) const; + protected: @@ -91,7 +112,7 @@ public: - void set_slot(int p_idx,bool p_enable_left,int p_type_left,const Color& p_color_left, bool p_enable_right,int p_type_right,const Color& p_color_right); + void set_slot(int p_idx,bool p_enable_left,int p_type_left,const Color& p_color_left, bool p_enable_right,int p_type_right,const Color& p_color_right,const Ref<Texture>& p_custom_left=Ref<Texture>(),const Ref<Texture>& p_custom_right=Ref<Texture>()); void clear_slot(int p_idx); void clear_all_slots(); bool is_slot_enabled_left(int p_idx) const; @@ -126,10 +147,25 @@ public: Color get_connection_output_color(int p_idx); + void set_modulate(const Color& p_color); + Color get_modulate() const; + + void set_overlay(Overlay p_overlay); + Overlay get_overlay() const; + + void set_comment(bool p_enable); + bool is_comment() const; + + void set_resizeable(bool p_enable); + bool is_resizeable() const; + virtual Size2 get_minimum_size() const; + bool is_resizing() const { return resizing; } + GraphNode(); }; +VARIANT_ENUM_CAST( GraphNode::Overlay ) #endif // GRAPH_NODE_H diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp index 105d919338..89cd509fbd 100644 --- a/scene/gui/item_list.cpp +++ b/scene/gui/item_list.cpp @@ -40,6 +40,7 @@ void ItemList::add_item(const String& p_item,const Ref<Texture>& p_texture,bool item.selectable=p_selectable; item.selected=false; item.disabled=false; + item.tooltip_enabled=true; item.custom_bg=Color(0,0,0,0); items.push_back(item); @@ -57,6 +58,7 @@ void ItemList::add_icon_item(const Ref<Texture>& p_item,bool p_selectable){ item.selectable=p_selectable; item.selected=false; item.disabled=false; + item.tooltip_enabled=true; item.custom_bg=Color(0,0,0,0); items.push_back(item); @@ -82,6 +84,16 @@ String ItemList::get_item_text(int p_idx) const{ } +void ItemList::set_item_tooltip_enabled(int p_idx, const bool p_enabled) { + ERR_FAIL_INDEX(p_idx,items.size()); + items[p_idx].tooltip_enabled = p_enabled; +} + +bool ItemList::is_item_tooltip_enabled(int p_idx) const { + ERR_FAIL_INDEX_V(p_idx,items.size(), false); + return items[p_idx].tooltip_enabled; +} + void ItemList::set_item_tooltip(int p_idx,const String& p_tooltip){ ERR_FAIL_INDEX(p_idx,items.size()); @@ -1198,6 +1210,9 @@ String ItemList::get_tooltip(const Point2& p_pos) const { int closest = get_item_at_pos(p_pos); if (closest!=-1) { + if (!items[closest].tooltip_enabled) { + return ""; + } if (items[closest].tooltip!="") { return items[closest].tooltip; } @@ -1294,6 +1309,9 @@ void ItemList::_bind_methods(){ ObjectTypeDB::bind_method(_MD("set_item_custom_bg_color","idx","custom_bg_color"),&ItemList::set_item_custom_bg_color); ObjectTypeDB::bind_method(_MD("get_item_custom_bg_color","idx"),&ItemList::get_item_custom_bg_color); + ObjectTypeDB::bind_method(_MD("set_item_tooltip_enabled","idx","enable"),&ItemList::set_item_tooltip_enabled); + ObjectTypeDB::bind_method(_MD("is_item_tooltip_enabled","idx"),&ItemList::is_item_tooltip_enabled); + ObjectTypeDB::bind_method(_MD("set_item_tooltip","idx","tooltip"),&ItemList::set_item_tooltip); ObjectTypeDB::bind_method(_MD("get_item_tooltip","idx"),&ItemList::get_item_tooltip); @@ -1340,6 +1358,8 @@ void ItemList::_bind_methods(){ ObjectTypeDB::bind_method(_MD("ensure_current_is_visible"),&ItemList::ensure_current_is_visible); + ObjectTypeDB::bind_method(_MD("get_v_scroll"),&ItemList::get_v_scroll); + ObjectTypeDB::bind_method(_MD("_scroll_changed"),&ItemList::_scroll_changed); ObjectTypeDB::bind_method(_MD("_input_event"),&ItemList::_input_event); diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h index e1902d1c1f..cb5908bc79 100644 --- a/scene/gui/item_list.h +++ b/scene/gui/item_list.h @@ -56,6 +56,7 @@ private: bool selectable; bool selected; bool disabled; + bool tooltip_enabled; Variant metadata; String tooltip; Color custom_bg; @@ -135,6 +136,9 @@ public: void set_item_tag_icon(int p_idx,const Ref<Texture>& p_tag_icon); Ref<Texture> get_item_tag_icon(int p_idx) const; + void set_item_tooltip_enabled(int p_idx, const bool p_enabled); + bool is_item_tooltip_enabled(int p_idx) const; + void set_item_tooltip(int p_idx,const String& p_tooltip); String get_item_tooltip(int p_idx) const; @@ -191,6 +195,8 @@ public: void set_icon_scale(real_t p_scale); real_t get_icon_scale() const; + VScrollBar *get_v_scroll() { return scroll_bar; } + ItemList(); ~ItemList(); }; diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp index 4c025e92df..ec89b7b690 100644 --- a/scene/gui/label.cpp +++ b/scene/gui/label.cpp @@ -334,7 +334,7 @@ int Label::get_longest_line_width() const { } } else { - int char_width=font->get_char_size(current).width; + int char_width=font->get_char_size(current,text[i+1]).width; line_width+=char_width; } @@ -454,7 +454,7 @@ void Label::regenerate_word_cache() { word_pos=i; } - char_width=font->get_char_size(current).width; + char_width=font->get_char_size(current,text[i+1]).width; current_word_size+=char_width; line_width+=char_width; total_char_cache++; diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 89c235e101..90a8af9238 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -193,8 +193,8 @@ void LineEdit::_input_event(InputEvent p_event) { } set_cursor_pos(0); - emit_signal("text_changed",text); - _change_notify("text"); + _text_changed(); + } @@ -215,8 +215,7 @@ void LineEdit::_input_event(InputEvent p_event) { selection_clear(); undo_text = text; text = text.substr(0,cursor_pos); - emit_signal("text_changed",text); - _change_notify("text"); + _text_changed(); } } break; @@ -468,16 +467,14 @@ void LineEdit::_input_event(InputEvent p_event) { if (handled) { accept_event(); - } else { + } else if (!k.mod.alt && !k.mod.command) { if (k.unicode>=32 && k.scancode!=KEY_DELETE) { if (editable) { selection_delete(); CharType ucodestr[2]={(CharType)k.unicode,0}; append_at_cursor(ucodestr); - emit_signal("text_changed",text); - _change_notify("text"); - + _text_changed(); accept_event(); } @@ -725,8 +722,7 @@ void LineEdit::paste_text() { if(selection.enabled) selection_delete(); append_at_cursor(paste_buffer); - emit_signal("text_changed",text); - _change_notify("text"); + _text_changed(); } @@ -750,9 +746,7 @@ void LineEdit::undo() { set_cursor_pos(old_cursor_pos); } - emit_signal("text_changed",text); - _change_notify("text"); - + _text_changed(); } void LineEdit::shift_selection_check_pre(bool p_shift) { @@ -806,16 +800,6 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) { pixel_ofs+=char_w; if (pixel_ofs > p_x) { //found what we look for - - - if ( (pixel_ofs-p_x) < (char_w >> 1 ) ) { - - ofs+=1; - } else if ( (pixel_ofs-p_x) > (char_w >> 1 ) ) { - - ofs-=1; - } - break; } @@ -891,8 +875,7 @@ void LineEdit::delete_char() { // set_window_pos(cursor_pos-get_window_length()); } - emit_signal("text_changed",text); - _change_notify("text"); + _text_changed(); } void LineEdit::delete_text(int p_from_column, int p_to_column) { @@ -924,8 +907,7 @@ void LineEdit::delete_text(int p_from_column, int p_to_column) { window_pos=cursor_pos; } - emit_signal("text_changed",text); - _change_notify("text"); + _text_changed(); } void LineEdit::set_text(String p_text) { @@ -940,8 +922,7 @@ void LineEdit::set_text(String p_text) { void LineEdit::clear() { clear_internal(); - emit_signal("text_changed",text); - _change_notify("text"); + _text_changed(); } String LineEdit::get_text() const { @@ -1080,7 +1061,17 @@ Size2 LineEdit::get_minimum_size() const { Size2 min=style->get_minimum_size(); min.height+=font->get_height(); - min.width+=get_constant("minimum_spaces")*font->get_char_size(' ').x; + + //minimum size of text + int space_size = font->get_char_size(' ').x; + int mstext = get_constant("minimum_spaces")*space_size; + + if (expand_to_text_length) { + mstext=MAX(mstext,font->get_string_size(text).x+space_size); //add a spce because some fonts are too exact + } + + min.width+=mstext; + return min; } @@ -1236,6 +1227,29 @@ PopupMenu *LineEdit::get_menu() const { } #endif + +void LineEdit::set_expand_to_text_length(bool p_enabled) { + + expand_to_text_length = p_enabled; + minimum_size_changed(); +} + +bool LineEdit::get_expand_to_text_length() const{ + + return expand_to_text_length; +} + + +void LineEdit::_text_changed() { + + if (expand_to_text_length) + minimum_size_changed(); + + emit_signal("text_changed",text); + _change_notify("text"); + +} + void LineEdit::_bind_methods() { ObjectTypeDB::bind_method(_MD("_toggle_draw_caret"),&LineEdit::_toggle_draw_caret); @@ -1258,7 +1272,9 @@ void LineEdit::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_placeholder_alpha"),&LineEdit::get_placeholder_alpha); ObjectTypeDB::bind_method(_MD("set_cursor_pos","pos"),&LineEdit::set_cursor_pos); ObjectTypeDB::bind_method(_MD("get_cursor_pos"),&LineEdit::get_cursor_pos); - ObjectTypeDB::bind_method(_MD("cursor_set_blink_enabled", "enable"),&LineEdit::cursor_set_blink_enabled); + ObjectTypeDB::bind_method(_MD("set_expand_to_text_length","enabled"),&LineEdit::set_expand_to_text_length); + ObjectTypeDB::bind_method(_MD("get_expand_to_text_length"),&LineEdit::get_expand_to_text_length); + ObjectTypeDB::bind_method(_MD("cursor_set_blink_enabled", "enabled"),&LineEdit::cursor_set_blink_enabled); ObjectTypeDB::bind_method(_MD("cursor_get_blink_enabled"),&LineEdit::cursor_get_blink_enabled); ObjectTypeDB::bind_method(_MD("cursor_set_blink_speed", "blink_speed"),&LineEdit::cursor_set_blink_speed); ObjectTypeDB::bind_method(_MD("cursor_get_blink_speed"),&LineEdit::cursor_get_blink_speed); @@ -1296,6 +1312,7 @@ void LineEdit::_bind_methods() { ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "max_length" ), _SCS("set_max_length"),_SCS("get_max_length") ); ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "editable" ), _SCS("set_editable"),_SCS("is_editable") ); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "secret" ), _SCS("set_secret"),_SCS("is_secret") ); + ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "expand_to_len" ), _SCS("set_expand_to_text_length"),_SCS("get_expand_to_text_length") ); ADD_PROPERTY( PropertyInfo( Variant::INT,"focus_mode", PROPERTY_HINT_ENUM, "None,Click,All" ), _SCS("set_focus_mode"), _SCS("get_focus_mode") ); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret/caret_blink"), _SCS("cursor_set_blink_enabled"), _SCS("cursor_get_blink_enabled"));; ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "caret/caret_blink_speed",PROPERTY_HINT_RANGE,"0.1,10,0.1"), _SCS("cursor_set_blink_speed"),_SCS("cursor_get_blink_speed") ); @@ -1337,7 +1354,7 @@ LineEdit::LineEdit() { menu->add_separator(); menu->add_item(TTR("Undo"),MENU_UNDO,KEY_MASK_CMD|KEY_Z); menu->connect("item_pressed",this,"menu_option"); - + expand_to_text_length=false; } diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h index 112e4ad55e..47d5706bbe 100644 --- a/scene/gui/line_edit.h +++ b/scene/gui/line_edit.h @@ -90,6 +90,11 @@ private: } selection; Timer *caret_blink_timer; + + + void _text_changed(); + bool expand_to_text_length; + bool caret_blink_enabled; bool draw_caret; bool window_has_focus; @@ -169,6 +174,9 @@ public: virtual Size2 get_minimum_size() const; + void set_expand_to_text_length(bool p_len); + bool get_expand_to_text_length() const; + virtual bool is_text_field() const; LineEdit(); ~LineEdit(); diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp index 190e8e141f..0fa2856ca4 100644 --- a/scene/gui/scroll_container.cpp +++ b/scene/gui/scroll_container.cpp @@ -228,14 +228,14 @@ void ScrollContainer::_notification(int p_what) { child_max_size.y = MAX(child_max_size.y, minsize.y); Rect2 r = Rect2(-scroll,minsize); - if (!scroll_h) { + if (!h_scroll->is_visible()) { r.pos.x=0; if (c->get_h_size_flags()&SIZE_EXPAND) r.size.width=MAX(size.width,minsize.width); else r.size.width=minsize.width; } - if (!scroll_v) { + if (!v_scroll->is_visible()) { r.pos.y=0; r.size.height=size.height; if (c->get_v_size_flags()&SIZE_EXPAND) diff --git a/scene/gui/slider.cpp b/scene/gui/slider.cpp index d5d14ad649..3b9ca40bd8 100644 --- a/scene/gui/slider.cpp +++ b/scene/gui/slider.cpp @@ -47,12 +47,15 @@ void Slider::_input_event(InputEvent p_event) { if (mb.button_index==BUTTON_LEFT) { if (mb.pressed) { + Ref<Texture> grabber = get_icon(mouse_inside||has_focus()?"grabber_hilite":"grabber"); grab.pos=orientation==VERTICAL?mb.y:mb.x; - double max = orientation==VERTICAL ? get_size().height : get_size().width ; + double grab_width = (double)grabber->get_size().width; + double grab_height = (double)grabber->get_size().height; + double max = orientation==VERTICAL ? get_size().height - grab_height : get_size().width - grab_width; if (orientation==VERTICAL) - set_unit_value( 1 - ((double)grab.pos / max) ); + set_unit_value( 1 - (((double)grab.pos - (grab_height / 2.0)) / max) ); else - set_unit_value((double)grab.pos / max); + set_unit_value(((double)grab.pos - (grab_width/2.0)) / max); grab.active=true; grab.uvalue=get_unit_value(); } else { diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp index 2b64d36a81..98e1a32aef 100644 --- a/scene/gui/spin_box.cpp +++ b/scene/gui/spin_box.cpp @@ -39,7 +39,7 @@ Size2 SpinBox::get_minimum_size() const { void SpinBox::_value_changed(double) { - String value = String::num(get_val(),Math::decimals(get_step())); + String value = String::num(get_val(),Math::step_decimals(get_step())); if (prefix!="") value=prefix+" "+value; if (suffix!="") diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp index 0e0339c488..8557500488 100644 --- a/scene/gui/tab_container.cpp +++ b/scene/gui/tab_container.cpp @@ -400,6 +400,7 @@ void TabContainer::_child_renamed_callback() { void TabContainer::add_child_notify(Node *p_child) { + Control::add_child_notify(p_child); Control *c = p_child->cast_to<Control>(); if (!c) @@ -532,6 +533,8 @@ Control* TabContainer::get_current_tab_control() const { void TabContainer::remove_child_notify(Node *p_child) { + Control::remove_child_notify(p_child); + int tc = get_tab_count(); if (current==tc-1) { current--; diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 50b44c55a9..4756fdee26 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -1768,7 +1768,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) { return; } - if (k.scancode==KEY_RETURN || k.scancode==KEY_TAB) { + if (k.scancode==KEY_ENTER || k.scancode==KEY_RETURN || k.scancode==KEY_TAB) { _confirm_completion(); accept_event(); @@ -2993,6 +2993,34 @@ void TextEdit::adjust_viewport_to_cursor() { } +void TextEdit::center_viewport_to_cursor() { + + if (cursor.line_ofs>cursor.line) + cursor.line_ofs=cursor.line; + + int visible_width=cache.size.width-cache.style_normal->get_minimum_size().width-cache.line_number_w-cache.breakpoint_gutter_width; + if (v_scroll->is_visible()) + visible_width-=v_scroll->get_combined_minimum_size().width; + visible_width-=20; // give it a little more space + + int visible_rows = get_visible_rows(); + if (h_scroll->is_visible()) + visible_rows-=((h_scroll->get_combined_minimum_size().height-1)/get_row_height()); + + int max_ofs = text.size()-(scroll_past_end_of_file_enabled?1:visible_rows); + cursor.line_ofs=CLAMP(cursor.line-(visible_rows/2),0,max_ofs); + + int cursor_x = get_column_x_offset( cursor.column, text[cursor.line] ); + + if (cursor_x>(cursor.x_ofs+visible_width)) + cursor.x_ofs=cursor_x-visible_width+1; + + if (cursor_x < cursor.x_ofs) + cursor.x_ofs=cursor_x; + + update(); +} + void TextEdit::cursor_set_column(int p_col, bool p_adjust_viewport) { if (p_col<0) @@ -4480,6 +4508,7 @@ void TextEdit::_bind_methods() { ObjectTypeDB::bind_method(_MD("menu_option"),&TextEdit::menu_option); ObjectTypeDB::bind_method(_MD("get_menu:PopupMenu"),&TextEdit::get_menu); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "syntax_highlighting"), _SCS("set_syntax_coloring"), _SCS("is_syntax_coloring_enabled")); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "show_line_numbers"), _SCS("set_show_line_numbers"), _SCS("is_show_line_numbers_enabled")); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "highlight_all_occurrences"), _SCS("set_highlight_all_occurrences"), _SCS("is_highlight_all_occurrences_enabled")); diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index 65e9615911..f0301fc250 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -396,6 +396,8 @@ public: } void set_auto_indent(bool p_auto_indent); + void center_viewport_to_cursor(); + void cursor_set_column(int p_col, bool p_adjust_viewport=true); void cursor_set_line(int p_row, bool p_adjust_viewport=true); @@ -436,7 +438,7 @@ public: bool is_highlight_all_occurrences_enabled() const; bool is_selection_active() const; int get_selection_from_line() const; - int get_selection_from_column() const; + int get_selection_from_column() const; int get_selection_to_line() const; int get_selection_to_column() const; String get_selection_text() const; @@ -494,7 +496,7 @@ public: String get_text_for_completion(); - virtual bool is_text_field() const; + virtual bool is_text_field() const; TextEdit(); ~TextEdit(); }; diff --git a/scene/gui/texture_progress.cpp b/scene/gui/texture_progress.cpp index 923a35031c..2c576b6ba5 100644 --- a/scene/gui/texture_progress.cpp +++ b/scene/gui/texture_progress.cpp @@ -297,6 +297,7 @@ void TextureProgress::_bind_methods() { TextureProgress::TextureProgress() { mode=FILL_LEFT_TO_RIGHT; + rad_init_angle=0; rad_center_off=Point2(); rad_max_degrees=360; } diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 82459ba0ab..20794b2faa 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -171,6 +171,21 @@ String TreeItem::get_text(int p_column) const { } +void TreeItem::set_suffix(int p_column,String p_suffix) { + + ERR_FAIL_INDEX( p_column, cells.size() ); + cells[p_column].suffix=p_suffix; + + _changed_notify(p_column); + +} + +String TreeItem::get_suffix(int p_column) const { + + ERR_FAIL_INDEX_V( p_column, cells.size(), "" ); + return cells[p_column].suffix; + +} void TreeItem::set_icon(int p_column,const Ref<Texture>& p_icon) { @@ -927,8 +942,12 @@ void Tree::draw_item_rect(const TreeItem::Cell& p_cell,const Rect2i& p_rect,cons Ref<Font> font = cache.font; + String text = p_cell.text; + if (p_cell.suffix!=String()) + text+=" "+p_cell.suffix; + rect.pos.y+=Math::floor((rect.size.y-font->get_height())/2.0) +font->get_ascent(); - font->draw(ci,rect.pos,p_cell.text,p_color,rect.size.x); + font->draw(ci,rect.pos,text,p_color,rect.size.x); } @@ -1072,11 +1091,21 @@ int Tree::draw_item(const Point2i& p_pos,const Point2& p_draw_ofs, const Size2& if (p_item->cells[i].selected && select_mode!=SELECT_ROW) { Rect2i r(item_rect.pos,item_rect.size); + if (p_item->cells[i].text.size() > 0){ + float icon_width = p_item->cells[i].get_icon_size().width; + r.pos.x += icon_width; + r.size.x -= icon_width; + } //r.grow(cache.selected->get_margin(MARGIN_LEFT)); - if (has_focus()) + if (has_focus()){ cache.selected_focus->draw(ci,r ); - else + p_item->set_meta("__focus_rect", Rect2(r.pos,r.size)); + } else { cache.selected->draw(ci,r ); + } + if (text_editor->is_visible()){ + text_editor->set_pos(get_global_pos() + r.pos); + } } if (p_item->cells[i].custom_bg_color) { @@ -1165,6 +1194,9 @@ int Tree::draw_item(const Point2i& p_pos,const Point2& p_draw_ofs, const Size2& String s = p_item->cells[i].text; s=s.get_slicec(',',option); + if (p_item->cells[i].suffix!=String()) + s+=" "+p_item->cells[i].suffix; + Ref<Texture> downarrow = cache.select_arrow; font->draw(ci, text_pos, s, col,item_rect.size.x-downarrow->get_width() ); @@ -1179,8 +1211,12 @@ int Tree::draw_item(const Point2i& p_pos,const Point2& p_draw_ofs, const Size2& Ref<Texture> updown = cache.updown; - //String valtext = String::num( p_item->cells[i].val, Math::decimals( p_item->cells[i].step ) ); - String valtext = rtos( p_item->cells[i].val ); + String valtext = String::num( p_item->cells[i].val, Math::step_decimals( p_item->cells[i].step ) ); + //String valtext = rtos( p_item->cells[i].val ); + + if (p_item->cells[i].suffix!=String()) + valtext+=" "+p_item->cells[i].suffix; + font->draw( ci, text_pos, valtext, col, item_rect.size.x-updown->get_width()); if (!p_item->cells[i].editable) @@ -1746,7 +1782,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos,int x_ofs,int y_ofs,bool p_ } else { - editor_text=String::num( p_item->cells[col].val, Math::decimals( p_item->cells[col].step ) ); + editor_text=String::num( p_item->cells[col].val, Math::step_decimals( p_item->cells[col].step ) ); if (select_mode==SELECT_MULTI && get_tree()->get_last_event_id() == focus_in_id) bring_up_editor=false; @@ -2328,9 +2364,22 @@ void Tree::_input_event(InputEvent p_event) { range_drag_enabled=false; Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE); warp_mouse(range_drag_capture_pos); - } else - edit_selected(); + } else { + if (delayed_text_editor) { + uint64_t diff = OS::get_singleton()->get_ticks_msec() - first_selection_time; + if (diff >= 400 && diff <= 800) + edit_selected(); + // fast double click + else if (diff < 400) { + emit_signal("item_double_clicked"); + } + + first_selection_time = OS::get_singleton()->get_ticks_msec(); + } else { + edit_selected(); + } + } pressing_for_editor=false; } @@ -2468,16 +2517,7 @@ bool Tree::edit_selected() { if (!s->cells[col].editable) return false; - Rect2 rect; - rect.pos.y = get_item_offset(s) - get_scroll().y; - - for(int i=0;i<col;i++) { - - rect.pos.x+=get_column_width(i); - } - - rect.size.width=get_column_width(col); - rect.size.height=compute_item_height(s)+cache.vseparation; + Rect2 rect = s->get_meta("__focus_rect"); popup_edited_item=s; popup_edited_item_col=col; @@ -2521,7 +2561,7 @@ bool Tree::edit_selected() { text_editor->set_pos( textedpos ); text_editor->set_size( rect.size); text_editor->clear(); - text_editor->set_text( c.mode==TreeItem::CELL_MODE_STRING?c.text:rtos(c.val) ); + text_editor->set_text( c.mode==TreeItem::CELL_MODE_STRING?c.text:String::num( c.val, Math::step_decimals( c.step ) ) ); text_editor->select_all(); if (c.mode==TreeItem::CELL_MODE_RANGE || c.mode==TreeItem::CELL_MODE_RANGE_EXPRESSION ) { @@ -2848,7 +2888,6 @@ void Tree::item_changed(int p_column,TreeItem *p_item) { void Tree::item_selected(int p_column,TreeItem *p_item) { - if (select_mode==SELECT_MULTI) { if (!p_item->cells[p_column].selectable) @@ -2856,8 +2895,11 @@ void Tree::item_selected(int p_column,TreeItem *p_item) { p_item->cells[p_column].selected=true; //emit_signal("multi_selected",p_item,p_column,true); - NO this is for TreeItem::select + if (delayed_text_editor) + first_selection_time = OS::get_singleton()->get_ticks_msec(); } else { + select_single_item(p_item,root,p_column); } update(); @@ -3128,7 +3170,7 @@ void Tree::ensure_cursor_is_visible() { int screenh=get_size().height-h_scroll->get_combined_minimum_size().height; if (ofs+h>v_scroll->get_val()+screenh) - v_scroll->set_val(ofs-screenh+h); + v_scroll->call_deferred("set_val", ofs-screenh+h); else if (ofs < v_scroll->get_val()) v_scroll->set_val(ofs); } @@ -3503,6 +3545,16 @@ bool Tree::get_allow_rmb_select() const{ return allow_rmb_select; } + +void Tree::set_delayed_text_editor(bool enabled) { + delayed_text_editor = enabled; +} + +bool Tree::is_delayed_text_editor_enabled() const { + return delayed_text_editor; +} + + void Tree::_bind_methods() { ObjectTypeDB::bind_method(_MD("_range_click_timeout"),&Tree::_range_click_timeout); @@ -3556,6 +3608,9 @@ void Tree::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_allow_rmb_select","allow"),&Tree::set_allow_rmb_select); ObjectTypeDB::bind_method(_MD("get_allow_rmb_select"),&Tree::get_allow_rmb_select); + ObjectTypeDB::bind_method(_MD("set_delayed_text_editor","enable"),&Tree::set_delayed_text_editor); + ObjectTypeDB::bind_method(_MD("is_delayed_text_editor_enabled"),&Tree::is_delayed_text_editor_enabled); + ObjectTypeDB::bind_method(_MD("set_single_select_cell_editing_only_when_already_selected","enable"),&Tree::set_single_select_cell_editing_only_when_already_selected); ObjectTypeDB::bind_method(_MD("get_single_select_cell_editing_only_when_already_selected"),&Tree::get_single_select_cell_editing_only_when_already_selected); @@ -3566,6 +3621,7 @@ void Tree::_bind_methods() { ADD_SIGNAL( MethodInfo("item_rmb_selected",PropertyInfo(Variant::VECTOR2,"pos"))); ADD_SIGNAL( MethodInfo("empty_tree_rmb_selected",PropertyInfo(Variant::VECTOR2,"pos"))); ADD_SIGNAL( MethodInfo("item_edited")); + ADD_SIGNAL( MethodInfo("item_double_clicked")); ADD_SIGNAL( MethodInfo("item_collapsed",PropertyInfo(Variant::OBJECT,"item"))); //ADD_SIGNAL( MethodInfo("item_doubleclicked" ) ); ADD_SIGNAL( MethodInfo("button_pressed",PropertyInfo(Variant::OBJECT,"item"),PropertyInfo(Variant::INT,"column"),PropertyInfo(Variant::INT,"id"))); @@ -3669,6 +3725,9 @@ Tree::Tree() { force_select_on_already_selected=false; allow_rmb_select=false; + + first_selection_time = 0; + delayed_text_editor = false; } diff --git a/scene/gui/tree.h b/scene/gui/tree.h index f5100ab5b6..2124dce749 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -69,6 +69,7 @@ friend class Tree; Ref<Texture> icon; Rect2i icon_region; String text; + String suffix; double min,max,step,val; int icon_max_w; bool expr; @@ -168,6 +169,9 @@ public: void set_text(int p_column,String p_text); String get_text(int p_column) const; + void set_suffix(int p_column,String p_suffix); + String get_suffix(int p_column) const; + void set_icon(int p_column,const Ref<Texture>& p_icon); Ref<Texture> get_icon(int p_column) const; @@ -433,6 +437,9 @@ friend class TreeItem; float last_drag_time; float time_since_motion;*/ + bool delayed_text_editor; + uint64_t first_selection_time; + float drag_speed; float drag_from; float drag_accum; @@ -527,6 +534,9 @@ public: void set_value_evaluator(ValueEvaluator *p_evaluator); + void set_delayed_text_editor(bool enabled); + bool is_delayed_text_editor_enabled() const; + Tree(); ~Tree(); diff --git a/scene/main/http_request.cpp b/scene/main/http_request.cpp index 040d509286..c713b5e4dc 100644 --- a/scene/main/http_request.cpp +++ b/scene/main/http_request.cpp @@ -96,7 +96,7 @@ Error HTTPRequest::_parse_url(const String& p_url) { return OK; } -Error HTTPRequest::request(const String& p_url, const Vector<String>& p_custom_headers, bool p_ssl_validate_domain) { +Error HTTPRequest::request(const String& p_url, const Vector<String>& p_custom_headers, bool p_ssl_validate_domain, HTTPClient::Method p_method, const String& p_request_data) { ERR_FAIL_COND_V(!is_inside_tree(),ERR_UNCONFIGURED); if ( requesting ) { @@ -104,13 +104,20 @@ Error HTTPRequest::request(const String& p_url, const Vector<String>& p_custom_h ERR_FAIL_V(ERR_BUSY); } + method=p_method; + Error err = _parse_url(p_url); + if (err) + return err; + validate_ssl=p_ssl_validate_domain; bool has_user_agent=false; bool has_accept=false; headers=p_custom_headers; + request_data = p_request_data; + for(int i=0;i<headers.size();i++) { if (headers[i].findn("user-agent:")==0) @@ -127,19 +134,52 @@ Error HTTPRequest::request(const String& p_url, const Vector<String>& p_custom_h headers.push_back("Accept: */*"); } + requesting=true; + + if (use_threads) { - err = _request(); + thread_done=false; + thread_request_quit=false; + client->set_blocking_mode(true); + thread=Thread::create(_thread_func,this); + } else { + client->set_blocking_mode(false); + err = _request(); + if (err!=OK) { + call_deferred("_request_done",RESULT_CANT_CONNECT,0,StringArray(),ByteArray()); + return ERR_CANT_CONNECT; + } - if (err==OK) { set_process(true); - requesting=true; + } - return err; + return OK; } +void HTTPRequest::_thread_func(void *p_userdata) { + + HTTPRequest *hr = (HTTPRequest*)p_userdata; + + Error err = hr->_request(); + + if (err!=OK) { + hr->call_deferred("_request_done",RESULT_CANT_CONNECT,0,StringArray(),ByteArray()); + } else { + while(!hr->thread_request_quit) { + + bool exit = hr->_update_connection(); + if (exit) + break; + OS::get_singleton()->delay_usec(1); + } + } + + hr->thread_done=true; +} + void HTTPRequest::cancel_request() { if (!requesting) @@ -147,6 +187,11 @@ void HTTPRequest::cancel_request() { if (!use_threads) { set_process(false); + } else { + thread_request_quit=true; + Thread::wait_to_finish(thread); + memdelete(thread); + thread=NULL; } if (file) { @@ -167,7 +212,7 @@ void HTTPRequest::cancel_request() { bool HTTPRequest::_handle_response(bool *ret_value) { if (!client->has_response()) { - call_deferred("emit_signal","request_completed",RESULT_NO_RESPONSE,0,StringArray(),ByteArray()); + call_deferred("_request_done",RESULT_NO_RESPONSE,0,StringArray(),ByteArray()); *ret_value=true; return true; } @@ -187,7 +232,7 @@ bool HTTPRequest::_handle_response(bool *ret_value) { //redirect if (max_redirects>=0 && redirections>=max_redirects) { - call_deferred("emit_signal","request_completed",RESULT_REDIRECT_LIMIT_REACHED,response_code,response_headers,ByteArray()); + call_deferred("_request_done",RESULT_REDIRECT_LIMIT_REACHED,response_code,response_headers,ByteArray()); *ret_value=true; return true; } @@ -239,6 +284,7 @@ bool HTTPRequest::_update_connection() { switch( client->get_status() ) { case HTTPClient::STATUS_DISCONNECTED: { + call_deferred("_request_done",RESULT_CANT_CONNECT,0,StringArray(),ByteArray()); return true; //end it, since it's doing something } break; case HTTPClient::STATUS_RESOLVING: { @@ -247,7 +293,7 @@ bool HTTPRequest::_update_connection() { return false; } break; case HTTPClient::STATUS_CANT_RESOLVE: { - call_deferred("emit_signal","request_completed",RESULT_CANT_RESOLVE,0,StringArray(),ByteArray()); + call_deferred("_request_done",RESULT_CANT_RESOLVE,0,StringArray(),ByteArray()); return true; } break; @@ -258,7 +304,7 @@ bool HTTPRequest::_update_connection() { } break; //connecting to ip case HTTPClient::STATUS_CANT_CONNECT: { - call_deferred("emit_signal","request_completed",RESULT_CANT_CONNECT,0,StringArray(),ByteArray()); + call_deferred("_request_done",RESULT_CANT_CONNECT,0,StringArray(),ByteArray()); return true; } break; @@ -276,25 +322,25 @@ bool HTTPRequest::_update_connection() { return ret_value; - call_deferred("emit_signal","request_completed",RESULT_SUCCESS,response_code,response_headers,ByteArray()); + call_deferred("_request_done",RESULT_SUCCESS,response_code,response_headers,ByteArray()); return true; } if (got_response && body_len<0) { //chunked transfer is done - call_deferred("emit_signal","request_completed",RESULT_SUCCESS,response_code,response_headers,body); + call_deferred("_request_done",RESULT_SUCCESS,response_code,response_headers,body); return true; } - call_deferred("emit_signal","request_completed",RESULT_CHUNKED_BODY_SIZE_MISMATCH,response_code,response_headers,ByteArray()); + call_deferred("_request_done",RESULT_CHUNKED_BODY_SIZE_MISMATCH,response_code,response_headers,ByteArray()); return true; //request migh have been done } else { //did not request yet, do request - Error err = client->request(HTTPClient::METHOD_GET,request_string,headers); + Error err = client->request(method,request_string,headers,request_data); if (err!=OK) { - call_deferred("emit_signal","request_completed",RESULT_CONNECTION_ERROR,0,StringArray(),ByteArray()); + call_deferred("_request_done",RESULT_CONNECTION_ERROR,0,StringArray(),ByteArray()); return true; } @@ -320,7 +366,7 @@ bool HTTPRequest::_update_connection() { if (!client->is_response_chunked() && client->get_response_body_length()==0) { - call_deferred("emit_signal","request_completed",RESULT_SUCCESS,response_code,response_headers,ByteArray()); + call_deferred("_request_done",RESULT_SUCCESS,response_code,response_headers,ByteArray()); return true; } @@ -331,7 +377,7 @@ bool HTTPRequest::_update_connection() { body_len=client->get_response_body_length(); if (body_size_limit>=0 && body_len>body_size_limit) { - call_deferred("emit_signal","request_completed",RESULT_BODY_SIZE_LIMIT_EXCEEDED,response_code,response_headers,ByteArray()); + call_deferred("_request_done",RESULT_BODY_SIZE_LIMIT_EXCEEDED,response_code,response_headers,ByteArray()); return true; } } @@ -340,7 +386,8 @@ bool HTTPRequest::_update_connection() { file=FileAccess::open(download_to_file,FileAccess::WRITE); if (!file) { - call_deferred("emit_signal","request_completed",RESULT_DOWNLOAD_FILE_CANT_OPEN,response_code,response_headers,ByteArray()); + call_deferred("_request_done",RESULT_DOWNLOAD_FILE_CANT_OPEN,response_code,response_headers,ByteArray()); + return true; } } } @@ -356,7 +403,7 @@ bool HTTPRequest::_update_connection() { ByteArray::Read r=chunk.read(); file->store_buffer(r.ptr(),chunk.size()); if (file->get_error()!=OK) { - call_deferred("emit_signal","request_completed",RESULT_DOWNLOAD_FILE_WRITE_ERROR,response_code,response_headers,ByteArray()); + call_deferred("_request_done",RESULT_DOWNLOAD_FILE_WRITE_ERROR,response_code,response_headers,ByteArray()); return true; } } else { @@ -364,18 +411,18 @@ bool HTTPRequest::_update_connection() { } if (body_size_limit>=0 && downloaded>body_size_limit) { - call_deferred("emit_signal","request_completed",RESULT_BODY_SIZE_LIMIT_EXCEEDED,response_code,response_headers,ByteArray()); + call_deferred("_request_done",RESULT_BODY_SIZE_LIMIT_EXCEEDED,response_code,response_headers,ByteArray()); return true; } if (body_len>=0) { if (downloaded==body_len) { - call_deferred("emit_signal","request_completed",RESULT_SUCCESS,response_code,response_headers,body); + call_deferred("_request_done",RESULT_SUCCESS,response_code,response_headers,body); return true; } /*if (body.size()>=body_len) { - call_deferred("emit_signal","request_completed",RESULT_BODY_SIZE_MISMATCH,response_code,response_headers,ByteArray()); + call_deferred("_request_done",RESULT_BODY_SIZE_MISMATCH,response_code,response_headers,ByteArray()); return true; }*/ } @@ -384,11 +431,11 @@ bool HTTPRequest::_update_connection() { } break; // request resulted in body: { } break which must be read case HTTPClient::STATUS_CONNECTION_ERROR: { - call_deferred("emit_signal","request_completed",RESULT_CONNECTION_ERROR,0,StringArray(),ByteArray()); + call_deferred("_request_done",RESULT_CONNECTION_ERROR,0,StringArray(),ByteArray()); return true; } break; case HTTPClient::STATUS_SSL_HANDSHAKE_ERROR: { - call_deferred("emit_signal","request_completed",RESULT_SSL_HANDSHAKE_ERROR,0,StringArray(),ByteArray()); + call_deferred("_request_done",RESULT_SSL_HANDSHAKE_ERROR,0,StringArray(),ByteArray()); return true; } break; @@ -397,17 +444,35 @@ bool HTTPRequest::_update_connection() { ERR_FAIL_V(false); } + +void HTTPRequest::_request_done(int p_status, int p_code, const StringArray& headers, const ByteArray& p_data) { + + + cancel_request(); + emit_signal("request_completed",p_status,p_code,headers,p_data); +} + + void HTTPRequest::_notification(int p_what) { if (p_what==NOTIFICATION_PROCESS) { + if (use_threads) + return; bool done = _update_connection(); if (done) { set_process(false); + //cancel_request(); called from _request done now + } + } + + if (p_what==NOTIFICATION_EXIT_TREE) { + if (requesting) { cancel_request(); } } + } void HTTPRequest::set_use_threads(bool p_use) { @@ -470,7 +535,7 @@ int HTTPRequest::get_body_size() const{ void HTTPRequest::_bind_methods() { - ObjectTypeDB::bind_method(_MD("request","url","custom_headers","ssl_validate_domain"),&HTTPRequest::request,DEFVAL(StringArray()),DEFVAL(true)); + ObjectTypeDB::bind_method(_MD("request","url","custom_headers","ssl_validate_domain","method","request_data"),&HTTPRequest::request,DEFVAL(StringArray()),DEFVAL(true),DEFVAL(HTTPClient::METHOD_GET),DEFVAL(String())); ObjectTypeDB::bind_method(_MD("cancel_request"),&HTTPRequest::cancel_request); ObjectTypeDB::bind_method(_MD("get_http_client_status"),&HTTPRequest::get_http_client_status); @@ -491,6 +556,7 @@ void HTTPRequest::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_body_size"),&HTTPRequest::get_body_size); ObjectTypeDB::bind_method(_MD("_redirect_request"),&HTTPRequest::_redirect_request); + ObjectTypeDB::bind_method(_MD("_request_done"),&HTTPRequest::_request_done); ADD_PROPERTY(PropertyInfo(Variant::BOOL,"use_threads"),_SCS("set_use_threads"),_SCS("is_using_threads")); ADD_PROPERTY(PropertyInfo(Variant::INT,"body_size_limit",PROPERTY_HINT_RANGE,"-1,2000000000"),_SCS("set_body_size_limit"),_SCS("get_body_size_limit")); @@ -517,6 +583,7 @@ void HTTPRequest::_bind_methods() { HTTPRequest::HTTPRequest() { + thread=NULL; port=80; redirections=0; @@ -530,6 +597,7 @@ HTTPRequest::HTTPRequest() requesting=false; client.instance(); use_threads=false; + thread_done=false; body_size_limit=-1; file=NULL; status=HTTPClient::STATUS_DISCONNECTED; diff --git a/scene/main/http_request.h b/scene/main/http_request.h index 7c3ccb2eb9..705799f044 100644 --- a/scene/main/http_request.h +++ b/scene/main/http_request.h @@ -32,6 +32,7 @@ #include "node.h" #include "io/http_client.h" #include "os/file_access.h" +#include "os/thread.h" class HTTPRequest : public Node { @@ -65,11 +66,13 @@ private: Vector<String> headers; bool validate_ssl; bool use_ssl; + HTTPClient::Method method; + String request_data; bool request_sent; Ref<HTTPClient> client; ByteArray body; - bool use_threads; + volatile bool use_threads; bool got_response; int response_code; @@ -80,7 +83,7 @@ private: FileAccess *file; int body_len; - int downloaded; + volatile int downloaded; int body_size_limit; int redirections; @@ -93,11 +96,19 @@ private: void _redirect_request(const String& p_new_url); + bool _handle_response(bool *ret_value); Error _parse_url(const String& p_url); Error _request(); + volatile bool thread_done; + volatile bool thread_request_quit; + + Thread *thread; + + void _request_done(int p_status, int p_code, const StringArray& headers, const ByteArray& p_data); + static void _thread_func(void *p_userdata); protected: @@ -105,7 +116,7 @@ protected: static void _bind_methods(); public: - Error request(const String& p_url,const Vector<String>& p_custom_headers=Vector<String>(),bool p_ssl_validate_domain=true); //connects to a full url and perform request + Error request(const String& p_url, const Vector<String>& p_custom_headers=Vector<String>(), bool p_ssl_validate_domain=true, HTTPClient::Method p_method=HTTPClient::METHOD_GET, const String& p_request_data=""); //connects to a full url and perform request void cancel_request(); HTTPClient::Status get_http_client_status() const; diff --git a/scene/main/node.cpp b/scene/main/node.cpp index a53c19d2e7..1892240426 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -36,6 +36,8 @@ #include "instance_placeholder.h" VARIANT_ENUM_CAST(Node::PauseMode); +VARIANT_ENUM_CAST(Node::NetworkMode); +VARIANT_ENUM_CAST(Node::RPCMode); @@ -77,6 +79,16 @@ void Node::_notification(int p_notification) { data.pause_owner=this; } + if (data.network_mode==NETWORK_MODE_INHERIT) { + + if (data.parent) + data.network_owner=data.parent->data.network_owner; + else + data.network_owner=NULL; + } else { + data.network_owner=this; + } + if (data.input) add_to_group("_vp_input"+itos(get_viewport()->get_instance_ID())); if (data.unhandled_input) @@ -97,6 +109,20 @@ void Node::_notification(int p_notification) { if (data.unhandled_key_input) remove_from_group("_vp_unhandled_key_input"+itos(get_viewport()->get_instance_ID())); + + data.pause_owner=NULL; + data.network_owner=NULL; + if (data.path_cache) { + memdelete(data.path_cache); + data.path_cache=NULL; + } + } break; + case NOTIFICATION_PATH_CHANGED: { + + if (data.path_cache) { + memdelete(data.path_cache); + data.path_cache=NULL; + } } break; case NOTIFICATION_READY: { @@ -412,6 +438,640 @@ void Node::_propagate_pause_owner(Node*p_owner) { } } +void Node::set_network_mode(NetworkMode p_mode) { + + if (data.network_mode==p_mode) + return; + + bool prev_inherits=data.network_mode==NETWORK_MODE_INHERIT; + data.network_mode=p_mode; + if (!is_inside_tree()) + return; //pointless + if ((data.network_mode==NETWORK_MODE_INHERIT) == prev_inherits) + return; ///nothing changed + + Node *owner=NULL; + + if (data.network_mode==NETWORK_MODE_INHERIT) { + + if (data.parent) + owner=data.parent->data.network_owner; + } else { + owner=this; + } + + _propagate_network_owner(owner); + + + +} + +Node::NetworkMode Node::get_network_mode() const { + + return data.network_mode; +} + +bool Node::is_network_master() const { + + ERR_FAIL_COND_V(!is_inside_tree(),false); + + switch(data.network_mode) { + case NETWORK_MODE_INHERIT: { + + if (data.network_owner) + return data.network_owner->is_network_master(); + else + return get_tree()->is_network_server(); + } break; + case NETWORK_MODE_MASTER: { + + return true; + } break; + case NETWORK_MODE_SLAVE: { + return false; + } break; + } + + return false; +} + + + +void Node::_propagate_network_owner(Node*p_owner) { + + if (data.network_mode!=NETWORK_MODE_INHERIT) + return; + data.network_owner=p_owner; + for(int i=0;i<data.children.size();i++) { + + data.children[i]->_propagate_network_owner(p_owner); + } +} + +/***** RPC CONFIG ********/ + +void Node::rpc_config(const StringName& p_method,RPCMode p_mode) { + + if (p_mode==RPC_MODE_DISABLED) { + data.rpc_methods.erase(p_method); + } else { + data.rpc_methods[p_method]=p_mode; + }; +} + +void Node::rset_config(const StringName& p_property,RPCMode p_mode) { + + if (p_mode==RPC_MODE_DISABLED) { + data.rpc_properties.erase(p_property); + } else { + data.rpc_properties[p_property]=p_mode; + }; +} + +/***** RPC FUNCTIONS ********/ + +void Node::rpc(const StringName& p_method,VARIANT_ARG_DECLARE) { + + VARIANT_ARGPTRS; + + int argc=0; + for(int i=0;i<VARIANT_ARG_MAX;i++) { + if (argptr[i]->get_type()==Variant::NIL) + break; + argc++; + } + + rpcp(0,false,p_method,argptr,argc); +} + + +void Node::rpc_id(int p_peer_id,const StringName& p_method,VARIANT_ARG_DECLARE) { + + VARIANT_ARGPTRS; + + int argc=0; + for(int i=0;i<VARIANT_ARG_MAX;i++) { + if (argptr[i]->get_type()==Variant::NIL) + break; + argc++; + } + + rpcp(p_peer_id,false,p_method,argptr,argc); +} + + +void Node::rpc_unreliable(const StringName& p_method,VARIANT_ARG_DECLARE) { + + VARIANT_ARGPTRS; + + int argc=0; + for(int i=0;i<VARIANT_ARG_MAX;i++) { + if (argptr[i]->get_type()==Variant::NIL) + break; + argc++; + } + + rpcp(0,true,p_method,argptr,argc); +} + + +void Node::rpc_unreliable_id(int p_peer_id,const StringName& p_method,VARIANT_ARG_DECLARE) { + + VARIANT_ARGPTRS; + + int argc=0; + for(int i=0;i<VARIANT_ARG_MAX;i++) { + if (argptr[i]->get_type()==Variant::NIL) + break; + argc++; + } + + rpcp(p_peer_id,true,p_method,argptr,argc); +} + + +Variant Node::_rpc_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) { + + if (p_argcount<1) { + r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument=1; + return Variant(); + } + + if (p_args[0]->get_type()!=Variant::STRING) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::STRING; + return Variant(); + } + + StringName method = *p_args[0]; + + rpcp(0,false,method,&p_args[1],p_argcount-1); + + r_error.error=Variant::CallError::CALL_OK; + return Variant(); +} + + +Variant Node::_rpc_id_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) { + + if (p_argcount<2) { + r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument=2; + return Variant(); + } + + if (p_args[0]->get_type()!=Variant::INT) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::INT; + return Variant(); + } + + if (p_args[1]->get_type()!=Variant::STRING) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=1; + r_error.expected=Variant::STRING; + return Variant(); + } + + int peer_id = *p_args[0]; + StringName method = *p_args[1]; + + rpcp(peer_id,false,method,&p_args[2],p_argcount-2); + + r_error.error=Variant::CallError::CALL_OK; + return Variant(); +} + + +Variant Node::_rpc_unreliable_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) { + + if (p_argcount<1) { + r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument=1; + return Variant(); + } + + if (p_args[0]->get_type()!=Variant::STRING) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::STRING; + return Variant(); + } + + StringName method = *p_args[0]; + + rpcp(0,true,method,&p_args[1],p_argcount-1); + + r_error.error=Variant::CallError::CALL_OK; + return Variant(); +} + + +Variant Node::_rpc_unreliable_id_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) { + + if (p_argcount<2) { + r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument=2; + return Variant(); + } + + if (p_args[0]->get_type()!=Variant::INT) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::INT; + return Variant(); + } + + if (p_args[1]->get_type()!=Variant::STRING) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=1; + r_error.expected=Variant::STRING; + return Variant(); + } + + int peer_id = *p_args[0]; + StringName method = *p_args[1]; + + rpcp(peer_id,true,method,&p_args[2],p_argcount-2); + + r_error.error=Variant::CallError::CALL_OK; + return Variant(); +} + +#if 0 +Variant Node::_rpc_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) { + + if (p_argcount<1) { + r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument=1; + return Variant(); + } + + if (p_args[0]->get_type()!=Variant::STRING) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_error.expected=Variant::STRING; + return Variant(); + } + + StringName method = *p_args[0]; + + rpcp(method,&p_args[1],p_argcount-1); + + r_error.error=Variant::CallError::CALL_OK; + return Variant(); +} + +#endif +void Node::rpcp(int p_peer_id,bool p_unreliable,const StringName& p_method,const Variant** p_arg,int p_argcount) { + + ERR_FAIL_COND(!is_inside_tree()); + + bool skip_rpc=false; + + if (p_peer_id==0 || p_peer_id==get_tree()->get_network_unique_id() || (p_peer_id<0 && p_peer_id!=-get_tree()->get_network_unique_id())) { + //check that send mode can use local call + + + bool call_local=false; + + + + Map<StringName,RPCMode>::Element *E = data.rpc_methods.find(p_method); + if (E) { + + switch(E->get()) { + + case RPC_MODE_DISABLED: { + //do nothing + } break; + case RPC_MODE_REMOTE: { + //do nothing also, no need to call local + } break; + case RPC_MODE_SYNC: { + //call it, sync always results in call + call_local=true; + } break; + case RPC_MODE_MASTER: { + call_local=is_network_master(); + if (call_local) { + skip_rpc=true; //no other master so.. + } + } break; + case RPC_MODE_SLAVE: { + call_local=!is_network_master(); + } break; + + } + } + + + if (call_local) { + Variant::CallError ce; + call(p_method,p_arg,p_argcount,ce); + if (ce.error!=Variant::CallError::CALL_OK) { + String error = Variant::get_call_error_text(this,p_method,p_arg,p_argcount,ce); + error="rpc() aborted in local call: - "+error; + ERR_PRINTS(error); + return; + } + } else if (get_script_instance()){ + //attempt with script + ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rpc_mode(p_method); + + switch(rpc_mode) { + + case ScriptInstance::RPC_MODE_DISABLED: { + //do nothing + } break; + case ScriptInstance::RPC_MODE_REMOTE: { + //do nothing also, no need to call local + } break; + case ScriptInstance::RPC_MODE_SYNC: { + //call it, sync always results in call + call_local=true; + } break; + case ScriptInstance::RPC_MODE_MASTER: { + call_local=is_network_master(); + if (call_local) { + skip_rpc=true; //no other master so.. + } + } break; + case ScriptInstance::RPC_MODE_SLAVE: { + call_local=!is_network_master(); + } break; + } + + if (call_local) { + Variant::CallError ce; + ce.error=Variant::CallError::CALL_OK; + get_script_instance()->call(p_method,p_arg,p_argcount,ce); + if (ce.error!=Variant::CallError::CALL_OK) { + String error = Variant::get_call_error_text(this,p_method,p_arg,p_argcount,ce); + error="rpc() aborted in script local call: - "+error; + ERR_PRINTS(error); + return; + } + } + } + } + + if (skip_rpc) + return; + + + get_tree()->_rpc(this,p_peer_id,p_unreliable,false,p_method,p_arg,p_argcount); + +} + + +/******** RSET *********/ + + +void Node::rsetp(int p_peer_id,bool p_unreliable,const StringName& p_property,const Variant& p_value) { + + ERR_FAIL_COND(!is_inside_tree()); + + bool skip_rset=false; + + if (p_peer_id==0 || p_peer_id==get_tree()->get_network_unique_id() || (p_peer_id<0 && p_peer_id!=-get_tree()->get_network_unique_id())) { + //check that send mode can use local call + + + bool set_local=false; + + Map<StringName,RPCMode>::Element *E = data.rpc_properties.find(p_property); + if (E) { + + switch(E->get()) { + + case RPC_MODE_DISABLED: { + //do nothing + } break; + case RPC_MODE_REMOTE: { + //do nothing also, no need to call local + } break; + case RPC_MODE_SYNC: { + //call it, sync always results in call + set_local=true; + } break; + case RPC_MODE_MASTER: { + set_local=is_network_master(); + if (set_local) { + skip_rset=true; + } + + } break; + case RPC_MODE_SLAVE: { + set_local=!is_network_master(); + } break; + + } + } + + + if (set_local) { + bool valid; + set(p_property,p_value,&valid); + + if (!valid) { + String error="rset() aborted in local set, property not found: - "+String(p_property); + ERR_PRINTS(error); + return; + } + } else if (get_script_instance()){ + //attempt with script + ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rset_mode(p_property); + + switch(rpc_mode) { + + case ScriptInstance::RPC_MODE_DISABLED: { + //do nothing + } break; + case ScriptInstance::RPC_MODE_REMOTE: { + //do nothing also, no need to call local + } break; + case ScriptInstance::RPC_MODE_SYNC: { + //call it, sync always results in call + set_local=true; + } break; + case ScriptInstance::RPC_MODE_MASTER: { + set_local=is_network_master(); + if (set_local) { + skip_rset=true; + } + } break; + case ScriptInstance::RPC_MODE_SLAVE: { + set_local=!is_network_master(); + } break; + } + + if (set_local) { + + bool valid = get_script_instance()->set(p_property,p_value); + + if (!valid) { + String error="rset() aborted in local script set, property not found: - "+String(p_property); + ERR_PRINTS(error); + return; + } + } + + } + } + + if (skip_rset) + return; + + const Variant*vptr = &p_value; + + get_tree()->_rpc(this,p_peer_id,p_unreliable,true,p_property,&vptr,1); + +} + + + +void Node::rset(const StringName& p_property,const Variant& p_value) { + + rsetp(0,false,p_property,p_value); + +} + +void Node::rset_id(int p_peer_id,const StringName& p_property,const Variant& p_value) { + + rsetp(p_peer_id,false,p_property,p_value); + +} + +void Node::rset_unreliable(const StringName& p_property,const Variant& p_value) { + + rsetp(0,true,p_property,p_value); + +} + +void Node::rset_unreliable_id(int p_peer_id,const StringName& p_property,const Variant& p_value) { + + rsetp(p_peer_id,true,p_property,p_value); + +} + +//////////// end of rpc + +bool Node::can_call_rpc(const StringName& p_method) const { + + const Map<StringName,RPCMode>::Element *E = data.rpc_methods.find(p_method); + if (E) { + + switch(E->get()) { + + case RPC_MODE_DISABLED: { + return false; + } break; + case RPC_MODE_REMOTE: { + return true; + } break; + case RPC_MODE_SYNC: { + return true; + } break; + case RPC_MODE_MASTER: { + return is_network_master(); + } break; + case RPC_MODE_SLAVE: { + return !is_network_master(); + } break; + } + } + + + if (get_script_instance()){ + //attempt with script + ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rpc_mode(p_method); + + switch(rpc_mode) { + + case ScriptInstance::RPC_MODE_DISABLED: { + return false; + } break; + case ScriptInstance::RPC_MODE_REMOTE: { + return true; + } break; + case ScriptInstance::RPC_MODE_SYNC: { + return true; + } break; + case ScriptInstance::RPC_MODE_MASTER: { + return is_network_master(); + } break; + case ScriptInstance::RPC_MODE_SLAVE: { + return !is_network_master(); + } break; + } + + } + + ERR_PRINTS("RPC on unauthorized method attempted: "+String(p_method)+" on base: "+String(Variant(this))); + return false; +} + +bool Node::can_call_rset(const StringName& p_property) const { + + const Map<StringName,RPCMode>::Element *E = data.rpc_properties.find(p_property); + if (E) { + + switch(E->get()) { + + case RPC_MODE_DISABLED: { + return false; + } break; + case RPC_MODE_REMOTE: { + return true; + } break; + case RPC_MODE_SYNC: { + return true; + } break; + case RPC_MODE_MASTER: { + return is_network_master(); + } break; + case RPC_MODE_SLAVE: { + return !is_network_master(); + } break; + } + } + + + if (get_script_instance()){ + //attempt with script + ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rset_mode(p_property); + + switch(rpc_mode) { + + case ScriptInstance::RPC_MODE_DISABLED: { + return false; + } break; + case ScriptInstance::RPC_MODE_REMOTE: { + return true; + } break; + case ScriptInstance::RPC_MODE_SYNC: { + return true; + } break; + case ScriptInstance::RPC_MODE_MASTER: { + return is_network_master(); + } break; + case ScriptInstance::RPC_MODE_SLAVE: { + return !is_network_master(); + } break; + } + + } + + ERR_PRINTS("RSET on unauthorized property attempted: "+String(p_property)+" on base: "+String(Variant(this))); + + return false; +} + + bool Node::can_process() const { ERR_FAIL_COND_V( !is_inside_tree(), false ); @@ -567,6 +1227,8 @@ void Node::set_name(const String& p_name) { data.parent->_validate_child_name(this); } + propagate_notification(NOTIFICATION_PATH_CHANGED); + if (is_inside_tree()) { emit_signal("renamed"); @@ -1210,6 +1872,10 @@ NodePath Node::get_path_to(const Node *p_node) const { NodePath Node::get_path() const { ERR_FAIL_COND_V(!is_inside_tree(),NodePath()); + + if (data.path_cache) + return *data.path_cache; + const Node *n = this; Vector<StringName> path; @@ -1221,7 +1887,9 @@ NodePath Node::get_path() const { path.invert(); - return NodePath( path, true ); + data.path_cache = memnew( NodePath( path, true ) ); + + return *data.path_cache; } bool Node::is_in_group(const StringName& p_identifier) const { @@ -2212,7 +2880,13 @@ void Node::_bind_methods() { ObjectTypeDB::bind_method(_MD("queue_free"),&Node::queue_delete); + ObjectTypeDB::bind_method(_MD("set_network_mode","mode"),&Node::set_network_mode); + ObjectTypeDB::bind_method(_MD("get_network_mode"),&Node::get_network_mode); + + ObjectTypeDB::bind_method(_MD("is_network_master"),&Node::is_network_master); + ObjectTypeDB::bind_method(_MD("rpc_config","method","mode"),&Node::rpc_config); + ObjectTypeDB::bind_method(_MD("rset_config","property","mode"),&Node::rset_config); #ifdef TOOLS_ENABLED @@ -2222,6 +2896,33 @@ void Node::_bind_methods() { #endif + { + MethodInfo mi; + + mi.arguments.push_back( PropertyInfo( Variant::STRING, "method")); + + + mi.name="rpc"; + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"rpc",&Node::_rpc_bind,mi); + mi.name="rpc_unreliable"; + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"rpc_unreliable",&Node::_rpc_unreliable_bind,mi); + + mi.arguments.push_front( PropertyInfo( Variant::INT, "peer_id") ); + + mi.name="rpc_id"; + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"rpc_id",&Node::_rpc_id_bind,mi); + mi.name="rpc_unreliable_id"; + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"rpc_unreliable_id",&Node::_rpc_unreliable_id_bind,mi); + + + } + + ObjectTypeDB::bind_method(_MD("rset","property","value:Variant"),&Node::rset); + ObjectTypeDB::bind_method(_MD("rset_id","peer_id","property","value:Variant"),&Node::rset_id); + ObjectTypeDB::bind_method(_MD("rset_unreliable","property","value:Variant"),&Node::rset_unreliable); + ObjectTypeDB::bind_method(_MD("rset_unreliable_id","peer_id","property","value:Variant"),&Node::rset_unreliable_id); + + BIND_CONSTANT( NOTIFICATION_ENTER_TREE ); BIND_CONSTANT( NOTIFICATION_EXIT_TREE ); BIND_CONSTANT( NOTIFICATION_MOVED_IN_PARENT ); @@ -2236,8 +2937,18 @@ void Node::_bind_methods() { BIND_CONSTANT( NOTIFICATION_INSTANCED ); BIND_CONSTANT( NOTIFICATION_DRAG_BEGIN ); BIND_CONSTANT( NOTIFICATION_DRAG_END ); + BIND_CONSTANT( NOTIFICATION_PATH_CHANGED); + BIND_CONSTANT( NETWORK_MODE_INHERIT ); + BIND_CONSTANT( NETWORK_MODE_MASTER ); + BIND_CONSTANT( NETWORK_MODE_SLAVE ); + + BIND_CONSTANT( RPC_MODE_DISABLED ); + BIND_CONSTANT( RPC_MODE_REMOTE ); + BIND_CONSTANT( RPC_MODE_SYNC ); + BIND_CONSTANT( RPC_MODE_MASTER ); + BIND_CONSTANT( RPC_MODE_SLAVE ); BIND_CONSTANT( PAUSE_MODE_INHERIT ); BIND_CONSTANT( PAUSE_MODE_STOP ); @@ -2286,11 +2997,15 @@ Node::Node() { data.unhandled_key_input=false; data.pause_mode=PAUSE_MODE_INHERIT; data.pause_owner=NULL; + data.network_mode=NETWORK_MODE_INHERIT; + data.network_owner=NULL; + data.path_cache=NULL; data.parent_owned=false; data.in_constructor=true; data.viewport=NULL; data.use_placeholder=false; data.display_folded=false; + } Node::~Node() { diff --git a/scene/main/node.h b/scene/main/node.h index 18e403cd61..3568da2ab0 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -53,6 +53,21 @@ public: PAUSE_MODE_PROCESS }; + enum NetworkMode { + + NETWORK_MODE_INHERIT, + NETWORK_MODE_MASTER, + NETWORK_MODE_SLAVE + }; + + enum RPCMode { + + RPC_MODE_DISABLED, //no rpc for this method, calls to this will be blocked (default) + RPC_MODE_REMOTE, // using rpc() on it will call method / set property in all other peers + RPC_MODE_SYNC, // using rpc() on it will call method / set property in all other peers and locally + RPC_MODE_MASTER, // usinc rpc() on it will call method on wherever the master is, be it local or remote + RPC_MODE_SLAVE, // usinc rpc() on it will call method for all slaves, be it local or remote + }; struct Comparator { @@ -68,6 +83,8 @@ private: GroupData() { persistent=false; } }; + + struct Data { String filename; @@ -98,6 +115,13 @@ private: PauseMode pause_mode; Node *pause_owner; + + NetworkMode network_mode; + Node *network_owner; + Map<StringName,RPCMode> rpc_methods; + Map<StringName,RPCMode> rpc_properties; + + // variables used to properly sort the node when processing, ignored otherwise //should move all the stuff below to bits bool fixed_process; @@ -113,6 +137,8 @@ private: bool display_folded; + mutable NodePath *path_cache; + } data; @@ -134,6 +160,7 @@ private: void _propagate_validate_owner(); void _print_stray_nodes(); void _propagate_pause_owner(Node*p_owner); + void _propagate_network_owner(Node*p_owner); Array _get_node_and_resource(const NodePath& p_path); void _duplicate_signals(const Node* p_original,Node* p_copy) const; @@ -143,6 +170,11 @@ private: Array _get_children() const; Array _get_groups() const; + Variant _rpc_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error); + Variant _rpc_unreliable_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error); + Variant _rpc_id_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error); + Variant _rpc_unreliable_id_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error); + friend class SceneTree; void _set_tree(SceneTree *p_tree); @@ -186,6 +218,7 @@ public: NOTIFICATION_INSTANCED=20, NOTIFICATION_DRAG_BEGIN=21, NOTIFICATION_DRAG_END=22, + NOTIFICATION_PATH_CHANGED=23, }; /* NODE/TREE */ @@ -331,7 +364,32 @@ public: void set_display_folded(bool p_folded); bool is_displayed_folded() const; - /* CANVAS */ + /* NETWORK */ + + void set_network_mode(NetworkMode p_mode); + NetworkMode get_network_mode() const; + bool is_network_master() const; + + void rpc_config(const StringName& p_method,RPCMode p_mode); // config a local method for RPC + void rset_config(const StringName& p_property,RPCMode p_mode); // config a local property for RPC + + void rpc(const StringName& p_method,VARIANT_ARG_LIST); //rpc call, honors RPCMode + void rpc_unreliable(const StringName& p_method,VARIANT_ARG_LIST); //rpc call, honors RPCMode + void rpc_id(int p_peer_id,const StringName& p_method,VARIANT_ARG_LIST); //rpc call, honors RPCMode + void rpc_unreliable_id(int p_peer_id,const StringName& p_method,VARIANT_ARG_LIST); //rpc call, honors RPCMode + + void rpcp(int p_peer_id,bool p_unreliable,const StringName& p_method,const Variant** p_arg,int p_argcount); + + void rset(const StringName& p_property, const Variant& p_value); //remote set call, honors RPCMode + void rset_unreliable(const StringName& p_property,const Variant& p_value); //remote set call, honors RPCMode + void rset_id(int p_peer_id,const StringName& p_property,const Variant& p_value); //remote set call, honors RPCMode + void rset_unreliable_id(int p_peer_id,const StringName& p_property,const Variant& p_value); //remote set call, honors RPCMode + + void rsetp(int p_peer_id,bool p_unreliable,const StringName& p_property,const Variant& p_value); + + bool can_call_rpc(const StringName& p_method) const; + bool can_call_rset(const StringName& p_property) const; + Node(); ~Node(); diff --git a/scene/main/scene_main_loop.cpp b/scene/main/scene_main_loop.cpp index a7ef7ca7c1..e3472c074a 100644 --- a/scene/main/scene_main_loop.cpp +++ b/scene/main/scene_main_loop.cpp @@ -44,6 +44,30 @@ #include "scene/resources/packed_scene.h" #include "scene/resources/material.h" #include "scene/resources/mesh.h" +#include "io/marshalls.h" + +void SceneTreeTimer::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_time_left","time"),&SceneTreeTimer::set_time_left); + ObjectTypeDB::bind_method(_MD("get_time_left"),&SceneTreeTimer::get_time_left); + + ADD_SIGNAL(MethodInfo("timeout")); +} + + +void SceneTreeTimer::set_time_left(float p_time) { + time_left=p_time; +} + +float SceneTreeTimer::get_time_left() const { + return time_left; +} + + +SceneTreeTimer::SceneTreeTimer() { + time_left=0; +} + void SceneTree::tree_changed() { @@ -521,6 +545,8 @@ bool SceneTree::idle(float p_time){ idle_process_time=p_time; + _network_poll(); + emit_signal("idle_frame"); _flush_transform_notifications(); @@ -547,6 +573,23 @@ bool SceneTree::idle(float p_time){ _flush_delete_queue(); + //go through timers + + for (List<Ref<SceneTreeTimer> >::Element *E=timers.front();E;) { + + List<Ref<SceneTreeTimer> >::Element *N = E->next(); + + float time_left = E->get()->get_time_left(); + time_left-=p_time; + E->get()->set_time_left(time_left); + + if (time_left<0) { + E->get()->emit_signal("timeout"); + timers.erase(E); + } + E=N; + } + return _quit; } @@ -1604,6 +1647,510 @@ void SceneTree::drop_files(const Vector<String>& p_files,int p_from_screen) { MainLoop::drop_files(p_files,p_from_screen); } + +Ref<SceneTreeTimer> SceneTree::create_timer(float p_delay_sec) { + + Ref<SceneTreeTimer> stt; + stt.instance(); + stt->set_time_left(p_delay_sec); + timers.push_back(stt); + return stt; +} + +void SceneTree::_network_peer_connected(int p_id) { + + + connected_peers.insert(p_id); + path_get_cache.insert(p_id,PathGetCache()); + + + emit_signal("network_peer_connected",p_id); +} + +void SceneTree::_network_peer_disconnected(int p_id) { + + connected_peers.erase(p_id); + path_get_cache.erase(p_id); //I no longer need your cache, sorry + emit_signal("network_peer_disconnected",p_id); +} + +void SceneTree::_connected_to_server() { + + emit_signal("connected_to_server"); +} + +void SceneTree::_connection_failed() { + + emit_signal("connection_failed"); +} + +void SceneTree::_server_disconnected() { + + emit_signal("server_disconnected"); +} + +void SceneTree::set_network_peer(const Ref<NetworkedMultiplayerPeer>& p_network_peer) { + if (network_peer.is_valid()) { + network_peer->disconnect("peer_connected",this,"_network_peer_connected"); + network_peer->disconnect("peer_disconnected",this,"_network_peer_disconnected"); + network_peer->disconnect("connection_succeeded",this,"_connected_to_server"); + network_peer->disconnect("connection_failed",this,"_connection_failed"); + network_peer->disconnect("server_disconnected",this,"_server_disconnected"); + connected_peers.clear(); + path_get_cache.clear(); + path_send_cache.clear(); + last_send_cache_id=1; + } + + ERR_EXPLAIN("Supplied NetworkedNetworkPeer must be connecting or connected."); + ERR_FAIL_COND(p_network_peer.is_valid() && p_network_peer->get_connection_status()==NetworkedMultiplayerPeer::CONNECTION_DISCONNECTED); + + network_peer=p_network_peer; + + if (network_peer.is_valid()) { + network_peer->connect("peer_connected",this,"_network_peer_connected"); + network_peer->connect("peer_disconnected",this,"_network_peer_disconnected"); + network_peer->connect("connection_succeeded",this,"_connected_to_server"); + network_peer->connect("connection_failed",this,"_connection_failed"); + network_peer->connect("server_disconnected",this,"_server_disconnected"); + } +} + +bool SceneTree::is_network_server() const { + + ERR_FAIL_COND_V(!network_peer.is_valid(),false); + return network_peer->is_server(); + +} + +int SceneTree::get_network_unique_id() const { + + ERR_FAIL_COND_V(!network_peer.is_valid(),0); + return network_peer->get_unique_id(); +} + +void SceneTree::set_refuse_new_network_connections(bool p_refuse) { + ERR_FAIL_COND(!network_peer.is_valid()); + network_peer->set_refuse_new_connections(p_refuse); +} + +bool SceneTree::is_refusing_new_network_connections() const { + + ERR_FAIL_COND_V(!network_peer.is_valid(),false); + + return network_peer->is_refusing_new_connections(); + +} + + +void SceneTree::_rpc(Node* p_from,int p_to,bool p_unreliable,bool p_set,const StringName& p_name,const Variant** p_arg,int p_argcount) { + + if (network_peer.is_null()) { + ERR_EXPLAIN("Attempt to remote call/set when networking is not active in SceneTree."); + ERR_FAIL(); + } + + if (network_peer->get_connection_status()==NetworkedMultiplayerPeer::CONNECTION_CONNECTING) { + ERR_EXPLAIN("Attempt to remote call/set when networking is not connected yet in SceneTree."); + ERR_FAIL(); + } + + if (network_peer->get_connection_status()==NetworkedMultiplayerPeer::CONNECTION_DISCONNECTED) { + ERR_EXPLAIN("Attempt to remote call/set when networking is disconnected."); + ERR_FAIL(); + } + + if (p_argcount>255) { + ERR_EXPLAIN("Too many arguments >255."); + ERR_FAIL(); + } + + if (p_to!=0 && !connected_peers.has(ABS(p_to))) { + if (p_to==get_network_unique_id()) { + ERR_EXPLAIN("Attempt to remote call/set yourself! unique ID: "+itos(get_network_unique_id())); + } else { + ERR_EXPLAIN("Attempt to remote call unexisting ID: "+itos(p_to)); + + } + + ERR_FAIL(); + } + + NodePath from_path = p_from->get_path(); + ERR_FAIL_COND(from_path.is_empty()); + + + + //see if the path is cached + PathSentCache *psc = path_send_cache.getptr(from_path); + if (!psc) { + //path is not cached, create + path_send_cache[from_path]=PathSentCache(); + psc = path_send_cache.getptr(from_path); + psc->id=last_send_cache_id++; + + } + + + //create base packet, lots of harcode because it must be tight + + int ofs=0; + +#define MAKE_ROOM(m_amount) if (packet_cache.size() < m_amount) packet_cache.resize(m_amount); + + //encode type + MAKE_ROOM(1); + packet_cache[0]=p_set ? NETWORK_COMMAND_REMOTE_SET : NETWORK_COMMAND_REMOTE_CALL; + ofs+=1; + + //encode ID + MAKE_ROOM(ofs+4); + encode_uint32(psc->id,&packet_cache[ofs]); + ofs+=4; + + //encode function name + CharString name = String(p_name).utf8(); + int len = encode_cstring(name.get_data(),NULL); + MAKE_ROOM(ofs+len); + encode_cstring(name.get_data(),&packet_cache[ofs]); + ofs+=len; + + if (p_set) { + //set argument + Error err = encode_variant(*p_arg[0],NULL,len); + ERR_FAIL_COND(err!=OK); + MAKE_ROOM(ofs+len); + encode_variant(*p_arg[0],&packet_cache[ofs],len); + ofs+=len; + + } else { + //call arguments + MAKE_ROOM(ofs+1); + packet_cache[ofs]=p_argcount; + ofs+=1; + for(int i=0;i<p_argcount;i++) { + Error err = encode_variant(*p_arg[i],NULL,len); + ERR_FAIL_COND(err!=OK); + MAKE_ROOM(ofs+len); + encode_variant(*p_arg[i],&packet_cache[ofs],len); + ofs+=len; + } + + } + + //see if all peers have cached path (is so, call can be fast) + bool has_all_peers=true; + + List<int> peers_to_add; //if one is missing, take note to add it + + for (Set<int>::Element *E=connected_peers.front();E;E=E->next()) { + + if (p_to<0 && E->get()==-p_to) + continue; //continue, excluded + + if (p_to>0 && E->get()!=p_to) + continue; //continue, not for this peer + + Map<int,bool>::Element *F = psc->confirmed_peers.find(E->get()); + + if (!F || F->get()==false) { + //path was not cached, or was cached but is unconfirmed + if (!F) { + //not cached at all, take note + peers_to_add.push_back(E->get()); + } + + has_all_peers=false; + } + } + + //those that need to be added, send a message for this + + for (List<int>::Element *E=peers_to_add.front();E;E=E->next()) { + + //encode function name + CharString pname = String(from_path).utf8(); + int len = encode_cstring(pname.get_data(),NULL); + + Vector<uint8_t> packet; + + packet.resize(1+4+len); + packet[0]=NETWORK_COMMAND_SIMPLIFY_PATH; + encode_uint32(psc->id,&packet[1]); + encode_cstring(pname.get_data(),&packet[5]); + + network_peer->set_target_peer(E->get()); //to all of you + network_peer->set_transfer_mode(NetworkedMultiplayerPeer::TRANSFER_MODE_RELIABLE); + network_peer->put_packet(packet.ptr(),packet.size()); + + psc->confirmed_peers.insert(E->get(),false); //insert into confirmed, but as false since it was not confirmed + } + + //take chance and set transfer mode, since all send methods will use it + network_peer->set_transfer_mode(p_unreliable ? NetworkedMultiplayerPeer::TRANSFER_MODE_UNRELIABLE : NetworkedMultiplayerPeer::TRANSFER_MODE_RELIABLE); + + if (has_all_peers) { + + //they all have verified paths, so send fast + network_peer->set_target_peer(p_to); //to all of you + network_peer->put_packet(packet_cache.ptr(),ofs); //a message with love + } else { + //not all verified path, so send one by one + + //apend path at the end, since we will need it for some packets + CharString pname = String(from_path).utf8(); + int path_len = encode_cstring(pname.get_data(),NULL); + MAKE_ROOM(ofs+path_len); + encode_cstring(pname.get_data(),&packet_cache[ofs]); + + + for (Set<int>::Element *E=connected_peers.front();E;E=E->next()) { + + if (p_to<0 && E->get()==-p_to) + continue; //continue, excluded + + if (p_to>0 && E->get()!=p_to) + continue; //continue, not for this peer + + Map<int,bool>::Element *F = psc->confirmed_peers.find(E->get()); + ERR_CONTINUE(!F);//should never happen + + network_peer->set_target_peer(E->get()); //to this one specifically + + if (F->get()==true) { + //this one confirmed path, so use id + encode_uint32(psc->id,&packet_cache[1]); + network_peer->put_packet(packet_cache.ptr(),ofs); + } else { + //this one did not confirm path yet, so use entire path (sorry!) + encode_uint32(0x80000000|ofs,&packet_cache[1]); //offset to path and flag + network_peer->put_packet(packet_cache.ptr(),ofs+path_len); + } + + } + } +} + + +void SceneTree::_network_process_packet(int p_from, const uint8_t* p_packet, int p_packet_len) { + + ERR_FAIL_COND(p_packet_len<5); + + uint8_t packet_type = p_packet[0]; + + switch(packet_type) { + + case NETWORK_COMMAND_REMOTE_CALL: + case NETWORK_COMMAND_REMOTE_SET: { + + ERR_FAIL_COND(p_packet_len<5); + uint32_t target = decode_uint32(&p_packet[1]); + + + Node *node=NULL; + + if (target&0x80000000) { + + int ofs = target&0x7FFFFFFF; + ERR_FAIL_COND(ofs>=p_packet_len); + + String paths; + paths.parse_utf8((const char*)&p_packet[ofs],p_packet_len-ofs); + + NodePath np = paths; + + node = get_root()->get_node(np); + if (node==NULL) { + ERR_EXPLAIN("Failed to get path from RPC: "+String(np)); + ERR_FAIL_COND(node==NULL); + } + } else { + + int id = target; + + Map<int,PathGetCache>::Element *E=path_get_cache.find(p_from); + ERR_FAIL_COND(!E); + + Map<int,PathGetCache::NodeInfo>::Element *F=E->get().nodes.find(id); + ERR_FAIL_COND(!F); + + PathGetCache::NodeInfo *ni = &F->get(); + //do proper caching later + + node = get_root()->get_node(ni->path); + if (node==NULL) { + ERR_EXPLAIN("Failed to get cached path from RPC: "+String(ni->path)); + ERR_FAIL_COND(node==NULL); + } + + + } + + ERR_FAIL_COND(p_packet_len<6); + + //detect cstring end + int len_end=5; + for(;len_end<p_packet_len;len_end++) { + if (p_packet[len_end]==0) { + break; + } + } + + ERR_FAIL_COND(len_end>=p_packet_len); + + StringName name = String::utf8((const char*)&p_packet[5]); + + + + + if (packet_type==NETWORK_COMMAND_REMOTE_CALL) { + + if (!node->can_call_rpc(name)) + return; + + int ofs = len_end+1; + + ERR_FAIL_COND(ofs>=p_packet_len); + + int argc = p_packet[ofs]; + Vector<Variant> args; + Vector<const Variant*> argp; + args.resize(argc); + argp.resize(argc); + + ofs++; + + for(int i=0;i<argc;i++) { + + ERR_FAIL_COND(ofs>=p_packet_len); + int vlen; + Error err = decode_variant(args[i],&p_packet[ofs],p_packet_len-ofs,&vlen); + ERR_FAIL_COND(err!=OK); + //args[i]=p_packet[3+i]; + argp[i]=&args[i]; + ofs+=vlen; + } + + Variant::CallError ce; + + node->call(name,argp.ptr(),argc,ce); + if (ce.error!=Variant::CallError::CALL_OK) { + String error = Variant::get_call_error_text(node,name,argp.ptr(),argc,ce); + error="RPC - "+error; + ERR_PRINTS(error); + } + + } else { + + if (!node->can_call_rset(name)) + return; + + int ofs = len_end+1; + + ERR_FAIL_COND(ofs>=p_packet_len); + + Variant value; + decode_variant(value,&p_packet[ofs],p_packet_len-ofs); + + bool valid; + + node->set(name,value,&valid); + if (!valid) { + String error = "Error setting remote property '"+String(name)+"', not found in object of type "+node->get_type(); + ERR_PRINTS(error); + } + } + + } break; + case NETWORK_COMMAND_SIMPLIFY_PATH: { + + ERR_FAIL_COND(p_packet_len<5); + int id = decode_uint32(&p_packet[1]); + + String paths; + paths.parse_utf8((const char*)&p_packet[5],p_packet_len-5); + + NodePath path = paths; + + if (!path_get_cache.has(p_from)) { + path_get_cache[p_from]=PathGetCache(); + } + + PathGetCache::NodeInfo ni; + ni.path=path; + ni.instance=0; + + path_get_cache[p_from].nodes[id]=ni; + + + { + //send ack + + //encode path + CharString pname = String(path).utf8(); + int len = encode_cstring(pname.get_data(),NULL); + + Vector<uint8_t> packet; + + packet.resize(1+len); + packet[0]=NETWORK_COMMAND_CONFIRM_PATH; + encode_cstring(pname.get_data(),&packet[1]); + + network_peer->set_transfer_mode(NetworkedMultiplayerPeer::TRANSFER_MODE_RELIABLE); + network_peer->set_target_peer(p_from); + network_peer->put_packet(packet.ptr(),packet.size()); + } + } break; + case NETWORK_COMMAND_CONFIRM_PATH: { + + String paths; + paths.parse_utf8((const char*)&p_packet[1],p_packet_len-1); + + NodePath path = paths; + + PathSentCache *psc = path_send_cache.getptr(path); + ERR_FAIL_COND(!psc); + + Map<int,bool>::Element *E=psc->confirmed_peers.find(p_from); + ERR_FAIL_COND(!E); + E->get()=true; + } break; + } + +} + +void SceneTree::_network_poll() { + + if (!network_peer.is_valid() || network_peer->get_connection_status()==NetworkedMultiplayerPeer::CONNECTION_DISCONNECTED) + return; + + network_peer->poll(); + + if (!network_peer.is_valid()) //it's possible that polling might have resulted in a disconnection, so check here + return; + + while(network_peer->get_available_packet_count()) { + + int sender = network_peer->get_packet_peer(); + const uint8_t *packet; + int len; + + Error err = network_peer->get_packet(&packet,len); + if (err!=OK) { + ERR_PRINT("Error getting packet!"); + } + + _network_process_packet(sender,packet,len); + + if (!network_peer.is_valid()) { + break; //it's also possible that a packet or RPC caused a disconnection, so also check here + } + } + + +} + + void SceneTree::_bind_methods() { @@ -1634,6 +2181,8 @@ void SceneTree::_bind_methods() { ObjectTypeDB::bind_method(_MD("is_paused"),&SceneTree::is_paused); ObjectTypeDB::bind_method(_MD("set_input_as_handled"),&SceneTree::set_input_as_handled); + ObjectTypeDB::bind_method(_MD("create_timer:SceneTreeTimer","time_sec"),&SceneTree::create_timer); + ObjectTypeDB::bind_method(_MD("get_node_count"),&SceneTree::get_node_count); ObjectTypeDB::bind_method(_MD("get_frame"),&SceneTree::get_frame); @@ -1651,13 +2200,9 @@ void SceneTree::_bind_methods() { mi.arguments.push_back( PropertyInfo( Variant::INT, "flags")); mi.arguments.push_back( PropertyInfo( Variant::STRING, "group")); mi.arguments.push_back( PropertyInfo( Variant::STRING, "method")); - Vector<Variant> defargs; - for(int i=0;i<VARIANT_ARG_MAX;i++) { - mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i))); - defargs.push_back(Variant()); - } - ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"call_group",&SceneTree::_call_group,mi,defargs); + + ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"call_group",&SceneTree::_call_group,mi); ObjectTypeDB::bind_method(_MD("set_current_scene","child_node:Node"),&SceneTree::set_current_scene); ObjectTypeDB::bind_method(_MD("get_current_scene:Node"),&SceneTree::get_current_scene); @@ -1669,6 +2214,18 @@ void SceneTree::_bind_methods() { ObjectTypeDB::bind_method(_MD("_change_scene"),&SceneTree::_change_scene); + + ObjectTypeDB::bind_method(_MD("set_network_peer","peer:NetworkedMultiplayerPeer"),&SceneTree::set_network_peer); + ObjectTypeDB::bind_method(_MD("is_network_server"),&SceneTree::is_network_server); + ObjectTypeDB::bind_method(_MD("get_network_unique_id"),&SceneTree::get_network_unique_id); + ObjectTypeDB::bind_method(_MD("set_refuse_new_network_connections","refuse"),&SceneTree::set_refuse_new_network_connections); + ObjectTypeDB::bind_method(_MD("is_refusing_new_network_connections"),&SceneTree::is_refusing_new_network_connections); + ObjectTypeDB::bind_method(_MD("_network_peer_connected"),&SceneTree::_network_peer_connected); + ObjectTypeDB::bind_method(_MD("_network_peer_disconnected"),&SceneTree::_network_peer_disconnected); + ObjectTypeDB::bind_method(_MD("_connected_to_server"),&SceneTree::_connected_to_server); + ObjectTypeDB::bind_method(_MD("_connection_failed"),&SceneTree::_connection_failed); + ObjectTypeDB::bind_method(_MD("_server_disconnected"),&SceneTree::_server_disconnected); + ADD_SIGNAL( MethodInfo("tree_changed") ); ADD_SIGNAL( MethodInfo("node_removed",PropertyInfo( Variant::OBJECT, "node") ) ); ADD_SIGNAL( MethodInfo("screen_resized") ); @@ -1678,6 +2235,11 @@ void SceneTree::_bind_methods() { ADD_SIGNAL( MethodInfo("fixed_frame")); ADD_SIGNAL( MethodInfo("files_dropped",PropertyInfo(Variant::STRING_ARRAY,"files"),PropertyInfo(Variant::INT,"screen")) ); + ADD_SIGNAL( MethodInfo("network_peer_connected",PropertyInfo(Variant::INT,"id"))); + ADD_SIGNAL( MethodInfo("network_peer_disconnected",PropertyInfo(Variant::INT,"id"))); + ADD_SIGNAL( MethodInfo("connected_to_server")); + ADD_SIGNAL( MethodInfo("connection_failed")); + ADD_SIGNAL( MethodInfo("server_disconnected")); BIND_CONSTANT( GROUP_CALL_DEFAULT ); BIND_CONSTANT( GROUP_CALL_REVERSE ); @@ -1778,6 +2340,8 @@ SceneTree::SceneTree() { live_edit_root=NodePath("/root"); + last_send_cache_id=1; + #endif diff --git a/scene/main/scene_main_loop.h b/scene/main/scene_main_loop.h index 38d13c0447..1c0f88862c 100644 --- a/scene/main/scene_main_loop.h +++ b/scene/main/scene_main_loop.h @@ -35,6 +35,9 @@ #include "scene/resources/world_2d.h" #include "os/thread_safe.h" #include "self_list.h" +#include "io/networked_multiplayer_peer.h" + + /** @author Juan Linietsky <reduzio@gmail.com> */ @@ -47,6 +50,22 @@ class Viewport; class Material; class Mesh; + + +class SceneTreeTimer : public Reference { + OBJ_TYPE(SceneTreeTimer,Reference); + + float time_left; +protected: + static void _bind_methods(); +public: + + void set_time_left(float p_time); + float get_time_left() const; + + SceneTreeTimer(); +}; + class SceneTree : public MainLoop { _THREAD_SAFE_CLASS_ @@ -155,9 +174,62 @@ private: void _change_scene(Node* p_to); //void _call_group(uint32_t p_call_flags,const StringName& p_group,const StringName& p_function,const Variant& p_arg1,const Variant& p_arg2); + List<Ref<SceneTreeTimer> > timers; + + + ///network/// + + enum NetworkCommands { + NETWORK_COMMAND_REMOTE_CALL, + NETWORK_COMMAND_REMOTE_SET, + NETWORK_COMMAND_SIMPLIFY_PATH, + NETWORK_COMMAND_CONFIRM_PATH, + }; + + Ref<NetworkedMultiplayerPeer> network_peer; + + Set<int> connected_peers; + void _network_peer_connected(int p_id); + void _network_peer_disconnected(int p_id); + + void _connected_to_server(); + void _connection_failed(); + void _server_disconnected(); + + //path sent caches + struct PathSentCache { + Map<int,bool> confirmed_peers; + int id; + }; + + HashMap<NodePath,PathSentCache> path_send_cache; + int last_send_cache_id; + + //path get caches + struct PathGetCache { + struct NodeInfo { + NodePath path; + ObjectID instance; + }; + + Map<int,NodeInfo> nodes; + }; + + Map<int,PathGetCache> path_get_cache; + + Vector<uint8_t> packet_cache; + + void _network_process_packet(int p_from, const uint8_t *p_packet, int p_packet_len); + void _network_poll(); + static SceneTree *singleton; friend class Node; + + + + void _rpc(Node* p_from,int p_to,bool p_unreliable,bool p_set,const StringName& p_name,const Variant** p_arg,int p_argcount); + void tree_changed(); void node_removed(Node *p_node); @@ -233,6 +305,7 @@ friend class Viewport; #endif protected: + void _notification(int p_notification); static void _bind_methods(); @@ -339,6 +412,8 @@ public: Error change_scene_to(const Ref<PackedScene>& p_scene); Error reload_current_scene(); + Ref<SceneTreeTimer> create_timer(float p_delay_sec); + //used by Main::start, don't use otherwise void add_current_scene(Node * p_current); @@ -346,6 +421,15 @@ public: void drop_files(const Vector<String>& p_files,int p_from_screen=0); + //network API + + void set_network_peer(const Ref<NetworkedMultiplayerPeer>& p_network_peer); + bool is_network_server() const; + int get_network_unique_id() const; + + void set_refuse_new_network_connections(bool p_refuse); + bool is_refusing_new_network_connections() const; + SceneTree(); ~SceneTree(); diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index bdb2754e5e..7970229c06 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1782,7 +1782,6 @@ void Viewport::_gui_input_event(InputEvent p_event) { if (top->data.modal_exclusive || top->data.modal_frame==OS::get_singleton()->get_frames_drawn()) { //cancel event, sorry, modal exclusive EATS UP ALL //alternative, you can't pop out a window the same frame it was made modal (fixes many issues) - //get_tree()->call_group(SceneTree::GROUP_CALL_REALTIME,"windows","_cancel_input_ID",p_event.ID); get_tree()->set_input_as_handled(); return; // no one gets the event if exclusive NO ONE } @@ -2034,8 +2033,22 @@ void Viewport::_gui_input_event(InputEvent p_event) { } + bool is_tooltip_shown = false; - if (can_tooltip) { + if (gui.tooltip_popup) { + if (can_tooltip) { + String tooltip = over->get_tooltip(gui.tooltip->get_global_transform().xform_inv(mpos)); + + if (tooltip.length() == 0) + _gui_cancel_tooltip(); + else if (tooltip == gui.tooltip_label->get_text()) + is_tooltip_shown = true; + } + else + _gui_cancel_tooltip(); + } + + if (can_tooltip && !is_tooltip_shown) { gui.tooltip=over; gui.tooltip_pos=mpos;//(parent_xform * get_transform()).affine_inverse().xform(pos); @@ -2062,7 +2075,6 @@ void Viewport::_gui_input_event(InputEvent p_event) { - //get_tree()->call_group(SceneTree::GROUP_CALL_REALTIME,"windows","_cancel_input_ID",p_event.ID); get_tree()->set_input_as_handled(); @@ -2083,6 +2095,7 @@ void Viewport::_gui_input_event(InputEvent p_event) { } break; case InputEvent::ACTION: case InputEvent::JOYSTICK_BUTTON: + case InputEvent::JOYSTICK_MOTION: case InputEvent::KEY: { @@ -2102,7 +2115,7 @@ void Viewport::_gui_input_event(InputEvent p_event) { if (gui.key_event_accepted) { - get_tree()->call_group(SceneTree::GROUP_CALL_REALTIME,"windows","_cancel_input_ID",p_event.ID); + get_tree()->set_input_as_handled(); break; } } @@ -2162,7 +2175,7 @@ void Viewport::_gui_input_event(InputEvent p_event) { if (next) { next->grab_focus(); - get_tree()->call_group(SceneTree::GROUP_CALL_REALTIME,"windows","_cancel_input_ID",p_event.ID); + get_tree()->set_input_as_handled(); } } @@ -2355,8 +2368,7 @@ void Viewport::_gui_control_grab_focus(Control* p_control) { if (gui.key_focus && gui.key_focus==p_control) return; - _gui_remove_focus(); - get_tree()->call_group(SceneTree::GROUP_CALL_REALTIME,"windows","_gui_remove_focus"); + get_tree()->call_group(SceneTree::GROUP_CALL_REALTIME,"_viewports","_gui_remove_focus"); gui.key_focus=p_control; p_control->notification(Control::NOTIFICATION_FOCUS_ENTER); p_control->update(); @@ -2664,6 +2676,7 @@ void Viewport::_bind_methods() { ObjectTypeDB::bind_method(_MD("is_input_disabled"), &Viewport::is_input_disabled); ObjectTypeDB::bind_method(_MD("_gui_show_tooltip"), &Viewport::_gui_show_tooltip); + ObjectTypeDB::bind_method(_MD("_gui_remove_focus"), &Viewport::_gui_remove_focus); ADD_PROPERTY( PropertyInfo(Variant::RECT2,"rect"), _SCS("set_rect"), _SCS("get_rect") ); ADD_PROPERTY( PropertyInfo(Variant::BOOL,"own_world"), _SCS("set_use_own_world"), _SCS("is_using_own_world") ); diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp index bc0951e436..be2c12d63a 100644 --- a/scene/register_scene_types.cpp +++ b/scene/register_scene_types.cpp @@ -632,6 +632,7 @@ void register_scene_types() { ObjectTypeDB::register_type<PackedScene>(); ObjectTypeDB::register_type<SceneTree>(); + ObjectTypeDB::register_virtual_type<SceneTreeTimer>(); //sorry, you can't create it OS::get_singleton()->yield(); //may take time to init diff --git a/scene/resources/curve.cpp b/scene/resources/curve.cpp index 88ff09e961..29460790ff 100644 --- a/scene/resources/curve.cpp +++ b/scene/resources/curve.cpp @@ -644,7 +644,7 @@ Vector2 Curve2D::interpolate_baked(float p_offset,bool p_cubic) const{ if (p_offset>=baked_max_ofs) return r[bpc-1]; - int idx = Math::floor(p_offset/bake_interval); + int idx = Math::floor((double)p_offset/(double)bake_interval); float frac = Math::fmod(p_offset,bake_interval); if (idx>=bpc-1) { @@ -1117,7 +1117,7 @@ Vector3 Curve3D::interpolate_baked(float p_offset,bool p_cubic) const{ if (p_offset>=baked_max_ofs) return r[bpc-1]; - int idx = Math::floor(p_offset/bake_interval); + int idx = Math::floor((double)p_offset/(double)bake_interval); float frac = Math::fmod(p_offset,bake_interval); if (idx>=bpc-1) { @@ -1161,7 +1161,7 @@ float Curve3D::interpolate_baked_tilt(float p_offset) const{ if (p_offset>=baked_max_ofs) return r[bpc-1]; - int idx = Math::floor(p_offset/bake_interval); + int idx = Math::floor((double)p_offset/(double)bake_interval); float frac = Math::fmod(p_offset,bake_interval); if (idx>=bpc-1) { diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp index 499cf0a169..03f28bef08 100644 --- a/scene/resources/default_theme/default_theme.cpp +++ b/scene/resources/default_theme/default_theme.cpp @@ -626,22 +626,32 @@ void fill_default_theme(Ref<Theme>& t,const Ref<Font> & default_font,const Ref<F // GraphNode - Ref<StyleBoxTexture> graphsb = make_stylebox(graph_node_png,6,24,6,5,3,24,16,5); - Ref<StyleBoxTexture> graphsbselected = make_stylebox(graph_node_selected_png,6,24,6,5,3,24,16,5); + Ref<StyleBoxTexture> graphsb = make_stylebox(graph_node_png,6,24,6,5,16,24,16,5); + Ref<StyleBoxTexture> graphsbcomment = make_stylebox(graph_node_comment_png,6,24,6,5,16,24,16,5); + Ref<StyleBoxTexture> graphsbcommentselected = make_stylebox(graph_node_comment_focus_png,6,24,6,5,16,24,16,5); + Ref<StyleBoxTexture> graphsbselected = make_stylebox(graph_node_selected_png,6,24,6,5,16,24,16,5); Ref<StyleBoxTexture> graphsbdefault = make_stylebox(graph_node_default_png,4,4,4,4,6,4,4,4); Ref<StyleBoxTexture> graphsbdeffocus = make_stylebox(graph_node_default_focus_png,4,4,4,4,6,4,4,4); + Ref<StyleBoxTexture> graph_bpoint = make_stylebox(graph_node_breakpoint_png,6,24,6,5,16,24,16,5); + Ref<StyleBoxTexture> graph_position = make_stylebox(graph_node_position_png,6,24,6,5,16,24,16,5); + //graphsb->set_expand_margin_size(MARGIN_LEFT,10); //graphsb->set_expand_margin_size(MARGIN_RIGHT,10); t->set_stylebox("frame","GraphNode", graphsb ); t->set_stylebox("selectedframe","GraphNode", graphsbselected ); t->set_stylebox("defaultframe", "GraphNode", graphsbdefault ); t->set_stylebox("defaultfocus", "GraphNode", graphsbdeffocus ); + t->set_stylebox("comment", "GraphNode", graphsbcomment ); + t->set_stylebox("commentfocus", "GraphNode", graphsbcommentselected ); + t->set_stylebox("breakpoint", "GraphNode", graph_bpoint ); + t->set_stylebox("position", "GraphNode", graph_position ); t->set_constant("separation","GraphNode", 1 *scale); t->set_icon("port","GraphNode", make_icon( graph_port_png ) ); t->set_icon("close","GraphNode", make_icon( graph_node_close_png ) ); + t->set_icon("resizer","GraphNode", make_icon( window_resizer_png ) ); t->set_font("title_font","GraphNode", default_font ); t->set_color("title_color","GraphNode", Color(0,0,0,1)); - t->set_constant("title_offset","GraphNode", 18 *scale); + t->set_constant("title_offset","GraphNode", 20 *scale); t->set_constant("close_offset","GraphNode", 18 *scale); t->set_constant("port_offset","GraphNode", 3 *scale); @@ -921,7 +931,12 @@ void fill_default_theme(Ref<Theme>& t,const Ref<Font> & default_font,const Ref<F t->set_icon("minus","GraphEdit", make_icon(icon_zoom_less_png) ); t->set_icon("reset","GraphEdit", make_icon(icon_zoom_reset_png) ); t->set_icon("more","GraphEdit", make_icon(icon_zoom_more_png) ); + t->set_icon("snap","GraphEdit", make_icon(icon_snap_png) ); t->set_stylebox("bg","GraphEdit", make_stylebox( tree_bg_png,4,4,4,5) ); + t->set_color("grid_minor","GraphEdit", Color(1,1,1,0.05) ); + t->set_color("grid_major","GraphEdit", Color(1,1,1,0.2) ); + t->set_constant("bezier_len_pos","GraphEdit", 80*scale ); + t->set_constant("bezier_len_neg","GraphEdit", 160*scale ); diff --git a/scene/resources/default_theme/graph_node.png b/scene/resources/default_theme/graph_node.png Binary files differindex 5eea134b25..d4b4dd3c1f 100644 --- a/scene/resources/default_theme/graph_node.png +++ b/scene/resources/default_theme/graph_node.png diff --git a/scene/resources/default_theme/graph_node_breakpoint.png b/scene/resources/default_theme/graph_node_breakpoint.png Binary files differnew file mode 100644 index 0000000000..0e36f31bd4 --- /dev/null +++ b/scene/resources/default_theme/graph_node_breakpoint.png diff --git a/scene/resources/default_theme/graph_node_comment.png b/scene/resources/default_theme/graph_node_comment.png Binary files differnew file mode 100644 index 0000000000..f2d6daa259 --- /dev/null +++ b/scene/resources/default_theme/graph_node_comment.png diff --git a/scene/resources/default_theme/graph_node_comment_focus.png b/scene/resources/default_theme/graph_node_comment_focus.png Binary files differnew file mode 100644 index 0000000000..a4b7b5a618 --- /dev/null +++ b/scene/resources/default_theme/graph_node_comment_focus.png diff --git a/scene/resources/default_theme/graph_node_position.png b/scene/resources/default_theme/graph_node_position.png Binary files differnew file mode 100644 index 0000000000..7ec15e2ff4 --- /dev/null +++ b/scene/resources/default_theme/graph_node_position.png diff --git a/scene/resources/default_theme/graph_node_selected.png b/scene/resources/default_theme/graph_node_selected.png Binary files differindex 22fdc7e89f..f76c9703dd 100644 --- a/scene/resources/default_theme/graph_node_selected.png +++ b/scene/resources/default_theme/graph_node_selected.png diff --git a/scene/resources/default_theme/graph_port.png b/scene/resources/default_theme/graph_port.png Binary files differindex 445e8548ce..9d5082cfdb 100644 --- a/scene/resources/default_theme/graph_port.png +++ b/scene/resources/default_theme/graph_port.png diff --git a/scene/resources/default_theme/icon_snap.png b/scene/resources/default_theme/icon_snap.png Binary files differnew file mode 100644 index 0000000000..93194d34e7 --- /dev/null +++ b/scene/resources/default_theme/icon_snap.png diff --git a/scene/resources/default_theme/source/graph_port.svg b/scene/resources/default_theme/source/graph_port.svg new file mode 100644 index 0000000000..de9b1d4827 --- /dev/null +++ b/scene/resources/default_theme/source/graph_port.svg @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="10" + height="10" + viewBox="0 0 10 10" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="graph_port.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="-5.0080069" + inkscape:cy="6.2185379" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:snap-smooth-nodes="true" + inkscape:object-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1042.3622)"> + <circle + style="fill:#f3f3f3;fill-rule:evenodd;stroke:#d8d8d8;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1" + id="path3335" + cx="5" + cy="1047.3622" + r="4" /> + </g> +</svg> diff --git a/scene/resources/default_theme/theme_data.h b/scene/resources/default_theme/theme_data.h index ab758f72b4..73c801483f 100644 --- a/scene/resources/default_theme/theme_data.h +++ b/scene/resources/default_theme/theme_data.h @@ -5,12 +5,12 @@ static const unsigned char arrow_down_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x4,0x0,0x0,0x0,0xfc,0x7c,0x94,0x6c,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x4a,0x49,0x44,0x41,0x54,0x18,0xd3,0x63,0x60,0xa0,0x1a,0x60,0x64,0x60,0x60,0x60,0x78,0xf0,0x1f,0x55,0x50,0x81,0x91,0x81,0x81,0x9,0x97,0xe,0xfc,0x12,0x8c,0xf1,0xc,0x5f,0xe1,0x22,0xdf,0x19,0xd3,0x91,0xe4,0xef,0x6b,0xdc,0xbf,0xf4,0xe0,0xff,0x83,0xff,0xf,0xae,0x3f,0xd6,0x45,0xb2,0x9c,0x81,0x81,0x81,0xe1,0x5,0xf7,0xcf,0x29,0xc,0xc,0xec,0x39,0x12,0x5f,0x19,0xa8,0xd,0x0,0x99,0x85,0x11,0xfa,0x28,0xbe,0xff,0xef,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x6,0x0,0x0,0x0,0x56,0x75,0x5c,0xe7,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x6d,0x49,0x44,0x41,0x54,0x28,0x91,0x63,0x60,0x18,0x74,0x80,0x11,0xc6,0x78,0xf0,0xe0,0xc1,0x7f,0x7c,0xa,0x15,0x14,0x14,0x18,0x19,0x18,0x18,0x18,0x98,0x48,0xb5,0x81,0x7c,0xd,0x8c,0x8c,0x8c,0xf1,0xc,0xc,0xc,0x5f,0xb1,0xa8,0xf9,0xce,0xc8,0xc8,0x98,0xe,0x57,0x87,0x2c,0x73,0xff,0xfe,0x7d,0xd,0x6,0x6,0x86,0x55,0x8c,0x8c,0x8c,0xba,0x50,0xa1,0x1b,0xcc,0xcc,0xcc,0x61,0xb2,0xb2,0xb2,0x97,0xb1,0x6a,0x60,0x60,0x60,0x60,0x78,0xf1,0xe2,0x5,0xf7,0xcf,0x9f,0x3f,0xa7,0x30,0x30,0x30,0x30,0xb0,0xb3,0xb3,0xe7,0x48,0x48,0x48,0x60,0xb3,0x75,0x30,0x1,0x0,0x28,0x20,0x14,0xc2,0x1b,0xd0,0x7c,0xca,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char arrow_right_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x4,0x0,0x0,0x0,0xfc,0x7c,0x94,0x6c,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x4e,0x49,0x44,0x41,0x54,0x18,0xd3,0x63,0x60,0x20,0x13,0x3c,0xf8,0xff,0xe0,0xff,0x83,0xff,0xf7,0x13,0x10,0x22,0x8c,0x30,0x9,0x6,0x6,0x6,0x6,0x86,0xaf,0x8c,0xe6,0xf2,0x57,0x21,0x22,0x4c,0x28,0x1a,0xb9,0xff,0xaf,0x7a,0xc1,0x8d,0x4d,0x82,0x81,0x41,0xeb,0xe7,0x14,0xec,0x12,0x70,0x80,0x2e,0x71,0x8d,0x3d,0x7,0x9b,0xc4,0x57,0xc6,0x30,0x89,0xaf,0x58,0x24,0xfe,0xe7,0xc0,0xdc,0x44,0xe,0x0,0x0,0xa0,0xe1,0x15,0x49,0x2,0x9f,0xab,0x0,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x6,0x0,0x0,0x0,0x56,0x75,0x5c,0xe7,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x6c,0x49,0x44,0x41,0x54,0x28,0x91,0x63,0x60,0xa0,0x35,0x60,0x44,0xe6,0x3c,0x78,0xf0,0xe0,0x3f,0x8c,0xfd,0xff,0xff,0xff,0x44,0x45,0x45,0xc5,0x5,0xe8,0x1a,0x98,0x70,0x9a,0xc4,0xc8,0x38,0xe5,0xe1,0xc3,0x87,0xda,0x44,0x6b,0x60,0x60,0x60,0xe0,0xfe,0xff,0xff,0xff,0xaa,0x17,0x2f,0x5e,0x70,0x13,0xab,0x81,0x81,0x81,0x81,0x41,0xeb,0xe7,0xcf,0x9f,0x53,0x48,0xd1,0x80,0x1,0x8,0x69,0xb8,0xc6,0xce,0xce,0x9e,0x43,0xac,0x86,0xaf,0x8c,0x8c,0x8c,0x61,0x12,0x12,0x12,0x5f,0x89,0xd2,0xf0,0xff,0xff,0xff,0x1c,0x79,0x79,0xf9,0xab,0x84,0x1d,0x49,0x6d,0x0,0x0,0x8f,0x30,0x1e,0x10,0x6e,0x79,0xda,0xf9,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -60,12 +60,12 @@ static const unsigned char checker_bg_png[]={ static const unsigned char close_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x6c,0x49,0x44,0x41,0x54,0x28,0xcf,0xad,0x90,0xd1,0xa,0x80,0x20,0xc,0x45,0xad,0xa7,0x6b,0xee,0x35,0xb1,0x3f,0xf3,0xbb,0x13,0xc,0xea,0x5f,0x5c,0xf,0x42,0x4d,0x1c,0x14,0xd4,0xde,0xc6,0x39,0xd3,0xdd,0x19,0xf3,0x53,0xd9,0x48,0x5e,0xf6,0xe4,0x6d,0x6c,0x30,0xa,0xd2,0xad,0x90,0x47,0x42,0x11,0xa,0xcd,0x76,0x5,0x63,0x9b,0x16,0xd9,0xb9,0x20,0x9f,0xbc,0x14,0x15,0xb,0x65,0x47,0x56,0x71,0x55,0x90,0xc1,0x60,0x1c,0x12,0x8f,0x5a,0x26,0x1e,0xd4,0x79,0xf9,0x45,0x5d,0x57,0x59,0xd2,0x85,0x36,0x51,0x87,0xfb,0xd0,0xef,0xe,0xf5,0x78,0xea,0x4f,0x75,0x2,0x30,0x98,0x34,0x72,0xa,0x11,0xfb,0xc2,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x9b,0x49,0x44,0x41,0x54,0x38,0x8d,0xcd,0x92,0x31,0xe,0xc2,0x30,0x10,0x4,0x17,0xaa,0x3d,0x67,0xdb,0x58,0xd0,0xd3,0xf0,0xa3,0x7c,0x36,0x3c,0x82,0x48,0x44,0x22,0x6f,0xb1,0x4d,0x85,0x14,0x81,0xf,0x2c,0x28,0xe0,0xda,0xd5,0x8c,0x4e,0x77,0xb,0xfc,0xd5,0x98,0xd9,0x20,0x29,0x7a,0xb9,0xa4,0x68,0x66,0x83,0xb,0x93,0xcc,0x24,0xa7,0x9a,0x44,0x52,0x24,0x39,0x91,0xcc,0x55,0x89,0xa4,0xde,0xcc,0xce,0x24,0xb,0xc9,0x39,0x84,0xb0,0xf7,0xb2,0xae,0xeb,0x76,0xde,0x8a,0x4f,0x92,0x66,0xd8,0x91,0x5c,0x49,0x5e,0x9a,0xe1,0xb5,0x64,0x5,0x16,0x92,0x8b,0x7,0x6f,0x9b,0x8c,0x0,0x4a,0x29,0x9b,0x26,0x81,0xa4,0x3e,0xa5,0x34,0x2,0x38,0x2,0x58,0x0,0xcc,0x0,0xe,0x39,0xe7,0xd3,0xfa,0xb0,0xee,0xea,0x8f,0x7,0x7b,0xf5,0x9d,0xb7,0xb0,0x97,0x55,0x25,0x5f,0x17,0xe9,0x2e,0xf9,0xb8,0xca,0x3f,0x9b,0x1b,0x1a,0xe3,0x40,0x47,0xa0,0xda,0xda,0x61,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char close_hl_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x6c,0x49,0x44,0x41,0x54,0x28,0xcf,0xad,0x90,0xd1,0xa,0x80,0x20,0xc,0x45,0xad,0xa7,0x6b,0xee,0x35,0xb1,0x3f,0xf3,0xbb,0x13,0xc,0xea,0x5f,0x5c,0xf,0x42,0x4d,0x1c,0x14,0xd4,0xde,0xc6,0x39,0xd3,0xdd,0x19,0xf3,0x53,0xd9,0x48,0x5e,0xf6,0xe4,0x6d,0x6c,0x30,0xa,0xd2,0xad,0x90,0x47,0x42,0x11,0xa,0xcd,0x76,0x5,0x63,0x9b,0x16,0xd9,0xb9,0x20,0x9f,0xbc,0x14,0x15,0xb,0x65,0x47,0x56,0x71,0x55,0x90,0xc1,0x60,0x1c,0x12,0x8f,0x5a,0x26,0x1e,0xd4,0x79,0xf9,0x45,0x5d,0x57,0x59,0xd2,0x85,0x36,0x51,0x87,0xfb,0xd0,0xef,0xe,0xf5,0x78,0xea,0x4f,0x75,0x2,0x30,0x98,0x34,0x72,0xa,0x11,0xfb,0xc2,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x9b,0x49,0x44,0x41,0x54,0x38,0x8d,0xcd,0x92,0x31,0xe,0xc2,0x30,0x10,0x4,0x17,0xaa,0x3d,0x67,0xdb,0x58,0xd0,0xd3,0xf0,0xa3,0x7c,0x36,0x3c,0x82,0x48,0x44,0x22,0x6f,0xb1,0x4d,0x85,0x14,0x81,0xf,0x2c,0x28,0xe0,0xda,0xd5,0x8c,0x4e,0x77,0xb,0xfc,0xd5,0x98,0xd9,0x20,0x29,0x7a,0xb9,0xa4,0x68,0x66,0x83,0xb,0x93,0xcc,0x24,0xa7,0x9a,0x44,0x52,0x24,0x39,0x91,0xcc,0x55,0x89,0xa4,0xde,0xcc,0xce,0x24,0xb,0xc9,0x39,0x84,0xb0,0xf7,0xb2,0xae,0xeb,0x76,0xde,0x8a,0x4f,0x92,0x66,0xd8,0x91,0x5c,0x49,0x5e,0x9a,0xe1,0xb5,0x64,0x5,0x16,0x92,0x8b,0x7,0x6f,0x9b,0x8c,0x0,0x4a,0x29,0x9b,0x26,0x81,0xa4,0x3e,0xa5,0x34,0x2,0x38,0x2,0x58,0x0,0xcc,0x0,0xe,0x39,0xe7,0xd3,0xfa,0xb0,0xee,0xea,0x8f,0x7,0x7b,0xf5,0x9d,0xb7,0xb0,0x97,0x55,0x25,0x5f,0x17,0xe9,0x2e,0xf9,0xb8,0xca,0x3f,0x9b,0x1b,0x1a,0xe3,0x40,0x47,0xa0,0xda,0xda,0x61,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -100,12 +100,27 @@ static const unsigned char full_panel_bg_png[]={ static const unsigned char graph_node_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x3,0x0,0x0,0x0,0x24,0xa3,0x7,0xa4,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x1,0x4d,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf,0xd,0x10,0x17,0x14,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x12,0x10,0x13,0x0,0x0,0x0,0x19,0x17,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x16,0x12,0x19,0x0,0x0,0x0,0xe,0xb,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0xb,0x10,0x16,0x12,0x19,0x0,0x0,0x0,0x1d,0x1a,0x1f,0x35,0x2f,0x38,0xba,0xa9,0xc3,0xc3,0xb7,0xcb,0xbd,0xad,0xc5,0xb9,0xa9,0xc3,0xb5,0xa3,0xbf,0xb4,0xa1,0xbe,0xb4,0xa2,0xbd,0xb4,0xa2,0xbe,0xb3,0xa2,0xbe,0xb1,0xa0,0xbc,0xb2,0xa0,0xbc,0xb2,0x9f,0xbc,0xb0,0x9e,0xba,0xb0,0x9d,0xbb,0xb1,0x9e,0xbb,0xb0,0x9e,0xbb,0xb1,0x9e,0xba,0xaf,0x9c,0xb9,0xae,0x9c,0xb9,0xae,0x9c,0xb8,0xaf,0x9d,0xb9,0xad,0x9b,0xb7,0xad,0x9a,0xb7,0xad,0x9a,0xb8,0xac,0x99,0xb6,0xab,0x99,0xb6,0xac,0x98,0xb6,0xab,0x98,0xb6,0xab,0x99,0xb5,0xa9,0x97,0xb4,0xa9,0x97,0xb5,0xaa,0x97,0xb4,0xa8,0x95,0xb3,0xa8,0x95,0xb2,0xa7,0x95,0xb3,0xa7,0x93,0xb1,0xa6,0x93,0xb1,0xa5,0x91,0xaf,0xa5,0x91,0xb0,0xa4,0x91,0xaf,0xa5,0x92,0xb0,0xa4,0x91,0xb0,0xa5,0x92,0xaf,0xa3,0x90,0xae,0xa3,0x90,0xad,0xa3,0x8f,0xae,0xa2,0x90,0xae,0xa1,0x8e,0xac,0xa1,0x8e,0xad,0xa2,0x8e,0xac,0x9f,0x8d,0xab,0xa0,0x8d,0xab,0xa0,0x8c,0xab,0xa0,0x8d,0xaa,0x9f,0x8c,0xaa,0x9f,0x8c,0xab,0x9e,0x8a,0xaa,0x9e,0x8b,0xa9,0x9e,0x8b,0xaa,0x9e,0x8a,0xa9,0x9d,0x8a,0xa9,0x9c,0x88,0xa7,0x9c,0x88,0xa8,0x9c,0x89,0xa7,0x9c,0x89,0xa8,0x9a,0x87,0xa6,0x9b,0x87,0xa6,0x9b,0x86,0xa6,0x9b,0x87,0xa7,0x19,0x15,0x1c,0x4a,0x42,0x4f,0x3b,0x34,0x3f,0x39,0x30,0x3f,0x24,0x1e,0x27,0xff,0xff,0xff,0x8f,0x6b,0x6d,0x0,0x0,0x0,0x0,0x22,0x74,0x52,0x4e,0x53,0x0,0x1,0x3,0x6,0x8,0x9,0x2,0xc,0x1e,0x33,0x41,0x46,0xd,0x31,0x9a,0xe3,0x5,0x24,0xb4,0x39,0xf4,0x44,0xa,0x47,0x45,0x3d,0xf8,0x2a,0xcd,0x11,0x3f,0xd3,0xfd,0x2b,0x85,0xa8,0x7,0x57,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x6e,0x22,0xf,0x51,0x17,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x1,0x53,0x49,0x44,0x41,0x54,0x38,0xcb,0xed,0xd4,0x69,0x57,0x1,0x51,0x18,0xc0,0xf1,0x8b,0x99,0xb1,0x8c,0x65,0x6c,0x63,0x9d,0xc1,0x10,0xd1,0xc4,0x44,0x23,0x6b,0xb2,0x55,0xa8,0x24,0x92,0xb2,0x15,0x45,0x8a,0xef,0xff,0xb6,0x6b,0xba,0x39,0x4e,0xbd,0xe8,0xb,0xf8,0x9f,0xe7,0xdc,0x73,0x9e,0xdf,0xfb,0xe7,0x2,0x0,0x64,0x72,0x5,0x86,0xc3,0x30,0x85,0x5c,0x6,0x60,0x84,0x52,0xa5,0xd6,0x90,0x30,0x8d,0x5a,0xa5,0x24,0xe0,0xae,0xd5,0xe9,0xd,0x9c,0x94,0x41,0xaf,0xd3,0x12,0x80,0x32,0x9a,0xfc,0x81,0x3d,0xa9,0x80,0xdf,0x64,0xa4,0x0,0x66,0xb6,0x4,0x43,0xfb,0x52,0xa1,0xa0,0xc5,0x8c,0x1,0xdc,0xca,0x85,0x23,0x7,0x61,0x9e,0xe7,0x23,0x3c,0xcf,0x59,0x71,0x40,0xdb,0xb8,0xc3,0x68,0x34,0x1a,0x83,0x13,0x8b,0x71,0x36,0x1a,0xe0,0x24,0x27,0x1c,0x9,0x71,0x21,0x9e,0x48,0x8,0xc7,0x8,0xc4,0xe4,0x49,0x4a,0x4c,0x8a,0x29,0x51,0x44,0x90,0xce,0x64,0xd2,0xe9,0x2c,0x9c,0x2c,0x82,0x5c,0x3e,0x97,0x3b,0xcd,0x17,0xf2,0x67,0x5,0x4,0x45,0x58,0xa9,0x5c,0x2a,0x96,0xcb,0x8,0x2a,0xd5,0x6a,0x65,0xdd,0x79,0x5,0xc1,0xc5,0xe5,0xba,0xf5,0x8b,0xa0,0x56,0x6f,0xd4,0xae,0x1a,0x8d,0xfa,0xf5,0xd,0x82,0xe6,0x6d,0xb3,0xd9,0x6a,0xc1,0xb9,0x43,0xd0,0x6e,0x77,0xee,0xdb,0xb0,0x4e,0x1b,0x41,0xf7,0xa1,0xf7,0xf8,0xd4,0xef,0xf6,0x7b,0x7d,0x4,0x83,0xe1,0x68,0x38,0x1c,0xd,0xc6,0xe3,0x67,0x4,0x2f,0x93,0xe9,0x74,0x3a,0x81,0xbd,0x22,0x78,0x9b,0xc1,0xe6,0xf3,0xd9,0xec,0x1d,0xc1,0x56,0x12,0x2c,0x3e,0x36,0x2d,0xbe,0xe1,0x73,0xd3,0xe,0x76,0xf0,0x1f,0xd0,0xb6,0xdf,0x60,0xdf,0x6,0x3b,0xd,0x30,0x87,0x73,0xf9,0xb3,0x2f,0x9d,0xe,0xc,0x50,0x2e,0xf7,0xa,0xc9,0x72,0xe5,0x76,0x51,0x80,0x60,0x58,0x8f,0x77,0x21,0xe5,0xf5,0xb0,0xc,0xbc,0x75,0x39,0xe3,0x63,0x49,0x1b,0x8c,0x64,0x7d,0x8c,0x5c,0xfa,0xd,0x14,0x38,0x2d,0x85,0x2b,0x8,0xf0,0xb7,0x2f,0x56,0x15,0x7,0x92,0x8b,0x88,0xb4,0x10,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x17,0xd,0x5,0x12,0xa1,0x38,0x83,0x9b,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x2,0x74,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0x97,0x3d,0x6f,0xd3,0x60,0x10,0xc7,0x7f,0x17,0x9b,0x26,0x25,0x22,0xad,0xa,0x8,0xf1,0x52,0x75,0x0,0x16,0x24,0x90,0x2a,0x96,0x7c,0x1,0x6,0xc4,0xce,0xc4,0x17,0x0,0x31,0xb0,0x30,0x0,0x23,0x82,0x85,0x5,0x9,0x4,0x5f,0x80,0x89,0x1d,0x31,0xf0,0x5,0x58,0x50,0x25,0x50,0x59,0x80,0xa1,0xe2,0xad,0x28,0x34,0x4a,0x3,0x25,0x76,0xea,0xe7,0x39,0x6,0x3f,0x76,0x6d,0xc7,0x49,0x5f,0xd8,0x90,0x6f,0xb1,0xf5,0xe4,0xb9,0xdf,0xdd,0xfd,0xef,0x22,0xf9,0x84,0x2d,0x13,0xa0,0x6,0x78,0xee,0x29,0xe4,0x4d,0x1,0xb,0x18,0xf7,0x54,0x32,0x97,0x6a,0xc0,0x7e,0x60,0xe,0x38,0xc,0xb4,0x80,0x7d,0x5,0xc0,0x26,0xd0,0x7,0x3a,0x40,0x17,0xf8,0x3,0xd8,0x24,0x6a,0x13,0x38,0x35,0x73,0x60,0xf6,0x6a,0xa3,0xde,0xb8,0x38,0x35,0x55,0x3f,0x41,0x89,0xd,0x87,0xe1,0x97,0x20,0xc,0x5e,0xae,0xff,0xea,0x3d,0x5,0x3e,0x2,0x1b,0xe2,0x22,0x2d,0xcc,0xcd,0x1e,0x7c,0x78,0x72,0xe1,0xf4,0xa5,0x7b,0xb7,0x1f,0x7c,0x9e,0x6e,0x35,0xca,0xfc,0x19,0xf4,0x3,0xee,0xdc,0xbf,0x39,0xff,0x69,0xe5,0xc3,0x8b,0x6e,0x6f,0xed,0x6,0xb0,0x22,0x40,0x3,0x58,0x3c,0x7a,0xe4,0xf8,0xab,0x67,0x4f,0x9e,0x77,0xa3,0xc8,0x12,0xd,0xa3,0x52,0x80,0x3f,0xe5,0xe3,0xfb,0x35,0xae,0x5c,0xbb,0x3c,0xf7,0xfd,0xc7,0xd7,0xb,0xc0,0x92,0xef,0x74,0x68,0xfa,0x9e,0xdf,0x1c,0xfc,0xe,0xbb,0x88,0xc6,0x47,0xa,0x2a,0x59,0x85,0x95,0x61,0xb8,0xc9,0x30,0x4,0xdf,0xf3,0x9b,0xae,0x6c,0x49,0x0,0x1e,0x80,0x51,0x1b,0xfb,0xc7,0x2,0xc7,0x5a,0x3b,0x88,0x66,0xcf,0x63,0xf3,0x12,0x80,0x26,0xbf,0xa8,0xb5,0xa8,0xa,0x88,0x22,0x8,0x8a,0x22,0x2a,0x19,0x37,0x1d,0xe9,0xad,0x9f,0x6b,0xb4,0x55,0x14,0x5,0x55,0x44,0xe2,0x32,0x6c,0xe2,0x24,0x71,0x18,0x9d,0x4,0xb0,0x6a,0xd3,0x1b,0x2a,0xe9,0x4b,0xfc,0xae,0xe4,0x45,0x19,0x9f,0x81,0x2b,0xdb,0x15,0xa6,0xa2,0x19,0x2d,0xec,0x8,0x24,0x7,0x30,0xd6,0x16,0xf8,0x82,0xa8,0xc6,0x45,0x68,0x52,0xbf,0x4e,0xce,0x60,0xeb,0x42,0x5c,0xb4,0x66,0x9c,0x6c,0xc9,0x1f,0xa4,0x0,0xb0,0x39,0xc5,0xc9,0xa1,0x28,0x89,0x5f,0x14,0xd1,0x5a,0x37,0x32,0x89,0xf2,0x82,0xc6,0x3,0xe0,0xda,0xa,0x22,0x3a,0xa9,0xb,0x9a,0x26,0xaa,0xf1,0x41,0x9a,0x42,0x2,0xb2,0xb2,0x6d,0x6,0x5b,0xa3,0xab,0x23,0xd5,0x48,0x32,0x92,0xe3,0x33,0x10,0x37,0xb7,0x2a,0xea,0xee,0x4a,0x2a,0x42,0xe,0x5a,0x2a,0xa2,0x51,0x37,0x40,0x85,0x48,0x96,0xb4,0x23,0xdb,0x88,0x68,0x5c,0xc4,0xcc,0x3c,0x14,0xa7,0x6f,0xa2,0x6,0xaa,0xb1,0x7c,0xd9,0x30,0xaa,0x79,0xc7,0x49,0x93,0x78,0xf7,0xd1,0xad,0x79,0x76,0x69,0x29,0x20,0xda,0x34,0x2c,0x9e,0x3d,0xff,0x7a,0x27,0x4e,0x4b,0xef,0xde,0xb4,0x4b,0x33,0x58,0xef,0xf7,0x76,0x9b,0x0,0x35,0xfe,0xd1,0x2a,0x40,0x5,0xa8,0x0,0x15,0xa0,0x2,0x54,0x80,0xa,0xf0,0x5f,0x2,0xa4,0xe4,0x13,0x78,0xd7,0x19,0xd8,0x3d,0xf8,0xda,0x4,0x60,0x81,0xc0,0x18,0x13,0xda,0x68,0x7,0x5e,0x11,0x18,0x63,0x42,0x20,0x0,0x6c,0xcd,0xad,0xb2,0x6b,0x41,0x38,0x58,0xee,0x74,0x57,0xdb,0x93,0x20,0x36,0x82,0x4e,0x77,0xb5,0x1d,0x84,0x83,0x65,0x60,0xd,0x30,0xc9,0xe6,0x3a,0x3,0x9c,0x6b,0x35,0x67,0x1f,0x37,0xea,0xd3,0x67,0x3c,0xcf,0x2b,0x15,0xd7,0x18,0x63,0x83,0x70,0xf0,0xbe,0xbf,0xd1,0xbb,0xe,0xbc,0x5,0xd6,0x25,0xb3,0xc2,0xb5,0x80,0x63,0xc0,0x21,0xa0,0x3e,0x66,0xf9,0xe,0x81,0x9f,0xc0,0x37,0xb7,0x47,0x1b,0x29,0x8,0xea,0x27,0xfb,0xe0,0x98,0x2a,0xd4,0x95,0x1c,0xed,0x51,0xf8,0x51,0xfb,0xb,0x1,0xbe,0x20,0x9f,0x90,0x81,0x17,0xaa,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; + + +static const unsigned char graph_node_breakpoint_png[]={ +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x6,0xf,0x3b,0x1c,0xec,0x64,0x51,0x75,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x8f,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0xd7,0xbd,0x9,0xc0,0x20,0x10,0x5,0xe0,0x53,0x2c,0x5d,0x40,0x74,0x4,0xf7,0x9f,0xc4,0x11,0x22,0x2e,0x60,0x6f,0x9a,0x13,0x4e,0x21,0x41,0x50,0x48,0x91,0x77,0x95,0xf8,0xf3,0x79,0x62,0xf5,0x88,0x36,0x4b,0xf5,0x41,0x2d,0xf1,0x22,0x22,0xbf,0x78,0x2e,0x5b,0x97,0x2,0xc9,0xc3,0xc,0x2c,0x95,0xdc,0x6f,0x78,0xce,0x5b,0x97,0xd4,0x42,0x27,0xd9,0xba,0x14,0xac,0x4b,0xa1,0x96,0xd8,0x24,0x20,0x9f,0x41,0x1d,0x7b,0xba,0x59,0xb6,0xaf,0xa7,0x3d,0x7e,0x78,0xdb,0x54,0xbc,0x36,0x74,0xa7,0x77,0x7f,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x4,0xe4,0xb7,0xfc,0xc8,0x6b,0x59,0xce,0x99,0x39,0x95,0x71,0xb4,0x6b,0x4b,0x89,0xf5,0x44,0x72,0x3d,0x93,0x9d,0x3f,0xad,0x1b,0x54,0xed,0x49,0xd3,0x36,0x45,0x4f,0x1f,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char graph_node_close_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x4,0x0,0x0,0x0,0xfc,0x7c,0x94,0x6c,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x65,0x49,0x44,0x41,0x54,0x18,0xd3,0x75,0x90,0x4b,0xe,0x80,0x20,0xc,0x44,0x47,0x57,0x53,0x64,0x2b,0x91,0x9b,0x71,0x6e,0x49,0x30,0xd1,0xbb,0x80,0xb,0xa2,0xb6,0x26,0x74,0x37,0x9f,0x34,0xaf,0x5,0x20,0xc9,0x7,0xa8,0xf1,0x41,0x12,0x0,0x49,0xac,0xcc,0x5f,0xe4,0x3,0x33,0xab,0x24,0xf8,0x55,0x76,0x36,0x1e,0x2e,0x2,0x78,0xd5,0xb2,0x29,0xe1,0xa2,0xb1,0x55,0xef,0x64,0x31,0x76,0x8f,0x58,0xd8,0xd8,0x78,0x3d,0xf6,0x8c,0xdf,0xb4,0xc9,0xf4,0xf5,0xaa,0x8e,0x61,0x48,0xc,0xa1,0x25,0x51,0xd1,0xf0,0xc0,0xd1,0x4b,0x6e,0xc7,0xae,0x34,0x72,0x3,0xf5,0x60,0xdd,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x6,0x0,0x0,0x0,0x56,0x75,0x5c,0xe7,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x93,0x49,0x44,0x41,0x54,0x28,0x91,0x95,0x92,0x31,0xe,0xc2,0x30,0x10,0x4,0x17,0xaa,0x3d,0x7b,0xdb,0x58,0xa4,0xa7,0xe1,0x47,0xfe,0x2c,0x3c,0x82,0x48,0x44,0x22,0x6f,0xb1,0x4d,0x15,0xc9,0x20,0x1f,0x52,0xae,0xdd,0xd9,0x2b,0xe6,0xe,0x0,0x60,0x66,0x59,0x52,0x82,0x33,0x92,0x92,0x99,0x65,0xec,0x30,0xc9,0x4a,0x72,0x19,0x95,0x24,0x25,0x92,0xb,0xc9,0x6a,0x66,0x19,0x92,0x26,0x33,0x7b,0x92,0x6c,0x24,0xd7,0x10,0xc2,0xdc,0xc1,0x5f,0x59,0x8c,0xf1,0x32,0xc,0x42,0x8,0xb3,0xb,0x3b,0xdb,0xde,0x24,0x5f,0x2e,0xdc,0x97,0x3a,0xb0,0x91,0xdc,0x7e,0xe1,0xb3,0x67,0x66,0x9f,0xd6,0xda,0x69,0x58,0x90,0x34,0x95,0x52,0xee,0x0,0x6e,0x0,0x36,0x0,0x2b,0x80,0x6b,0xad,0xf5,0xd1,0x8b,0x70,0x6d,0xb8,0xf6,0xfe,0xd9,0x18,0x96,0xe,0x1f,0xe,0x38,0xf6,0x1a,0x1f,0x9f,0xec,0x40,0x47,0x56,0x51,0x84,0x77,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; + + +static const unsigned char graph_node_comment_png[]={ +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x19,0x11,0x2a,0x1d,0xd6,0x78,0x8b,0x40,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x1,0x74,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0x97,0xbf,0x4e,0xc2,0x50,0x14,0xc6,0x7f,0x6d,0x91,0x56,0x1b,0x90,0x80,0x2c,0x44,0xc2,0xa0,0x2e,0xe,0x3e,0x3,0x89,0x93,0xf1,0x1d,0x4c,0x18,0x4d,0x1c,0x7c,0xb,0x57,0x7,0x13,0x47,0x13,0x77,0x46,0xe3,0xc4,0x4b,0x98,0x60,0x4c,0xd4,0x81,0x60,0x58,0x94,0xff,0x22,0x2d,0xd0,0xd6,0xe5,0xde,0x88,0x8,0x2,0x35,0x6e,0xf7,0x5b,0x6e,0x9a,0x9c,0xef,0x77,0xee,0x39,0x37,0x1d,0x3e,0x8d,0x2f,0x69,0x80,0xe,0x18,0xe2,0xd4,0xf8,0xae,0x0,0xf0,0x1,0x4f,0x9c,0x1,0x63,0x45,0x3a,0xb0,0x6,0x24,0x81,0x34,0x10,0x7,0x56,0x26,0x0,0x43,0xa0,0x3,0xbc,0x2,0xd,0xe0,0x3,0xf0,0x65,0x57,0x1b,0xd8,0x5e,0x8f,0x25,0x8e,0x2d,0xd3,0x3a,0x88,0x46,0xcd,0x4d,0xa6,0x68,0x30,0x70,0x5f,0x1c,0xd7,0xb9,0x6d,0x77,0x5b,0x97,0xc0,0x13,0xd0,0xd3,0x44,0xa7,0x5c,0x32,0x91,0x3a,0xdf,0xca,0xed,0x1c,0x16,0x52,0xdd,0x2a,0xbf,0xe8,0xaa,0x1e,0xcb,0x3e,0x57,0x1e,0x6f,0x1a,0xad,0xfa,0x29,0x50,0x91,0x33,0xa7,0x4d,0xd3,0xca,0xcf,0x33,0x3,0x14,0x52,0xdd,0xaa,0x69,0x5a,0x79,0x31,0xaa,0x21,0x97,0x65,0x47,0x8c,0x88,0xcd,0x82,0x12,0xb5,0x36,0xa0,0x49,0x80,0xc1,0xf2,0x32,0x24,0x20,0x90,0x4f,0x12,0x46,0x3a,0x7f,0x94,0x2,0x28,0x80,0x2,0x88,0x5f,0x7b,0xfc,0xe3,0xec,0xe1,0x3d,0x1b,0x1a,0x30,0x1a,0x7a,0x1c,0x65,0xd8,0x5f,0xc4,0x74,0x5d,0xa3,0xa4,0x5e,0x41,0x1,0x14,0x40,0x1,0x14,0x40,0x1,0x14,0x40,0x1,0xfe,0x15,0xa0,0x4d,0xc9,0x88,0x4b,0xdf,0xc0,0xf,0xe1,0xf5,0x25,0xc0,0x7,0x1c,0xcf,0xf3,0xdc,0x45,0x9d,0xa2,0xd6,0x1,0x7c,0x5d,0x44,0xd9,0xba,0xe3,0xf6,0xcb,0xc5,0xa6,0x5d,0x9a,0x67,0x2e,0x36,0xed,0x92,0xe3,0xf6,0xcb,0x40,0x1d,0xf0,0x64,0x72,0x5d,0x7,0xf6,0xe2,0x76,0xe2,0xc2,0x32,0x57,0x77,0xd,0xc3,0xd0,0x67,0x74,0xf6,0x1d,0xb7,0x7f,0xdf,0xe9,0xb5,0x4e,0x80,0x3b,0xa0,0xad,0x8d,0x45,0xb8,0x38,0x90,0x1,0x36,0x0,0x73,0x46,0xf8,0x76,0x81,0x37,0xa0,0x26,0x72,0xb4,0xa7,0x4d,0x2c,0x34,0x22,0xf3,0xe0,0x8c,0x9,0x2,0x31,0xf2,0x28,0xe4,0xe2,0x7f,0xea,0x13,0x64,0x47,0x6c,0x83,0x36,0x6d,0xd2,0x40,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; + + +static const unsigned char graph_node_comment_focus_png[]={ +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0x0,0x0,0x0,0x0,0x0,0xf9,0x43,0xbb,0x7f,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x9,0x2,0xe,0x16,0x22,0xbe,0xef,0xc2,0xe1,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x1,0x4a,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0xd7,0xbf,0x4b,0xdb,0x41,0x1c,0xc6,0xf1,0xd7,0x37,0x51,0x4,0x3,0xa,0xa2,0x20,0xd2,0xe2,0xe2,0x64,0x41,0xdc,0xdc,0xac,0xe0,0x54,0xdc,0xb2,0xe6,0x2f,0x10,0x1a,0xf0,0x4f,0x11,0x22,0xf8,0x17,0x64,0xcd,0x26,0x9d,0x1c,0x74,0x73,0x13,0x21,0x4e,0x2e,0xa5,0xa5,0x14,0xac,0x82,0x82,0x62,0xd0,0x7c,0xd3,0xa1,0x77,0x18,0x35,0xfe,0x48,0xa4,0xdb,0x3d,0x70,0xdc,0xf2,0x79,0xde,0x77,0xf7,0x39,0x38,0xee,0xc9,0xdc,0x2b,0x43,0x1,0xc5,0x30,0x67,0x1e,0xaa,0x83,0x1c,0xed,0x30,0x77,0x74,0x15,0x15,0x30,0x8a,0x9,0x4c,0x61,0xc,0xc3,0x8f,0x0,0xb7,0xb8,0xc4,0x29,0xce,0x71,0x8d,0x3c,0xae,0x5a,0xc2,0x5c,0xa3,0x5a,0x59,0xc7,0x17,0x7c,0xd0,0x5b,0x3f,0xf1,0xad,0x5c,0xab,0x6f,0xe3,0x4,0x57,0x59,0x58,0x69,0xb6,0x51,0xad,0x6c,0x62,0xed,0x77,0xf3,0xf0,0x87,0x17,0x34,0xfd,0x69,0xf1,0x23,0x76,0xca,0xb5,0xfa,0x6,0xbe,0xc7,0x33,0x4f,0x61,0xe5,0x35,0x33,0x84,0x9a,0x95,0xe0,0x29,0xc6,0x66,0x95,0xc2,0x78,0xab,0x62,0x7d,0x16,0x1,0x45,0xfd,0xab,0x18,0x1,0x9d,0x78,0x25,0x83,0xa8,0xe0,0x9d,0x4a,0x80,0x4,0x48,0x80,0x7f,0x1a,0xea,0xf1,0xda,0xc,0xe,0x38,0xd8,0xdf,0x5b,0x7d,0x8b,0x69,0x69,0xf9,0xf3,0x6e,0xba,0x85,0x4,0x48,0x80,0x4,0x48,0x80,0x4,0x48,0x80,0x4,0xf8,0xaf,0x80,0xac,0x47,0x46,0xec,0x7b,0x7,0xf9,0x0,0xde,0x3c,0x2,0x72,0xdc,0xa0,0xd5,0x87,0xb9,0x15,0x3c,0x79,0x21,0x44,0xd9,0x33,0x34,0xbb,0x3f,0x4f,0xaf,0x7c,0xb0,0x9a,0xc1,0xd3,0x8e,0xc9,0x75,0x1c,0xb,0x8d,0x6a,0x65,0xb,0xf3,0x2f,0x34,0x37,0xc7,0x71,0xb9,0x56,0xff,0x8a,0x23,0x5c,0x64,0x5d,0x11,0x6e,0xc,0x33,0x98,0xc4,0xc8,0x33,0xe1,0xbb,0x85,0x3f,0xf8,0x15,0x72,0x74,0x3b,0x7b,0xd4,0xd0,0xa1,0x98,0x7,0x9f,0xd9,0x41,0x27,0x1c,0xf9,0x6e,0xc0,0xc6,0x3f,0xd5,0x5f,0x9d,0x54,0x4e,0x15,0xfd,0xeb,0xb4,0x4f,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -119,13 +134,18 @@ static const unsigned char graph_node_default_focus_png[]={ }; +static const unsigned char graph_node_position_png[]={ +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x6,0xf,0x3b,0x3b,0x49,0x6e,0xe4,0x1e,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x90,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0xd7,0xbd,0x9,0xc0,0x20,0x10,0x5,0xe0,0x53,0x2c,0xdd,0x40,0x47,0x70,0x7,0x67,0x77,0x7,0x47,0x88,0x1b,0xd8,0x9b,0xe6,0x84,0x53,0x48,0x10,0x14,0x52,0xe4,0x5d,0x25,0xfe,0x7c,0x9e,0x58,0x3d,0xa2,0xcd,0x52,0x7d,0x50,0x63,0xb8,0x88,0xc8,0x2d,0x9e,0x2b,0x36,0x65,0x4f,0xf2,0x30,0x3,0x4b,0x25,0xf7,0x1b,0x9e,0x73,0x36,0x65,0xb5,0xd0,0x49,0xb1,0x29,0x7b,0x9b,0xb2,0xaf,0x31,0x34,0x9,0xc8,0x67,0x50,0xc7,0x9e,0x6e,0x96,0xed,0xeb,0x69,0x8f,0x1b,0xde,0x36,0x15,0xaf,0xd,0xdd,0xe9,0xdd,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x1f,0x1,0xe5,0x2d,0x3f,0xf2,0x5a,0x91,0x73,0x66,0x4e,0x65,0x1c,0xed,0xda,0x52,0x62,0x3d,0x91,0x5c,0xcf,0x64,0xe7,0x4f,0xeb,0x6,0x80,0xff,0x44,0x93,0xd4,0xd9,0xea,0x7e,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; + + static const unsigned char graph_node_selected_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x3,0x0,0x0,0x0,0x24,0xa3,0x7,0xa4,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0xd8,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf,0xd,0x10,0x17,0x14,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x12,0x10,0x13,0x0,0x0,0x0,0x19,0x17,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x16,0x12,0x19,0x0,0x0,0x0,0xe,0xb,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0xb,0x10,0x16,0x12,0x19,0x0,0x0,0x0,0x1d,0x1a,0x1f,0x35,0x2f,0x38,0x94,0xd6,0x84,0xa4,0xdc,0x95,0x99,0xd8,0x8a,0x8c,0xd3,0x7b,0x8b,0xd2,0x79,0x88,0xd1,0x76,0x87,0xd1,0x74,0x86,0xd0,0x73,0x85,0xd0,0x71,0x83,0xcf,0x70,0x82,0xcf,0x6f,0x81,0xce,0x6d,0x7f,0xce,0x6c,0x7b,0xcc,0x67,0x7d,0xcd,0x68,0x7a,0xcc,0x65,0x79,0xcb,0x64,0x76,0xca,0x61,0x75,0xca,0x60,0x78,0xcb,0x62,0x74,0xc9,0x5e,0x72,0xc9,0x5c,0x70,0xc8,0x59,0x71,0xc8,0x5b,0x6d,0xc7,0x57,0x6f,0xc7,0x58,0x6c,0xc6,0x55,0x68,0xc4,0x51,0x67,0xc4,0x4f,0x69,0xc5,0x52,0x19,0x15,0x1c,0x4a,0x42,0x4f,0x3b,0x34,0x3f,0x39,0x30,0x3f,0x24,0x1e,0x27,0xff,0xff,0xff,0x23,0xbb,0x3,0x70,0x0,0x0,0x0,0x22,0x74,0x52,0x4e,0x53,0x0,0x1,0x3,0x6,0x8,0x9,0x2,0xc,0x1e,0x33,0x41,0x46,0xd,0x31,0x9a,0xe3,0x5,0x24,0xb4,0x39,0xf4,0x44,0xa,0x47,0x45,0x3d,0xf8,0x2a,0xcd,0x11,0x3f,0xd3,0xfd,0x2b,0x85,0xa8,0x7,0x57,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x47,0x60,0xbd,0xc9,0x7b,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x1,0x7,0x49,0x44,0x41,0x54,0x38,0xcb,0xed,0xd4,0xd9,0x5a,0x82,0x40,0x14,0xc0,0xf1,0x23,0x9b,0xb,0x2e,0xb8,0x81,0x1b,0xa8,0x23,0x59,0xb1,0xa4,0x51,0x60,0x81,0x85,0x52,0xf8,0xfe,0x8f,0xd4,0x71,0x3a,0xcd,0xe7,0x57,0x17,0xbd,0x80,0xbf,0x99,0x73,0x71,0xfe,0xf7,0x33,0x0,0x50,0x91,0x64,0x45,0x45,0x8a,0x2c,0x55,0x0,0x69,0xd5,0x5a,0xbd,0xa1,0xa3,0x46,0xbd,0x56,0xd5,0x70,0x6f,0xb6,0xda,0x1d,0xc6,0x75,0xda,0xad,0xa6,0x6,0x46,0xb7,0xb7,0x72,0x6f,0x38,0x77,0xd5,0xeb,0x1a,0xa0,0xf4,0x7,0x6b,0xf7,0x96,0x73,0xd7,0x83,0xbe,0x2,0xea,0x90,0xdd,0x9,0x6c,0xa8,0x82,0x69,0xb1,0x7b,0xe4,0xe1,0xf5,0x3c,0x66,0x99,0xa0,0xea,0xcc,0xf3,0x3d,0x42,0x21,0x8,0x43,0x3f,0x8,0x3,0x3f,0x8,0x28,0x3c,0x8,0x14,0x36,0x68,0x8b,0x67,0xb3,0xa5,0xf0,0x88,0xa2,0x28,0xc2,0xa1,0xf0,0x24,0x50,0x78,0x16,0x28,0xc4,0x71,0x12,0xef,0x92,0x24,0x4e,0x76,0x14,0x5e,0x4,0xa,0xaf,0x2,0x85,0x34,0xcb,0xb2,0x14,0x65,0x29,0x85,0xfd,0xdb,0xd9,0x1e,0x51,0x78,0x17,0x28,0xe4,0x67,0x87,0x43,0x9e,0x1f,0x29,0x5c,0xe0,0xa1,0xf8,0x10,0x8a,0xef,0xf0,0x29,0x5c,0xc3,0x35,0xfc,0x17,0x4c,0xeb,0x77,0x18,0x5d,0x86,0x91,0x9,0xca,0x78,0x52,0xfe,0xec,0xe5,0x64,0xac,0x80,0x31,0x9d,0x9d,0xa8,0x94,0xa7,0xd9,0xd4,0x0,0xcd,0x76,0xe6,0x8b,0x82,0x5b,0xcc,0x1d,0x1b,0xdf,0xba,0x64,0x2f,0x1d,0xdd,0x42,0xba,0xb3,0xb4,0x25,0xfe,0x1b,0xc8,0xaa,0xc9,0xa9,0xb2,0x6,0x7f,0x7d,0x1,0x5d,0xdd,0xb5,0x61,0x26,0xcd,0x71,0x81,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x17,0xd,0x4,0x3b,0xfa,0x91,0x2a,0xb6,0x0,0x0,0x3,0x44,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0x97,0x3f,0x68,0xdc,0x76,0x14,0xc7,0xbf,0xef,0xa7,0x9f,0x7e,0x3a,0xdd,0x39,0xf6,0xdd,0x95,0xb3,0x3,0xc1,0x75,0x1b,0x70,0xa,0xe9,0x98,0x25,0x93,0x87,0x52,0x3a,0x4,0x2,0xce,0xe0,0xd2,0x34,0x35,0x94,0x8e,0x1d,0xbc,0xd5,0x4b,0xc7,0x2e,0x25,0x63,0x2,0x5d,0xa,0xa5,0xb1,0x1b,0x2,0xf5,0xd0,0x40,0xa0,0x90,0x10,0x3a,0x64,0xca,0x92,0x31,0x81,0x24,0xd0,0xd2,0x9a,0x40,0x2f,0x17,0xdf,0x1f,0xfb,0x74,0xf2,0xe9,0x27,0xfd,0x5e,0x7,0x49,0xb6,0x4e,0xe7,0xea,0x86,0x6e,0xe5,0x1e,0xdc,0x49,0x42,0xef,0x7d,0xde,0xf7,0x7d,0xf5,0x13,0xe8,0x47,0xcc,0x4c,0x0,0xc4,0xbd,0x7b,0x4f,0x9c,0xb0,0xdd,0x71,0xdb,0xfb,0x2d,0xc7,0xb0,0x11,0x5a,0x7,0x84,0x4c,0xd8,0xb6,0x62,0x41,0xc2,0xd4,0x67,0x1b,0x43,0x59,0xaf,0xf9,0x97,0x2f,0x5f,0x18,0x2,0x30,0xc4,0xcc,0xd6,0xdd,0x1f,0xef,0x9e,0xea,0x79,0x83,0x33,0xed,0x6e,0xf7,0x6c,0xaf,0xd7,0x59,0xe8,0x7b,0xfd,0x72,0x10,0x4,0x32,0xb,0x50,0x4a,0x85,0x33,0x95,0x99,0xc1,0xdc,0x5c,0xad,0x59,0xaf,0x56,0x7f,0x9f,0xab,0x94,0x5f,0xad,0x7e,0xbe,0x7a,0x40,0x5b,0x5b,0xf7,0x2b,0x41,0xbb,0xf9,0x6e,0xa7,0xd7,0x5e,0xb9,0x72,0x75,0xe5,0x86,0x72,0xa4,0x85,0x82,0x8,0x86,0x61,0xf4,0xcb,0x9d,0x47,0x1b,0xb5,0xb9,0xfa,0x23,0x55,0x5f,0xf8,0x43,0xea,0x4e,0xb7,0xdc,0x7c,0xf3,0xfa,0xdc,0xc7,0xeb,0x1f,0xdc,0x64,0x66,0x71,0xb8,0x37,0xbb,0x2b,0x1d,0xb,0x44,0x23,0x13,0x80,0x99,0x11,0xe,0x23,0x50,0x65,0x6f,0x71,0xf5,0x93,0x95,0x9b,0x3f,0x6f,0xff,0xb6,0x76,0x9a,0x9c,0xa6,0x8,0x42,0x5f,0x79,0xfd,0x83,0x79,0xa7,0x24,0x5,0xfc,0xfa,0x2e,0x9,0x42,0xa8,0xd,0xc2,0x20,0x1a,0xfd,0x69,0x3,0x12,0x4,0xf8,0xf5,0x5d,0xa7,0x24,0x85,0xd7,0x3f,0x98,0xf,0x42,0x5f,0x9,0xc3,0x46,0xc,0xfc,0x81,0xb,0x0,0x91,0x66,0x30,0x1b,0x10,0x0,0x98,0x6c,0x7b,0x80,0xc0,0x60,0x66,0x44,0x21,0x3,0x0,0x6,0xfe,0xc0,0x35,0x6c,0x84,0xd0,0x5a,0x53,0x84,0x88,0x0,0x80,0x13,0xd9,0xcc,0xc,0x88,0xb8,0x10,0x0,0x40,0x0,0x1b,0x0,0xcc,0x0,0xc7,0x39,0x11,0x22,0xd2,0x5a,0x93,0xb4,0x6d,0x9b,0x11,0x25,0x89,0x86,0xc1,0x20,0x80,0x18,0xa0,0xe3,0xee,0x47,0xd0,0xcc,0x31,0xad,0x91,0x79,0xa3,0x40,0x4,0x80,0x91,0xe6,0xe5,0x83,0x73,0x37,0x64,0xee,0x2e,0xd8,0x24,0x9,0xc4,0xc7,0xa,0xb2,0x6a,0x8a,0x0,0x1c,0xf7,0xce,0x5e,0xc4,0xc5,0xe6,0x18,0x92,0x57,0x36,0x2,0x30,0x26,0x33,0x7b,0xe2,0x1e,0x71,0xe2,0xb,0x33,0x68,0xf2,0x8,0xd9,0x16,0x94,0xd1,0x13,0xff,0x9b,0x49,0xa,0xc0,0x6,0x6c,0x72,0xf6,0x8f,0xbb,0x58,0xe0,0x41,0x32,0x77,0x22,0x1a,0xc9,0xf2,0x49,0x87,0x89,0xcf,0x8a,0x14,0xc4,0x0,0x93,0x14,0x66,0xba,0xd1,0xf1,0xec,0xa6,0x18,0x60,0xe2,0xfa,0x91,0xde,0xd9,0xae,0x34,0xf9,0x31,0x52,0xba,0x1e,0x28,0x5d,0x4c,0x94,0xfa,0x99,0xbc,0xf,0x45,0xa,0x4c,0x5c,0x38,0xd6,0xc9,0xe0,0xe8,0x89,0xe4,0xad,0x1d,0x5f,0xca,0x9c,0x7f,0x15,0x8b,0x63,0xdc,0xc4,0x7c,0x8f,0x8c,0x91,0xb9,0x93,0x71,0xc0,0xd7,0xdf,0x7c,0xf5,0xea,0xd9,0x8b,0xa7,0x85,0x1d,0xcf,0x9f,0x7b,0x1f,0xdf,0xdf,0xfa,0x76,0xf1,0x44,0xc0,0xd9,0xa5,0x65,0x58,0xc2,0x2e,0x4,0x2c,0x2d,0xbe,0xf3,0xef,0xa,0x3c,0xaf,0x8f,0xde,0x7e,0xb7,0x10,0xe0,0x79,0xfd,0x91,0x6b,0x81,0xff,0x18,0x53,0xc0,0x14,0x30,0x5,0x4c,0x1,0x53,0xc0,0x14,0x30,0x5,0xfc,0xff,0x0,0x5a,0x6b,0x82,0x75,0xe2,0xe7,0xcf,0xc9,0x91,0xe6,0x58,0x19,0x5,0x16,0x2c,0x6,0x0,0x5b,0xca,0x89,0xf5,0x69,0x4e,0x5a,0x23,0x1c,0xe5,0x44,0x8e,0x52,0x1,0x0,0x94,0xdd,0x99,0x89,0x80,0x34,0xc7,0x51,0x2a,0x70,0x94,0x13,0x49,0x25,0xdd,0xa0,0xe4,0x96,0x5b,0xc3,0x43,0xcd,0x1b,0x9b,0x9f,0x5e,0xbc,0x71,0x9d,0x1e,0xf,0xfc,0x3,0xe8,0x30,0x1c,0xd9,0x74,0xd9,0x52,0xa2,0xec,0x9e,0xc2,0xc6,0xe6,0xd5,0x8b,0xc3,0x43,0xcd,0x25,0xb7,0xdc,0x52,0xd2,0xd,0x68,0x6b,0xeb,0x7e,0x65,0xef,0xaf,0x97,0xcb,0xdd,0xfd,0xce,0x87,0x9f,0x7d,0x71,0xe9,0xba,0xe3,0xda,0x85,0x4e,0xc,0x7d,0xcd,0x3f,0xfd,0xf0,0xeb,0x66,0x75,0xb6,0xf6,0xf0,0xad,0xb7,0x97,0x5f,0x12,0x33,0x5b,0xb7,0xbf,0xbb,0x3d,0xdb,0xea,0x74,0x97,0x3a,0xdd,0xee,0x7b,0x3,0xdf,0x9b,0xd7,0x5a,0xdb,0xc6,0x8c,0x7e,0xad,0xa,0x21,0x60,0xdb,0xb6,0x2e,0xbb,0x95,0xd7,0xb5,0x6a,0xf5,0x79,0xa3,0x56,0xfd,0xf3,0xda,0x97,0xd7,0xf6,0x29,0xdd,0xbd,0x6f,0x6f,0x3f,0x28,0xf5,0xff,0x6e,0x56,0xb4,0x19,0x2a,0x66,0x73,0xe2,0xe3,0x25,0x12,0xc6,0x16,0x4e,0x30,0x73,0x7a,0xc1,0x5b,0x5f,0xff,0xe8,0x10,0xc0,0xd1,0xf6,0x4,0xcc,0x4c,0x3b,0x3b,0x3b,0xa2,0xd1,0x68,0x14,0x8e,0xd0,0x6a,0xb5,0x78,0x6d,0x6d,0xcd,0x10,0xc5,0xdb,0xba,0x7f,0x0,0xb2,0x1f,0xaf,0x82,0x62,0x7a,0x69,0xbb,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char graph_port_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x8,0x3,0x0,0x0,0x0,0xba,0xec,0x3f,0x8f,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0xc0,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0xff,0xff,0xff,0x6a,0x6a,0x6a,0x52,0x52,0x52,0x61,0x61,0x61,0x48,0x48,0x48,0x94,0x94,0x93,0xca,0xca,0xca,0x94,0x94,0x94,0x92,0x92,0x92,0xbf,0xbf,0xbe,0xbe,0xbf,0xbe,0x92,0x91,0x91,0x50,0x50,0x50,0xc2,0xc1,0xc2,0xc1,0xc1,0xc1,0xc1,0xc1,0xc0,0xc1,0xc2,0xc2,0x50,0x50,0x4f,0x5c,0x5c,0x5c,0x5b,0x5b,0x5b,0x5b,0x5a,0x5a,0x4f,0x4f,0x4f,0xb5,0xb5,0xb5,0xd7,0xd7,0xd7,0x4f,0x4f,0x4e,0x88,0x88,0x88,0xda,0xdb,0xdb,0xda,0xda,0xda,0x45,0x45,0x45,0x86,0x86,0x86,0xac,0xac,0xac,0x4c,0x4d,0x4c,0x55,0x55,0x55,0x56,0x55,0x55,0x4d,0x4e,0x4c,0xda,0xda,0xda,0xd9,0xda,0xda,0xcf,0xd0,0xd0,0xb6,0xb6,0xb6,0xd0,0xd0,0xd0,0xc4,0xc4,0xc4,0xc8,0xc8,0xc8,0xca,0xcb,0xcb,0xc7,0xc7,0xc7,0xcf,0xcf,0xd0,0xd2,0xd2,0xd2,0xd0,0xcf,0xcf,0xca,0xcb,0xca,0xc6,0xc6,0xc5,0xd5,0xd6,0xd5,0xd8,0xd8,0xd8,0xd7,0xd8,0xd8,0xd6,0xd6,0xd6,0xc6,0xc6,0xc6,0xde,0xde,0xde,0xdf,0xdf,0xde,0xdf,0xde,0xdf,0xbc,0xbc,0xbc,0xe8,0xe8,0xe9,0xe8,0xe8,0xe8,0xb7,0xb7,0xb7,0xb6,0xb7,0xb6,0x0,0x0,0x0,0xf5,0xba,0x5d,0x7a,0x0,0x0,0x0,0x24,0x74,0x52,0x4e,0x53,0x0,0x1,0x8,0x5e,0x8c,0x15,0xe2,0xfe,0xe2,0xe2,0xfe,0xfe,0xe2,0x5e,0xfe,0xfe,0xfe,0xfe,0x5e,0x8c,0x8c,0x8c,0x5d,0xfd,0xfe,0x5d,0xe2,0xfe,0xfe,0x16,0xe2,0xfd,0x5d,0x8c,0x8c,0x5d,0xce,0x80,0x8b,0x8f,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x0,0x88,0x5,0x1d,0x48,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x70,0x49,0x44,0x41,0x54,0x8,0xd7,0x15,0xcd,0xb,0x2,0x81,0x50,0x14,0x5,0xc0,0x73,0x6f,0x25,0x84,0x90,0x94,0xa8,0xa4,0x48,0x1f,0xa9,0x1e,0xa2,0x62,0xff,0xcb,0xc2,0x6,0x66,0x0,0x62,0x49,0x96,0x25,0x26,0x80,0x94,0x81,0x1a,0x1d,0xd5,0xa1,0x42,0xe0,0xd1,0x69,0x1c,0xc7,0xda,0x79,0xc2,0x98,0xce,0xf4,0x24,0x4d,0x93,0xf9,0x62,0x9,0x23,0xcb,0x2f,0x45,0x71,0xcd,0x4b,0x3,0xab,0xaa,0x16,0x42,0xdc,0xee,0xf,0x13,0x6b,0xcb,0x6e,0x9e,0xaf,0xc6,0xb6,0x36,0x60,0xa7,0xdd,0x76,0xfd,0xae,0x75,0x18,0xe4,0x7a,0xfe,0xfb,0xe3,0x7b,0xee,0x1f,0xe6,0x7d,0x70,0x8,0x7f,0xc5,0x17,0xe3,0x97,0xa,0x2b,0xff,0x1e,0x73,0x38,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x8,0x6,0x0,0x0,0x0,0x8d,0x32,0xcf,0xbd,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xc6,0x49,0x44,0x41,0x54,0x18,0x95,0x6d,0x90,0x3d,0x4e,0xc4,0x30,0x14,0x84,0xbf,0xb1,0xa8,0x92,0x48,0x39,0x46,0xe2,0x9a,0x9f,0x12,0xc1,0xbd,0x16,0x25,0x4b,0x41,0xb,0x67,0xa1,0xa7,0xa2,0x63,0xa1,0x76,0x94,0x5b,0x58,0x72,0x52,0x3e,0xd3,0xc4,0x11,0xda,0xe5,0xab,0x46,0xa3,0xd1,0x68,0xde,0x13,0x1b,0x21,0x84,0x7,0x49,0x3,0x70,0xbb,0x59,0x5f,0xc0,0x5b,0xdf,0xf7,0xef,0x0,0x2,0x98,0xa6,0xe9,0x0,0x1c,0x1,0xc7,0x19,0x39,0xe7,0x67,0xef,0xfd,0xa0,0xad,0xe9,0x3,0x70,0x6d,0xdb,0x52,0xd7,0x35,0x0,0xcb,0xb2,0x10,0x63,0x4,0x30,0xe7,0xdc,0xe3,0x95,0xa4,0xb1,0x84,0x9a,0xa6,0xd9,0x9b,0x8a,0x8e,0x31,0x3a,0x33,0x1b,0x1d,0x70,0xd,0xec,0x4d,0x7f,0xa9,0xaa,0xaa,0xc8,0x1b,0x7,0xe4,0x8b,0xc4,0x25,0xd9,0x1,0x3f,0x65,0xd3,0x39,0xeb,0xba,0x16,0xf9,0xed,0x80,0xd7,0x6d,0xb,0x29,0x25,0xcc,0xc,0x33,0x23,0xa5,0xb4,0x1f,0x23,0x69,0x14,0x40,0x8,0xe1,0x28,0xe9,0xf0,0xcf,0x7b,0x2c,0xe7,0xfc,0xe4,0xbd,0x7f,0x51,0x71,0xe6,0x79,0xbe,0x37,0xb3,0x1,0xb8,0xdb,0x76,0x9f,0x24,0x8d,0x5d,0xd7,0x7d,0x2,0xfc,0x2,0xfb,0x83,0x50,0x87,0x89,0x31,0xee,0x78,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -165,32 +185,37 @@ static const unsigned char hsplitter_png[]={ static const unsigned char icon_add_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x0,0x0,0x0,0x0,0x3a,0x98,0xa0,0xbd,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x74,0x52,0x4e,0x53,0x0,0x0,0x76,0x93,0xcd,0x38,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x21,0x49,0x44,0x41,0x54,0x18,0xd3,0x63,0x60,0xc0,0x1,0x1e,0x3c,0x80,0x32,0x98,0xd0,0x65,0xa8,0x21,0xc0,0xc8,0xf0,0x0,0x85,0xaf,0x80,0xa1,0x82,0x3e,0xee,0xc0,0x0,0x0,0x13,0x86,0x4,0x98,0x60,0x93,0x6c,0x5a,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x36,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0xa0,0x25,0x78,0xf0,0xe0,0xc1,0xff,0x7,0xf,0x1e,0xfc,0xc7,0xa7,0x86,0x89,0x52,0x4b,0x46,0xd,0x60,0x60,0x60,0x64,0x60,0x80,0x84,0x36,0x39,0x9a,0x15,0x14,0x14,0x18,0x29,0x76,0x1,0x5e,0x30,0x9a,0xe,0xe8,0x64,0x0,0xc5,0x0,0x0,0xc7,0x6e,0x12,0x94,0xf9,0x26,0x2e,0xdb,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char icon_close_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x6c,0x49,0x44,0x41,0x54,0x28,0xcf,0xad,0x90,0xd1,0xa,0x80,0x20,0xc,0x45,0xad,0xa7,0x6b,0xee,0x35,0xb1,0x3f,0xf3,0xbb,0x13,0xc,0xea,0x5f,0x5c,0xf,0x42,0x4d,0x1c,0x14,0xd4,0xde,0xc6,0x39,0xd3,0xdd,0x19,0xf3,0x53,0xd9,0x48,0x5e,0xf6,0xe4,0x6d,0x6c,0x30,0xa,0xd2,0xad,0x90,0x47,0x42,0x11,0xa,0xcd,0x76,0x5,0x63,0x9b,0x16,0xd9,0xb9,0x20,0x9f,0xbc,0x14,0x15,0xb,0x65,0x47,0x56,0x71,0x55,0x90,0xc1,0x60,0x1c,0x12,0x8f,0x5a,0x26,0x1e,0xd4,0x79,0xf9,0x45,0x5d,0x57,0x59,0xd2,0x85,0x36,0x51,0x87,0xfb,0xd0,0xef,0xe,0xf5,0x78,0xea,0x4f,0x75,0x2,0x30,0x98,0x34,0x72,0xa,0x11,0xfb,0xc2,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x9b,0x49,0x44,0x41,0x54,0x38,0x8d,0xcd,0x92,0x31,0xe,0xc2,0x30,0x10,0x4,0x17,0xaa,0x3d,0x67,0xdb,0x58,0xd0,0xd3,0xf0,0xa3,0x7c,0x36,0x3c,0x82,0x48,0x44,0x22,0x6f,0xb1,0x4d,0x85,0x14,0x81,0xf,0x2c,0x28,0xe0,0xda,0xd5,0x8c,0x4e,0x77,0xb,0xfc,0xd5,0x98,0xd9,0x20,0x29,0x7a,0xb9,0xa4,0x68,0x66,0x83,0xb,0x93,0xcc,0x24,0xa7,0x9a,0x44,0x52,0x24,0x39,0x91,0xcc,0x55,0x89,0xa4,0xde,0xcc,0xce,0x24,0xb,0xc9,0x39,0x84,0xb0,0xf7,0xb2,0xae,0xeb,0x76,0xde,0x8a,0x4f,0x92,0x66,0xd8,0x91,0x5c,0x49,0x5e,0x9a,0xe1,0xb5,0x64,0x5,0x16,0x92,0x8b,0x7,0x6f,0x9b,0x8c,0x0,0x4a,0x29,0x9b,0x26,0x81,0xa4,0x3e,0xa5,0x34,0x2,0x38,0x2,0x58,0x0,0xcc,0x0,0xe,0x39,0xe7,0xd3,0xfa,0xb0,0xee,0xea,0x8f,0x7,0x7b,0xf5,0x9d,0xb7,0xb0,0x97,0x55,0x25,0x5f,0x17,0xe9,0x2e,0xf9,0xb8,0xca,0x3f,0x9b,0x1b,0x1a,0xe3,0x40,0x47,0xa0,0xda,0xda,0x61,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char icon_color_pick_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xe0,0x49,0x44,0x41,0x54,0x28,0xcf,0x95,0x91,0xbf,0x6a,0xc2,0x60,0x14,0xc5,0xcf,0x17,0x82,0xcf,0xd0,0xad,0x75,0x13,0x12,0xa1,0x5b,0xc0,0xdd,0x35,0xe0,0x50,0xfc,0x43,0xfb,0x8,0x6e,0x8e,0x3e,0x44,0x1f,0xa0,0xf,0xd0,0xa9,0x88,0x53,0x85,0x3a,0x38,0x74,0x12,0xc1,0x45,0x1c,0x8c,0xf9,0xce,0x27,0x89,0xa0,0x19,0x3a,0x17,0xe2,0x17,0x87,0xb4,0x60,0x9a,0x48,0xc9,0x99,0xee,0xe5,0x7,0xe7,0x5e,0xce,0x1,0xca,0x4a,0x59,0xab,0xa,0xc0,0x16,0xf7,0x3c,0xb0,0x5,0x88,0x2c,0x96,0x8e,0x78,0x17,0xb3,0xd3,0x9b,0x78,0x11,0x26,0x80,0xe3,0xdd,0x8d,0xf9,0xc7,0xe0,0x1b,0x71,0xe2,0x1a,0xee,0xcf,0x16,0x3,0x46,0x96,0x57,0x97,0x78,0xfe,0x9d,0x93,0x18,0xfd,0xdc,0x7,0xb2,0xc3,0x90,0x3d,0x46,0xd4,0xd4,0xfe,0x53,0x21,0xf6,0x6c,0x40,0x76,0xa9,0xa9,0xd5,0x68,0x55,0x29,0xc4,0xca,0x62,0xe0,0xf,0x19,0xf1,0x4b,0x59,0x57,0xb0,0xec,0x0,0xf2,0x5e,0x3a,0x17,0xd8,0x7f,0x60,0xb0,0xad,0x3,0xb2,0xa6,0x76,0xfe,0x63,0xee,0xf6,0x3f,0x98,0x8d,0xd4,0xdc,0xb3,0x53,0xf3,0xac,0xc,0x40,0x34,0xb1,0x4e,0x36,0x9e,0x6d,0x4e,0x92,0x41,0xf5,0xb5,0x28,0xfd,0x31,0x35,0x3f,0x18,0xca,0x76,0x51,0x37,0x2,0xe0,0x5c,0xec,0xb1,0xc0,0xf4,0xf6,0xb3,0x74,0xb3,0x0,0x70,0x6,0x95,0x2,0x6f,0xae,0x29,0xa4,0x96,0x25,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x34,0x39,0x2b,0x30,0x32,0x3a,0x30,0x30,0xe3,0xb6,0x51,0xb2,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x34,0x39,0x2b,0x30,0x32,0x3a,0x30,0x30,0x92,0xeb,0xe9,0xe,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x1,0x55,0x49,0x44,0x41,0x54,0x38,0x8d,0xb5,0x92,0xb1,0x4a,0x3,0x41,0x14,0x45,0xef,0xdb,0x6c,0xac,0xf2,0x1,0xda,0xcd,0x40,0x4,0x25,0x11,0x4,0x8b,0x80,0x8d,0x20,0x88,0x5d,0x20,0x88,0x90,0x22,0x9d,0x9d,0xa0,0x85,0x58,0xeb,0x7,0x88,0xe0,0x7,0x58,0x8b,0x36,0x5a,0x88,0xa0,0xa5,0x85,0xa5,0x60,0x61,0xb0,0x70,0xb2,0xef,0x8d,0x44,0x41,0x21,0x1f,0x20,0x6c,0xf2,0x2c,0xcc,0xc2,0x12,0x92,0x8d,0x45,0xbc,0xe5,0xdc,0xb9,0x67,0xee,0xbc,0x19,0xe0,0xbf,0xe5,0xbd,0x2f,0x35,0x9b,0xcd,0x29,0x0,0x10,0x91,0x9a,0x88,0x7c,0x88,0xc8,0xa7,0x88,0xd4,0x0,0x80,0xb2,0xc2,0xcc,0x5c,0x21,0xa2,0x5b,0x22,0xba,0xef,0x76,0xbb,0x97,0x44,0x74,0x4a,0x44,0x61,0xdf,0xfe,0x32,0xc6,0x4c,0x87,0x59,0x0,0x0,0xdf,0x0,0x62,0x55,0xad,0x6,0x41,0x50,0x1d,0xf0,0x62,0x0,0x8,0xb2,0xd2,0xd6,0xda,0x27,0x0,0x27,0x83,0xeb,0xaa,0x1a,0x3,0xd8,0x19,0xb,0x60,0xe6,0x3a,0x80,0x6d,0x0,0xd,0x0,0x9d,0x14,0x60,0xcb,0x18,0x73,0x95,0x9,0x60,0xe6,0x3a,0x11,0x1d,0xc7,0x71,0xbc,0x6e,0x8c,0x39,0x53,0xd5,0xdd,0xc4,0xcb,0xe5,0x72,0x1b,0xc9,0x60,0x87,0x2,0xd2,0xe1,0x62,0xb1,0xf8,0xec,0xbd,0x2f,0x11,0xd1,0x51,0xaf,0xd7,0x3b,0x0,0xd0,0x51,0xd5,0x95,0x42,0xa1,0x30,0x3b,0xf2,0x64,0x11,0x79,0x77,0xce,0x95,0x81,0xdf,0x67,0x14,0x91,0x76,0xff,0x3a,0x60,0xe6,0x45,0x66,0xae,0xc,0xd,0x47,0x51,0xb4,0x29,0x22,0xed,0x56,0xab,0xb5,0xd0,0xdf,0x3c,0xe7,0xbd,0x7f,0x8b,0xa2,0xa8,0x31,0x7a,0x52,0x93,0x8,0x8b,0xc8,0x72,0xba,0xb6,0x73,0xae,0x9c,0xae,0x9d,0xa5,0x0,0x0,0x88,0x68,0xd,0xc0,0x8b,0xaa,0xbe,0x3a,0xe7,0xca,0x61,0x18,0xde,0xa9,0xea,0xbe,0xb5,0xf6,0x7c,0x1c,0x20,0xf9,0x89,0x4b,0x0,0x56,0xf3,0xf9,0xfc,0xd,0x80,0x79,0x55,0xdd,0xb3,0xd6,0x5e,0x8c,0xad,0x9e,0x0,0x54,0x75,0x86,0x88,0xae,0x1,0x3c,0x2,0x38,0x34,0xc6,0x3c,0xfc,0x25,0x3c,0x11,0xfd,0x0,0x28,0x54,0xbb,0xfe,0xad,0x99,0xe5,0xb8,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char icon_folder_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x40,0x49,0x44,0x41,0x54,0x28,0xcf,0x63,0x60,0xa0,0x14,0x30,0x32,0x30,0x3c,0x38,0xca,0x60,0x85,0x24,0x72,0x44,0xc1,0x16,0x5d,0xc1,0x7f,0x54,0x3d,0xa,0x8c,0xc8,0x3c,0x26,0x4c,0x43,0x1f,0xda,0x10,0x30,0x1,0xd5,0x3a,0x26,0x6,0x7c,0xc0,0x6,0xab,0x15,0xa8,0x60,0xc8,0x28,0x38,0x82,0x4b,0xf2,0xff,0x61,0x42,0xda,0x89,0x1,0x0,0x7c,0x5,0xb,0xf5,0x5d,0xb6,0xe9,0xbb,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x34,0x39,0x2b,0x30,0x32,0x3a,0x30,0x30,0xe3,0xb6,0x51,0xb2,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x34,0x39,0x2b,0x30,0x32,0x3a,0x30,0x30,0x92,0xeb,0xe9,0xe,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x5f,0x49,0x44,0x41,0x54,0x38,0x8d,0xed,0x8f,0xc1,0xd,0x80,0x30,0x8,0x45,0x9f,0x9d,0x84,0x39,0x4c,0x3b,0xbd,0x75,0x8f,0x32,0x9,0x5e,0xec,0xa5,0x9,0xa4,0xc6,0x26,0x5e,0x7c,0x17,0xe,0xc0,0xe3,0x3,0x5f,0xb3,0x1,0xb4,0xd6,0x4e,0x60,0x77,0x66,0xaa,0x88,0x14,0x4f,0x90,0xee,0xea,0x2d,0x3,0xe4,0x28,0x41,0x8a,0x9a,0x1d,0x55,0x75,0x25,0xfd,0x5,0x9b,0x11,0xd,0x54,0x11,0x29,0x53,0x9,0x1c,0x32,0x4c,0xbe,0x10,0xf1,0xb,0x16,0xa,0xea,0xd3,0x45,0x33,0x3b,0xde,0x1e,0x5f,0xc3,0x5,0x1f,0xc5,0x12,0x2c,0xc5,0x88,0xe1,0xb4,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char icon_play_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x6b,0x49,0x44,0x41,0x54,0x28,0xcf,0x63,0x60,0xa0,0x17,0x78,0x70,0xf8,0xc1,0xb5,0x7,0xde,0xf8,0x14,0xfc,0x7f,0xf0,0xff,0xc1,0xff,0x87,0x3b,0x1e,0x6a,0xa1,0xcb,0x30,0x21,0x73,0xfe,0xbb,0xff,0xbf,0xf8,0x60,0xca,0x13,0x61,0x64,0x31,0x46,0x98,0x9,0x48,0x62,0x1f,0x18,0x3b,0x7e,0x4d,0x50,0xfd,0x89,0x5b,0x1,0x3,0x3,0x3,0xc3,0x11,0x5,0x5b,0x2c,0x56,0x60,0x3,0xd8,0x14,0xbc,0x67,0xac,0xf8,0xed,0x2,0xe3,0xb0,0xa0,0x49,0xfe,0x61,0x98,0xc9,0x52,0x2f,0xf3,0x16,0x21,0x80,0xa2,0x80,0x71,0x27,0x43,0x91,0xfc,0x35,0xf2,0x2,0x8a,0x96,0x0,0x0,0xbc,0x2d,0x27,0xc4,0x79,0x12,0x82,0x82,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xa2,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0x18,0xf2,0x80,0x11,0x99,0xf3,0xe0,0xc1,0x83,0xc3,0xc,0xc,0xc,0xc2,0xc,0xc,0xc,0xa5,0xa,0xa,0xa,0x5b,0xc9,0x31,0xe0,0x3f,0x5c,0x82,0x91,0x71,0x27,0x3,0x3,0x43,0x91,0xbc,0xbc,0xfc,0x35,0x7c,0x6,0x30,0xe1,0x92,0xf8,0xff,0xff,0xbf,0xfb,0xff,0xff,0xff,0x2f,0x3e,0x78,0xf0,0x60,0xca,0x93,0x27,0x4f,0x84,0x49,0x76,0x1,0x1a,0xf8,0xc0,0xc8,0xc8,0xd8,0xf1,0xeb,0xd7,0xaf,0x9,0xaa,0xaa,0xaa,0x3f,0x89,0x72,0x1,0x1a,0x10,0xf8,0xff,0xff,0x7f,0x7,0x2b,0x2b,0xeb,0x1e,0x74,0x9,0x62,0xd,0xc0,0x9,0x88,0x35,0xe0,0x3d,0x23,0x23,0x63,0xc5,0xef,0xdf,0xbf,0x5d,0xd0,0x25,0x58,0x8,0x68,0xfc,0xc3,0xc0,0xc0,0x30,0x93,0x85,0x85,0xa5,0x5e,0x46,0x46,0xe6,0x2d,0x36,0x5,0x38,0xd,0x20,0x36,0x1a,0xd1,0xd,0x38,0xc2,0x0,0x4d,0x48,0xf2,0xf2,0xf2,0x44,0x25,0xa4,0x61,0x0,0x0,0x1e,0x57,0x33,0x3c,0xcc,0xe7,0x34,0x69,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char icon_reload_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xe8,0x49,0x44,0x41,0x54,0x28,0xcf,0xa5,0x91,0x31,0x4e,0x2,0x51,0x10,0x86,0x3f,0x16,0x22,0x5b,0x10,0x88,0x5a,0x1a,0x4a,0x1b,0xd7,0x4,0x4a,0x6e,0x60,0x65,0xa3,0xc1,0xc4,0x8e,0x8e,0x46,0x38,0x90,0x5,0xa5,0x17,0x90,0x46,0xf,0x80,0x56,0x84,0x2,0x48,0xc,0xc9,0xee,0x3c,0x56,0xe,0x60,0xd0,0x64,0x2d,0xde,0x40,0xe3,0xbe,0xdd,0x4d,0xec,0x98,0x6a,0x26,0xf3,0x4d,0xe6,0x9f,0x7f,0xe0,0xd0,0x28,0x65,0xe9,0xaa,0x5a,0xe9,0x97,0xee,0xb9,0x4,0xe6,0xfa,0x64,0x1f,0xcf,0x7f,0xb,0x40,0x7c,0x66,0xc7,0xb4,0x72,0xa3,0xb3,0xf2,0x75,0x73,0x3,0x5e,0x3a,0x6d,0xc7,0xb4,0x88,0xe9,0x26,0x8d,0xa4,0xb1,0xbb,0xe1,0x83,0xb6,0x7d,0x5e,0x55,0x1d,0x1e,0xd,0x45,0xc5,0xc4,0x27,0x69,0x6d,0x8e,0xc5,0x88,0x86,0xf,0xe,0x90,0x77,0x51,0xb9,0xcd,0x8b,0xb,0xbb,0xa2,0x32,0x71,0x2b,0xb8,0x80,0xe4,0x35,0xf,0xd8,0x17,0x20,0x0,0xf,0x64,0x24,0x4a,0xd,0xfc,0x2f,0x19,0x65,0x80,0xf7,0x27,0xdf,0x3,0x7f,0xc0,0x12,0x80,0xa5,0x3f,0xc8,0xdd,0x7f,0x5,0x2c,0x52,0x49,0x81,0x6c,0x65,0x6b,0x82,0xac,0xfd,0x79,0x6a,0xd6,0x5,0x91,0x51,0x2f,0xea,0x39,0xc3,0xea,0xe1,0x9d,0x59,0x8b,0xca,0x74,0x71,0x54,0x70,0xd2,0x5d,0xa4,0xff,0x18,0x55,0x88,0x6f,0xde,0x74,0xf8,0xd3,0x69,0x6e,0xe,0x7e,0x24,0x0,0x7b,0x27,0x64,0x59,0x3b,0x41,0xb6,0x9a,0xe,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x1,0x59,0x49,0x44,0x41,0x54,0x38,0x8d,0xcd,0x92,0x31,0x4b,0x3,0x31,0x18,0x86,0x9f,0x5c,0xe,0xec,0x20,0x76,0x70,0x39,0xd0,0xe3,0xba,0x74,0x51,0x41,0xdd,0xfc,0x7,0xba,0xb8,0x8,0x52,0xec,0x2e,0x4e,0x3a,0x88,0x3f,0xa3,0xa3,0x53,0x7,0x47,0x67,0x41,0x17,0xdd,0x9c,0x5c,0x3b,0xd8,0x82,0x64,0x68,0xca,0xd5,0x55,0x11,0x3c,0x1a,0x87,0x24,0x2e,0xd7,0x72,0x9e,0x9e,0xab,0xbe,0xd3,0xc7,0x1b,0x9e,0x37,0xf9,0xbe,0x7c,0xf0,0xd7,0x12,0x3f,0x99,0x4a,0xa9,0xb9,0x30,0xc,0x8f,0x84,0x10,0x7,0xc0,0x5a,0x6e,0x3f,0x3a,0xe7,0x2e,0xad,0xb5,0xdd,0x66,0xb3,0xf9,0x51,0x19,0x90,0xa6,0xe9,0x92,0xb5,0xf6,0x6,0x58,0xaf,0xb8,0xb4,0x27,0xa5,0xdc,0x8d,0xe3,0xf8,0x19,0x20,0x28,0xdf,0x5c,0x80,0x53,0x60,0xdf,0x18,0x53,0x37,0xc6,0xd4,0xbd,0xf7,0x7b,0xc0,0x13,0xb0,0x61,0xad,0xbd,0x56,0x4a,0xcd,0x1,0x84,0xc5,0x80,0x30,0xc,0x8f,0xa6,0xb0,0x94,0x72,0x33,0x8e,0xe3,0x97,0xc2,0xf1,0xd5,0x68,0x34,0xba,0xf7,0xde,0xf7,0x80,0xd,0x29,0xe5,0x21,0x70,0xfe,0xe5,0x5,0x42,0x88,0x76,0x5e,0x9e,0x96,0x60,0x0,0x92,0x24,0x79,0x75,0xce,0x9d,0x1,0x4,0x41,0xd0,0xfe,0xd6,0x2,0xb0,0x2,0x60,0x8c,0xb9,0xab,0xe8,0x1f,0x6b,0xed,0x6d,0x5e,0xae,0xce,0x2,0xb4,0xd6,0x17,0x5a,0x6b,0x7,0xcc,0x3,0xd4,0x6a,0xb5,0x37,0xad,0xf5,0xc5,0x4f,0x1,0x41,0x10,0x7c,0x19,0x7c,0x90,0x3,0xc7,0xc0,0xa0,0xe0,0xf,0x72,0xef,0x9b,0x84,0x10,0xdb,0x79,0xd9,0x9f,0x5,0x44,0x51,0x94,0x9,0x21,0x5a,0x40,0x6,0x64,0x42,0x88,0x56,0x14,0x45,0x59,0x19,0x1e,0x8f,0xc7,0x8b,0x52,0xca,0xe,0x80,0x73,0xee,0x12,0xa,0xbf,0x90,0x24,0x49,0x7f,0x38,0x1c,0x1e,0x3,0x34,0x1a,0x8d,0x7e,0x11,0x54,0x4a,0x2d,0x48,0x29,0x77,0xac,0xb5,0x1d,0xef,0xfd,0x32,0xd0,0x9b,0x4c,0x26,0x5d,0xa8,0xd8,0xc4,0xb2,0xf2,0xf9,0x4c,0x55,0xbd,0x48,0xbf,0xe8,0x1d,0x78,0x70,0xce,0x9d,0x64,0x59,0xb6,0x35,0x85,0xff,0x87,0x3e,0x1,0x53,0x7,0x87,0x11,0xd3,0x3a,0x9b,0x9e,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; + + +static const unsigned char icon_snap_png[]={ +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xc2,0x49,0x44,0x41,0x54,0x38,0x8d,0xad,0x90,0xbd,0xa,0xc2,0x30,0x14,0x85,0xbf,0x5b,0x5c,0x23,0xe8,0x6c,0x9f,0xc1,0xb7,0xd0,0x47,0xd1,0x47,0x70,0x48,0xa1,0x43,0x57,0xe9,0xd3,0x88,0x93,0xef,0xe0,0xea,0x5c,0x9d,0x1d,0xb2,0x96,0xc6,0xa1,0x9,0xd4,0xd8,0xd8,0x4a,0xfd,0x20,0x10,0xee,0xcf,0xe1,0xdc,0x3,0x1d,0x8c,0x31,0xd6,0x18,0x63,0x9,0x88,0xd5,0x1,0x92,0xbe,0xe2,0x2f,0x4c,0x16,0x90,0x98,0xb5,0x21,0x94,0x52,0xf2,0x17,0x7,0x6f,0x7c,0xb,0x2b,0xc6,0x64,0x7,0xb3,0xa1,0x1,0x5b,0x14,0x29,0x50,0x2,0x1b,0x0,0x44,0x2e,0x34,0xcd,0x41,0xb2,0xec,0x6,0x20,0xdd,0x61,0x6f,0xdf,0x7,0xe4,0x96,0xaf,0xc0,0x32,0xd0,0x7d,0x2,0x6b,0xd1,0xba,0x4a,0xfc,0xdd,0x91,0xdb,0x4b,0xb7,0x7c,0x2,0x56,0xd4,0x75,0xa,0x9c,0x81,0x5,0x70,0x84,0xe1,0xc,0x5a,0xdb,0x75,0xbd,0x17,0xad,0x1f,0x92,0xe7,0x77,0x60,0xe7,0x7a,0x5b,0x80,0x44,0x29,0x25,0xfe,0xf5,0x8,0x28,0x0,0xb7,0xd8,0x46,0xa0,0x75,0xe5,0xbe,0xf3,0x31,0xe,0x7e,0x23,0xcc,0xc2,0x3a,0xc2,0xb9,0x58,0xfd,0x83,0xc9,0x2,0x63,0x78,0x1,0x4a,0x50,0x70,0x86,0xcc,0x86,0x2,0x4,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -200,17 +225,17 @@ static const unsigned char icon_stop_png[]={ static const unsigned char icon_zoom_less_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x0,0x0,0x0,0x0,0x3a,0x98,0xa0,0xbd,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x74,0x52,0x4e,0x53,0x0,0x0,0x76,0x93,0xcd,0x38,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x17,0x49,0x44,0x41,0x54,0x18,0xd3,0x63,0x60,0x18,0x10,0xc0,0xc8,0xf0,0x0,0x85,0xaf,0xc0,0x34,0x30,0xee,0xc0,0x0,0x0,0x97,0xf9,0x1,0x4,0xea,0x8f,0x4a,0x96,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x34,0x39,0x2b,0x30,0x32,0x3a,0x30,0x30,0xe3,0xb6,0x51,0xb2,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x34,0x39,0x2b,0x30,0x32,0x3a,0x30,0x30,0x92,0xeb,0xe9,0xe,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x25,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0x18,0x5,0xc3,0x0,0x30,0x32,0x30,0x30,0x30,0x3c,0x78,0xf0,0xe0,0x3f,0x39,0x9a,0x15,0x14,0x14,0x18,0x99,0xa8,0xeb,0x9e,0x51,0x30,0x44,0x1,0x0,0xff,0xa9,0x4,0x4,0x4a,0xae,0x20,0xfa,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char icon_zoom_more_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x0,0x0,0x0,0x0,0x3a,0x98,0xa0,0xbd,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x74,0x52,0x4e,0x53,0x0,0x0,0x76,0x93,0xcd,0x38,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x21,0x49,0x44,0x41,0x54,0x18,0xd3,0x63,0x60,0xc0,0x1,0x1e,0x3c,0x80,0x32,0x98,0xd0,0x65,0xa8,0x21,0xc0,0xc8,0xf0,0x0,0x85,0xaf,0x80,0xa1,0x82,0x3e,0xee,0xc0,0x0,0x0,0x13,0x86,0x4,0x98,0x60,0x93,0x6c,0x5a,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x36,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0xa0,0x25,0x78,0xf0,0xe0,0xc1,0xff,0x7,0xf,0x1e,0xfc,0xc7,0xa7,0x86,0x89,0x52,0x4b,0x46,0xd,0x60,0x60,0x60,0x64,0x60,0x80,0x84,0x36,0x39,0x9a,0x15,0x14,0x14,0x18,0x29,0x76,0x1,0x5e,0x30,0x9a,0xe,0xe8,0x64,0x0,0xc5,0x0,0x0,0xc7,0x6e,0x12,0x94,0xf9,0x26,0x2e,0xdb,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char icon_zoom_reset_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x4e,0x49,0x44,0x41,0x54,0x28,0xcf,0x63,0x60,0x20,0x6,0x3c,0xc,0x7b,0xf0,0xff,0xc1,0x7f,0xec,0x22,0x8c,0xc,0xc,0xcf,0x44,0x7e,0x5d,0x65,0x10,0x63,0x60,0x50,0x60,0x84,0x49,0x23,0x8b,0x30,0x31,0x30,0xfc,0x9a,0xc6,0x20,0x86,0x6a,0x22,0xa6,0x8,0x3,0xcc,0x40,0x84,0x55,0x30,0x16,0x13,0x21,0xf7,0xb1,0xa0,0x72,0x11,0xee,0x80,0x1,0x82,0x26,0x50,0x5d,0x1,0x7a,0x80,0xd,0xe,0x5f,0x10,0x4,0x0,0xfc,0xc5,0x22,0x8c,0x12,0xab,0xcb,0x61,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x6f,0x49,0x44,0x41,0x54,0x38,0x8d,0xdd,0x91,0xbb,0xd,0x80,0x30,0x10,0x43,0x1f,0x11,0x23,0x20,0xea,0x4c,0xc5,0x62,0x48,0xec,0xc0,0x56,0x97,0x26,0x43,0xa4,0x31,0x15,0x12,0x45,0x72,0x8a,0x14,0xa,0x84,0xab,0xfb,0x58,0x3e,0xeb,0xc,0x83,0x98,0xee,0x22,0xa5,0xb4,0x49,0x3a,0x1,0x62,0x8c,0x53,0x8d,0x5c,0xe3,0x4,0x80,0x9c,0xf3,0x22,0x69,0xf7,0x2e,0xb5,0x38,0x1,0xa0,0x94,0x72,0x0,0xab,0x27,0xd0,0xc3,0xc1,0xcc,0x64,0x66,0x6a,0xf5,0xb5,0x59,0x70,0x15,0x3b,0x30,0x7b,0xcb,0xd6,0x33,0x9f,0x18,0x76,0xf0,0x71,0x81,0x5a,0xa,0xaf,0x3b,0xf8,0x41,0xa,0xc3,0xb8,0x0,0x6c,0x9c,0x3f,0xb8,0x84,0xfc,0x5b,0x85,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -235,7 +260,7 @@ static const unsigned char logo_png[]={ static const unsigned char option_arrow_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x4,0x0,0x0,0x0,0xfc,0x7c,0x94,0x6c,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x5f,0x49,0x44,0x41,0x54,0x18,0xd3,0x63,0x60,0x20,0xc,0xee,0x27,0xdc,0x4f,0xc0,0x22,0xfc,0x50,0xfb,0xc1,0x97,0x7,0x5f,0x1e,0x6a,0xc3,0xf8,0x4c,0x10,0xea,0x5,0xf7,0xff,0x55,0xc,0xdc,0xc,0xdc,0xff,0x57,0xbd,0xe0,0x46,0x91,0xf8,0x39,0x85,0x41,0x8b,0x81,0x81,0x81,0x81,0x41,0xeb,0xe7,0x14,0x22,0x6c,0xc5,0x7,0x1e,0xce,0x7f,0xf0,0x1f,0x2,0x1f,0xce,0x87,0x88,0x30,0xc2,0x2c,0xff,0x71,0x8a,0x41,0x8b,0x81,0x81,0xe1,0x1a,0x87,0x99,0xc4,0x57,0xbc,0xce,0x25,0xec,0x41,0x74,0x0,0x0,0xec,0x66,0x28,0xba,0x76,0x22,0x7a,0x72,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x6,0x0,0x0,0x0,0x56,0x75,0x5c,0xe7,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x98,0x49,0x44,0x41,0x54,0x28,0x91,0xbd,0x91,0xb1,0xd,0xc2,0x30,0x10,0x45,0xdf,0xd1,0xb8,0xf0,0x2,0xee,0xdc,0x87,0x1,0xd8,0x24,0xb5,0xe9,0x19,0x87,0x1e,0xea,0x6c,0xc2,0x0,0xa4,0xb5,0xdc,0x79,0x1,0x17,0xae,0x8e,0x26,0x48,0x76,0x14,0x40,0x48,0x88,0xdf,0xfd,0xf7,0xef,0x4b,0x77,0x3a,0xf8,0x85,0x62,0x8c,0x21,0xc6,0x18,0xb6,0x32,0x59,0x83,0x94,0xd2,0x5e,0x55,0x6f,0x0,0x22,0x72,0xf0,0xde,0xdf,0xdb,0x7c,0xd7,0x9a,0x9c,0xb3,0x55,0xd5,0x9,0xb0,0x80,0x55,0xd5,0x29,0xe7,0x6c,0x5f,0x16,0x6a,0xad,0x67,0x60,0x68,0xd0,0xb0,0xb0,0x3f,0xaa,0x3b,0x3a,0xa5,0x74,0x51,0xd5,0xd0,0xd,0x88,0x5c,0xbd,0xf7,0xc7,0xa7,0xef,0x6e,0x30,0xc6,0x9c,0x80,0xb9,0x41,0xf3,0xc2,0xd8,0x2c,0x38,0xe7,0x8a,0x88,0x8c,0x40,0x1,0x8a,0x88,0x8c,0xce,0xb9,0xf2,0x71,0xcf,0x77,0x8f,0xfb,0x5a,0xf,0x28,0x4a,0x37,0xff,0x58,0x46,0x7b,0x50,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -280,7 +305,7 @@ static const unsigned char popup_bg_disabled_png[]={ static const unsigned char popup_checked_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x8,0x4,0x0,0x0,0x0,0x6e,0x6,0x76,0x0,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x6c,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x40,0x3,0x8c,0x8,0xe6,0xd,0x5e,0xf6,0xbd,0x8c,0x3f,0x99,0x60,0xdc,0xff,0x8c,0x1c,0xb,0x18,0x4d,0x19,0xb8,0xe0,0xf2,0xf,0x6a,0x1e,0xfc,0x7f,0xf0,0xee,0xb1,0xa,0xe3,0x83,0xc3,0xc,0x9c,0x7f,0xbc,0x58,0x4c,0x18,0x36,0x33,0x30,0x30,0xf8,0x2a,0x6c,0x63,0xf9,0xcf,0xce,0x68,0xcc,0x72,0x80,0x41,0x92,0x81,0x89,0xa1,0x46,0x61,0x1b,0x3,0x3,0xc3,0x1d,0xb1,0x7,0x97,0x1f,0xfc,0x7f,0xf0,0xff,0xc1,0xda,0xff,0x8c,0x50,0x5b,0xee,0x88,0xb1,0x6c,0x65,0xf8,0xfd,0xc3,0x5d,0xe3,0x33,0x3,0x3,0x3,0x3,0x0,0x6a,0x54,0x21,0x0,0x96,0x26,0x52,0xa9,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x8,0x6,0x0,0x0,0x0,0xc4,0xf,0xbe,0x8b,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xa3,0x49,0x44,0x41,0x54,0x18,0x95,0x85,0xcd,0xa1,0xa,0xc2,0x50,0x0,0x85,0xe1,0xff,0xdc,0x5d,0xd8,0x14,0x4,0xab,0x69,0x37,0xac,0x98,0xd5,0x27,0xb0,0x89,0x16,0x8b,0xd5,0xf7,0xd0,0xec,0x73,0xf8,0x4,0x16,0x61,0x4d,0x10,0xc,0x16,0xa3,0x61,0x71,0xab,0x16,0xeb,0x84,0x3b,0xae,0x45,0x8b,0xa,0x9e,0x78,0xce,0x7,0x7,0xfe,0x44,0xbf,0xca,0xa2,0x28,0x3a,0x71,0x1c,0x1f,0x24,0x3d,0xcc,0xe7,0x18,0x42,0x50,0x92,0x24,0x5b,0x49,0x23,0xa0,0xfd,0x5,0xaa,0xaa,0x5a,0x1,0x73,0xe0,0x1e,0x45,0xd1,0x42,0x65,0x59,0x9e,0x80,0x96,0xf7,0x7e,0x62,0xad,0x1d,0x2,0xfb,0x97,0x9d,0x39,0xe7,0x72,0x1b,0x42,0x88,0x25,0xd,0xac,0xb5,0x47,0xa0,0x7,0x18,0x60,0xed,0x9c,0xcb,0x1,0x4c,0xd3,0x34,0x53,0xe0,0xa,0xf4,0x81,0x2e,0xb0,0x4b,0xd3,0x74,0xf3,0xbe,0x34,0x59,0x96,0xdd,0xbc,0xf7,0x63,0xe0,0x2,0x9c,0xeb,0xba,0x5e,0x4a,0xa,0x6f,0xf0,0x4,0x57,0x3d,0x2c,0x27,0x2b,0xe9,0x62,0x6b,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -390,12 +415,12 @@ static const unsigned char selection_oof_png[]={ static const unsigned char spinbox_updown_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x76,0x49,0x44,0x41,0x54,0x28,0xcf,0x63,0x60,0x20,0xd,0xdc,0x4f,0x7f,0x98,0x86,0x47,0xfa,0x81,0xe5,0x83,0x1f,0xf,0x7e,0x3d,0xb2,0x45,0x16,0x63,0x44,0xd2,0x2d,0xc1,0x78,0x86,0x41,0x9a,0x81,0x81,0xe1,0x5,0xb3,0x89,0xec,0x53,0x98,0x28,0x13,0x8c,0x71,0x86,0x95,0x61,0x15,0x83,0x34,0x3,0x3,0x3,0x3,0x83,0xc4,0xdf,0x35,0xb7,0xd9,0x31,0x14,0x8,0x4f,0x61,0x44,0x18,0x6d,0xc1,0x36,0x93,0x44,0xc7,0xd3,0x7,0xdc,0x9f,0xf9,0xe0,0x3f,0x2,0x3e,0x9c,0x81,0xe1,0x8b,0xb7,0x39,0xff,0xf,0xc3,0x55,0x1f,0xff,0x95,0x4f,0x74,0x40,0xa1,0x5a,0x63,0x81,0x19,0xd4,0x68,0xe0,0x61,0x1a,0xde,0xc8,0xc2,0x6,0x0,0x74,0x4d,0x32,0x61,0xa3,0xda,0x8e,0xb3,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xcd,0x49,0x44,0x41,0x54,0x38,0x8d,0xe5,0x53,0x31,0xe,0x82,0x40,0x10,0x9c,0x5d,0x22,0x3e,0x80,0x86,0xc4,0x0,0xe1,0xf,0x16,0x5a,0x58,0xf9,0x5,0xe3,0x13,0xd0,0xc2,0xc4,0xcf,0xd8,0xf0,0x5,0xe3,0x1f,0x2c,0x2c,0x6c,0xf8,0x1,0xc5,0x72,0x85,0x9,0xd,0xf,0x10,0x43,0xce,0x86,0x82,0xe0,0xe9,0x19,0x8d,0x95,0x53,0xce,0xce,0x6e,0x26,0x99,0x59,0xe0,0x97,0x10,0x91,0x95,0x52,0x2a,0x79,0xa5,0xa1,0x67,0x83,0xa2,0x28,0xa6,0x0,0x8e,0x0,0x98,0x99,0xe7,0x61,0x18,0x9e,0xde,0x3e,0x20,0x22,0x3e,0x11,0x65,0x0,0x46,0x2d,0x55,0x3a,0x8e,0x33,0xe,0x82,0xe0,0xd2,0xd7,0x72,0x9f,0xc8,0xb2,0x6c,0x0,0x60,0xdf,0x59,0x6,0x0,0xbf,0x69,0x9a,0x43,0x9e,0xe7,0x43,0xeb,0x1,0xcf,0xf3,0x76,0x44,0x34,0x33,0x18,0x9b,0xb8,0xae,0x9b,0x9a,0x1c,0xff,0x3b,0x1e,0x62,0x14,0x91,0x94,0x88,0x8c,0xe5,0x21,0xa2,0x34,0x8a,0xa2,0x75,0x97,0x7b,0x48,0xa1,0xaa,0xaa,0x8d,0xd6,0xda,0x54,0x9a,0x73,0x5d,0xd7,0x5b,0xab,0x83,0xd6,0xc5,0xe7,0x45,0x2,0x80,0x38,0x8e,0x4b,0xad,0xf5,0x2,0xc0,0x15,0xc0,0x8d,0x99,0x97,0xa6,0x65,0x2b,0x94,0x52,0x89,0xed,0x99,0xbe,0xc6,0x1d,0x31,0x1f,0x40,0xdc,0x74,0x8a,0x5b,0xc1,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char submenu_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x8,0x4,0x0,0x0,0x0,0x6e,0x6,0x76,0x0,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x4d,0x49,0x44,0x41,0x54,0x8,0xd7,0x55,0xc8,0xa1,0x19,0x40,0x40,0x18,0x0,0xd0,0x77,0x8a,0x60,0x1,0x4d,0xb7,0x80,0x4d,0x64,0x3,0x18,0xc7,0x14,0xf6,0xa1,0xba,0x68,0x81,0xb,0xd2,0x2f,0xf9,0xbe,0xf3,0xe2,0x43,0x8e,0x1c,0x39,0xae,0x5,0x48,0xe4,0x0,0x25,0x4d,0xc3,0x41,0xe3,0xd3,0xc5,0x7e,0x77,0x75,0x30,0x3e,0xdb,0x3f,0xf0,0x8f,0xb3,0x5d,0xeb,0x28,0x69,0xee,0x4b,0x15,0xb1,0xe,0x7,0xbc,0x18,0xe0,0x15,0x49,0xfb,0x84,0x18,0x58,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x8,0x6,0x0,0x0,0x0,0xc4,0xf,0xbe,0x8b,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x64,0x49,0x44,0x41,0x54,0x18,0x95,0x7d,0xca,0x21,0x12,0x80,0x20,0x14,0x45,0xd1,0xf7,0x2d,0x4,0x36,0x40,0x63,0xa8,0xba,0x1f,0xbb,0x9d,0xe5,0xb8,0x0,0xb3,0xfb,0xd1,0xc,0x8d,0xd,0x10,0x48,0xcf,0x22,0x6,0xc7,0xef,0x6d,0x77,0xe6,0x8,0x0,0xa4,0x94,0x88,0x3b,0x92,0x4b,0x8,0x61,0xeb,0x3f,0xe0,0x95,0x88,0xac,0x39,0xe7,0x49,0x5,0x0,0x2c,0xc9,0xbd,0x94,0x62,0x35,0x0,0x0,0x63,0x6b,0x6d,0xfd,0x3,0x4f,0x1a,0x38,0x8d,0x31,0x51,0x3,0x55,0x44,0x66,0xe7,0x5c,0xfd,0x4,0x24,0xa3,0xf7,0xfe,0xe8,0x7f,0x1,0xe,0xc2,0x1e,0x10,0xa,0xf0,0x33,0x4c,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -410,7 +435,7 @@ static const unsigned char tab_behind_png[]={ static const unsigned char tab_close_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xb9,0x49,0x44,0x41,0x54,0x28,0xcf,0xad,0x90,0x5d,0xa,0x82,0x40,0x14,0x85,0xbf,0x31,0xb7,0xa0,0xd4,0x63,0x50,0x94,0x60,0x4b,0x28,0xe9,0x67,0x11,0x2e,0x36,0xa3,0xb6,0x90,0x82,0xc5,0x8,0xce,0x63,0xd0,0x12,0x34,0xa7,0x87,0xc9,0x1c,0x7b,0xa,0xea,0x3c,0xdd,0xcb,0xf9,0xe,0xf7,0x70,0xe1,0x4f,0x2a,0xe3,0xc2,0xb7,0xf7,0xc2,0x2f,0xe3,0x9e,0xad,0x1a,0x95,0x76,0x48,0xe1,0xab,0x54,0x35,0x6,0x71,0x0,0xea,0x44,0x67,0x84,0xee,0x49,0x8d,0x0,0xa4,0x37,0xd8,0x13,0x72,0xe5,0x8,0x20,0x4c,0x46,0x7a,0x6e,0x22,0x16,0x5c,0xd8,0x54,0xb5,0x99,0xf4,0x7a,0x7c,0xb3,0x80,0x16,0x11,0x52,0xd7,0x4,0x9d,0x6d,0x1,0x20,0x3d,0xf7,0x24,0x2,0xa0,0xd0,0xcb,0xd6,0x7e,0x75,0xf8,0x94,0xb0,0x62,0x4e,0xef,0x44,0xa0,0x25,0x39,0x13,0xe,0xa6,0xae,0x5,0xbc,0x4b,0xae,0xaa,0x48,0xa7,0xcc,0x6d,0x4,0x90,0x5e,0x79,0x56,0x5a,0xe5,0xe5,0xd0,0xde,0xc,0xe2,0x0,0xb8,0x5b,0x11,0x92,0xd5,0x91,0xa9,0x36,0xbd,0x3f,0x76,0x64,0xcc,0x74,0xf4,0xfd,0xab,0x7f,0xd2,0x13,0xed,0xc6,0x57,0xcd,0xb6,0x96,0x72,0x87,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xfa,0x49,0x44,0x41,0x54,0x38,0x8d,0xcd,0x92,0x5f,0x4a,0xc4,0x30,0x10,0x87,0xbf,0xb1,0xb9,0xc2,0x16,0x7c,0x6b,0xc1,0xa2,0x85,0x7a,0x4,0x2d,0xfe,0x39,0xc4,0x9e,0x70,0x4f,0x61,0xc5,0x3d,0x83,0x5,0x95,0x4,0xd2,0x37,0x5,0x8f,0x90,0x94,0xf1,0xc5,0x4a,0x76,0xcd,0x22,0xf8,0xa2,0xf3,0x38,0xc3,0xef,0x9b,0xe4,0x4b,0xe0,0x5f,0x95,0xf7,0x7e,0xed,0x9c,0x2b,0xf,0xcd,0x9d,0x73,0xa5,0xf7,0x7e,0x9d,0xf6,0x8e,0xd2,0xb0,0x88,0x6c,0x8c,0x31,0x43,0xe,0xe2,0x9c,0x2b,0x8d,0x31,0x83,0x88,0x6c,0x52,0xc8,0x17,0x20,0xc6,0x38,0xa8,0xea,0x8,0x74,0xc6,0x98,0xed,0x34,0x4d,0xc7,0xcb,0xcc,0x5a,0xbb,0x2a,0x8a,0xe2,0xe,0xe8,0x80,0x17,0xe0,0x61,0x99,0x49,0xba,0xc5,0x5a,0xbb,0xfa,0xdc,0x72,0xe,0x3c,0x3,0xd7,0x21,0x84,0x98,0xf6,0x54,0xf5,0xaa,0xae,0xeb,0xb7,0x2c,0x60,0x1f,0x22,0x22,0x56,0x55,0x23,0xd0,0xe6,0xc2,0x59,0x40,0x2,0xd9,0x8a,0x48,0xbb,0x28,0x50,0xd5,0x8b,0xfd,0xf0,0x8e,0x83,0x9f,0x4a,0x44,0xb2,0xcb,0xbe,0x1,0x92,0x2b,0xb4,0xaa,0x6a,0x81,0x27,0xe0,0x4,0xb8,0x4f,0xc5,0x66,0x1,0x19,0x89,0x97,0x21,0x84,0x5e,0x55,0x1f,0x81,0xb3,0x1c,0x44,0xe,0x85,0x53,0x61,0xb9,0xd7,0xa9,0xaa,0xea,0x75,0xe7,0x4,0xc6,0x98,0x1b,0x11,0xe9,0x80,0x31,0xc6,0xd8,0xa7,0xc2,0x9a,0xa6,0x79,0x9f,0xe7,0xf9,0x16,0x18,0x81,0x53,0x55,0xed,0xb3,0xa2,0x7e,0xf3,0x95,0xff,0xbe,0x3e,0x0,0xbd,0x2c,0x93,0xec,0xb,0xe5,0x4f,0xb1,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -425,12 +450,12 @@ static const unsigned char tab_current_png[]={ static const unsigned char tab_menu_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x4c,0x49,0x44,0x41,0x54,0x28,0xcf,0x63,0x60,0x18,0x5,0xc,0xc,0xc,0xc,0x8c,0x30,0xc6,0x83,0xff,0xa8,0x12,0xa,0x50,0x19,0x26,0x42,0x26,0x10,0xaf,0x80,0x31,0x9e,0xe1,0x2b,0x5c,0xf4,0x3b,0x63,0x3a,0x16,0xb5,0xf7,0x35,0xee,0x5f,0x7a,0xf0,0xff,0xc1,0xff,0x7,0xd7,0x1f,0xeb,0x62,0x71,0x24,0x3,0x3,0x3,0xc3,0xb,0xee,0x9f,0x53,0x18,0x18,0xd8,0x73,0x24,0xbe,0x32,0x50,0x11,0x0,0x0,0x6,0x9b,0x11,0xfa,0xe0,0x26,0x3d,0x9f,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x6f,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0x18,0x5,0xa3,0x80,0x81,0x81,0x11,0x5d,0xe0,0xc1,0x83,0x7,0xff,0xf1,0x69,0x50,0x50,0x50,0x40,0xd1,0xc3,0x44,0xa9,0xb,0xa8,0x6f,0x0,0x23,0x23,0x63,0x3c,0x3,0x3,0xc3,0x57,0x2c,0x6a,0xbf,0x33,0x32,0x32,0xa6,0x63,0xa8,0xc7,0x66,0xea,0xfd,0xfb,0xf7,0x35,0x18,0x18,0x18,0x56,0x31,0x32,0x32,0xea,0x42,0x85,0x6e,0x30,0x33,0x33,0x87,0xc9,0xca,0xca,0x5e,0x26,0xca,0x0,0x6,0x6,0x6,0x86,0x17,0x2f,0x5e,0x70,0xff,0xfc,0xf9,0x73,0xa,0x3,0x3,0x3,0x3,0x3b,0x3b,0x7b,0x8e,0x84,0x84,0x4,0x36,0x57,0xd,0x2,0x0,0x0,0x67,0xf2,0x14,0xc2,0xc2,0xbe,0xf5,0xb5,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned char tab_menu_hl_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x4c,0x49,0x44,0x41,0x54,0x28,0xcf,0x63,0x60,0x18,0x5,0xc,0xc,0xc,0xc,0x8c,0x30,0xc6,0x83,0xff,0xa8,0x12,0xa,0x50,0x19,0x26,0x42,0x26,0x10,0xaf,0x80,0x31,0x9e,0xe1,0x2b,0x5c,0xf4,0x3b,0x63,0x3a,0x16,0xb5,0xf7,0x35,0xee,0x5f,0x7a,0xf0,0xff,0xc1,0xff,0x7,0xd7,0x1f,0xeb,0x62,0x71,0x24,0x3,0x3,0x3,0xc3,0xb,0xee,0x9f,0x53,0x18,0x18,0xd8,0x73,0x24,0xbe,0x32,0x50,0x11,0x0,0x0,0x6,0x9b,0x11,0xfa,0xe0,0x26,0x3d,0x9f,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x6f,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0x18,0x5,0xa3,0x80,0x81,0x81,0x11,0x5d,0xe0,0xc1,0x83,0x7,0xff,0xf1,0x69,0x50,0x50,0x50,0x40,0xd1,0xc3,0x44,0xa9,0xb,0xa8,0x6f,0x0,0x23,0x23,0x63,0x3c,0x3,0x3,0xc3,0x57,0x2c,0x6a,0xbf,0x33,0x32,0x32,0xa6,0x63,0xa8,0xc7,0x66,0xea,0xfd,0xfb,0xf7,0x35,0x18,0x18,0x18,0x56,0x31,0x32,0x32,0xea,0x42,0x85,0x6e,0x30,0x33,0x33,0x87,0xc9,0xca,0xca,0x5e,0x26,0xca,0x0,0x6,0x6,0x6,0x86,0x17,0x2f,0x5e,0x70,0xff,0xfc,0xf9,0x73,0xa,0x3,0x3,0x3,0x3,0x3b,0x3b,0x7b,0x8e,0x84,0x84,0x4,0x36,0x57,0xd,0x2,0x0,0x0,0x67,0xf2,0x14,0xc2,0xc2,0xbe,0xf5,0xb5,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -490,7 +515,7 @@ static const unsigned char unchecked_png[]={ static const unsigned char updown_png[]={ -0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0x81,0x83,0xf6,0xf6,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x86,0x49,0x44,0x41,0x54,0x18,0xd3,0x85,0x8e,0x21,0x12,0xc2,0x30,0x10,0x45,0x5f,0x98,0x9d,0xe9,0x70,0x81,0x3d,0x41,0x1c,0x75,0xe5,0x4,0xc4,0xc1,0x79,0xa9,0xb,0x6,0x49,0x5d,0x8b,0x5b,0x11,0x9d,0xb,0xd4,0xec,0x4c,0x10,0xad,0x43,0xf4,0xb9,0x6f,0xfe,0x7b,0x70,0x44,0x0,0x30,0x95,0x27,0xf8,0x23,0x56,0xb6,0x59,0xe6,0xd2,0x4a,0x2b,0xb3,0x29,0x4,0x53,0x79,0x71,0x61,0x1,0x7a,0xbe,0x7e,0xb,0xe5,0xc3,0x95,0xc5,0x13,0x48,0xa6,0x67,0x3a,0xb5,0x95,0xc9,0x53,0xac,0xb1,0x7a,0x62,0x6a,0xeb,0xa1,0x95,0x50,0xde,0x9c,0xfd,0x1e,0x2b,0x98,0xca,0xc8,0x7a,0x6a,0x1d,0x83,0x64,0x53,0x53,0xc9,0xc,0xad,0xb,0xa6,0x92,0xe9,0x77,0xed,0xe2,0xe9,0x3f,0x6c,0x4f,0x1f,0x61,0x7b,0x3a,0xe6,0x7,0x73,0x18,0x40,0x43,0x76,0xe2,0x28,0x4e,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xba,0x84,0x14,0xff,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x35,0x3a,0x35,0x30,0x2b,0x30,0x32,0x3a,0x30,0x30,0xcb,0xd9,0xac,0x43,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x2b,0x8a,0x3e,0x7d,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xa6,0x49,0x44,0x41,0x54,0x28,0x91,0xa5,0x90,0x21,0xe,0xc2,0x50,0x10,0x44,0xdf,0x27,0x9b,0x10,0x2e,0xc0,0x9,0xd6,0x81,0xe3,0x6,0xe0,0xa0,0xd7,0x2d,0xae,0x18,0x24,0x95,0xc5,0x7d,0x51,0xdd,0xb,0x60,0xf6,0x67,0x31,0xfb,0x49,0xc1,0x20,0x3a,0x6a,0x93,0x99,0x9d,0xcc,0xc,0x2c,0x45,0xaa,0x47,0xce,0x79,0x2b,0x22,0x2d,0x80,0x99,0x5d,0x54,0x75,0xfa,0x8,0x82,0xec,0x80,0x7d,0xe8,0x7,0x33,0x3b,0xa9,0xea,0x94,0x82,0xbc,0x1,0x3b,0x60,0x8,0xc1,0x1e,0x78,0x9a,0xd9,0x51,0xc2,0x76,0x57,0xbf,0x0,0xaa,0x9b,0x88,0xb4,0x2b,0x77,0x7f,0x1,0x7d,0xb5,0x54,0xd5,0x29,0x84,0x7d,0x70,0x4b,0x6b,0x8e,0xe3,0x78,0x7,0x36,0x66,0x76,0xae,0xd5,0x22,0xf8,0x15,0x78,0x89,0xbb,0xaf,0x53,0x4a,0x7,0x11,0xe9,0x72,0xce,0x5f,0x21,0xdd,0xfd,0x21,0xa5,0x94,0x66,0x96,0xba,0x9b,0xd5,0x1c,0x4a,0x29,0xcd,0xff,0xa1,0x7e,0xa6,0xbe,0xc6,0xd4,0x9f,0x3c,0xcb,0xf1,0x6,0x8e,0x4e,0x65,0x44,0x6f,0x74,0x5c,0xa1,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; @@ -529,6 +554,11 @@ static const unsigned char vsplitter_png[]={ }; +static const unsigned char window_resizer_png[]={ +0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x19,0x11,0x33,0x13,0xaa,0xc0,0xf,0x5f,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x2f,0x49,0x44,0x41,0x54,0x38,0xcb,0x63,0x60,0x18,0x5,0x24,0x81,0x17,0x2f,0x5e,0xf4,0xa3,0x8b,0x31,0x91,0xa2,0xb9,0xb9,0xb9,0x99,0x7c,0x9b,0xb3,0xb3,0xb3,0xfb,0x87,0x81,0x66,0x6c,0x81,0x48,0x92,0x66,0xa2,0x5c,0x43,0x91,0xe6,0x11,0xa,0x0,0x73,0x5b,0x34,0x19,0x10,0xa0,0xb6,0x7d,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; + + diff --git a/scene/resources/default_theme/window_resizer.png b/scene/resources/default_theme/window_resizer.png Binary files differnew file mode 100644 index 0000000000..ed51968c4e --- /dev/null +++ b/scene/resources/default_theme/window_resizer.png diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp index 67587a8f8b..679c8a000c 100644 --- a/scene/resources/dynamic_font.cpp +++ b/scene/resources/dynamic_font.cpp @@ -30,13 +30,22 @@ #include "dynamic_font.h" #include "os/file_access.h" +bool DynamicFontData::CacheID::operator< (CacheID right) const{ + + if (size<right.size) + return true; + if (mipmaps != right.mipmaps) + return right.mipmaps; + if (filter != right.filter) + return right.filter; + return false; +} - -Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(int p_size) { +Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(CacheID p_id){ - if (size_cache.has(p_size)) { - return Ref<DynamicFontAtSize>( size_cache[p_size] ); + if (size_cache.has(p_id)) { + return Ref<DynamicFontAtSize>( size_cache[p_id] ); } @@ -46,9 +55,8 @@ Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(int p_size) { dfas->font=Ref<DynamicFontData>( this ); - size_cache[p_size]=dfas.ptr(); - - dfas->size=p_size; + size_cache[p_id]=dfas.ptr(); + dfas->id=p_id; dfas->_load(); return dfas; @@ -169,11 +177,16 @@ Error DynamicFontAtSize::_load() { ERR_FAIL_COND_V( error, ERR_INVALID_PARAMETER ); }*/ - error = FT_Set_Pixel_Sizes(face,0,size); + error = FT_Set_Pixel_Sizes(face,0,id.size); ascent=face->size->metrics.ascender>>6; descent=-face->size->metrics.descender>>6; linegap=0; + texture_flags=0; + if (id.mipmaps) + texture_flags|=Texture::FLAG_MIPMAPS; + if (id.filter) + texture_flags|=Texture::FLAG_FILTER; //print_line("ASCENT: "+itos(ascent)+" descent "+itos(descent)+" hinted: "+itos(face->face_flags&FT_FACE_FLAG_HINTER)); @@ -270,6 +283,15 @@ Size2 DynamicFontAtSize::get_char_size(CharType p_char,CharType p_next,const Vec return ret; } +void DynamicFontAtSize::set_texture_flags(uint32_t p_flags){ + + texture_flags=p_flags; + for(int i=0;i<textures.size();i++) { + Ref<ImageTexture> &tex = textures[i].texture; + if (!tex.is_null()) + tex->set_flags(p_flags); + } +} float DynamicFontAtSize::draw_char(RID p_canvas_item, const Point2& p_pos, CharType p_char,CharType p_next,const Color& p_modulate,const Vector<Ref<DynamicFontAtSize> >& p_fallbacks) const { @@ -496,7 +518,7 @@ void DynamicFontAtSize::_update_char(CharType p_char) { tex_x = 0; tex_y = 0; - int texsize = MAX(size*8,256); + int texsize = MAX(id.size*8,256); if (mw>texsize) texsize=mw; //special case, adapt to it? if (mh>texsize) @@ -555,7 +577,7 @@ void DynamicFontAtSize::_update_char(CharType p_char) { if (tex.texture.is_null()) { tex.texture.instance(); - tex.texture->create_from_image(img,Texture::FLAG_VIDEO_SURFACE); + tex.texture->create_from_image(img,Texture::FLAG_VIDEO_SURFACE|texture_flags); } else { tex.texture->set_data(img); //update } @@ -595,25 +617,39 @@ DynamicFontAtSize::DynamicFontAtSize() { ascent=1; descent=1; linegap=1; + texture_flags=0; } DynamicFontAtSize::~DynamicFontAtSize(){ if (valid) { FT_Done_FreeType( library ); - font->size_cache.erase(size); + font->size_cache.erase(id); } } ///////////////////////// +void DynamicFont::_reload_cache(){ + + ERR_FAIL_COND(cache_id.size<1); + if (!data.is_valid()) + return; + data_at_size=data->_get_dynamic_font_at_size(cache_id); + for (int i=0;i<fallbacks.size();i++){ + fallback_data_at_size[i]=fallbacks[i]->_get_dynamic_font_at_size(cache_id); + } + + emit_changed(); + _change_notify(); +} void DynamicFont::set_font_data(const Ref<DynamicFontData>& p_data) { data=p_data; if (data.is_valid()) - data_at_size=data->_get_dynamic_font_at_size(size); + data_at_size=data->_get_dynamic_font_at_size(cache_id); else data_at_size=Ref<DynamicFontAtSize>(); @@ -628,23 +664,72 @@ Ref<DynamicFontData> DynamicFont::get_font_data() const{ void DynamicFont::set_size(int p_size){ - if (size==p_size) + if (cache_id.size==p_size) return; - size=p_size; - ERR_FAIL_COND(p_size<1); - if (!data.is_valid()) + cache_id.size=p_size; + _reload_cache(); +} + +int DynamicFont::get_size() const{ + + return cache_id.size; +} + +bool DynamicFont::get_use_mipmaps() const{ + + return cache_id.mipmaps; +} + +void DynamicFont::set_use_mipmaps(bool p_enable){ + + if (cache_id.mipmaps==p_enable) return; - data_at_size=data->_get_dynamic_font_at_size(size); - for(int i=0;i<fallbacks.size();i++) { - fallback_data_at_size[i]=fallbacks[i]->_get_dynamic_font_at_size(size); + cache_id.mipmaps=p_enable; + _reload_cache(); +} + +bool DynamicFont::get_use_filter() const{ + + return cache_id.filter; +} + +void DynamicFont::set_use_filter(bool p_enable){ + + if (cache_id.filter==p_enable) + return; + cache_id.filter=p_enable; + _reload_cache(); +} + +int DynamicFont::get_spacing(int p_type) const{ + + if (p_type == SPACING_TOP){ + return spacing_top; + }else if (p_type == SPACING_BOTTOM){ + return spacing_bottom; + }else if (p_type == SPACING_CHAR){ + return spacing_char; + }else if (p_type == SPACING_SPACE){ + return spacing_space; } - emit_changed(); - _change_notify(); + return 0; } -int DynamicFont::get_size() const{ - return size; +void DynamicFont::set_spacing(int p_type, int p_value){ + + if (p_type == SPACING_TOP){ + spacing_top=p_value; + }else if (p_type == SPACING_BOTTOM){ + spacing_bottom=p_value; + }else if (p_type == SPACING_CHAR){ + spacing_char=p_value; + }else if (p_type == SPACING_SPACE){ + spacing_space=p_value; + } + + emit_changed(); + _change_notify(); } float DynamicFont::get_height() const{ @@ -652,7 +737,7 @@ float DynamicFont::get_height() const{ if (!data_at_size.is_valid()) return 1; - return data_at_size->get_height(); + return data_at_size->get_height()+spacing_top+spacing_bottom; } float DynamicFont::get_ascent() const{ @@ -660,7 +745,7 @@ float DynamicFont::get_ascent() const{ if (!data_at_size.is_valid()) return 1; - return data_at_size->get_ascent(); + return data_at_size->get_ascent()+spacing_top; } float DynamicFont::get_descent() const{ @@ -668,7 +753,7 @@ float DynamicFont::get_descent() const{ if (!data_at_size.is_valid()) return 1; - return data_at_size->get_descent(); + return data_at_size->get_descent()+spacing_bottom; } @@ -677,7 +762,13 @@ Size2 DynamicFont::get_char_size(CharType p_char,CharType p_next) const{ if (!data_at_size.is_valid()) return Size2(1,1); - return data_at_size->get_char_size(p_char,p_next,fallback_data_at_size); + Size2 ret=data_at_size->get_char_size(p_char,p_next,fallback_data_at_size); + if (p_char==' ') + ret.width+=spacing_space+spacing_char; + else if (p_next) + ret.width+=spacing_char; + + return ret; } @@ -691,7 +782,7 @@ float DynamicFont::draw_char(RID p_canvas_item, const Point2& p_pos, CharType p_ if (!data_at_size.is_valid()) return 0; - return data_at_size->draw_char(p_canvas_item,p_pos,p_char,p_next,p_modulate,fallback_data_at_size); + return data_at_size->draw_char(p_canvas_item,p_pos,p_char,p_next,p_modulate,fallback_data_at_size)+spacing_char; } void DynamicFont::set_fallback(int p_idx,const Ref<DynamicFontData>& p_data) { @@ -699,7 +790,7 @@ void DynamicFont::set_fallback(int p_idx,const Ref<DynamicFontData>& p_data) { ERR_FAIL_COND(p_data.is_null()); ERR_FAIL_INDEX(p_idx,fallbacks.size()); fallbacks[p_idx]=p_data; - fallback_data_at_size[p_idx]=fallbacks[p_idx]->_get_dynamic_font_at_size(size); + fallback_data_at_size[p_idx]=fallbacks[p_idx]->_get_dynamic_font_at_size(cache_id); } @@ -707,7 +798,7 @@ void DynamicFont::add_fallback(const Ref<DynamicFontData>& p_data) { ERR_FAIL_COND(p_data.is_null()); fallbacks.push_back(p_data); - fallback_data_at_size.push_back(fallbacks[fallbacks.size()-1]->_get_dynamic_font_at_size(size)); //const.. + fallback_data_at_size.push_back(fallbacks[fallbacks.size()-1]->_get_dynamic_font_at_size(cache_id)); //const.. _change_notify(); emit_changed(); @@ -794,6 +885,13 @@ void DynamicFont::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_size","data"),&DynamicFont::set_size); ObjectTypeDB::bind_method(_MD("get_size"),&DynamicFont::get_size); + ObjectTypeDB::bind_method(_MD("set_use_mipmaps","enable"),&DynamicFont::set_use_mipmaps); + ObjectTypeDB::bind_method(_MD("get_use_mipmaps"),&DynamicFont::get_use_mipmaps); + ObjectTypeDB::bind_method(_MD("set_use_filter","enable"),&DynamicFont::set_use_filter); + ObjectTypeDB::bind_method(_MD("get_use_filter"),&DynamicFont::get_use_filter); + ObjectTypeDB::bind_method(_MD("set_spacing","type","value"),&DynamicFont::set_spacing); + ObjectTypeDB::bind_method(_MD("get_spacing","type"),&DynamicFont::get_spacing); + ObjectTypeDB::bind_method(_MD("add_fallback","data:DynamicFontData"),&DynamicFont::add_fallback); ObjectTypeDB::bind_method(_MD("set_fallback","idx","data:DynamicFontData"),&DynamicFont::set_fallback); ObjectTypeDB::bind_method(_MD("get_fallback:DynamicFontData","idx"),&DynamicFont::get_fallback); @@ -802,12 +900,26 @@ void DynamicFont::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT,"font/size"),_SCS("set_size"),_SCS("get_size")); + ADD_PROPERTYINZ(PropertyInfo(Variant::INT,"extra_spacing/top"),_SCS("set_spacing"),_SCS("get_spacing"),SPACING_TOP); + ADD_PROPERTYINZ(PropertyInfo(Variant::INT,"extra_spacing/bottom"),_SCS("set_spacing"),_SCS("get_spacing"),SPACING_BOTTOM); + ADD_PROPERTYINZ(PropertyInfo(Variant::INT,"extra_spacing/char"),_SCS("set_spacing"),_SCS("get_spacing"),SPACING_CHAR); + ADD_PROPERTYINZ(PropertyInfo(Variant::INT,"extra_spacing/space"),_SCS("set_spacing"),_SCS("get_spacing"),SPACING_SPACE); + ADD_PROPERTY(PropertyInfo(Variant::BOOL,"font/use_mipmaps"),_SCS("set_use_mipmaps"),_SCS("get_use_mipmaps")); + ADD_PROPERTY(PropertyInfo(Variant::BOOL,"font/use_filter"),_SCS("set_use_filter"),_SCS("get_use_filter")); ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"font/font",PROPERTY_HINT_RESOURCE_TYPE,"DynamicFontData"),_SCS("set_font_data"),_SCS("get_font_data")); + + BIND_CONSTANT( SPACING_TOP ); + BIND_CONSTANT( SPACING_BOTTOM ); + BIND_CONSTANT( SPACING_CHAR ); + BIND_CONSTANT( SPACING_SPACE ); } DynamicFont::DynamicFont() { - size=16; + spacing_top=0; + spacing_bottom=0; + spacing_char=0; + spacing_space=0; } DynamicFont::~DynamicFont() { diff --git a/scene/resources/dynamic_font.h b/scene/resources/dynamic_font.h index 9ad1b4edbf..4ae58ab0dd 100644 --- a/scene/resources/dynamic_font.h +++ b/scene/resources/dynamic_font.h @@ -45,21 +45,32 @@ class DynamicFontData : public Resource { OBJ_TYPE(DynamicFontData,Resource); +public: + + struct CacheID{ + + int size; + bool mipmaps; + bool filter; + + bool operator< (CacheID right) const; + CacheID() { size=16; mipmaps=false; filter=false; } + }; +private: const uint8_t *font_mem; int font_mem_size; bool force_autohinter; String font_path; - Map<int,DynamicFontAtSize*> size_cache; + Map<CacheID,DynamicFontAtSize*> size_cache; friend class DynamicFontAtSize; friend class DynamicFont; - - Ref<DynamicFontAtSize> _get_dynamic_font_at_size(int p_size); + Ref<DynamicFontAtSize> _get_dynamic_font_at_size(CacheID p_cache); protected: static void _bind_methods(); @@ -90,6 +101,8 @@ class DynamicFontAtSize : public Reference { int linegap; int rect_margin; + uint32_t texture_flags; + bool valid; struct CharTexture { @@ -124,7 +137,7 @@ class DynamicFontAtSize : public Reference { friend class DynamicFontData; Ref<DynamicFontData> font; - int size; + DynamicFontData::CacheID id; @@ -145,7 +158,7 @@ public: float draw_char(RID p_canvas_item, const Point2& p_pos, CharType p_char,CharType p_next,const Color& p_modulate,const Vector<Ref<DynamicFontAtSize> >& p_fallbacks) const; - + void set_texture_flags(uint32_t p_flags); DynamicFontAtSize(); ~DynamicFontAtSize(); @@ -157,18 +170,35 @@ class DynamicFont : public Font { OBJ_TYPE( DynamicFont, Font ); - Ref<DynamicFontData> data; +public: + + enum SpacingType{ + SPACING_TOP, + SPACING_BOTTOM, + SPACING_CHAR, + SPACING_SPACE + }; + +private: + + Ref<DynamicFontData> data; Ref<DynamicFontAtSize> data_at_size; Vector< Ref<DynamicFontData> > fallbacks; Vector< Ref<DynamicFontAtSize> > fallback_data_at_size; - int size; + DynamicFontData::CacheID cache_id; bool valid; + int spacing_top; + int spacing_bottom; + int spacing_char; + int spacing_space; protected: + void _reload_cache(); + bool _set(const StringName& p_name, const Variant& p_value); bool _get(const StringName& p_name,Variant &r_ret) const; void _get_property_list( List<PropertyInfo> *p_list) const; @@ -183,6 +213,14 @@ public: void set_size(int p_size); int get_size() const; + bool get_use_mipmaps() const; + void set_use_mipmaps(bool p_enable); + + bool get_use_filter() const; + void set_use_filter(bool p_enable); + + int get_spacing(int p_type) const; + void set_spacing(int p_type, int p_value); void add_fallback(const Ref<DynamicFontData>& p_data); void set_fallback(int p_idx,const Ref<DynamicFontData>& p_data); diff --git a/scene/resources/scene_format_text.cpp b/scene/resources/scene_format_text.cpp index 7bb9ca90ae..615c092dad 100644 --- a/scene/resources/scene_format_text.cpp +++ b/scene/resources/scene_format_text.cpp @@ -1289,6 +1289,10 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path,const RES& p_re } internal_resources[res]=idx; +#ifdef TOOLS_ENABLED + res->set_edited(false); +#endif + } diff --git a/scene/resources/style_box.cpp b/scene/resources/style_box.cpp index 8580ffdc5a..59246dfabe 100644 --- a/scene/resources/style_box.cpp +++ b/scene/resources/style_box.cpp @@ -141,7 +141,7 @@ void StyleBoxTexture::draw(RID p_canvas_item,const Rect2& p_rect) const { r.pos.y-=expand_margin[MARGIN_TOP]; r.size.x+=expand_margin[MARGIN_LEFT]+expand_margin[MARGIN_RIGHT]; r.size.y+=expand_margin[MARGIN_TOP]+expand_margin[MARGIN_BOTTOM]; - VisualServer::get_singleton()->canvas_item_add_style_box( p_canvas_item,r,region_rect,texture->get_rid(),Vector2(margin[MARGIN_LEFT],margin[MARGIN_TOP]),Vector2(margin[MARGIN_RIGHT],margin[MARGIN_BOTTOM]),draw_center); + VisualServer::get_singleton()->canvas_item_add_style_box( p_canvas_item,r,region_rect,texture->get_rid(),Vector2(margin[MARGIN_LEFT],margin[MARGIN_TOP]),Vector2(margin[MARGIN_RIGHT],margin[MARGIN_BOTTOM]),draw_center,modulate); } void StyleBoxTexture::set_draw_center(bool p_draw) { @@ -193,6 +193,19 @@ Rect2 StyleBoxTexture::get_region_rect() const { } +void StyleBoxTexture::set_modulate(const Color& p_modulate) { + if (modulate==p_modulate) + return; + modulate=p_modulate; + emit_changed(); +} + +Color StyleBoxTexture::get_modulate() const { + + return modulate; +} + + void StyleBoxTexture::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_texture","texture:Texture"),&StyleBoxTexture::set_texture); @@ -210,6 +223,10 @@ void StyleBoxTexture::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_draw_center","enable"),&StyleBoxTexture::set_draw_center); ObjectTypeDB::bind_method(_MD("get_draw_center"),&StyleBoxTexture::get_draw_center); + ObjectTypeDB::bind_method(_MD("set_modulate","color"),&StyleBoxTexture::set_modulate); + ObjectTypeDB::bind_method(_MD("get_modulate"),&StyleBoxTexture::get_modulate); + + ADD_SIGNAL(MethodInfo("texture_changed")); ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture" ), _SCS("set_texture"),_SCS("get_texture") ); @@ -222,6 +239,7 @@ void StyleBoxTexture::_bind_methods() { ADD_PROPERTYI( PropertyInfo( Variant::REAL, "expand_margin/right", PROPERTY_HINT_RANGE,"0,2048,1" ), _SCS("set_expand_margin_size"),_SCS("get_expand_margin_size"), MARGIN_RIGHT ); ADD_PROPERTYI( PropertyInfo( Variant::REAL, "expand_margin/top", PROPERTY_HINT_RANGE,"0,2048,1" ), _SCS("set_expand_margin_size"),_SCS("get_expand_margin_size"), MARGIN_TOP ); ADD_PROPERTYI( PropertyInfo( Variant::REAL, "expand_margin/bottom", PROPERTY_HINT_RANGE,"0,2048,1" ), _SCS("set_expand_margin_size"),_SCS("get_expand_margin_size"), MARGIN_BOTTOM ); + ADD_PROPERTY( PropertyInfo( Variant::COLOR, "modulate/color" ), _SCS("set_modulate"),_SCS("get_modulate")); ADD_PROPERTY( PropertyInfo( Variant::BOOL, "draw_center" ) , _SCS("set_draw_center"),_SCS("get_draw_center")); } @@ -234,6 +252,7 @@ StyleBoxTexture::StyleBoxTexture() { expand_margin[i]=0; } draw_center=true; + modulate=Color(1,1,1,1); } StyleBoxTexture::~StyleBoxTexture() { diff --git a/scene/resources/style_box.h b/scene/resources/style_box.h index 98aaee754b..f667318e24 100644 --- a/scene/resources/style_box.h +++ b/scene/resources/style_box.h @@ -84,6 +84,7 @@ class StyleBoxTexture : public StyleBox { Rect2 region_rect; Ref<Texture> texture; bool draw_center; + Color modulate; protected: @@ -109,6 +110,9 @@ public: bool get_draw_center() const; virtual Size2 get_center_size() const; + void set_modulate(const Color& p_modulate); + Color get_modulate() const; + virtual void draw(RID p_canvas_item,const Rect2& p_rect) const; diff --git a/scene/resources/world_2d.cpp b/scene/resources/world_2d.cpp index 6b329a1a73..4c963da5b4 100644 --- a/scene/resources/world_2d.cpp +++ b/scene/resources/world_2d.cpp @@ -407,7 +407,7 @@ World2D::World2D() { Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_GRAVITY,GLOBAL_DEF("physics_2d/default_gravity",98)); Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_GRAVITY_VECTOR,GLOBAL_DEF("physics_2d/default_gravity_vector",Vector2(0,1))); // TODO: Remove this deprecation warning and compatibility code for 2.2 or 3.0 - if (Globals::get_singleton()->get("physics_2d/default_density") && !Globals::get_singleton()->get("physics_2d/default_linear_damp)")) { + if (Globals::get_singleton()->get("physics_2d/default_density") && !Globals::get_singleton()->get("physics_2d/default_linear_damp")) { WARN_PRINT("Deprecated parameter 'physics_2d/default_density'. It was renamed to 'physics_2d/default_linear_damp', adjusting your project settings accordingly (make sure to adjust scripts that potentially rely on 'physics_2d/default_density'."); Globals::get_singleton()->set("physics_2d/default_linear_damp", Globals::get_singleton()->get("physics_2d/default_density")); Globals::get_singleton()->set_persisting("physics_2d/default_linear_damp", true); diff --git a/servers/audio/audio_mixer_sw.h b/servers/audio/audio_mixer_sw.h index 950ed19af6..e924b518cc 100644 --- a/servers/audio/audio_mixer_sw.h +++ b/servers/audio/audio_mixer_sw.h @@ -69,8 +69,7 @@ private: MIX_VOLRAMP_FRAC_MASK=MIX_VOLRAMP_FRAC_LEN-1, MIX_FILTER_FRAC_BITS=16, MIX_FILTER_RAMP_FRAC_BITS=8, - MIX_VOL_MOVE_TO_24=4, - MAX_REVERBS=4 + MIX_VOL_MOVE_TO_24=4 }; diff --git a/servers/audio_server.h b/servers/audio_server.h index 50194af4a5..9e21e6b183 100644 --- a/servers/audio_server.h +++ b/servers/audio_server.h @@ -65,7 +65,8 @@ public: REVERB_SMALL, REVERB_MEDIUM, REVERB_LARGE, - REVERB_HALL + REVERB_HALL, + MAX_REVERBS }; virtual ChannelID channel_alloc(RID p_sample)=0; diff --git a/servers/physics/body_pair_sw.cpp b/servers/physics/body_pair_sw.cpp index 3202e52abb..43e52f26e8 100644 --- a/servers/physics/body_pair_sw.cpp +++ b/servers/physics/body_pair_sw.cpp @@ -323,13 +323,13 @@ bool BodyPairSW::setup(float p_step) { #endif if (A->can_report_contacts()) { - Vector3 crB = A->get_angular_velocity().cross( c.rA ) + A->get_linear_velocity(); - A->add_contact(global_A,-c.normal,depth,shape_A,global_B,shape_B,B->get_instance_id(),B->get_self(),crB); + Vector3 crA = A->get_angular_velocity().cross( c.rA ) + A->get_linear_velocity(); + A->add_contact(global_A,-c.normal,depth,shape_A,global_B,shape_B,B->get_instance_id(),B->get_self(),crA); } if (B->can_report_contacts()) { - Vector3 crA = A->get_angular_velocity().cross( c.rB ) + A->get_linear_velocity(); - B->add_contact(global_B,c.normal,depth,shape_B,global_A,shape_A,A->get_instance_id(),A->get_self(),crA); + Vector3 crB = B->get_angular_velocity().cross( c.rB ) + B->get_linear_velocity(); + B->add_contact(global_B,c.normal,depth,shape_B,global_A,shape_A,A->get_instance_id(),A->get_self(),crB); } if (A->is_shape_set_as_trigger(shape_A) || B->is_shape_set_as_trigger(shape_B) || (A->get_mode()<=PhysicsServer::BODY_MODE_KINEMATIC && B->get_mode()<=PhysicsServer::BODY_MODE_KINEMATIC)) { diff --git a/servers/physics_2d/physics_2d_server_sw.cpp b/servers/physics_2d/physics_2d_server_sw.cpp index 54cd929c2f..8e92a475ab 100644 --- a/servers/physics_2d/physics_2d_server_sw.cpp +++ b/servers/physics_2d/physics_2d_server_sw.cpp @@ -1016,14 +1016,14 @@ void Physics2DServerSW::body_set_pickable(RID p_body,bool p_pickable) { } -bool Physics2DServerSW::body_test_motion(RID p_body,const Vector2& p_motion,float p_margin,MotionResult *r_result) { +bool Physics2DServerSW::body_test_motion(RID p_body, const Matrix32 &p_from, const Vector2& p_motion, float p_margin, MotionResult *r_result) { Body2DSW *body = body_owner.get(p_body); ERR_FAIL_COND_V(!body,false); ERR_FAIL_COND_V(!body->get_space(),false); ERR_FAIL_COND_V(body->get_space()->is_locked(),false); - return body->get_space()->test_body_motion(body,p_motion,p_margin,r_result); + return body->get_space()->test_body_motion(body,p_from,p_motion,p_margin,r_result); } diff --git a/servers/physics_2d/physics_2d_server_sw.h b/servers/physics_2d/physics_2d_server_sw.h index d557688b91..1dc735289a 100644 --- a/servers/physics_2d/physics_2d_server_sw.h +++ b/servers/physics_2d/physics_2d_server_sw.h @@ -236,7 +236,7 @@ public: virtual void body_set_pickable(RID p_body,bool p_pickable); - virtual bool body_test_motion(RID p_body,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL); + virtual bool body_test_motion(RID p_body,const Matrix32& p_from,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL); /* JOINT API */ diff --git a/servers/physics_2d/physics_2d_server_wrap_mt.h b/servers/physics_2d/physics_2d_server_wrap_mt.h index fd98da2d9c..57da958f9a 100644 --- a/servers/physics_2d/physics_2d_server_wrap_mt.h +++ b/servers/physics_2d/physics_2d_server_wrap_mt.h @@ -266,10 +266,10 @@ public: FUNC2(body_set_pickable,RID,bool); - bool body_test_motion(RID p_body,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL) { + bool body_test_motion(RID p_body,const Matrix32& p_from,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL) { ERR_FAIL_COND_V(main_thread!=Thread::get_caller_ID(),false); - return physics_2d_server->body_test_motion(p_body,p_motion,p_margin,r_result); + return physics_2d_server->body_test_motion(p_body,p_from,p_motion,p_margin,r_result); } /* JOINT API */ diff --git a/servers/physics_2d/space_2d_sw.cpp b/servers/physics_2d/space_2d_sw.cpp index 5fde6f567b..d0dcee7763 100644 --- a/servers/physics_2d/space_2d_sw.cpp +++ b/servers/physics_2d/space_2d_sw.cpp @@ -589,7 +589,7 @@ int Space2DSW::_cull_aabb_for_body(Body2DSW *p_body,const Rect2& p_aabb) { return amount; } -bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p_margin,Physics2DServer::MotionResult *r_result) { +bool Space2DSW::test_body_motion(Body2DSW *p_body, const Matrix32 &p_from, const Vector2&p_motion, float p_margin, Physics2DServer::MotionResult *r_result) { //give me back regular physics engine logic //this is madness @@ -598,6 +598,11 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p //this took about a week to get right.. //but is it right? who knows at this point.. + if (r_result) { + r_result->collider_id=0; + r_result->collider_shape=0; + + } Rect2 body_aabb; for(int i=0;i<p_body->get_shape_count();i++) { @@ -610,8 +615,7 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p body_aabb=body_aabb.grow(p_margin); - - Matrix32 body_transform = p_body->get_transform(); + Matrix32 body_transform = p_from; { //STEP 1, FREE BODY IF STUCK @@ -681,6 +685,17 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p Vector2 a = sr[i*2+0]; Vector2 b = sr[i*2+1]; +#if 0 + Vector2 rel = b-a; + float d = rel.length(); + if (d==0) + continue; + + Vector2 n = rel/d; + float traveled = n.dot(recover_motion); + a+=n*traveled; + +#endif // float d = a.distance_to(b); //if (d<margin) @@ -833,8 +848,9 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p collided=false; if (r_result) { - r_result->motion=p_motion+(body_transform.elements[2]-p_body->get_transform().elements[2]); - r_result->remainder=Vector2(); + r_result->motion=p_motion; + r_result->remainder=Vector2(); + r_result->motion+=(body_transform.elements[2]-p_from.elements[2]); } } else { @@ -895,16 +911,19 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p Vector2 rel_vec = r_result->collision_point-body->get_transform().get_origin(); r_result->collider_velocity = Vector2(-body->get_angular_velocity() * rel_vec.y, body->get_angular_velocity() * rel_vec.x) + body->get_linear_velocity(); - r_result->motion=safe*p_motion+(body_transform.elements[2]-p_body->get_transform().elements[2]); + r_result->motion=safe*p_motion; r_result->remainder=p_motion - safe * p_motion; + r_result->motion+=(body_transform.elements[2]-p_from.elements[2]); + } collided=true; } else { if (r_result) { - r_result->motion=p_motion+(body_transform.elements[2]-p_body->get_transform().elements[2]); + r_result->motion=p_motion; r_result->remainder=Vector2(); + r_result->motion+=(body_transform.elements[2]-p_from.elements[2]); } collided=false; diff --git a/servers/physics_2d/space_2d_sw.h b/servers/physics_2d/space_2d_sw.h index f8e1f32838..f58e8c3fe7 100644 --- a/servers/physics_2d/space_2d_sw.h +++ b/servers/physics_2d/space_2d_sw.h @@ -184,7 +184,7 @@ public: int get_collision_pairs() const { return collision_pairs; } - bool test_body_motion(Body2DSW *p_body, const Vector2&p_motion, float p_margin, Physics2DServer::MotionResult *r_result); + bool test_body_motion(Body2DSW *p_body, const Matrix32 &p_from, const Vector2&p_motion, float p_margin, Physics2DServer::MotionResult *r_result); void set_debug_contacts(int p_amount) { contact_debug.resize(p_amount); } diff --git a/servers/physics_2d_server.cpp b/servers/physics_2d_server.cpp index e41461c11f..a77b13eb21 100644 --- a/servers/physics_2d_server.cpp +++ b/servers/physics_2d_server.cpp @@ -493,12 +493,12 @@ Physics2DTestMotionResult::Physics2DTestMotionResult(){ -bool Physics2DServer::_body_test_motion(RID p_body,const Vector2& p_motion,float p_margin,const Ref<Physics2DTestMotionResult>& p_result) { +bool Physics2DServer::_body_test_motion(RID p_body,const Matrix32& p_from,const Vector2& p_motion,float p_margin,const Ref<Physics2DTestMotionResult>& p_result) { MotionResult *r=NULL; if (p_result.is_valid()) r=p_result->get_result_ptr(); - return body_test_motion(p_body,p_motion,p_margin,r); + return body_test_motion(p_body,p_from,p_motion,p_margin,r); } void Physics2DServer::_bind_methods() { @@ -619,7 +619,7 @@ void Physics2DServer::_bind_methods() { ObjectTypeDB::bind_method(_MD("body_set_force_integration_callback","body","receiver","method","userdata"),&Physics2DServer::body_set_force_integration_callback,DEFVAL(Variant())); - ObjectTypeDB::bind_method(_MD("body_test_motion","body","motion","margin","result:Physics2DTestMotionResult"),&Physics2DServer::_body_test_motion,DEFVAL(0.08),DEFVAL(Variant())); + ObjectTypeDB::bind_method(_MD("body_test_motion","body","from","motion","margin","result:Physics2DTestMotionResult"),&Physics2DServer::_body_test_motion,DEFVAL(0.08),DEFVAL(Variant())); /* JOINT API */ diff --git a/servers/physics_2d_server.h b/servers/physics_2d_server.h index 53c5a9ecc0..10707e9314 100644 --- a/servers/physics_2d_server.h +++ b/servers/physics_2d_server.h @@ -238,7 +238,7 @@ class Physics2DServer : public Object { static Physics2DServer * singleton; - virtual bool _body_test_motion(RID p_body,const Vector2& p_motion,float p_margin=0.08,const Ref<Physics2DTestMotionResult>& p_result=Ref<Physics2DTestMotionResult>()); + virtual bool _body_test_motion(RID p_body, const Matrix32 &p_from, const Vector2& p_motion, float p_margin=0.08, const Ref<Physics2DTestMotionResult>& p_result=Ref<Physics2DTestMotionResult>()); protected: static void _bind_methods(); @@ -497,7 +497,7 @@ public: Variant collider_metadata; }; - virtual bool body_test_motion(RID p_body,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL)=0; + virtual bool body_test_motion(RID p_body,const Matrix32& p_from,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL)=0; /* JOINT API */ diff --git a/servers/visual/rasterizer.cpp b/servers/visual/rasterizer.cpp index 32f5b80e55..a4b91e17fe 100644 --- a/servers/visual/rasterizer.cpp +++ b/servers/visual/rasterizer.cpp @@ -290,9 +290,6 @@ RID Rasterizer::_create_shader(const FixedMaterialShaderKey& p_key) { //print_line("**VERTEX SHADER GENERATED code: \n"+vcode); - double tf = (OS::get_singleton()->get_ticks_usec()-t)/1000.0; -// print_line("generate: "+rtos(tf)); - shader_set_code(fms.shader,vcode,code,lcode,0,0); fixed_material_shaders[p_key]=fms; diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h index 50ec6792cc..8cc567072f 100644 --- a/servers/visual/rasterizer.h +++ b/servers/visual/rasterizer.h @@ -685,6 +685,7 @@ public: Point2 from,to; Color color; float width; + bool antialiased; CommandLine() { type = TYPE_LINE; } }; @@ -948,7 +949,7 @@ public: virtual void canvas_begin_rect(const Matrix32& p_transform)=0; virtual void canvas_set_clip(bool p_clip, const Rect2& p_rect)=0; virtual void canvas_end_rect()=0; - virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width)=0; + virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased)=0; virtual void canvas_draw_rect(const Rect2& p_rect, int p_flags, const Rect2& p_source,RID p_texture,const Color& p_modulate)=0; virtual void canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1))=0; virtual void canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width)=0; diff --git a/servers/visual/rasterizer_dummy.cpp b/servers/visual/rasterizer_dummy.cpp index 0e71d224d5..edbdc2fe23 100644 --- a/servers/visual/rasterizer_dummy.cpp +++ b/servers/visual/rasterizer_dummy.cpp @@ -1615,7 +1615,7 @@ void RasterizerDummy::canvas_end_rect() { } -void RasterizerDummy::canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width) { +void RasterizerDummy::canvas_draw_line(const Point2& p_from, const Point2& p_to, const Color& p_color, float p_width, bool p_antialiased) { diff --git a/servers/visual/rasterizer_dummy.h b/servers/visual/rasterizer_dummy.h index ac320e55f9..cac36eb6fc 100644 --- a/servers/visual/rasterizer_dummy.h +++ b/servers/visual/rasterizer_dummy.h @@ -706,7 +706,7 @@ public: virtual void canvas_begin_rect(const Matrix32& p_transform); virtual void canvas_set_clip(bool p_clip, const Rect2& p_rect); virtual void canvas_end_rect(); - virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width); + virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased); virtual void canvas_draw_rect(const Rect2& p_rect, int p_flags, const Rect2& p_source,RID p_texture,const Color& p_modulate); virtual void canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1)); virtual void canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width); diff --git a/servers/visual/visual_server_raster.cpp b/servers/visual/visual_server_raster.cpp index d89ea887fa..8d228ad859 100644 --- a/servers/visual/visual_server_raster.cpp +++ b/servers/visual/visual_server_raster.cpp @@ -3629,7 +3629,7 @@ float VisualServerRaster::canvas_item_get_self_opacity(RID p_item, float p_self_ } -void VisualServerRaster::canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width) { +void VisualServerRaster::canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased) { VS_CHANGED; CanvasItem *canvas_item = canvas_item_owner.get( p_item ); ERR_FAIL_COND(!canvas_item); @@ -3640,6 +3640,7 @@ void VisualServerRaster::canvas_item_add_line(RID p_item, const Point2& p_from, line->from=p_from; line->to=p_to; line->width=p_width; + line->antialiased=p_antialiased; canvas_item->rect_dirty=true; @@ -7533,10 +7534,10 @@ void VisualServerRaster::_draw_cursors_and_margins() { ERR_CONTINUE( !tex ); if (cursors[i].region.has_no_area()) { Point2 size(texture_get_width(tex), texture_get_height(tex)); - rasterizer->canvas_draw_rect(Rect2(cursors[i].pos, size), 0, Rect2(), tex, Color(1, 1, 1, 1)); + rasterizer->canvas_draw_rect(Rect2(cursors[i].pos-cursors[i].center, size), 0, Rect2(), tex, Color(1, 1, 1, 1)); } else { Point2 size = cursors[i].region.size; - rasterizer->canvas_draw_rect(Rect2(cursors[i].pos, size), Rasterizer::CANVAS_RECT_REGION, cursors[i].region, tex, Color(1, 1, 1, 1)); + rasterizer->canvas_draw_rect(Rect2(cursors[i].pos-cursors[i].center, size), Rasterizer::CANVAS_RECT_REGION, cursors[i].region, tex, Color(1, 1, 1, 1)); } }; diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h index 228a4a7c44..496820f4a8 100644 --- a/servers/visual/visual_server_raster.h +++ b/servers/visual/visual_server_raster.h @@ -1168,7 +1168,7 @@ public: virtual void canvas_item_attach_viewport(RID p_item, RID p_viewport); - virtual void canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width=1.0); + virtual void canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to, const Color& p_color, float p_width=1.0, bool p_antialiased=false); virtual void canvas_item_add_rect(RID p_item, const Rect2& p_rect, const Color& p_color); virtual void canvas_item_add_circle(RID p_item, const Point2& p_pos, float p_radius,const Color& p_color); virtual void canvas_item_add_texture_rect(RID p_item, const Rect2& p_rect, RID p_texture,bool p_tile=false,const Color& p_modulate=Color(1,1,1),bool p_transpose=false); diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h index 8c39b0bea1..b4e374dd6f 100644 --- a/servers/visual/visual_server_wrap_mt.h +++ b/servers/visual/visual_server_wrap_mt.h @@ -602,7 +602,7 @@ public: FUNC2(canvas_item_attach_viewport,RID, RID ); - FUNC5(canvas_item_add_line,RID, const Point2& , const Point2& ,const Color& ,float ); + FUNC6(canvas_item_add_line,RID, const Point2& , const Point2& ,const Color& ,float,bool); FUNC3(canvas_item_add_rect,RID, const Rect2& , const Color& ); FUNC4(canvas_item_add_circle,RID, const Point2& , float ,const Color& ); FUNC6(canvas_item_add_texture_rect,RID, const Rect2& , RID ,bool ,const Color&,bool ); diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp index 9ec02f5071..f69580254c 100644 --- a/servers/visual_server.cpp +++ b/servers/visual_server.cpp @@ -532,7 +532,7 @@ void VisualServer::_bind_methods() { ObjectTypeDB::bind_method(_MD("canvas_item_get_self_opacity"),&VisualServer::canvas_item_get_self_opacity); ObjectTypeDB::bind_method(_MD("canvas_item_set_z"),&VisualServer::canvas_item_set_z); - ObjectTypeDB::bind_method(_MD("canvas_item_add_line"),&VisualServer::canvas_item_add_line, DEFVAL(1.0)); + ObjectTypeDB::bind_method(_MD("canvas_item_add_line"),&VisualServer::canvas_item_add_line, DEFVAL(1.0), DEFVAL(false)); ObjectTypeDB::bind_method(_MD("canvas_item_add_rect"),&VisualServer::canvas_item_add_rect); ObjectTypeDB::bind_method(_MD("canvas_item_add_texture_rect"),&VisualServer::canvas_item_add_texture_rect, DEFVAL(Color(1,1,1)), DEFVAL(false)); ObjectTypeDB::bind_method(_MD("canvas_item_add_texture_rect_region"),&VisualServer::canvas_item_add_texture_rect_region, DEFVAL(Color(1,1,1)), DEFVAL(false)); diff --git a/servers/visual_server.h b/servers/visual_server.h index 64318dfd72..2f3d8371f6 100644 --- a/servers/visual_server.h +++ b/servers/visual_server.h @@ -1020,7 +1020,7 @@ public: virtual void canvas_item_set_on_top(RID p_item, bool p_on_top)=0; virtual bool canvas_item_is_on_top(RID p_item) const=0; - virtual void canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width=1.0)=0; + virtual void canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width=1.0,bool p_antialiased=false)=0; virtual void canvas_item_add_rect(RID p_item, const Rect2& p_rect, const Color& p_color)=0; virtual void canvas_item_add_circle(RID p_item, const Point2& p_pos, float p_radius,const Color& p_color)=0; virtual void canvas_item_add_texture_rect(RID p_item, const Rect2& p_rect, RID p_texture,bool p_tile=false,const Color& p_modulate=Color(1,1,1),bool p_transpose=false)=0; diff --git a/tools/SCsub b/tools/SCsub index f6c14a13fb..aaebab724a 100644 --- a/tools/SCsub +++ b/tools/SCsub @@ -115,10 +115,7 @@ if (env["tools"]!="no"): env.Command('#tools/editor/builtin_fonts.h',flist,make_fonts_header) SConscript('editor/SCsub'); - #SConscript('scintilla/SCsub'); SConscript('collada/SCsub'); - SConscript('docdump/SCsub'); - #SConscript('freetype/SCsub'); SConscript('doc/SCsub') SConscript('pck/SCsub') diff --git a/tools/addheader/files b/tools/addheader/files deleted file mode 100644 index 7b0968236c..0000000000 --- a/tools/addheader/files +++ /dev/null @@ -1,158 +0,0 @@ -./scene/*.h -./scene/*.cpp -./scene/io/*.h -./scene/io/*.cpp -./scene/main/*.h -./scene/main/*.cpp -./scene/resources/*.h -./scene/resources/*.cpp -./scene/gui/*.h -./scene/gui/*.cpp -./scene/audio/*.h -./scene/audio/*.cpp -./scene/3d/*.h -./scene/3d/*.cpp -./scene/2d/*.h -./scene/2d/*.cpp -./scene/animation/*.h -./scene/animation/*.cpp -./bin/tests/*.h -./bin/tests/*.cpp -./main/*.h -./main/*.cpp -./modules/gridmap/*.h -./modules/gridmap/*.cpp -./servers/*.h -./servers/*.cpp -./servers/physics_2d/*.h -./servers/physics_2d/*.cpp -./servers/physics/*.h -./servers/physics/*.cpp -./servers/visual/*.h -./servers/visual/*.cpp -./servers/spatial_sound_2d/*.h -./servers/spatial_sound_2d/*.cpp -./servers/audio/*.h -./servers/audio/*.cpp -./tools/doc/doc_data.h -./tools/doc/doc_data.cpp -./tools/collada/collada.h -./tools/collada/collada.cpp -./tools/editor/*.h -./tools/editor/*.cpp -./tools/editor/plugins/*.h -./tools/editor/plugins/*.cpp -./tools/editor/io_plugins/*.h -./tools/editor/io_plugins/*.cpp -./tools/docdump/doc_dump.h -./tools/docdump/doc_dump.cpp -./core/*.h -./core/*.cpp -./core/io/object_format_binary.h -./core/io/file_access_buffered_fa.h -./core/io/file_access_buffered.h -./core/io/resource_saver.h -./core/io/file_access_compressed.cpp -./core/io/object_format_xml.cpp -./core/io/http_client.h -./core/io/object_format_xml.h -./core/io/compression.h -./core/io/ip_address.h -./core/io/file_access_pack.h -./core/io/ip.h -./core/io/tcp_server.h -./core/io/tcp_server.cpp -./core/io/packet_peer.cpp -./core/io/marshalls.h -./core/io/stream_peer.cpp -./core/io/resource_loader.cpp -./core/io/stream_peer_tcp.h -./core/io/stream_peer_tcp.cpp -./core/io/translation_loader_po.h -./core/io/zip_io.h -./core/io/ip_address.cpp -./core/io/object_saver_base.cpp -./core/io/object_loader.cpp -./core/io/xml_parser.h -./core/io/file_access_network.cpp -./core/io/resource_loader.h -./core/io/packet_peer.h -./core/io/stream_peer.h -./core/io/marshalls.cpp -./core/io/config_file.h -./core/io/ip.cpp -./core/io/file_access_zip.cpp -./core/io/resource_format_binary.h -./core/io/image_loader.h -./core/io/file_access_zip.h -./core/io/http_client.cpp -./core/io/file_access_memory.h -./core/io/xml_parser.cpp -./core/io/object_saver_base.h -./core/io/object_saver.cpp -./core/io/compression.cpp -./core/io/resource_format_xml.cpp -./core/io/object_format_binary.cpp -./core/io/file_access_compressed.h -./core/io/json.h -./core/io/file_access_pack.cpp -./core/io/resource_format_binary.cpp -./core/io/object_loader.h -./core/io/object_saver.h -./core/io/json.cpp -./core/io/file_access_network.h -./core/io/resource_saver.cpp -./core/io/file_access_memory.cpp -./core/io/image_loader.cpp -./core/io/resource_format_xml.h -./core/io/file_access_buffered.cpp -./core/io/config_file.cpp -./core/io/translation_loader_po.cpp -./core/os/*.h -./core/os/*.cpp -./core/math/*.h -./core/math/*.cpp -./script/gdscript/*.h -./script/gdscript/*.cpp -./script/multiscript/multi_script.cpp -./script/multiscript/multi_script.h -./script/register_script_types.h -./platform/android/*.h -./platform/android/*.cpp -./platform/android/java/src/com/android/godot/*.java -./platform/server/*.h -./platform/server/*.cpp -./platform/bb10/*.h -./platform/bb10/*.cpp -./platform/javascript/*.h -./platform/javascript/*.cpp -./platform/javascript/export/export.h -./platform/javascript/export/export.cpp -./platform/iphone/*.h -./platform/iphone/*.cpp -./platform/iphone/*.mm -./platform/windows/*.h -./platform/windows/*.cpp -./platform/osx/*.h -./platform/osx/*.cpp -./platform/osx/*.mm -./platform/x11/*.h -./platform/x11/*.cpp -./drivers/unix/*.h -./drivers/unix/*.cpp -./drivers/gles2/*.h -./drivers/gles2/*.cpp -./drivers/chibi/*.h -./drivers/chibi/*.cpp -./drivers/png/resource_saver_png.cpp -./drivers/png/image_loader_png.cpp -./drivers/png/image_loader_png.h -./drivers/vorbis/audio_stream_ogg_vorbis.h -./drivers/vorbis/audio_stream_ogg_vorbis.cpp -./drivers/gl_context/context_gl.h -./drivers/gles1/*.h -./drivers/gles1/*.cpp -./drivers/windows/*.h -./drivers/windows/*.cpp -./drivers/alsa/audio_driver_alsa.h -./drivers/alsa/audio_driver_alsa.cpp diff --git a/tools/addheader/header.txt b/tools/addheader/header.txt deleted file mode 100644 index e4efb2dcfc..0000000000 --- a/tools/addheader/header.txt +++ /dev/null @@ -1,12 +0,0 @@ -/*************************************************/ -/* $filename */ -/*************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/*************************************************/ -/* Source code within this file is: */ -/* (c) 2007-2016 Juan Linietsky, Ariel Manzur */ -/* All Rights Reserved. */ -/*************************************************/ - - diff --git a/tools/buildstuff/zlib_freetype231_jpeg_libpng-bin-win32-vs81.zip b/tools/buildstuff/zlib_freetype231_jpeg_libpng-bin-win32-vs81.zip Binary files differdeleted file mode 100644 index 4adf30ea29..0000000000 --- a/tools/buildstuff/zlib_freetype231_jpeg_libpng-bin-win32-vs81.zip +++ /dev/null diff --git a/tools/docker/Dockerfile b/tools/dist/docker/Dockerfile index 428de9d1a7..428de9d1a7 100644 --- a/tools/docker/Dockerfile +++ b/tools/dist/docker/Dockerfile diff --git a/tools/docker/README.md b/tools/dist/docker/README.md index 7f10b46ad8..7f10b46ad8 100644 --- a/tools/docker/README.md +++ b/tools/dist/docker/README.md diff --git a/tools/docker/scripts/install-android-tools b/tools/dist/docker/scripts/install-android-tools index 8a617d9942..8a617d9942 100644 --- a/tools/docker/scripts/install-android-tools +++ b/tools/dist/docker/scripts/install-android-tools diff --git a/tools/html_fs/godot.html b/tools/dist/html_fs/godot.html index c354826e1f..c354826e1f 100644 --- a/tools/html_fs/godot.html +++ b/tools/dist/html_fs/godot.html diff --git a/tools/html_fs/godotfs.js b/tools/dist/html_fs/godotfs.js index 2c59344cf5..2c59344cf5 100644 --- a/tools/html_fs/godotfs.js +++ b/tools/dist/html_fs/godotfs.js diff --git a/platform/iphone/xcode/godot_xcode/data.pck b/tools/dist/ios_xcode/godot_xcode/data.pck index e69de29bb2..e69de29bb2 100644 --- a/platform/iphone/xcode/godot_xcode/data.pck +++ b/tools/dist/ios_xcode/godot_xcode/data.pck diff --git a/platform/iphone/xcode/godot_xcode/godot_debug.iphone b/tools/dist/ios_xcode/godot_xcode/godot_debug.iphone index e69de29bb2..e69de29bb2 100755 --- a/platform/iphone/xcode/godot_xcode/godot_debug.iphone +++ b/tools/dist/ios_xcode/godot_xcode/godot_debug.iphone diff --git a/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj b/tools/dist/ios_xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj index bdba8488c8..bdba8488c8 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj diff --git a/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/tools/dist/ios_xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 3c9ba38bbe..3c9ba38bbe 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png Binary files differindex 1d5e472665..1d5e472665 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-667h.png Binary files differindex b13a399c83..b13a399c83 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-667h.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h@2x.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-667h@2x.png Binary files differindex b51598fed0..b51598fed0 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h@2x.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-667h@2x.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-736h.png Binary files differindex 8c44edbccd..8c44edbccd 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-736h.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h@3x.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-736h@3x.png Binary files differindex 33847ac136..33847ac136 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h@3x.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-736h@3x.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape-736h.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape-736h.png Binary files differindex 2a025b745b..2a025b745b 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape-736h.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape-736h.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png Binary files differindex 7099f3e18d..7099f3e18d 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png Binary files differindex 4a761c339a..4a761c339a 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png Binary files differindex b09cf21186..b09cf21186 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png Binary files differindex fa698eb70c..fa698eb70c 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default@2x~iphone.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default@2x~iphone.png Binary files differindex ddf2861f4d..ddf2861f4d 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default@2x~iphone.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default@2x~iphone.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default~iphone.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default~iphone.png Binary files differindex c485a33b03..c485a33b03 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Default~iphone.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default~iphone.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json index a458b67873..a458b67873 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png Binary files differindex 165f4423b3..165f4423b3 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png Binary files differindex 2e205e920c..2e205e920c 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png Binary files differindex 6245f83f48..6245f83f48 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png Binary files differindex 7b24e01bc6..7b24e01bc6 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png Binary files differindex 344b470fa3..344b470fa3 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png Binary files differindex 0dcebbc3f2..0dcebbc3f2 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png Binary files differindex 9ae94e9aaf..9ae94e9aaf 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png Binary files differindex 569f24df91..569f24df91 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png Binary files differindex 9e69ed3121..9e69ed3121 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png Binary files differindex b970fa3067..b970fa3067 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png Binary files differindex 6097a6c73b..6097a6c73b 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png Binary files differindex 21b9622eb6..21b9622eb6 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png Binary files differindex 34dea8e6ad..34dea8e6ad 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png Binary files differindex f72eb0b345..f72eb0b345 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png Binary files differindex 793c9b1f5f..793c9b1f5f 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png Binary files differindex 7cd0e054ab..7cd0e054ab 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png Binary files differindex e9b2429754..e9b2429754 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes index e328a62cb6..e328a62cb6 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings b/tools/dist/ios_xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings index 477b28ff8f..477b28ff8f 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/godot_ios-Info.plist b/tools/dist/ios_xcode/godot_xcode/godot_ios/godot_ios-Info.plist index f97b0fca36..f97b0fca36 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/godot_ios-Info.plist +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/godot_ios-Info.plist diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/main.m b/tools/dist/ios_xcode/godot_xcode/godot_ios/main.m index 3e4ea5e129..3e4ea5e129 100644 --- a/platform/iphone/xcode/godot_xcode/godot_ios/main.m +++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/main.m diff --git a/platform/iphone/xcode/godot_xcode/godot_opt.iphone b/tools/dist/ios_xcode/godot_xcode/godot_opt.iphone index e69de29bb2..e69de29bb2 100755 --- a/platform/iphone/xcode/godot_xcode/godot_opt.iphone +++ b/tools/dist/ios_xcode/godot_xcode/godot_opt.iphone diff --git a/tools/osx_template.app/Contents/Info.plist b/tools/dist/osx_template.app/Contents/Info.plist index 5146c875bc..5146c875bc 100755 --- a/tools/osx_template.app/Contents/Info.plist +++ b/tools/dist/osx_template.app/Contents/Info.plist diff --git a/tools/Godot.app/Contents/PkgInfo b/tools/dist/osx_template.app/Contents/PkgInfo index 6f749b0f37..6f749b0f37 100644 --- a/tools/Godot.app/Contents/PkgInfo +++ b/tools/dist/osx_template.app/Contents/PkgInfo diff --git a/tools/osx_template.app/Contents/Resources/icon.icns b/tools/dist/osx_template.app/Contents/Resources/icon.icns Binary files differindex 375f61437d..375f61437d 100644 --- a/tools/osx_template.app/Contents/Resources/icon.icns +++ b/tools/dist/osx_template.app/Contents/Resources/icon.icns diff --git a/tools/Godot.app/Contents/Info.plist b/tools/dist/osx_tools.app/Contents/Info.plist index 37c80fc8a3..2a3e727133 100755 --- a/tools/Godot.app/Contents/Info.plist +++ b/tools/dist/osx_tools.app/Contents/Info.plist @@ -19,11 +19,11 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>2.1-dev</string> + <string>2.2-dev</string> <key>CFBundleSignature</key> <string>godot</string> <key>CFBundleVersion</key> - <string>2.1-dev</string> + <string>2.2-dev</string> <key>NSHumanReadableCopyright</key> <string>© 2007-2016 Juan Linietsky, Ariel Manzur</string> <key>LSMinimumSystemVersion</key> diff --git a/tools/osx_template.app/Contents/PkgInfo b/tools/dist/osx_tools.app/Contents/PkgInfo index 6f749b0f37..6f749b0f37 100644 --- a/tools/osx_template.app/Contents/PkgInfo +++ b/tools/dist/osx_tools.app/Contents/PkgInfo diff --git a/tools/Godot.app/Contents/Resources/Godot.icns b/tools/dist/osx_tools.app/Contents/Resources/Godot.icns Binary files differindex 375f61437d..375f61437d 100644 --- a/tools/Godot.app/Contents/Resources/Godot.icns +++ b/tools/dist/osx_tools.app/Contents/Resources/Godot.icns diff --git a/tools/dist/uwp_template/AppxManifest.xml b/tools/dist/uwp_template/AppxManifest.xml new file mode 100644 index 0000000000..48a2ba7eb3 --- /dev/null +++ b/tools/dist/uwp_template/AppxManifest.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp build" xmlns:build="http://schemas.microsoft.com/developer/appx/2015/build">
+ <Identity Name="$identity_name$" Publisher="$publisher$" Version="$version_string$" ProcessorArchitecture="$architecture$" />
+ <mp:PhoneIdentity PhoneProductId="$product_guid$" PhonePublisherId="$publisher_guid$" />
+ <Properties>
+ <DisplayName>$display_name$</DisplayName>
+ <PublisherDisplayName>$publisher_display_name$</PublisherDisplayName>
+ <Logo>Assets\StoreLogo.png</Logo>
+ </Properties>
+ <Dependencies>
+ <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.10240.0" MaxVersionTested="10.0.14393.0" />
+ <PackageDependency Name="Microsoft.VCLibs.140.00" MinVersion="14.0.24123.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
+ </Dependencies>
+ <Resources>
+ <Resource Language="EN-US" />
+ </Resources>
+ <Applications>
+ <Application Id="App" Executable="godot.winrt.exe" EntryPoint="GodotWinRT.App">
+ <uap:VisualElements DisplayName="$display_name$" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="$app_description$" BackgroundColor="$bg_color$">
+ <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" Square310x310Logo="Assets\Square310x310Logo.png" Square71x71Logo="Assets\Square71x71Logo.png" ShortName="$short_name$">
+ $name_on_tiles$
+ </uap:DefaultTile>
+ <uap:SplashScreen Image="Assets\SplashScreen.png" />
+ $rotation_preference$
+ </uap:VisualElements>
+ </Application>
+ </Applications>
+ $capabilities_place$
+ <build:Metadata>
+ <build:Item Name="GodotEngine" Version="$godot_version$" />
+ </build:Metadata>
+</Package>
\ No newline at end of file diff --git a/tools/dist/uwp_template/Assets/SplashScreen.scale-100.png b/tools/dist/uwp_template/Assets/SplashScreen.scale-100.png Binary files differnew file mode 100644 index 0000000000..540bfb1c01 --- /dev/null +++ b/tools/dist/uwp_template/Assets/SplashScreen.scale-100.png diff --git a/tools/dist/uwp_template/Assets/Square150x150Logo.scale-100.png b/tools/dist/uwp_template/Assets/Square150x150Logo.scale-100.png Binary files differnew file mode 100644 index 0000000000..6cff663eb5 --- /dev/null +++ b/tools/dist/uwp_template/Assets/Square150x150Logo.scale-100.png diff --git a/tools/dist/uwp_template/Assets/Square310x310Logo.scale-100.png b/tools/dist/uwp_template/Assets/Square310x310Logo.scale-100.png Binary files differnew file mode 100644 index 0000000000..12ec232c87 --- /dev/null +++ b/tools/dist/uwp_template/Assets/Square310x310Logo.scale-100.png diff --git a/tools/dist/uwp_template/Assets/Square44x44Logo.scale-100.png b/tools/dist/uwp_template/Assets/Square44x44Logo.scale-100.png Binary files differnew file mode 100644 index 0000000000..ad059994ed --- /dev/null +++ b/tools/dist/uwp_template/Assets/Square44x44Logo.scale-100.png diff --git a/tools/dist/uwp_template/Assets/Square71x71Logo.scale-100.png b/tools/dist/uwp_template/Assets/Square71x71Logo.scale-100.png Binary files differnew file mode 100644 index 0000000000..b1bf331365 --- /dev/null +++ b/tools/dist/uwp_template/Assets/Square71x71Logo.scale-100.png diff --git a/tools/dist/uwp_template/Assets/StoreLogo.scale-100.png b/tools/dist/uwp_template/Assets/StoreLogo.scale-100.png Binary files differnew file mode 100644 index 0000000000..8d7a625c82 --- /dev/null +++ b/tools/dist/uwp_template/Assets/StoreLogo.scale-100.png diff --git a/tools/dist/uwp_template/Assets/Wide310x150Logo.scale-100.png b/tools/dist/uwp_template/Assets/Wide310x150Logo.scale-100.png Binary files differnew file mode 100644 index 0000000000..b06f1ad50f --- /dev/null +++ b/tools/dist/uwp_template/Assets/Wide310x150Logo.scale-100.png diff --git a/tools/doc/doc_data.cpp b/tools/doc/doc_data.cpp index 398267937b..4a8fdfb215 100644 --- a/tools/doc/doc_data.cpp +++ b/tools/doc/doc_data.cpp @@ -198,6 +198,11 @@ void DocData::generate(bool p_basic_types) { if (method.qualifiers!="") method.qualifiers+=" "; method.qualifiers+="const"; + + } else if (E->get().flags&METHOD_FLAG_VARARG) { + if (method.qualifiers!="") + method.qualifiers+=" "; + method.qualifiers+="vararg"; } for(int i=-1;i<E->get().arguments.size();i++) { @@ -276,14 +281,9 @@ void DocData::generate(bool p_basic_types) { default_arg_text=Variant::get_type_name(default_arg.get_type())+"("+default_arg_text+")"; break; - case Variant::VECTOR2: // 5 - case Variant::RECT2: - case Variant::VECTOR3: - case Variant::PLANE: - case Variant::QUAT: case Variant::_AABB: //sorry naming convention fail :( not like it's used often // 10 - case Variant::MATRIX3: case Variant::COLOR: + case Variant::PLANE: case Variant::RAW_ARRAY: case Variant::INT_ARRAY: case Variant::REAL_ARRAY: @@ -293,7 +293,18 @@ void DocData::generate(bool p_basic_types) { case Variant::COLOR_ARRAY: default_arg_text=Variant::get_type_name(default_arg.get_type())+"("+default_arg_text+")"; break; + case Variant::VECTOR2: // 5 + case Variant::RECT2: + case Variant::VECTOR3: + case Variant::QUAT: + case Variant::MATRIX3: + default_arg_text=Variant::get_type_name(default_arg.get_type())+default_arg_text; + break; case Variant::OBJECT: + if (default_arg.is_zero()) { + default_arg_text="NULL"; + break; + } case Variant::INPUT_EVENT: case Variant::DICTIONARY: // 20 case Variant::ARRAY: diff --git a/tools/docdump/doc_dump.cpp b/tools/doc/doc_dump.cpp index fbf13f9e8f..fbf13f9e8f 100644 --- a/tools/docdump/doc_dump.cpp +++ b/tools/doc/doc_dump.cpp diff --git a/tools/docdump/doc_dump.h b/tools/doc/doc_dump.h index 372f5e0969..372f5e0969 100644 --- a/tools/docdump/doc_dump.h +++ b/tools/doc/doc_dump.h diff --git a/tools/docdump/SCsub b/tools/docdump/SCsub deleted file mode 100644 index 34524f10ef..0000000000 --- a/tools/docdump/SCsub +++ /dev/null @@ -1,5 +0,0 @@ -Import('env') - -env.add_source_files(env.tool_sources,"*.cpp") - -Export('env') diff --git a/tools/editor/animation_editor.cpp b/tools/editor/animation_editor.cpp index aa0156b0c0..2f67df1fc3 100644 --- a/tools/editor/animation_editor.cpp +++ b/tools/editor/animation_editor.cpp @@ -316,7 +316,7 @@ public: int existing = animation->track_find_key(track,new_time,true); setting=true; - undo_redo->create_action(TTR("Move Add Key"),false); + undo_redo->create_action(TTR("Move Add Key"),UndoRedo::MERGE_ENDS); Variant val = animation->track_get_key_value(track,key); float trans = animation->track_get_key_transition(track,key); @@ -344,7 +344,7 @@ public: float val = p_value; float prev_val = animation->track_get_key_transition(track,key); setting=true; - undo_redo->create_action(TTR("Anim Change Transition"),true); + undo_redo->create_action(TTR("Anim Change Transition"),UndoRedo::MERGE_ENDS); undo_redo->add_do_method(animation.ptr(),"track_set_key_transition",track,key,val); undo_redo->add_undo_method(animation.ptr(),"track_set_key_transition",track,key,prev_val); undo_redo->add_do_method(this,"_update_obj",animation); @@ -387,7 +387,7 @@ public: } setting=true; - undo_redo->create_action(TTR("Anim Change Value"),true); + undo_redo->create_action(TTR("Anim Change Value"),UndoRedo::MERGE_ENDS); Variant prev = animation->track_get_key_value(track,key); undo_redo->add_do_method(animation.ptr(),"track_set_key_value",track,key,value); undo_redo->add_undo_method(animation.ptr(),"track_set_key_value",track,key,prev); @@ -463,7 +463,11 @@ public: } } - undo_redo->create_action(TTR("Anim Change Call"),mergeable); + if (mergeable) + undo_redo->create_action(TTR("Anim Change Call"),UndoRedo::MERGE_ENDS); + else + undo_redo->create_action(TTR("Anim Change Call")); + Variant prev = animation->track_get_key_value(track,key); setting=true; undo_redo->add_do_method(animation.ptr(),"track_set_key_value",track,key,d_new); @@ -1715,9 +1719,9 @@ void AnimationKeyEditor::_curve_transition_changed(float p_what) { if (selection.size()==0) return; if (selection.size()==1) - undo_redo->create_action(TTR("Edit Node Curve"),true); + undo_redo->create_action(TTR("Edit Node Curve"),UndoRedo::MERGE_ENDS); else - undo_redo->create_action(TTR("Edit Selection Curve"),true); + undo_redo->create_action(TTR("Edit Selection Curve"),UndoRedo::MERGE_ENDS); for(Map<SelectedKey,KeyInfo>::Element *E=selection.front();E;E=E->next()) { diff --git a/tools/editor/asset_library_editor_plugin.cpp b/tools/editor/asset_library_editor_plugin.cpp index 4f685badfb..3fd5d2b5d1 100644 --- a/tools/editor/asset_library_editor_plugin.cpp +++ b/tools/editor/asset_library_editor_plugin.cpp @@ -134,13 +134,13 @@ EditorAssetLibraryItem::EditorAssetLibraryItem() { category = memnew( LinkButton ); category->set_text("Editor Tools"); category->set_underline_mode(LinkButton::UNDERLINE_MODE_ON_HOVER); - title->connect("pressed",this,"_category_clicked"); + category->connect("pressed",this,"_category_clicked"); vb->add_child(category); author = memnew( LinkButton ); author->set_text("Johny Tolengo"); author->set_underline_mode(LinkButton::UNDERLINE_MODE_ON_HOVER); - title->connect("pressed",this,"_author_clicked"); + author->connect("pressed",this,"_author_clicked"); vb->add_child(author); HBoxContainer *rating_hb = memnew( HBoxContainer ); @@ -325,6 +325,7 @@ void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int String error_text; + print_line("COMPLETED: "+itos(p_status)+" code: "+itos(p_code)+" data size: "+itos(p_data.size())); switch(p_status) { @@ -383,7 +384,9 @@ void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int print_line("max: "+itos(download->get_body_size())+" bytes: "+itos(download->get_downloaded_bytes())); install->set_disabled(false); - status->set_text("Success!"); + progress->set_val(download->get_downloaded_bytes()); + + status->set_text("Success! ("+String::humanize_size(download->get_downloaded_bytes())+")"); set_process(false); } @@ -411,6 +414,10 @@ void EditorAssetLibraryItemDownload::_notification(int p_what) { progress->set_val(download->get_downloaded_bytes()); int cstatus = download->get_http_client_status(); + + if (cstatus==HTTPClient::STATUS_BODY) + status->set_text("Fetching: "+String::humanize_size(download->get_downloaded_bytes())); + if (cstatus!=prev_status) { switch(cstatus) { @@ -423,9 +430,6 @@ void EditorAssetLibraryItemDownload::_notification(int p_what) { case HTTPClient::STATUS_REQUESTING: { status->set_text("Requesting.."); } break; - case HTTPClient::STATUS_BODY: { - status->set_text("Downloading.."); - } break; default: {} } prev_status=cstatus; @@ -457,6 +461,7 @@ void EditorAssetLibraryItemDownload::_install() { void EditorAssetLibraryItemDownload::_make_request() { download->cancel_request(); download->set_download_file(EditorSettings::get_singleton()->get_settings_path().plus_file("tmp").plus_file("tmp_asset_"+itos(asset_id))+".zip"); + Error err = download->request(host); if(err!=OK) { status->set_text("Error making request"); @@ -1007,6 +1012,7 @@ void EditorAssetLibrary::_api_request(const String& p_request, RequestType p_req if (requesting!=REQUESTING_NONE) { request->cancel_request(); } + requesting=p_request_type; error_hb->hide(); @@ -1465,6 +1471,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { request = memnew( HTTPRequest ); add_child(request); + request->set_use_threads(EDITOR_DEF("asset_library/use_threads",true)); request->connect("request_completed",this,"_http_request_completed"); last_queue_id=0; diff --git a/tools/editor/code_editor.cpp b/tools/editor/code_editor.cpp index 71ae171dfe..2779275ea8 100644 --- a/tools/editor/code_editor.cpp +++ b/tools/editor/code_editor.cpp @@ -133,8 +133,9 @@ bool FindReplaceBar::_search(uint32_t p_flags, int p_from_line, int p_from_col) if (found) { if (!preserve_cursor) { - text_edit->cursor_set_line(line); - text_edit->cursor_set_column(col+text.length()); + text_edit->cursor_set_line(line, false); + text_edit->cursor_set_column(col+text.length(), false); + text_edit->center_viewport_to_cursor(); } text_edit->set_search_text(text); @@ -187,7 +188,9 @@ void FindReplaceBar::_replace_all() { text_edit->cursor_set_line(0); text_edit->cursor_set_column(0); + String replace_text=get_replace_text(); int search_text_len=get_search_text().length(); + int rc=0; replace_all_mode = true; @@ -203,7 +206,7 @@ void FindReplaceBar::_replace_all() { if (match_from < prev_match) break; // done - prev_match=match_to; + prev_match=Point2i(result_line,result_col+replace_text.length()); text_edit->select(result_line,result_col,result_line,match_to.y); @@ -213,12 +216,12 @@ void FindReplaceBar::_replace_all() { continue; // replace but adjust selection bounds - text_edit->insert_text_at_cursor(get_replace_text()); + text_edit->insert_text_at_cursor(replace_text); if (match_to.x==selection_end.x) - selection_end.y+=get_replace_text().length() - get_search_text().length(); + selection_end.y+=replace_text.length()-search_text_len; } else { // just replace - text_edit->insert_text_at_cursor(get_replace_text()); + text_edit->insert_text_at_cursor(replace_text); } rc++; @@ -1031,8 +1034,8 @@ void CodeTextEditor::_reset_zoom() { void CodeTextEditor::_line_col_changed() { - String text = String()+TTR("Line:")+" "+itos(text_editor->cursor_get_line()+1)+", "+TTR("Col:")+" "+itos(text_editor->cursor_get_column()); - line_col->set_text(text); + line_nb->set_text(itos(text_editor->cursor_get_line() + 1)); + col_nb->set_text(itos(text_editor->cursor_get_column())); } void CodeTextEditor::_text_changed() { @@ -1051,7 +1054,11 @@ void CodeTextEditor::_code_complete_timer_timeout() { void CodeTextEditor::_complete_request() { List<String> entries; - _code_complete_script(text_editor->get_text_for_completion(),&entries); + String ctext = text_editor->get_text_for_completion(); + _code_complete_script(ctext,&entries); + if (code_complete_func) { + code_complete_func(code_complete_ud,ctext,&entries); + } // print_line("COMPLETE: "+p_request); if (entries.size()==0) return; @@ -1135,13 +1142,16 @@ void CodeTextEditor::_text_changed_idle_timeout() { _validate_script(); + emit_signal("validate_script"); } void CodeTextEditor::_notification(int p_what) { - if (p_what==EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) + if (p_what==EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { _load_theme_settings(); + emit_signal("load_theme_settings"); + } if (p_what==NOTIFICATION_ENTER_TREE) { _update_font(); } @@ -1157,10 +1167,21 @@ void CodeTextEditor::_bind_methods() { ObjectTypeDB::bind_method("_code_complete_timer_timeout",&CodeTextEditor::_code_complete_timer_timeout); ObjectTypeDB::bind_method("_complete_request",&CodeTextEditor::_complete_request); ObjectTypeDB::bind_method("_font_resize_timeout",&CodeTextEditor::_font_resize_timeout); + + ADD_SIGNAL(MethodInfo("validate_script")); + ADD_SIGNAL(MethodInfo("load_theme_settings")); + +} + +void CodeTextEditor::set_code_complete_func(CodeTextEditorCodeCompleteFunc p_code_complete_func,void * p_ud) { + code_complete_func=p_code_complete_func; + code_complete_ud=p_ud; } + CodeTextEditor::CodeTextEditor() { + code_complete_func=NULL; ED_SHORTCUT("script_editor/zoom_in", TTR("Zoom In"), KEY_MASK_CMD|KEY_EQUAL); ED_SHORTCUT("script_editor/zoom_out", TTR("Zoom Out"), KEY_MASK_CMD|KEY_MINUS); ED_SHORTCUT("script_editor/reset_zoom", TTR("Reset Zoom"), KEY_MASK_CMD|KEY_0); @@ -1190,6 +1211,7 @@ CodeTextEditor::CodeTextEditor() { HBoxContainer *status_bar = memnew( HBoxContainer ); status_mc->add_child(status_bar); status_bar->set_h_size_flags(SIZE_EXPAND_FILL); + status_bar->add_child( memnew( Label ) ); //to keep the height if the other labels are not visible idle = memnew( Timer ); add_child(idle); @@ -1211,14 +1233,33 @@ CodeTextEditor::CodeTextEditor() { status_bar->add_spacer(); - line_col = memnew( Label ); - status_bar->add_child(line_col); - line_col->set_valign(Label::VALIGN_CENTER); - line_col->set_autowrap(true); - line_col->set_v_size_flags(SIZE_FILL); - line_col->set_custom_minimum_size(Size2(100,1)*EDSCALE); - status_bar->add_child( memnew( Label ) ); //to keep the height if the other labels are not visible - + Label *line_txt = memnew( Label ); + status_bar->add_child(line_txt); + line_txt->set_align(Label::ALIGN_RIGHT); + line_txt->set_valign(Label::VALIGN_CENTER); + line_txt->set_v_size_flags(SIZE_FILL); + line_txt->set_text(TTR("Line:")); + + line_nb = memnew( Label ); + status_bar->add_child(line_nb); + line_nb->set_valign(Label::VALIGN_CENTER); + line_nb->set_v_size_flags(SIZE_FILL); + line_nb->set_autowrap(true); // workaround to prevent resizing the label on each change + line_nb->set_custom_minimum_size(Size2(40,1)*EDSCALE); + + Label *col_txt = memnew( Label ); + status_bar->add_child(col_txt); + col_txt->set_align(Label::ALIGN_RIGHT); + col_txt->set_valign(Label::VALIGN_CENTER); + col_txt->set_v_size_flags(SIZE_FILL); + col_txt->set_text(TTR("Col:")); + + col_nb = memnew( Label ); + status_bar->add_child(col_nb); + col_nb->set_valign(Label::VALIGN_CENTER); + col_nb->set_v_size_flags(SIZE_FILL); + col_nb->set_autowrap(true); // workaround to prevent resizing the label on each change + col_nb->set_custom_minimum_size(Size2(40,1)*EDSCALE); text_editor->connect("input_event", this,"_text_editor_input_event"); text_editor->connect("cursor_changed", this,"_line_col_changed"); diff --git a/tools/editor/code_editor.h b/tools/editor/code_editor.h index 7983c46f7a..2affa31482 100644 --- a/tools/editor/code_editor.h +++ b/tools/editor/code_editor.h @@ -189,6 +189,8 @@ public: }; +typedef void (*CodeTextEditorCodeCompleteFunc)(void* p_ud,const String& p_code, List<String>* r_options); + class CodeTextEditor : public VBoxContainer { OBJ_TYPE(CodeTextEditor,VBoxContainer); @@ -196,7 +198,8 @@ class CodeTextEditor : public VBoxContainer { TextEdit *text_editor; FindReplaceBar *find_replace_bar; - Label *line_col; + Label *line_nb; + Label *col_nb; Label *info; Timer *idle; Timer *code_complete_timer; @@ -218,13 +221,16 @@ class CodeTextEditor : public VBoxContainer { void _zoom_out(); void _reset_zoom(); + + CodeTextEditorCodeCompleteFunc code_complete_func; + void *code_complete_ud; + protected: - void set_error(const String& p_error); virtual void _load_theme_settings() {} - virtual void _validate_script()=0; - virtual void _code_complete_script(const String& p_code, List<String>* r_options) {}; + virtual void _validate_script() {} + virtual void _code_complete_script(const String& p_code, List<String>* r_options) {} void _text_changed_idle_timeout(); void _code_complete_timer_timeout(); @@ -235,10 +241,16 @@ protected: public: + void set_error(const String& p_error); + void update_line_and_column() { _line_col_changed(); } TextEdit *get_text_edit() { return text_editor; } FindReplaceBar *get_find_replace_bar() { return find_replace_bar; } virtual void apply_code() {} + + void set_code_complete_func(CodeTextEditorCodeCompleteFunc p_code_complete_func, void * p_ud); + + CodeTextEditor(); }; diff --git a/tools/editor/connections_dialog.cpp b/tools/editor/connections_dialog.cpp index bdc420c70f..c4f2435675 100644 --- a/tools/editor/connections_dialog.cpp +++ b/tools/editor/connections_dialog.cpp @@ -674,7 +674,7 @@ void ConnectionsDock::update_tree() { tname=Variant::get_type_name(pi.type); } signaldesc+=tname+" "+(pi.name==""?String("arg "+itos(i)):pi.name); - argnames.push_back(pi.name); + argnames.push_back(pi.name+":"+tname); } signaldesc+=" "; diff --git a/tools/editor/create_dialog.cpp b/tools/editor/create_dialog.cpp index 3ab2e35242..5aac8bff09 100644 --- a/tools/editor/create_dialog.cpp +++ b/tools/editor/create_dialog.cpp @@ -140,7 +140,7 @@ void CreateDialog::_update_search() { search_options->clear(); - + help_bit->set_text(""); /* TreeItem *root = search_options->create_item(); _parse_fs(EditorFileSystem::get_singleton()->get_filesystem()); @@ -292,9 +292,12 @@ String CreateDialog::get_selected_type() { Object *CreateDialog::instance_selected() { TreeItem *selected = search_options->get_selected(); + if (selected) { String custom = selected->get_metadata(0); + + if (custom!=String()) { if (EditorNode::get_editor_data().get_custom_types().has(custom)) { @@ -323,6 +326,7 @@ Object *CreateDialog::instance_selected() { } } + return NULL; } @@ -332,11 +336,27 @@ String CreateDialog::get_base_type() const { return base_type; } +void CreateDialog::_item_selected() { + + TreeItem *item = search_options->get_selected(); + if (!item) + return; + + String name = item->get_text(0); + + if (!EditorHelp::get_doc_data()->class_list.has(name)) + return; + + help_bit->set_text(EditorHelp::get_doc_data()->class_list[name].brief_description); + +} + void CreateDialog::_bind_methods() { ObjectTypeDB::bind_method(_MD("_text_changed"),&CreateDialog::_text_changed); ObjectTypeDB::bind_method(_MD("_confirmed"),&CreateDialog::_confirmed); ObjectTypeDB::bind_method(_MD("_sbox_input"),&CreateDialog::_sbox_input); + ObjectTypeDB::bind_method(_MD("_item_selected"),&CreateDialog::_item_selected); ADD_SIGNAL(MethodInfo("create")); @@ -360,9 +380,14 @@ CreateDialog::CreateDialog() { register_text_enter(search_box); set_hide_on_ok(false); search_options->connect("item_activated",this,"_confirmed"); + search_options->connect("cell_selected",this,"_item_selected"); // search_options->set_hide_root(true); base_type="Object"; + help_bit = memnew( EditorHelpBit ); + vbc->add_margin_child(TTR("Description:"),help_bit); + help_bit->connect("request_hide",this,"_closed"); + } diff --git a/tools/editor/create_dialog.h b/tools/editor/create_dialog.h index 8957479beb..41156b538a 100644 --- a/tools/editor/create_dialog.h +++ b/tools/editor/create_dialog.h @@ -34,6 +34,7 @@ #include "scene/gui/tree.h" #include "scene/gui/line_edit.h" #include "scene/gui/label.h" +#include "editor_help.h" /** @author Juan Linietsky <reduzio@gmail.com> */ @@ -49,6 +50,10 @@ class CreateDialog : public ConfirmationDialog { Tree *search_options; String base_type; + EditorHelpBit *help_bit; + + void _item_selected(); + void _update_search(); void _sbox_input(const InputEvent& p_ie); diff --git a/tools/editor/editor_data.cpp b/tools/editor/editor_data.cpp index 8d3fd6c9c2..35ec1ebfcc 100644 --- a/tools/editor/editor_data.cpp +++ b/tools/editor/editor_data.cpp @@ -834,7 +834,7 @@ void EditorSelection::_node_removed(Node *p_node) { void EditorSelection::add_node(Node *p_node) { ERR_FAIL_NULL(p_node); - + ERR_FAIL_COND(!p_node->is_inside_tree()); if (selection.has(p_node)) return; diff --git a/tools/editor/editor_dir_dialog.cpp b/tools/editor/editor_dir_dialog.cpp index f6ce7bf3f8..cf0732501e 100644 --- a/tools/editor/editor_dir_dialog.cpp +++ b/tools/editor/editor_dir_dialog.cpp @@ -143,7 +143,7 @@ void EditorDirDialog::set_current_path(const String& p_path) { reload(); String p = p_path; if (p.begins_with("res://")) - p.replace_first("res://",""); + p = p.replace_first("res://",""); Vector<String> dirs = p.split("/"); @@ -162,13 +162,13 @@ void EditorDirDialog::set_current_path(const String& p_path) { ERR_FAIL_COND(!p); String pp = p->get_metadata(0); if (pp=="") { + p->set_metadata(0,String(r->get_metadata(0)).plus_file(d)); _update_dir(p); - updating=true; - p->set_collapsed(false); - updating=false; - _item_collapsed(p); - } + updating=true; + p->set_collapsed(false); + updating=false; + _item_collapsed(p); r=p; } @@ -216,7 +216,7 @@ void EditorDirDialog::_make_dir_confirm() { if (err!=OK) { mkdirerr->popup_centered_minsize(Size2(250,80)); } else { - reload(); + set_current_path(dir.plus_file(makedirname->get_text())); } makedirname->set_text(""); // reset label } diff --git a/tools/editor/editor_file_system.cpp b/tools/editor/editor_file_system.cpp index cb7cefea26..582b9e2490 100644 --- a/tools/editor/editor_file_system.cpp +++ b/tools/editor/editor_file_system.cpp @@ -657,7 +657,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir,DirAccess da->change_dir(".."); } } else { - ERR_PRINTS(TTR("Cannot go into subdir:")+" "+E->get()); + ERR_PRINTS("Cannot go into subdir: "+E->get()); } p_progress.update(idx,total); diff --git a/tools/editor/editor_help.cpp b/tools/editor/editor_help.cpp index 1fc157098c..4f83dc2f66 100644 --- a/tools/editor/editor_help.cpp +++ b/tools/editor/editor_help.cpp @@ -31,7 +31,7 @@ #include "editor_settings.h" #include "os/keyboard.h" #include "doc_data_compressed.h" - +#include "tools/editor/plugins/script_editor_plugin.h" #include "os/keyboard.h" @@ -882,6 +882,15 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) { class_desc->pop(); } + if (cd.methods[i].qualifiers.find("vararg")!=-1) { + class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/text_color")); + class_desc->add_text(","); + class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/symbol_color")); + class_desc->add_text(" ... "); + class_desc->pop(); + class_desc->pop(); + } + class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/symbol_color")); class_desc->add_text(cd.methods[i].arguments.size()?" )":")"); class_desc->pop(); @@ -943,10 +952,9 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) { class_desc->add_newline(); } - class_desc->add_newline(); - class_desc->pop(); - + class_desc->pop(); + class_desc->add_newline(); } if (cd.theme_properties.size()) { @@ -987,11 +995,10 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) { class_desc->add_newline(); } - class_desc->add_newline(); class_desc->pop(); - - + class_desc->add_newline(); } + if (cd.signals.size()) { if (sort_methods) { @@ -1258,16 +1265,20 @@ void EditorHelp::_help_callback(const String& p_topic) { } -void EditorHelp::_add_text(const String& p_bbcode) { - /*class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/text_color")); - class_desc->push_font( get_font("normal","Fonts") ); - class_desc->push_indent(1);*/ +static void _add_text_to_rt(const String& p_bbcode,RichTextLabel *p_rt) { + + DocData *doc = EditorHelp::get_doc_data(); + String base_path; + + /*p_rt->push_color(EditorSettings::get_singleton()->get("text_editor/text_color")); + p_rt->push_font( get_font("normal","Fonts") ); + p_rt->push_indent(1);*/ int pos = 0; - Ref<Font> doc_font = get_font("doc","EditorFonts"); - Ref<Font> doc_code_font = get_font("doc_source","EditorFonts"); + Ref<Font> doc_font = p_rt->get_font("doc","EditorFonts"); + Ref<Font> doc_code_font = p_rt->get_font("doc_source","EditorFonts"); String bbcode=p_bbcode.replace("\t"," ").replace("\r"," ").strip_edges(); @@ -1335,7 +1346,7 @@ void EditorHelp::_add_text(const String& p_bbcode) { brk_pos=bbcode.length(); if (brk_pos > pos) { - class_desc->add_text(bbcode.substr(pos,brk_pos-pos)); + p_rt->add_text(bbcode.substr(pos,brk_pos-pos)); } @@ -1346,7 +1357,7 @@ void EditorHelp::_add_text(const String& p_bbcode) { if (brk_end==-1) { //no close, add the rest - class_desc->add_text(bbcode.substr(brk_pos,bbcode.length()-brk_pos)); + p_rt->add_text(bbcode.substr(brk_pos,bbcode.length()-brk_pos)); break; } @@ -1364,7 +1375,7 @@ void EditorHelp::_add_text(const String& p_bbcode) { } if (!tag_ok) { - class_desc->add_text("["); + p_rt->add_text("["); pos++; continue; } @@ -1372,32 +1383,32 @@ void EditorHelp::_add_text(const String& p_bbcode) { tag_stack.pop_front(); pos=brk_end+1; if (tag!="/img") - class_desc->pop(); + p_rt->pop(); } else if (tag.begins_with("method ")) { String m = tag.substr(7,tag.length()); - class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color")); - class_desc->push_meta("@"+m); - class_desc->add_text(m+"()"); - class_desc->pop(); - class_desc->pop(); + p_rt->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color")); + p_rt->push_meta("@"+m); + p_rt->add_text(m+"()"); + p_rt->pop(); + p_rt->pop(); pos=brk_end+1; } else if (doc->class_list.has(tag)) { - class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color")); - class_desc->push_meta("#"+tag); - class_desc->add_text(tag); - class_desc->pop(); - class_desc->pop(); + p_rt->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color")); + p_rt->push_meta("#"+tag); + p_rt->add_text(tag); + p_rt->pop(); + p_rt->pop(); pos=brk_end+1; } else if (tag=="b") { //use bold font - class_desc->push_font(doc_code_font); + p_rt->push_font(doc_code_font); pos=brk_end+1; tag_stack.push_front(tag); } else if (tag=="i") { @@ -1408,37 +1419,37 @@ void EditorHelp::_add_text(const String& p_bbcode) { text_color.r*=1.1; text_color.g*=1.1; text_color.b*=1.1; - class_desc->push_color(text_color); - //class_desc->push_font(get_font("italic","Fonts")); + p_rt->push_color(text_color); + //p_rt->push_font(get_font("italic","Fonts")); pos=brk_end+1; tag_stack.push_front(tag); } else if (tag=="code" || tag=="codeblock") { //use monospace font - class_desc->push_font(doc_code_font); + p_rt->push_font(doc_code_font); pos=brk_end+1; tag_stack.push_front(tag); } else if (tag=="center") { //use monospace font - class_desc->push_align(RichTextLabel::ALIGN_CENTER); + p_rt->push_align(RichTextLabel::ALIGN_CENTER); pos=brk_end+1; tag_stack.push_front(tag); } else if (tag=="br") { //use monospace font - class_desc->add_newline(); + p_rt->add_newline(); pos=brk_end+1; } else if (tag=="u") { //use underline - class_desc->push_underline(); + p_rt->push_underline(); pos=brk_end+1; tag_stack.push_front(tag); } else if (tag=="s") { //use strikethrough (not supported underline instead) - class_desc->push_underline(); + p_rt->push_underline(); pos=brk_end+1; tag_stack.push_front(tag); @@ -1449,14 +1460,14 @@ void EditorHelp::_add_text(const String& p_bbcode) { if (end==-1) end=bbcode.length(); String url = bbcode.substr(brk_end+1,end-brk_end-1); - class_desc->push_meta(url); + p_rt->push_meta(url); pos=brk_end+1; tag_stack.push_front(tag); } else if (tag.begins_with("url=")) { String url = tag.substr(4,tag.length()); - class_desc->push_meta(url); + p_rt->push_meta(url); pos=brk_end+1; tag_stack.push_front("url"); } else if (tag=="img") { @@ -1469,7 +1480,7 @@ void EditorHelp::_add_text(const String& p_bbcode) { Ref<Texture> texture = ResourceLoader::load(base_path+"/"+image,"Texture"); if (texture.is_valid()) - class_desc->add_image(texture); + p_rt->add_image(texture); pos=end; tag_stack.push_front(tag); @@ -1517,7 +1528,7 @@ void EditorHelp::_add_text(const String& p_bbcode) { - class_desc->push_color(color); + p_rt->push_color(color); pos=brk_end+1; tag_stack.push_front("color"); @@ -1528,9 +1539,9 @@ void EditorHelp::_add_text(const String& p_bbcode) { Ref<Font> font = ResourceLoader::load(base_path+"/"+fnt,"Font"); if (font.is_valid()) - class_desc->push_font(font); + p_rt->push_font(font); else { - class_desc->push_font(doc_font); + p_rt->push_font(doc_font); } pos=brk_end+1; @@ -1539,15 +1550,23 @@ void EditorHelp::_add_text(const String& p_bbcode) { } else { - class_desc->add_text("["); //ignore + p_rt->add_text("["); //ignore pos=brk_pos+1; } } - /*class_desc->pop(); - class_desc->pop(); - class_desc->pop();*/ + /*p_rt->pop(); + p_rt->pop(); + p_rt->pop();*/ + +} + + +void EditorHelp::_add_text(const String& p_bbcode) { + + + _add_text_to_rt(p_bbcode,class_desc); } @@ -1705,3 +1724,71 @@ EditorHelp::~EditorHelp() { } +///////////// + + + +void EditorHelpBit::_go_to_help(String p_what) { + + EditorNode::get_singleton()->set_visible_editor(EditorNode::EDITOR_SCRIPT); + ScriptEditor::get_singleton()->goto_help(p_what); + emit_signal("request_hide"); +} + +void EditorHelpBit::_meta_clicked(String p_select) { + + + // print_line("LINK: "+p_select); + if (p_select.begins_with("#")) { + //_goto_desc(p_select.substr(1,p_select.length())); + _go_to_help("class_name:"+p_select.substr(1,p_select.length())); + return; + } else if (p_select.begins_with("@")) { + + String m = p_select.substr(1,p_select.length()); + + if (m.find(".")!=-1) { + //must go somewhere else + + _go_to_help("class_method:"+m.get_slice(".",0)+":"+m.get_slice(".",0)); + } else { +// + // if (!method_line.has(m)) + // return; + //class_desc->scroll_to_line(method_line[m]); + } + + } + + +} + +void EditorHelpBit::_bind_methods() { + + ObjectTypeDB::bind_method("_meta_clicked",&EditorHelpBit::_meta_clicked); + ADD_SIGNAL(MethodInfo("request_hide")); +} + +void EditorHelpBit::_notification(int p_what){ + + if (p_what==NOTIFICATION_ENTER_TREE) { + add_style_override("panel",get_stylebox("normal","TextEdit")); + } +} + + +void EditorHelpBit::set_text(const String& p_text) { + + rich_text->clear(); + _add_text_to_rt(p_text,rich_text); +} + +EditorHelpBit::EditorHelpBit() { + + rich_text = memnew( RichTextLabel ); + add_child(rich_text); + rich_text->set_area_as_parent_rect(8*EDSCALE); + rich_text->connect("meta_clicked",this,"_meta_clicked"); + set_custom_minimum_size(Size2(0,70*EDSCALE)); + +} diff --git a/tools/editor/editor_help.h b/tools/editor/editor_help.h index c3d19894df..b0dc2809fe 100644 --- a/tools/editor/editor_help.h +++ b/tools/editor/editor_help.h @@ -200,6 +200,23 @@ public: +class EditorHelpBit : public Panel { + OBJ_TYPE( EditorHelpBit, Panel); + + RichTextLabel *rich_text; + void _go_to_help(String p_what); + void _meta_clicked(String p_what); + + +protected: + + static void _bind_methods(); + void _notification(int p_what); +public: + + void set_text(const String& p_text); + EditorHelpBit(); +}; #endif // EDITOR_HELP_H diff --git a/tools/editor/editor_import_export.cpp b/tools/editor/editor_import_export.cpp index 357d139c04..d90a175811 100644 --- a/tools/editor/editor_import_export.cpp +++ b/tools/editor/editor_import_export.cpp @@ -1441,7 +1441,7 @@ bool EditorExportPlatformPC::can_export(String *r_error) const { String err; bool valid=true; - if (use64 && (!exists_export_template(debug_binary64)) || !exists_export_template(release_binary64)) { + if (use64 && (!exists_export_template(debug_binary64) || !exists_export_template(release_binary64))) { valid=false; err="No 64 bits export templates found.\nDownload and install export templates.\n"; } diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp index 8b55e73ee7..655652ced9 100644 --- a/tools/editor/editor_node.cpp +++ b/tools/editor/editor_node.cpp @@ -86,6 +86,7 @@ #include "plugins/collision_polygon_editor_plugin.h" #include "plugins/collision_polygon_2d_editor_plugin.h" #include "plugins/script_editor_plugin.h" +#include "plugins/script_text_editor.h" #include "plugins/path_2d_editor_plugin.h" #include "plugins/particles_editor_plugin.h" #include "plugins/particles_2d_editor_plugin.h" @@ -784,7 +785,7 @@ bool EditorNode::_find_and_save_resource(RES res,Map<RES,bool>& processed,int32_ if (changed || subchanged) { //save print_line("Also saving modified external resource: "+res->get_path()); - Error err = ResourceSaver::save(res->get_path(),res,flags); + ResourceSaver::save(res->get_path(),res,flags); } processed[res]=false; //because it's a file @@ -1213,7 +1214,7 @@ void EditorNode::_dialog_action(String p_file) { case FILE_SAVE_SCENE: case FILE_SAVE_AS_SCENE: { - if (file->get_mode()==FileDialog::MODE_SAVE_FILE) { + if (file->get_mode()==EditorFileDialog::MODE_SAVE_FILE) { //_save_scene(p_file); _save_scene_with_preview(p_file); @@ -1223,11 +1224,11 @@ void EditorNode::_dialog_action(String p_file) { } break; case FILE_SAVE_AND_RUN: { - if (file->get_mode()==FileDialog::MODE_SAVE_FILE) { + if (file->get_mode()==EditorFileDialog::MODE_SAVE_FILE) { //_save_scene(p_file); _save_scene_with_preview(p_file); - _run(false); + _run(true); } } break; @@ -1448,7 +1449,7 @@ void EditorNode::_dialog_action(String p_file) { } break; default: { //save scene? - if (file->get_mode()==FileDialog::MODE_SAVE_FILE) { + if (file->get_mode()==EditorFileDialog::MODE_SAVE_FILE) { //_save_scene(p_file); _save_scene_with_preview(p_file); @@ -1672,7 +1673,7 @@ void EditorNode::_edit_current() { if (main_plugin) { - if (main_plugin!=editor_plugin_screen) { + if (main_plugin!=editor_plugin_screen && (!ScriptEditor::get_singleton() || !ScriptEditor::get_singleton()->is_visible() || ScriptEditor::get_singleton()->can_take_away_focus())) { // update screen main_plugin @@ -2842,7 +2843,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) { } break; case SETTINGS_ABOUT: { - about->popup_centered(Size2(500,130)*EDSCALE); + about->popup_centered_minsize(Size2(500,130)*EDSCALE); } break; case SOURCES_REIMPORT: { @@ -3822,6 +3823,11 @@ void EditorNode::request_instance_scene(const String &p_path) { } +void EditorNode::request_instance_scenes(const Vector<String>& p_files) { + + scene_tree_dock->instance_scenes(p_files); +} + FileSystemDock *EditorNode::get_scenes_dock() { return scenes_dock; @@ -3831,10 +3837,9 @@ SceneTreeDock *EditorNode::get_scene_tree_dock() { return scene_tree_dock; } -void EditorNode::_instance_request(const String& p_path){ - +void EditorNode::_instance_request(const Vector<String>& p_files) { - request_instance_scene(p_path); + request_instance_scenes(p_files); } void EditorNode::_property_keyed(const String& p_keyed,const Variant& p_value,bool p_advance) { @@ -5215,6 +5220,17 @@ void EditorNode::reload_scene(const String& p_path) { _scene_tab_changed(current_tab); } +int EditorNode::plugin_init_callback_count=0; + +void EditorNode::add_plugin_init_callback(EditorPluginInitializeCallback p_callback) { + + ERR_FAIL_COND(plugin_init_callback_count==MAX_INIT_CALLBACKS); + + plugin_init_callbacks[plugin_init_callback_count++]=p_callback; +} + +EditorPluginInitializeCallback EditorNode::plugin_init_callbacks[EditorNode::MAX_INIT_CALLBACKS]; + void EditorNode::_bind_methods() { @@ -6164,7 +6180,7 @@ EditorNode::EditorNode() { scenes_dock = memnew( FileSystemDock(this) ); scenes_dock->set_name(TTR("FileSystem")); - scenes_dock->set_use_thumbnails(int(EditorSettings::get_singleton()->get("file_dialog/display_mode"))==EditorFileDialog::DISPLAY_THUMBNAILS); + scenes_dock->set_display_mode(int(EditorSettings::get_singleton()->get("filesystem_dock/display_mode"))); dock_slot[DOCK_SLOT_LEFT_UR]->add_child(scenes_dock); //prop_pallete->add_child(scenes_dock); scenes_dock->connect("open",this,"open_request"); @@ -6443,6 +6459,8 @@ EditorNode::EditorNode() { add_editor_plugin( memnew( SpatialEditorPlugin(this) ) ); add_editor_plugin( memnew( ScriptEditorPlugin(this) ) ); + ScriptTextEditor::register_editor(); //register one for text scripts + if (StreamPeerSSL::is_available()) { add_editor_plugin( memnew( AssetLibraryEditorPlugin(this) ) ); } else { @@ -6492,6 +6510,9 @@ EditorNode::EditorNode() { for(int i=0;i<EditorPlugins::get_plugin_count();i++) add_editor_plugin( EditorPlugins::create(i,this) ); + for(int i=0;i<plugin_init_callback_count;i++) { + plugin_init_callbacks[i](); + } resource_preview->add_preview_generator( Ref<EditorTexturePreviewPlugin>( memnew(EditorTexturePreviewPlugin ))); resource_preview->add_preview_generator( Ref<EditorPackedScenePreviewPlugin>( memnew(EditorPackedScenePreviewPlugin ))); @@ -6501,6 +6522,8 @@ EditorNode::EditorNode() { resource_preview->add_preview_generator( Ref<EditorMeshPreviewPlugin>( memnew(EditorMeshPreviewPlugin ))); resource_preview->add_preview_generator( Ref<EditorBitmapPreviewPlugin>( memnew(EditorBitmapPreviewPlugin ))); + + circle_step_msec=OS::get_singleton()->get_ticks_msec(); circle_step_frame=OS::get_singleton()->get_frames_drawn(); circle_step=0; @@ -6520,11 +6543,6 @@ EditorNode::EditorNode() { Globals::get_singleton()->set("debug/indicators_enabled",true); Globals::get_singleton()->set("render/room_cull_enabled",false); - theme->set_color("prop_category","Editor",Color::hex(0x3f3a44ff)); - theme->set_color("prop_section","Editor",Color::hex(0x35313aff)); - theme->set_color("prop_subsection","Editor",Color::hex(0x312e37ff)); - theme->set_color("fg_selected","Editor",Color::html("ffbd8e8e")); - theme->set_color("fg_error","Editor",Color::html("ffbd8e8e")); reference_resource_mem=true; save_external_resources_mem=true; diff --git a/tools/editor/editor_node.h b/tools/editor/editor_node.h index 9a227d3644..e6119cf577 100644 --- a/tools/editor/editor_node.h +++ b/tools/editor/editor_node.h @@ -94,6 +94,7 @@ typedef void (*EditorNodeInitCallback)(); +typedef void (*EditorPluginInitializeCallback)(); class EditorPluginList; @@ -452,7 +453,7 @@ private: void _save_scene(String p_file, int idx = -1); - void _instance_request(const String& p_path); + void _instance_request(const Vector<String>& p_files); void _property_keyed(const String& p_keyed, const Variant& p_value, bool p_advance); void _transform_keyed(Object *sp,const String& p_sub,const Transform& p_key); @@ -575,17 +576,27 @@ private: static void _file_access_close_error_notify(const String& p_str); + + enum { + MAX_INIT_CALLBACKS=128 + }; + + static int plugin_init_callback_count; + static EditorPluginInitializeCallback plugin_init_callbacks[MAX_INIT_CALLBACKS]; protected: void _notification(int p_what); static void _bind_methods(); public: + static void add_plugin_init_callback(EditorPluginInitializeCallback p_callback); + enum EditorTable { EDITOR_2D = 0, EDITOR_3D, EDITOR_SCRIPT }; + void set_visible_editor(EditorTable p_table) { _editor_select(p_table); } static EditorNode* get_singleton() { return singleton; } @@ -666,6 +677,7 @@ public: static VSplitContainer *get_top_split() { return singleton->top_split; } void request_instance_scene(const String &p_path); + void request_instance_scenes(const Vector<String>& p_files); FileSystemDock *get_scenes_dock(); SceneTreeDock *get_scene_tree_dock(); static UndoRedo* get_undo_redo() { return &singleton->editor_data.get_undo_redo(); } @@ -739,6 +751,8 @@ public: static void add_init_callback(EditorNodeInitCallback p_callback) { _init_callbacks.push_back(p_callback); } + + }; diff --git a/tools/editor/editor_plugin.cpp b/tools/editor/editor_plugin.cpp index 01e6b613c0..5e671549ef 100644 --- a/tools/editor/editor_plugin.cpp +++ b/tools/editor/editor_plugin.cpp @@ -44,9 +44,9 @@ void EditorPlugin::remove_custom_type(const String& p_type){ } -void EditorPlugin::add_control_to_bottom_panel(Control *p_control, const String &p_title) { +ToolButton * EditorPlugin::add_control_to_bottom_panel(Control *p_control, const String &p_title) { - EditorNode::get_singleton()->add_bottom_panel_item(p_title,p_control); + return EditorNode::get_singleton()->add_bottom_panel_item(p_title,p_control); } void EditorPlugin::add_control_to_dock(DockSlot p_slot,Control *p_control) { @@ -211,15 +211,22 @@ void EditorPlugin::clear() { } -void EditorPlugin::save_external_data() {} // if editor references external resources/scenes, save them +// if editor references external resources/scenes, save them +void EditorPlugin::save_external_data() { + + if (get_script_instance() && get_script_instance()->has_method("save_external_data")) { + get_script_instance()->call("save_external_data"); + } +} + +// if changes are pending in editor, apply them void EditorPlugin::apply_changes() { if (get_script_instance() && get_script_instance()->has_method("apply_changes")) { get_script_instance()->call("apply_changes"); } +} - -} // if changes are pending in editor, apply them void EditorPlugin::get_breakpoints(List<String> *p_breakpoints) { if (get_script_instance() && get_script_instance()->has_method("get_breakpoints")) { @@ -239,10 +246,21 @@ void EditorPlugin::save_global_state() {} void EditorPlugin::set_window_layout(Ref<ConfigFile> p_layout) { + if (get_script_instance() && get_script_instance()->has_method("set_window_layout")) { + get_script_instance()->call("set_window_layout", p_layout); + } } void EditorPlugin::get_window_layout(Ref<ConfigFile> p_layout){ + if (get_script_instance() && get_script_instance()->has_method("get_window_layout")) { + get_script_instance()->call("get_window_layout", p_layout); + } +} + +void EditorPlugin::queue_save_layout() const { + + EditorNode::get_singleton()->save_layout(); } EditorSelection* EditorPlugin::get_selection() { @@ -284,7 +302,7 @@ Control *EditorPlugin::get_base_control() { void EditorPlugin::_bind_methods() { ObjectTypeDB::bind_method(_MD("add_control_to_container","container","control:Control"),&EditorPlugin::add_control_to_container); - ObjectTypeDB::bind_method(_MD("add_control_to_bottom_panel","control:Control","title"),&EditorPlugin::add_control_to_bottom_panel); + ObjectTypeDB::bind_method(_MD("add_control_to_bottom_panel:ToolButton","control:Control","title"),&EditorPlugin::add_control_to_bottom_panel); ObjectTypeDB::bind_method(_MD("add_control_to_dock","slot","control:Control"),&EditorPlugin::add_control_to_dock); ObjectTypeDB::bind_method(_MD("remove_control_from_docks","control:Control"),&EditorPlugin::remove_control_from_docks); ObjectTypeDB::bind_method(_MD("remove_control_from_bottom_panel","control:Control"),&EditorPlugin::remove_control_from_bottom_panel); @@ -302,6 +320,7 @@ void EditorPlugin::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_undo_redo:UndoRedo"),&EditorPlugin::_get_undo_redo); ObjectTypeDB::bind_method(_MD("get_selection:EditorSelection"),&EditorPlugin::get_selection); ObjectTypeDB::bind_method(_MD("get_editor_settings:EditorSettings"),&EditorPlugin::get_editor_settings); + ObjectTypeDB::bind_method(_MD("queue_save_layout"),&EditorPlugin::queue_save_layout); ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo(Variant::BOOL,"forward_input_event",PropertyInfo(Variant::INPUT_EVENT,"event"))); ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo(Variant::BOOL,"forward_spatial_input_event",PropertyInfo(Variant::OBJECT,"camera",PROPERTY_HINT_RESOURCE_TYPE,"Camera"),PropertyInfo(Variant::INPUT_EVENT,"event"))); @@ -317,8 +336,11 @@ void EditorPlugin::_bind_methods() { ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo(Variant::DICTIONARY,"get_state")); ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("set_state",PropertyInfo(Variant::DICTIONARY,"state"))); ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("clear")); + ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("save_external_data")); ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("apply_changes")); ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo(Variant::STRING_ARRAY,"get_breakpoints")); + ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("set_window_layout",PropertyInfo(Variant::OBJECT,"layout",PROPERTY_HINT_RESOURCE_TYPE,"ConfigFile"))); + ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("get_window_layout",PropertyInfo(Variant::OBJECT,"layout",PROPERTY_HINT_RESOURCE_TYPE,"ConfigFile"))); BIND_CONSTANT( CONTAINER_TOOLBAR ); BIND_CONSTANT( CONTAINER_SPATIAL_EDITOR_MENU ); diff --git a/tools/editor/editor_plugin.h b/tools/editor/editor_plugin.h index b93b6624d0..9a9c32357d 100644 --- a/tools/editor/editor_plugin.h +++ b/tools/editor/editor_plugin.h @@ -29,6 +29,7 @@ #ifndef EDITOR_PLUGIN_H #define EDITOR_PLUGIN_H +#include "scene/gui/tool_button.h" #include "scene/main/node.h" #include "scene/resources/texture.h" #include "undo_redo.h" @@ -92,7 +93,7 @@ public: //TODO: send a resoucre for editing to the editor node? void add_control_to_container(CustomControlContainer p_location, Control *p_control); - void add_control_to_bottom_panel(Control *p_control, const String &p_title); + ToolButton *add_control_to_bottom_panel(Control *p_control, const String &p_title); void add_control_to_dock(DockSlot p_slot,Control *p_control); void remove_control_from_docks(Control *p_control); void remove_control_from_bottom_panel(Control *p_control); @@ -117,6 +118,7 @@ public: virtual void get_window_layout(Ref<ConfigFile> p_layout); virtual void edited_scene_changed(){}; // if changes are pending in editor, apply them + void queue_save_layout() const; Control *get_base_control(); diff --git a/tools/editor/editor_settings.cpp b/tools/editor/editor_settings.cpp index 9dcf71e256..ad5cd86b4b 100644 --- a/tools/editor/editor_settings.cpp +++ b/tools/editor/editor_settings.cpp @@ -572,7 +572,10 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { set("scenetree_editor/draw_relationship_lines",false); set("scenetree_editor/relationship_line_color",Color::html("464646")); - set("gridmap_editor/pick_distance", 5000.0); + set("grid_map/pick_distance", 5000.0); + + set("3d_editor/grid_color",Color(0,1,0,0.2)); + hints["3d_editor/grid_color"]=PropertyInfo(Variant::COLOR,"3d_editor/grid_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_RESTART_IF_CHANGED); set("3d_editor/default_fov",45.0); set("3d_editor/default_z_near",0.1); @@ -622,6 +625,11 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { set("file_dialog/thumbnail_size", 64); hints["file_dialog/thumbnail_size"]=PropertyInfo(Variant::INT,"file_dialog/thumbnail_size",PROPERTY_HINT_RANGE,"32,128,16"); + set("filesystem_dock/display_mode", 0); + hints["filesystem_dock/display_mode"]=PropertyInfo(Variant::INT,"filesystem_dock/display_mode",PROPERTY_HINT_ENUM,"Thumbnails,List"); + set("filesystem_dock/thumbnail_size", 64); + hints["filesystem_dock/thumbnail_size"]=PropertyInfo(Variant::INT,"filesystem_dock/thumbnail_size",PROPERTY_HINT_RANGE,"32,128,16"); + set("animation/autorename_animation_tracks",true); set("animation/confirm_insert_track",true); @@ -731,6 +739,25 @@ void EditorSettings::notify_changes() { } +void EditorSettings::_add_property_info_bind(const Dictionary& p_info) { + + ERR_FAIL_COND(!p_info.has("name")); + ERR_FAIL_COND(!p_info.has("type")); + + PropertyInfo pinfo; + pinfo.name = p_info["name"]; + ERR_FAIL_COND(!props.has(pinfo.name)); + pinfo.type = Variant::Type(p_info["type"].operator int()); + ERR_FAIL_INDEX(pinfo.type, Variant::VARIANT_MAX); + + if (p_info.has("hint")) + pinfo.hint = PropertyHint(p_info["hint"].operator int()); + if (p_info.has("hint_string")) + pinfo.hint_string = p_info["hint_string"]; + + add_property_hint(pinfo); +} + void EditorSettings::add_property_hint(const PropertyInfo& p_hint) { _THREAD_SAFE_METHOD_ @@ -945,6 +972,8 @@ bool EditorSettings::_save_text_editor_theme(String p_file) { cf->set_value(theme_section, "word_highlighted_color", ((Color)get("text_editor/word_highlighted_color")).to_html()); cf->set_value(theme_section, "search_result_color", ((Color)get("text_editor/search_result_color")).to_html()); cf->set_value(theme_section, "search_result_border_color", ((Color)get("text_editor/search_result_border_color")).to_html()); + + Error err = cf->save(p_file); if (err == OK) { @@ -999,6 +1028,8 @@ void EditorSettings::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_settings_path"),&EditorSettings::get_settings_path); ObjectTypeDB::bind_method(_MD("get_project_settings_path"),&EditorSettings::get_project_settings_path); + ObjectTypeDB::bind_method(_MD("add_property_info", "info"),&EditorSettings::_add_property_info_bind); + ObjectTypeDB::bind_method(_MD("set_favorite_dirs","dirs"),&EditorSettings::set_favorite_dirs); ObjectTypeDB::bind_method(_MD("get_favorite_dirs"),&EditorSettings::get_favorite_dirs); diff --git a/tools/editor/editor_settings.h b/tools/editor/editor_settings.h index 937956a366..2a7d3bb4f0 100644 --- a/tools/editor/editor_settings.h +++ b/tools/editor/editor_settings.h @@ -104,6 +104,8 @@ private: Map<String,Ref<ShortCut> > shortcuts; + void _add_property_info_bind(const Dictionary& p_info); + protected: static void _bind_methods(); diff --git a/tools/editor/editor_themes.cpp b/tools/editor/editor_themes.cpp index 44e21aee85..7130044490 100644 --- a/tools/editor/editor_themes.cpp +++ b/tools/editor/editor_themes.cpp @@ -48,6 +48,11 @@ Ref<Theme> create_default_theme() } focus_sbt->set_draw_center(false); theme->set_stylebox("EditorFocus","EditorStyles",focus_sbt); + theme->set_color("prop_category","Editor",Color::hex(0x3f3a44ff)); + theme->set_color("prop_section","Editor",Color::hex(0x35313aff)); + theme->set_color("prop_subsection","Editor",Color::hex(0x312e37ff)); + theme->set_color("fg_selected","Editor",Color::html("ffbd8e8e")); + theme->set_color("fg_error","Editor",Color::html("ffbd8e8e")); return theme; } diff --git a/tools/editor/filesystem_dock.cpp b/tools/editor/filesystem_dock.cpp index 3be122cc7d..8a94c6e340 100644 --- a/tools/editor/filesystem_dock.cpp +++ b/tools/editor/filesystem_dock.cpp @@ -146,8 +146,12 @@ void FileSystemDock::_notification(int p_what) { //button_instance->set_icon( get_icon("Add","EditorIcons")); //button_open->set_icon( get_icon("Folder","EditorIcons")); button_back->set_icon( get_icon("Filesystem","EditorIcons")); - display_mode->set_icon( get_icon("FileList","EditorIcons")); - display_mode->connect("pressed",this,"_change_file_display"); + if (display_mode == DISPLAY_THUMBNAILS) { + button_display_mode->set_icon(get_icon("FileList","EditorIcons")); + } else { + button_display_mode->set_icon(get_icon("FileThumbnail","EditorIcons")); + } + button_display_mode->connect("pressed",this,"_change_file_display"); //file_options->set_icon( get_icon("Tools","EditorIcons")); files->connect("item_activated",this,"_select_file"); button_hist_next->connect("pressed",this,"_fw_history"); @@ -197,9 +201,13 @@ void FileSystemDock::_notification(int p_what) { } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { - display_mode->set_pressed(int(EditorSettings::get_singleton()->get("file_dialog/display_mode"))==EditorFileDialog::DISPLAY_LIST); + int new_mode = int(EditorSettings::get_singleton()->get("filesystem_dock/display_mode")); - _change_file_display(); + if (new_mode != display_mode) { + set_display_mode(new_mode); + } else { + _update_files(true); + } } break; } @@ -314,13 +322,16 @@ void FileSystemDock::_thumbnail_done(const String& p_path,const Ref<Texture>& p_ void FileSystemDock::_change_file_display() { - if (display_mode->is_pressed()) { - display_mode->set_icon( get_icon("FileThumbnail","EditorIcons")); - + if (button_display_mode->is_pressed()) { + display_mode = DISPLAY_LIST; + button_display_mode->set_icon( get_icon("FileThumbnail","EditorIcons")); } else { - display_mode->set_icon( get_icon("FileList","EditorIcons")); + display_mode = DISPLAY_THUMBNAILS; + button_display_mode->set_icon( get_icon("FileList","EditorIcons")); } + EditorSettings::get_singleton()->set("filesystem_dock/display_mode", display_mode); + _update_files(true); } @@ -393,12 +404,12 @@ void FileSystemDock::_update_files(bool p_keep_selection) { if (!efd) return; - int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size"); + int thumbnail_size = EditorSettings::get_singleton()->get("filesystem_dock/thumbnail_size"); thumbnail_size*=EDSCALE; Ref<Texture> folder_thumbnail; Ref<Texture> file_thumbnail; - bool use_thumbnails=!display_mode->is_pressed(); + bool use_thumbnails = (display_mode == DISPLAY_THUMBNAILS); bool use_folders = search_box->get_text().length()==0 && split_mode; if (use_thumbnails) { //thumbnails @@ -950,14 +961,20 @@ void FileSystemDock::_file_option(int p_option) { } break; case FILE_INSTANCE: { + Vector<String> paths; + for (int i = 0; i<files->get_item_count(); i++) { if (!files->is_selected(i)) continue; String path =files->get_item_metadata(i); if (EditorFileSystem::get_singleton()->get_file_type(path)=="PackedScene") { - emit_signal("instance",path); + paths.push_back(path); } } + + if (!paths.empty()) { + emit_signal("instance", paths); + } } break; case FILE_DEPENDENCIES: { @@ -1141,9 +1158,13 @@ void FileSystemDock::focus_on_filter() { } -void FileSystemDock::set_use_thumbnails(bool p_use) { +void FileSystemDock::set_display_mode(int p_mode) { + + if (p_mode == display_mode) + return; - display_mode->set_pressed(!p_use); + button_display_mode->set_pressed(p_mode == DISPLAY_LIST); + _change_file_display(); } @@ -1596,7 +1617,7 @@ void FileSystemDock::_bind_methods() { ObjectTypeDB::bind_method(_MD("_preview_invalidated"),&FileSystemDock::_preview_invalidated); - ADD_SIGNAL(MethodInfo("instance")); + ADD_SIGNAL(MethodInfo("instance", PropertyInfo(Variant::STRING_ARRAY, "files"))); ADD_SIGNAL(MethodInfo("open")); } @@ -1715,9 +1736,9 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { search_icon->set_stretch_mode(TextureFrame::STRETCH_KEEP_CENTERED); path_hb->add_child(search_icon); - display_mode = memnew( ToolButton ); - path_hb->add_child(display_mode); - display_mode->set_toggle_mode(true); + button_display_mode = memnew( ToolButton ); + path_hb->add_child(button_display_mode); + button_display_mode->set_toggle_mode(true); file_list_vb->add_child(files); @@ -1760,6 +1781,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { history_pos=0; split_mode=false; + display_mode = DISPLAY_THUMBNAILS; path="res://"; diff --git a/tools/editor/filesystem_dock.h b/tools/editor/filesystem_dock.h index 171dbd16e9..f5b96760fc 100644 --- a/tools/editor/filesystem_dock.h +++ b/tools/editor/filesystem_dock.h @@ -54,6 +54,12 @@ class EditorNode; class FileSystemDock : public VBoxContainer { OBJ_TYPE( FileSystemDock, VBoxContainer ); +public: + enum DisplayMode { + DISPLAY_THUMBNAILS, + DISPLAY_LIST + }; +private: enum FileMenu { FILE_OPEN, FILE_INSTANCE, @@ -79,7 +85,7 @@ class FileSystemDock : public VBoxContainer { Button *button_reload; Button *button_favorite; Button *button_back; - Button *display_mode; + Button *button_display_mode; Button *button_hist_next; Button *button_hist_prev; LineEdit *current_path; @@ -88,6 +94,7 @@ class FileSystemDock : public VBoxContainer { HBoxContainer *path_hb; bool split_mode; + DisplayMode display_mode; PopupMenu *file_options; @@ -182,7 +189,7 @@ public: void fix_dependencies(const String& p_for_file); - void set_use_thumbnails(bool p_use); + void set_display_mode(int p_mode); FileSystemDock(EditorNode *p_editor); ~FileSystemDock(); diff --git a/tools/editor/icons/2x/icon_capsule_shape_2d.png b/tools/editor/icons/2x/icon_capsule_shape_2d.png Binary files differindex 7f4734618b..e449ce4985 100644 --- a/tools/editor/icons/2x/icon_capsule_shape_2d.png +++ b/tools/editor/icons/2x/icon_capsule_shape_2d.png diff --git a/tools/editor/icons/2x/icon_circle_shape_2d.png b/tools/editor/icons/2x/icon_circle_shape_2d.png Binary files differindex 5975c90f91..feb84d2f1c 100644 --- a/tools/editor/icons/2x/icon_circle_shape_2d.png +++ b/tools/editor/icons/2x/icon_circle_shape_2d.png diff --git a/tools/editor/icons/2x/icon_concave_polygon_shape_2d.png b/tools/editor/icons/2x/icon_concave_polygon_shape_2d.png Binary files differindex 39e4d888af..1ad3f30950 100644 --- a/tools/editor/icons/2x/icon_concave_polygon_shape_2d.png +++ b/tools/editor/icons/2x/icon_concave_polygon_shape_2d.png diff --git a/tools/editor/icons/2x/icon_convex_polygon_shape_2d.png b/tools/editor/icons/2x/icon_convex_polygon_shape_2d.png Binary files differindex 38ed87089d..6d46a96f9d 100644 --- a/tools/editor/icons/2x/icon_convex_polygon_shape_2d.png +++ b/tools/editor/icons/2x/icon_convex_polygon_shape_2d.png diff --git a/tools/editor/icons/2x/icon_godot.png b/tools/editor/icons/2x/icon_godot.png Binary files differindex f789c791bd..94d87e23cc 100644 --- a/tools/editor/icons/2x/icon_godot.png +++ b/tools/editor/icons/2x/icon_godot.png diff --git a/tools/editor/icons/2x/icon_h_t_t_p_request.png b/tools/editor/icons/2x/icon_h_t_t_p_request.png Binary files differindex e3f7568ea1..a334dea4e2 100644 --- a/tools/editor/icons/2x/icon_h_t_t_p_request.png +++ b/tools/editor/icons/2x/icon_h_t_t_p_request.png diff --git a/tools/editor/icons/2x/icon_line_shape_2d.png b/tools/editor/icons/2x/icon_line_shape_2d.png Binary files differindex 5ec406ea1f..490db5ca5b 100644 --- a/tools/editor/icons/2x/icon_line_shape_2d.png +++ b/tools/editor/icons/2x/icon_line_shape_2d.png diff --git a/tools/editor/icons/2x/icon_mini_aabb.png b/tools/editor/icons/2x/icon_mini_aabb.png Binary files differnew file mode 100644 index 0000000000..25603eec49 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_aabb.png diff --git a/tools/editor/icons/2x/icon_mini_array.png b/tools/editor/icons/2x/icon_mini_array.png Binary files differnew file mode 100644 index 0000000000..5c7bde2639 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_array.png diff --git a/tools/editor/icons/2x/icon_mini_boolean.png b/tools/editor/icons/2x/icon_mini_boolean.png Binary files differnew file mode 100644 index 0000000000..a7d00056bb --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_boolean.png diff --git a/tools/editor/icons/2x/icon_mini_color.png b/tools/editor/icons/2x/icon_mini_color.png Binary files differnew file mode 100644 index 0000000000..f4059bfb91 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_color.png diff --git a/tools/editor/icons/2x/icon_mini_color_array.png b/tools/editor/icons/2x/icon_mini_color_array.png Binary files differnew file mode 100644 index 0000000000..26f1d9fce4 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_color_array.png diff --git a/tools/editor/icons/2x/icon_mini_dictionary.png b/tools/editor/icons/2x/icon_mini_dictionary.png Binary files differnew file mode 100644 index 0000000000..241e0587b4 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_dictionary.png diff --git a/tools/editor/icons/2x/icon_mini_float.png b/tools/editor/icons/2x/icon_mini_float.png Binary files differnew file mode 100644 index 0000000000..6edf76ece1 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_float.png diff --git a/tools/editor/icons/2x/icon_mini_float_array.png b/tools/editor/icons/2x/icon_mini_float_array.png Binary files differnew file mode 100644 index 0000000000..5a79fab721 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_float_array.png diff --git a/tools/editor/icons/2x/icon_mini_image.png b/tools/editor/icons/2x/icon_mini_image.png Binary files differnew file mode 100644 index 0000000000..98faebeef2 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_image.png diff --git a/tools/editor/icons/2x/icon_mini_input.png b/tools/editor/icons/2x/icon_mini_input.png Binary files differnew file mode 100644 index 0000000000..48536e156c --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_input.png diff --git a/tools/editor/icons/2x/icon_mini_int_array.png b/tools/editor/icons/2x/icon_mini_int_array.png Binary files differnew file mode 100644 index 0000000000..790ed44c30 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_int_array.png diff --git a/tools/editor/icons/2x/icon_mini_integer.png b/tools/editor/icons/2x/icon_mini_integer.png Binary files differnew file mode 100644 index 0000000000..cd9118f024 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_integer.png diff --git a/tools/editor/icons/2x/icon_mini_matrix3.png b/tools/editor/icons/2x/icon_mini_matrix3.png Binary files differnew file mode 100644 index 0000000000..93783177e1 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_matrix3.png diff --git a/tools/editor/icons/2x/icon_mini_matrix32.png b/tools/editor/icons/2x/icon_mini_matrix32.png Binary files differnew file mode 100644 index 0000000000..c2f7ea3817 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_matrix32.png diff --git a/tools/editor/icons/2x/icon_mini_object.png b/tools/editor/icons/2x/icon_mini_object.png Binary files differnew file mode 100644 index 0000000000..7987f750ff --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_object.png diff --git a/tools/editor/icons/2x/icon_mini_path.png b/tools/editor/icons/2x/icon_mini_path.png Binary files differnew file mode 100644 index 0000000000..2e60a46086 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_path.png diff --git a/tools/editor/icons/2x/icon_mini_plane.png b/tools/editor/icons/2x/icon_mini_plane.png Binary files differnew file mode 100644 index 0000000000..12b5cd26cc --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_plane.png diff --git a/tools/editor/icons/2x/icon_mini_quat.png b/tools/editor/icons/2x/icon_mini_quat.png Binary files differnew file mode 100644 index 0000000000..9a33902e59 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_quat.png diff --git a/tools/editor/icons/2x/icon_mini_raw_array.png b/tools/editor/icons/2x/icon_mini_raw_array.png Binary files differnew file mode 100644 index 0000000000..629b01e72a --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_raw_array.png diff --git a/tools/editor/icons/2x/icon_mini_rect2.png b/tools/editor/icons/2x/icon_mini_rect2.png Binary files differnew file mode 100644 index 0000000000..88b12e3a3a --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_rect2.png diff --git a/tools/editor/icons/2x/icon_mini_rid.png b/tools/editor/icons/2x/icon_mini_rid.png Binary files differnew file mode 100644 index 0000000000..5388c19817 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_rid.png diff --git a/tools/editor/icons/2x/icon_mini_string.png b/tools/editor/icons/2x/icon_mini_string.png Binary files differnew file mode 100644 index 0000000000..2264451c73 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_string.png diff --git a/tools/editor/icons/2x/icon_mini_string_array.png b/tools/editor/icons/2x/icon_mini_string_array.png Binary files differnew file mode 100644 index 0000000000..fa8109b88a --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_string_array.png diff --git a/tools/editor/icons/2x/icon_mini_transform.png b/tools/editor/icons/2x/icon_mini_transform.png Binary files differnew file mode 100644 index 0000000000..5144871c5c --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_transform.png diff --git a/tools/editor/icons/2x/icon_mini_variant.png b/tools/editor/icons/2x/icon_mini_variant.png Binary files differnew file mode 100644 index 0000000000..ae0aad16cf --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_variant.png diff --git a/tools/editor/icons/2x/icon_mini_vector2.png b/tools/editor/icons/2x/icon_mini_vector2.png Binary files differnew file mode 100644 index 0000000000..9e608e61c1 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_vector2.png diff --git a/tools/editor/icons/2x/icon_mini_vector2_array.png b/tools/editor/icons/2x/icon_mini_vector2_array.png Binary files differnew file mode 100644 index 0000000000..247c0e2592 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_vector2_array.png diff --git a/tools/editor/icons/2x/icon_mini_vector3.png b/tools/editor/icons/2x/icon_mini_vector3.png Binary files differnew file mode 100644 index 0000000000..0b84b4628f --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_vector3.png diff --git a/tools/editor/icons/2x/icon_mini_vector3_array.png b/tools/editor/icons/2x/icon_mini_vector3_array.png Binary files differnew file mode 100644 index 0000000000..68058e4232 --- /dev/null +++ b/tools/editor/icons/2x/icon_mini_vector3_array.png diff --git a/tools/editor/icons/2x/icon_override.png b/tools/editor/icons/2x/icon_override.png Binary files differnew file mode 100644 index 0000000000..d735a1c734 --- /dev/null +++ b/tools/editor/icons/2x/icon_override.png diff --git a/tools/editor/icons/2x/icon_ray_shape_2d.png b/tools/editor/icons/2x/icon_ray_shape_2d.png Binary files differindex 37eedfb7de..2dc7041a93 100644 --- a/tools/editor/icons/2x/icon_ray_shape_2d.png +++ b/tools/editor/icons/2x/icon_ray_shape_2d.png diff --git a/tools/editor/icons/2x/icon_rectangle_shape_2d.png b/tools/editor/icons/2x/icon_rectangle_shape_2d.png Binary files differindex a2754e6880..51a93cdb1d 100644 --- a/tools/editor/icons/2x/icon_rectangle_shape_2d.png +++ b/tools/editor/icons/2x/icon_rectangle_shape_2d.png diff --git a/tools/editor/icons/2x/icon_segment_shape_2d.png b/tools/editor/icons/2x/icon_segment_shape_2d.png Binary files differindex 11b28d81df..43d5d837cc 100644 --- a/tools/editor/icons/2x/icon_segment_shape_2d.png +++ b/tools/editor/icons/2x/icon_segment_shape_2d.png diff --git a/tools/editor/icons/2x/icon_snap.png b/tools/editor/icons/2x/icon_snap.png Binary files differindex 3bbf1dc5e1..509b1c73f3 100644 --- a/tools/editor/icons/2x/icon_snap.png +++ b/tools/editor/icons/2x/icon_snap.png diff --git a/tools/editor/icons/2x/icon_uninstance.png b/tools/editor/icons/2x/icon_uninstance.png Binary files differnew file mode 100644 index 0000000000..bf3dc00368 --- /dev/null +++ b/tools/editor/icons/2x/icon_uninstance.png diff --git a/tools/editor/icons/2x/icon_visual_script.png b/tools/editor/icons/2x/icon_visual_script.png Binary files differnew file mode 100644 index 0000000000..78a3a0c318 --- /dev/null +++ b/tools/editor/icons/2x/icon_visual_script.png diff --git a/tools/editor/icons/2x/icon_visual_shader_port.png b/tools/editor/icons/2x/icon_visual_shader_port.png Binary files differnew file mode 100644 index 0000000000..3f9bf96b01 --- /dev/null +++ b/tools/editor/icons/2x/icon_visual_shader_port.png diff --git a/tools/editor/icons/SCsub b/tools/editor/icons/SCsub index f2f5dcca48..bc104294cb 100644 --- a/tools/editor/icons/SCsub +++ b/tools/editor/icons/SCsub @@ -37,12 +37,9 @@ def make_editor_icons_action(target, source, env): pngf.close(); var_str=os.path.basename(x)[:-4]+"_hidpi_png"; -#print("TRY OPEN: "+os.path.dirname(x)+"/2x/"+os.path.basename(x)+"\n") try: - pngf = open(os.path.dirname(x)+"/2x/"+os.path.basename(x)) - - #print(var_str) + pngf = open(os.path.dirname(x)+"/2x/"+os.path.basename(x), "rb") s.write("static const unsigned char "+ var_str +"[]={\n"); diff --git a/tools/editor/icons/icon_capsule_shape_2d.png b/tools/editor/icons/icon_capsule_shape_2d.png Binary files differindex f4f990f72f..6f6554fbc7 100644 --- a/tools/editor/icons/icon_capsule_shape_2d.png +++ b/tools/editor/icons/icon_capsule_shape_2d.png diff --git a/tools/editor/icons/icon_circle_shape_2d.png b/tools/editor/icons/icon_circle_shape_2d.png Binary files differindex 281658b062..7865ed3dbe 100644 --- a/tools/editor/icons/icon_circle_shape_2d.png +++ b/tools/editor/icons/icon_circle_shape_2d.png diff --git a/tools/editor/icons/icon_concave_polygon_shape_2d.png b/tools/editor/icons/icon_concave_polygon_shape_2d.png Binary files differindex 71d8e62dbc..2e87eea5aa 100644 --- a/tools/editor/icons/icon_concave_polygon_shape_2d.png +++ b/tools/editor/icons/icon_concave_polygon_shape_2d.png diff --git a/tools/editor/icons/icon_convex_polygon_shape_2d.png b/tools/editor/icons/icon_convex_polygon_shape_2d.png Binary files differindex 283bc68786..e449c6930f 100644 --- a/tools/editor/icons/icon_convex_polygon_shape_2d.png +++ b/tools/editor/icons/icon_convex_polygon_shape_2d.png diff --git a/tools/editor/icons/icon_godot.png b/tools/editor/icons/icon_godot.png Binary files differindex a033ab48a8..0b72e6ecc7 100644 --- a/tools/editor/icons/icon_godot.png +++ b/tools/editor/icons/icon_godot.png diff --git a/tools/editor/icons/icon_h_t_t_p_request.png b/tools/editor/icons/icon_h_t_t_p_request.png Binary files differindex c00854a414..60c6845b33 100644 --- a/tools/editor/icons/icon_h_t_t_p_request.png +++ b/tools/editor/icons/icon_h_t_t_p_request.png diff --git a/tools/editor/icons/icon_line_shape_2d.png b/tools/editor/icons/icon_line_shape_2d.png Binary files differindex a4fb049f3f..e31722d69c 100644 --- a/tools/editor/icons/icon_line_shape_2d.png +++ b/tools/editor/icons/icon_line_shape_2d.png diff --git a/tools/editor/icons/icon_loop_interpolation.png b/tools/editor/icons/icon_loop_interpolation.png Binary files differnew file mode 100644 index 0000000000..488b33316e --- /dev/null +++ b/tools/editor/icons/icon_loop_interpolation.png diff --git a/tools/editor/icons/icon_mini_aabb.png b/tools/editor/icons/icon_mini_aabb.png Binary files differnew file mode 100644 index 0000000000..eebc4633e4 --- /dev/null +++ b/tools/editor/icons/icon_mini_aabb.png diff --git a/tools/editor/icons/icon_mini_array.png b/tools/editor/icons/icon_mini_array.png Binary files differnew file mode 100644 index 0000000000..ade885e4d4 --- /dev/null +++ b/tools/editor/icons/icon_mini_array.png diff --git a/tools/editor/icons/icon_mini_boolean.png b/tools/editor/icons/icon_mini_boolean.png Binary files differnew file mode 100644 index 0000000000..9cb64fc983 --- /dev/null +++ b/tools/editor/icons/icon_mini_boolean.png diff --git a/tools/editor/icons/icon_mini_color.png b/tools/editor/icons/icon_mini_color.png Binary files differnew file mode 100644 index 0000000000..bebf64e262 --- /dev/null +++ b/tools/editor/icons/icon_mini_color.png diff --git a/tools/editor/icons/icon_mini_color_array.png b/tools/editor/icons/icon_mini_color_array.png Binary files differnew file mode 100644 index 0000000000..434b2f96f5 --- /dev/null +++ b/tools/editor/icons/icon_mini_color_array.png diff --git a/tools/editor/icons/icon_mini_dictionary.png b/tools/editor/icons/icon_mini_dictionary.png Binary files differnew file mode 100644 index 0000000000..11fd536a83 --- /dev/null +++ b/tools/editor/icons/icon_mini_dictionary.png diff --git a/tools/editor/icons/icon_mini_float.png b/tools/editor/icons/icon_mini_float.png Binary files differnew file mode 100644 index 0000000000..f8c8d9a174 --- /dev/null +++ b/tools/editor/icons/icon_mini_float.png diff --git a/tools/editor/icons/icon_mini_float_array.png b/tools/editor/icons/icon_mini_float_array.png Binary files differnew file mode 100644 index 0000000000..8b8177e151 --- /dev/null +++ b/tools/editor/icons/icon_mini_float_array.png diff --git a/tools/editor/icons/icon_mini_image.png b/tools/editor/icons/icon_mini_image.png Binary files differnew file mode 100644 index 0000000000..2ad359bdbe --- /dev/null +++ b/tools/editor/icons/icon_mini_image.png diff --git a/tools/editor/icons/icon_mini_input.png b/tools/editor/icons/icon_mini_input.png Binary files differnew file mode 100644 index 0000000000..fec26dd68e --- /dev/null +++ b/tools/editor/icons/icon_mini_input.png diff --git a/tools/editor/icons/icon_mini_int_array.png b/tools/editor/icons/icon_mini_int_array.png Binary files differnew file mode 100644 index 0000000000..d1bd2e82a7 --- /dev/null +++ b/tools/editor/icons/icon_mini_int_array.png diff --git a/tools/editor/icons/icon_mini_integer.png b/tools/editor/icons/icon_mini_integer.png Binary files differnew file mode 100644 index 0000000000..dad1bb160b --- /dev/null +++ b/tools/editor/icons/icon_mini_integer.png diff --git a/tools/editor/icons/icon_mini_matrix3.png b/tools/editor/icons/icon_mini_matrix3.png Binary files differnew file mode 100644 index 0000000000..dd59d093cc --- /dev/null +++ b/tools/editor/icons/icon_mini_matrix3.png diff --git a/tools/editor/icons/icon_mini_matrix32.png b/tools/editor/icons/icon_mini_matrix32.png Binary files differnew file mode 100644 index 0000000000..6018a00747 --- /dev/null +++ b/tools/editor/icons/icon_mini_matrix32.png diff --git a/tools/editor/icons/icon_mini_object.png b/tools/editor/icons/icon_mini_object.png Binary files differnew file mode 100644 index 0000000000..4afe7cfca1 --- /dev/null +++ b/tools/editor/icons/icon_mini_object.png diff --git a/tools/editor/icons/icon_mini_path.png b/tools/editor/icons/icon_mini_path.png Binary files differnew file mode 100644 index 0000000000..9eb0632571 --- /dev/null +++ b/tools/editor/icons/icon_mini_path.png diff --git a/tools/editor/icons/icon_mini_plane.png b/tools/editor/icons/icon_mini_plane.png Binary files differnew file mode 100644 index 0000000000..45676236bd --- /dev/null +++ b/tools/editor/icons/icon_mini_plane.png diff --git a/tools/editor/icons/icon_mini_quat.png b/tools/editor/icons/icon_mini_quat.png Binary files differnew file mode 100644 index 0000000000..4ed2f5695c --- /dev/null +++ b/tools/editor/icons/icon_mini_quat.png diff --git a/tools/editor/icons/icon_mini_raw_array.png b/tools/editor/icons/icon_mini_raw_array.png Binary files differnew file mode 100644 index 0000000000..66bcf7c740 --- /dev/null +++ b/tools/editor/icons/icon_mini_raw_array.png diff --git a/tools/editor/icons/icon_mini_rect2.png b/tools/editor/icons/icon_mini_rect2.png Binary files differnew file mode 100644 index 0000000000..db13e1a48e --- /dev/null +++ b/tools/editor/icons/icon_mini_rect2.png diff --git a/tools/editor/icons/icon_mini_rid.png b/tools/editor/icons/icon_mini_rid.png Binary files differnew file mode 100644 index 0000000000..278a9d1ee6 --- /dev/null +++ b/tools/editor/icons/icon_mini_rid.png diff --git a/tools/editor/icons/icon_mini_string.png b/tools/editor/icons/icon_mini_string.png Binary files differnew file mode 100644 index 0000000000..504556dd74 --- /dev/null +++ b/tools/editor/icons/icon_mini_string.png diff --git a/tools/editor/icons/icon_mini_string_array.png b/tools/editor/icons/icon_mini_string_array.png Binary files differnew file mode 100644 index 0000000000..5177014185 --- /dev/null +++ b/tools/editor/icons/icon_mini_string_array.png diff --git a/tools/editor/icons/icon_mini_transform.png b/tools/editor/icons/icon_mini_transform.png Binary files differnew file mode 100644 index 0000000000..068ea0506c --- /dev/null +++ b/tools/editor/icons/icon_mini_transform.png diff --git a/tools/editor/icons/icon_mini_variant.png b/tools/editor/icons/icon_mini_variant.png Binary files differnew file mode 100644 index 0000000000..285f0bcd16 --- /dev/null +++ b/tools/editor/icons/icon_mini_variant.png diff --git a/tools/editor/icons/icon_mini_vector2.png b/tools/editor/icons/icon_mini_vector2.png Binary files differnew file mode 100644 index 0000000000..a7caa1797f --- /dev/null +++ b/tools/editor/icons/icon_mini_vector2.png diff --git a/tools/editor/icons/icon_mini_vector2_array.png b/tools/editor/icons/icon_mini_vector2_array.png Binary files differnew file mode 100644 index 0000000000..de546de16c --- /dev/null +++ b/tools/editor/icons/icon_mini_vector2_array.png diff --git a/tools/editor/icons/icon_mini_vector3.png b/tools/editor/icons/icon_mini_vector3.png Binary files differnew file mode 100644 index 0000000000..69baeb229b --- /dev/null +++ b/tools/editor/icons/icon_mini_vector3.png diff --git a/tools/editor/icons/icon_mini_vector3_array.png b/tools/editor/icons/icon_mini_vector3_array.png Binary files differnew file mode 100644 index 0000000000..6bddbaf627 --- /dev/null +++ b/tools/editor/icons/icon_mini_vector3_array.png diff --git a/tools/editor/icons/icon_override.png b/tools/editor/icons/icon_override.png Binary files differnew file mode 100644 index 0000000000..9d917ede75 --- /dev/null +++ b/tools/editor/icons/icon_override.png diff --git a/tools/editor/icons/icon_ray_shape_2d.png b/tools/editor/icons/icon_ray_shape_2d.png Binary files differindex 2f102bbb91..c91a63570d 100644 --- a/tools/editor/icons/icon_ray_shape_2d.png +++ b/tools/editor/icons/icon_ray_shape_2d.png diff --git a/tools/editor/icons/icon_rectangle_shape_2d.png b/tools/editor/icons/icon_rectangle_shape_2d.png Binary files differindex eb123c6f6a..002730b942 100644 --- a/tools/editor/icons/icon_rectangle_shape_2d.png +++ b/tools/editor/icons/icon_rectangle_shape_2d.png diff --git a/tools/editor/icons/icon_segment_shape_2d.png b/tools/editor/icons/icon_segment_shape_2d.png Binary files differindex c90255a405..8f3771be7a 100644 --- a/tools/editor/icons/icon_segment_shape_2d.png +++ b/tools/editor/icons/icon_segment_shape_2d.png diff --git a/tools/editor/icons/icon_snap.png b/tools/editor/icons/icon_snap.png Binary files differindex 5960adedc9..93194d34e7 100644 --- a/tools/editor/icons/icon_snap.png +++ b/tools/editor/icons/icon_snap.png diff --git a/tools/editor/icons/icon_uninstance.png b/tools/editor/icons/icon_uninstance.png Binary files differnew file mode 100644 index 0000000000..de8b2f9a40 --- /dev/null +++ b/tools/editor/icons/icon_uninstance.png diff --git a/tools/editor/icons/icon_variant.png b/tools/editor/icons/icon_variant.png Binary files differnew file mode 100644 index 0000000000..1ae2812ff7 --- /dev/null +++ b/tools/editor/icons/icon_variant.png diff --git a/tools/editor/icons/icon_visual_script.png b/tools/editor/icons/icon_visual_script.png Binary files differnew file mode 100644 index 0000000000..1678998d17 --- /dev/null +++ b/tools/editor/icons/icon_visual_script.png diff --git a/tools/editor/icons/icon_visual_shader_port.png b/tools/editor/icons/icon_visual_shader_port.png Binary files differnew file mode 100644 index 0000000000..27daedbdd0 --- /dev/null +++ b/tools/editor/icons/icon_visual_shader_port.png diff --git a/tools/editor/icons/make_icons.py b/tools/editor/icons/make_icons.py deleted file mode 100644 index e06cbac720..0000000000 --- a/tools/editor/icons/make_icons.py +++ /dev/null @@ -1,48 +0,0 @@ - -import glob - -pixmaps = glob.glob("*.png") - -f = open("../editor_icons.cpp","wb") - - -f.write("#include \"editor_icons.h\"\n\n") -f.write("#include \"scene/resources/theme.h\"\n\n") - -for x in pixmaps: - - var_str=x[:-4]+"_png"; - - f.write("static const unsigned char "+ var_str +"[]={\n"); - - pngf=open(x,"rb"); - - b=pngf.read(1); - while(len(b)==1): - f.write(hex(ord(b))) - b=pngf.read(1); - if (len(b)==1): - f.write(",") - - f.write("\n};\n\n\n"); - pngf.close(); - -f.write("static Ref<ImageTexture> make_icon(const uint8_t* p_png) {\n") -f.write("\tRef<ImageTexture> texture( memnew( ImageTexture ) );\n") -f.write("\ttexture->create_from_image( Image(p_png),ImageTexture::FLAG_FILTER );\n") -f.write("\treturn texture;\n") -f.write("}\n\n") - -f.write("void editor_register_icons(Ref<Theme> p_theme) {\n\n") - - -for x in pixmaps: - - type=x[5:-4].title().replace("_",""); - var_str=x[:-4]+"_png"; - f.write("\tp_theme->set_icon(\""+type+"\",\"EditorIcons\",make_icon("+var_str+"));\n"); - -f.write("\n\n}\n\n"); -f.close() - - diff --git a/tools/editor/icons/source/icon_capsule_shape_2d.svg b/tools/editor/icons/source/icon_capsule_shape_2d.svg index 03ac3f8255..13c6648368 100644 --- a/tools/editor/icons/source/icon_capsule_shape_2d.svg +++ b/tools/editor/icons/source/icon_capsule_shape_2d.svg @@ -40,8 +40,8 @@ showgrid="true" inkscape:current-layer="layer1" inkscape:document-units="px" - inkscape:cy="10.812487" - inkscape:cx="8.3752367" + inkscape:cy="10.749987" + inkscape:cx="2.8752365" inkscape:zoom="31.999999" inkscape:pageshadow="2" inkscape:pageopacity="0.0" @@ -73,7 +73,7 @@ inkscape:groupmode="layer" inkscape:label="Layer 1"> <path - style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + style="opacity:1;fill:#68b6ff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" d="M 8 1 A 4 4 0 0 0 4 5 L 4 11 A 4 4 0 0 0 8 15 A 4 4 0 0 0 12 11 L 12 5 A 4 4 0 0 0 8 1 z M 8 3 A 2.0000174 2.0000174 0 0 1 10 5 L 10 11 A 2.0000174 2.0000174 0 0 1 8 13 A 2.0000174 2.0000174 0 0 1 6 11 L 6 5 A 2.0000174 2.0000174 0 0 1 8 3 z " transform="translate(0,1036.3622)" id="path4135" /> diff --git a/tools/editor/icons/source/icon_circle_shape_2d.svg b/tools/editor/icons/source/icon_circle_shape_2d.svg index 4f81ae0e62..56ac538672 100644 --- a/tools/editor/icons/source/icon_circle_shape_2d.svg +++ b/tools/editor/icons/source/icon_circle_shape_2d.svg @@ -1,21 +1,82 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" sodipodi:docname="icon_circle_shape_2d.svg" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png" inkscape:version="0.91 r13725" version="1.1" id="svg2" viewBox="0 0 16 16" height="16" width="16"> - <sodipodi:namedview inkscape:snap-smooth-nodes="false" inkscape:object-nodes="false" inkscape:snap-intersection-paths="false" inkscape:object-paths="false" inkscape:window-maximized="1" inkscape:window-y="0" inkscape:window-x="0" inkscape:window-height="1055" inkscape:window-width="1920" inkscape:snap-center="true" inkscape:snap-object-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:bbox-nodes="true" inkscape:bbox-paths="true" inkscape:snap-bbox="true" units="px" showgrid="true" inkscape:current-layer="layer1" inkscape:document-units="px" inkscape:cy="11.031037" inkscape:cx="-1.7366522" inkscape:zoom="22.627416" inkscape:pageshadow="2" inkscape:pageopacity="0.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base"> - <inkscape:grid id="grid3336" type="xygrid" empspacing="4" /> - </sodipodi:namedview> - <defs id="defs4" /> - <metadata id="metadata7"> - <rdf:RDF> - <cc:Work rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g transform="translate(0,-1036.3622)" id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> - <path style="opacity:1;fill:none;fill-opacity:1;stroke:#a5b7f3;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98823529" d="m 8,1038.3622 a 6,6 0 0 0 -6,6 6,6 0 0 0 6,6 6,6 0 0 0 6,-6 6,6 0 0 0 -6,-6 z" id="path4157" inkscape:connector-curvature="0" /> - </g> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + sodipodi:docname="icon_circle_shape_2d.svg" + inkscape:export-ydpi="90" + inkscape:export-xdpi="90" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png" + inkscape:version="0.91 r13725" + version="1.1" + id="svg2" + viewBox="0 0 16 16" + height="16" + width="16"> + <sodipodi:namedview + inkscape:snap-smooth-nodes="false" + inkscape:object-nodes="false" + inkscape:snap-intersection-paths="false" + inkscape:object-paths="false" + inkscape:window-maximized="1" + inkscape:window-y="27" + inkscape:window-x="0" + inkscape:window-height="1016" + inkscape:window-width="1920" + inkscape:snap-center="true" + inkscape:snap-object-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:bbox-nodes="true" + inkscape:bbox-paths="true" + inkscape:snap-bbox="true" + units="px" + showgrid="true" + inkscape:current-layer="layer1" + inkscape:document-units="px" + inkscape:cy="10.942649" + inkscape:cx="-9.5148271" + inkscape:zoom="22.627416" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base"> + <inkscape:grid + id="grid3336" + type="xygrid" + empspacing="4" /> + </sodipodi:namedview> + <defs + id="defs4" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(0,-1036.3622)" + id="layer1" + inkscape:groupmode="layer" + inkscape:label="Layer 1"> + <path + style="opacity:1;fill:none;fill-opacity:1;stroke:#68b6ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 8,1038.3622 a 6,6 0 0 0 -6,6 6,6 0 0 0 6,6 6,6 0 0 0 6,-6 6,6 0 0 0 -6,-6 z" + id="path4157" + inkscape:connector-curvature="0" /> + </g> </svg> diff --git a/tools/editor/icons/source/icon_concave_polygon_shape_2d.svg b/tools/editor/icons/source/icon_concave_polygon_shape_2d.svg index 79e71425f7..624105e5a8 100644 --- a/tools/editor/icons/source/icon_concave_polygon_shape_2d.svg +++ b/tools/editor/icons/source/icon_concave_polygon_shape_2d.svg @@ -1,21 +1,83 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" viewBox="0 0 16 16" id="svg2" version="1.1" inkscape:version="0.91 r13725" inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" sodipodi:docname="icon_concave_polygon_shape_2d.svg"> - <defs id="defs4" /> - <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="22.627416" inkscape:cx="-0.53108971" inkscape:cy="10.128279" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" units="px" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:snap-object-midpoints="true" inkscape:snap-center="true" inkscape:window-width="1920" inkscape:window-height="1055" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:object-paths="true" inkscape:snap-intersection-paths="true" inkscape:object-nodes="true" inkscape:snap-smooth-nodes="true" inkscape:snap-midpoints="true"> - <inkscape:grid type="xygrid" id="grid3336" /> - </sodipodi:namedview> - <metadata id="metadata7"> - <rdf:RDF> - <cc:Work rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1036.3622)"> - <path style="fill:none;fill-rule:evenodd;stroke:#a5b7f3;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.98823529" d="m 14,1050.3622 -12,0 0,-12 6,6 6,-6 z" id="path4139" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc" /> - </g> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + viewBox="0 0 16 16" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" + sodipodi:docname="icon_concave_polygon_shape_2d.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="31.999999" + inkscape:cx="9.3658684" + inkscape:cy="6.9741169" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-paths="true" + inkscape:snap-intersection-paths="true" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true" + inkscape:snap-midpoints="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1036.3622)"> + <path + style="fill:none;fill-rule:evenodd;stroke:#68b6ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 14,1050.3622 -12,0 0,-12 6,6 6,-6 z" + id="path4139" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccc" /> + </g> </svg> diff --git a/tools/editor/icons/source/icon_convex_polygon_shape_2d.svg b/tools/editor/icons/source/icon_convex_polygon_shape_2d.svg index fc84cf931b..3b55df7fba 100644 --- a/tools/editor/icons/source/icon_convex_polygon_shape_2d.svg +++ b/tools/editor/icons/source/icon_convex_polygon_shape_2d.svg @@ -1,21 +1,83 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" viewBox="0 0 16 16" id="svg2" version="1.1" inkscape:version="0.91 r13725" inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" sodipodi:docname="icon_convex_polygon_shape_2d.svg"> - <defs id="defs4" /> - <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="22.627416" inkscape:cx="-0.53108971" inkscape:cy="10.128279" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" units="px" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:snap-object-midpoints="true" inkscape:snap-center="true" inkscape:window-width="1920" inkscape:window-height="1055" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:object-paths="true" inkscape:snap-intersection-paths="true" inkscape:object-nodes="true" inkscape:snap-smooth-nodes="true" inkscape:snap-midpoints="true"> - <inkscape:grid type="xygrid" id="grid3336" /> - </sodipodi:namedview> - <metadata id="metadata7"> - <rdf:RDF> - <cc:Work rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1036.3622)"> - <path style="fill:none;fill-rule:evenodd;stroke:#a5b7f3;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.98823529" d="m 14,1050.3622 -12,0 0,-6 6,-6 6,6 z" id="path4139" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc" /> - </g> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + viewBox="0 0 16 16" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" + sodipodi:docname="icon_convex_polygon_shape_2d.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="31.999999" + inkscape:cx="3.9121254" + inkscape:cy="7.1557164" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-paths="true" + inkscape:snap-intersection-paths="true" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true" + inkscape:snap-midpoints="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1036.3622)"> + <path + style="fill:none;fill-rule:evenodd;stroke:#68b6ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 14,1050.3622 -12,0 0,-6 6,-6 6,6 z" + id="path4139" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccc" /> + </g> </svg> diff --git a/tools/editor/icons/source/icon_godot.svg b/tools/editor/icons/source/icon_godot.svg index 927c3ee053..419f23125b 100644 --- a/tools/editor/icons/source/icon_godot.svg +++ b/tools/editor/icons/source/icon_godot.svg @@ -28,12 +28,12 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="22.627417" - inkscape:cx="4.9021021" - inkscape:cy="11.249083" + inkscape:zoom="32" + inkscape:cx="9.8470361" + inkscape:cy="9.8599985" inkscape:document-units="px" inkscape:current-layer="layer1" - showgrid="true" + showgrid="false" units="px" inkscape:snap-bbox="true" inkscape:bbox-paths="true" @@ -59,7 +59,7 @@ <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> + <dc:title /> </cc:Work> </rdf:RDF> </metadata> @@ -146,5 +146,23 @@ </g> </g> </g> + <path + style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.44162436" + d="m 4,1041.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 z m 0,1 a 2.0000174,2.0000174 0 0 1 2,2 2.0000174,2.0000174 0 0 1 -2,2 2.0000174,2.0000174 0 0 1 -2,-2 2.0000174,2.0000174 0 0 1 2,-2 z" + id="path4151" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + id="path4156" + d="m 12,1041.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 z m 0,1 a 2.0000174,2.0000174 0 0 1 2,2 2.0000174,2.0000174 0 0 1 -2,2 2.0000174,2.0000174 0 0 1 -2,-2 2.0000174,2.0000174 0 0 1 2,-2 z" + style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.44162436" /> + <rect + style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.44162436" + id="rect4160" + width="4" + height="1" + x="6" + y="1043.3622" + ry="0" /> </g> </svg> diff --git a/tools/editor/icons/source/icon_group.svg b/tools/editor/icons/source/icon_group.svg index c8d20af9dd..a0a2f02af5 100644 --- a/tools/editor/icons/source/icon_group.svg +++ b/tools/editor/icons/source/icon_group.svg @@ -28,9 +28,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="22.627417" - inkscape:cx="10.459761" - inkscape:cy="9.5219725" + inkscape:zoom="5.6568543" + inkscape:cx="14.789684" + inkscape:cy="26.718572" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -79,1005 +79,6 @@ id="rect4697" transform="translate(0,1036.3622)" /> <rect - ry="4.3456585e-05" - rx="4.5000234" - y="996.36218" - x="-20.000004" - height="15.999995" - width="36.000008" - id="rect4379" - style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - ry="8.6913296e-06" - rx="24" - y="17.999989" - x="998.36218" - height="1" - width="12" - id="rect4153" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="matrix(0,1,-1,0,0,0)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4151" - width="12" - height="1" - x="-17.999989" - y="997.36218" - rx="24" - ry="8.6913296e-06" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4155" - width="12" - height="1" - x="998.36218" - y="4.99999" - rx="24" - ry="8.6913296e-06" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - ry="8.6913296e-06" - rx="24" - y="1010.3622" - x="-17.999989" - height="1" - width="12" - id="rect4157" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4159" - width="4.9999809" - height="1.0000036" - x="1003.3622" - y="15.999995" - rx="9.9999619" - ry="8.6913606e-06" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - ry="4.3456628e-05" - rx="2.0000134" - y="11.000003" - x="1002.3622" - height="4.9999976" - width="1.0000067" - id="rect4161" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="matrix(0,1,-1,0,0,0)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - ry="8.6913606e-06" - rx="9.9999619" - y="9.9999886" - x="1003.3622" - height="1.0000036" - width="4.9999809" - id="rect4163" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="matrix(0,1,-1,0,0,0)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4165" - width="1.0000067" - height="4.9999976" - x="1008.3622" - y="11.000002" - rx="2.0000134" - ry="4.3456628e-05" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4167" - sodipodi:type="arc" - sodipodi:cx="-17.999989" - sodipodi:cy="998.36218" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m -17.999989,999.36218 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - d="m 5.9999948,999.36218 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="998.36218" - sodipodi:cx="5.9999948" - sodipodi:type="arc" - id="path4169" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="scale(-1,1)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - transform="scale(-1,1)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4171" - sodipodi:type="arc" - sodipodi:cx="5.9999948" - sodipodi:cy="1010.3622" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m 5.9999948,1011.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - d="m -17.999994,1011.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="1010.3622" - sodipodi:cx="-17.999994" - sodipodi:type="arc" - id="path4173" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4175" - sodipodi:type="arc" - sodipodi:cx="-15.999995" - sodipodi:cy="1008.3622" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m -15.999995,1009.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - d="m -15.999995,1004.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="1003.3622" - sodipodi:cx="-15.999995" - sodipodi:type="arc" - id="path4177-3" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - d="m 10.999986,1009.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="1008.3622" - sodipodi:cx="10.999986" - sodipodi:type="arc" - id="path4179-6" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="scale(-1,1)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4181" - sodipodi:type="arc" - sodipodi:cx="10.999986" - sodipodi:cy="1003.3622" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m 10.999986,1004.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" - transform="scale(-1,1)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - inkscape:connector-curvature="0" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m -12.99999,999.36232 a 1,1 0 0 0 -0.865235,0.5 1,1 0 0 0 -0.134765,0.52348 l 0,0.9765 c 0.361502,0 0.445997,0 1,0 l 0,-1 5,0 0,1 0,1.5 0,2.5 -1,0 0,1 1,0 a 1,1 0 0 0 0.865234,-0.5 1,1 0 0 0 0.134766,-0.5 l 0,-2.5 0,-2.4765 a 1,1 0 0 0 0,-0.024 1,1 0 0 0 -0.134766,-0.49998 1,1 0 0 0 -0.865234,-0.5 l -5,-10e-5 z" - id="rect4183" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - ry="8.6913606e-06" - rx="9.9999619" - y="-4.0000043" - x="1003.3622" - height="1.0000036" - width="4.9999809" - id="rect4389" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="matrix(0,1,-1,0,0,0)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4391" - width="1.0000067" - height="4.9999976" - x="1002.3622" - y="-8.9999962" - rx="2.0000134" - ry="4.3456628e-05" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4393" - width="4.9999809" - height="1.0000036" - x="1003.3622" - y="-10.00001" - rx="9.9999619" - ry="8.6913606e-06" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - ry="4.3456628e-05" - rx="2.0000134" - y="-8.9999971" - x="1008.3622" - height="4.9999976" - width="1.0000067" - id="rect4395" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="matrix(0,1,-1,0,0,0)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - d="m 4.0000043,1009.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="1008.3622" - sodipodi:cx="4.0000043" - sodipodi:type="arc" - id="path4405" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4407" - sodipodi:type="arc" - sodipodi:cx="4.0000043" - sodipodi:cy="1003.3622" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m 4.0000043,1004.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - transform="scale(-1,1)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4409" - sodipodi:type="arc" - sodipodi:cx="-9.0000134" - sodipodi:cy="1008.3622" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m -9.0000133,1009.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 -10e-8,-1 1,1 0 0 1 0.8660255,-0.5 l -10e-8,1 z" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - transform="scale(-1,1)" - d="m -9.0000133,1004.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 -10e-8,-1 1,1 0 0 1 0.8660255,-0.5 l -10e-8,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="1003.3622" - sodipodi:cx="-9.0000134" - sodipodi:type="arc" - id="path4411" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - id="path4413" - d="m 7.0000094,999.36232 a 1,1 0 0 0 -0.865235,0.5 1,1 0 0 0 -0.134765,0.52348 l 0,0.9765 c 0.361502,0 0.445997,0 1,0 l 0,-1 5.0000006,0 0,1 0,1.5 0,2.5 -1,0 0,1 1,0 a 1,1 0 0 0 0.865234,-0.5 1,1 0 0 0 0.134766,-0.5 l 0,-2.5 0,-2.4765 a 1,1 0 0 0 0,-0.024 1,1 0 0 0 -0.134766,-0.49998 1,1 0 0 0 -0.865234,-0.5 l -5.0000006,-10e-5 z" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:connector-curvature="0" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4415" - width="36.000008" - height="15.999995" - x="-19.999994" - y="1012.3622" - rx="4.5000234" - ry="4.3456585e-05" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - d="m -16.000053,1020.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="1019.3622" - sodipodi:cx="-16.000053" - sodipodi:type="arc" - id="path4417" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - d="m 11.000043,1025.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="1024.3622" - sodipodi:cx="11.000043" - sodipodi:type="arc" - id="path4419" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="scale(-1,1)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4421" - width="2" - height="5" - x="-19.000053" - y="1020.3622" - rx="2.00001" - ry="4.3456599e-05" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - ry="1.7382426e-05" - rx="5.000021" - y="1018.3622" - x="-17.00005" - height="1.9999754" - width="4.9999962" - id="rect4423" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - ry="4.3456599e-05" - rx="2.00001" - y="1020.3622" - x="-12.000043" - height="5" - width="2" - id="rect4425" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4427" - width="2" - height="5" - x="1025.3622" - y="12.000043" - rx="2.00001" - ry="4.3456599e-05" - transform="matrix(0,1,-1,0,0,0)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4429" - sodipodi:type="arc" - sodipodi:cx="-17.000048" - sodipodi:cy="1020.3622" - sodipodi:rx="2" - sodipodi:ry="2" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m -17.000048,1022.3622 a 2,2 0 0 1 -1.73205,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.73205,-1 l 0,2 z" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - d="m -17.000048,1027.3622 a 2,2 0 0 1 -1.73205,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.73205,-1 l 0,2 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="2" - sodipodi:rx="2" - sodipodi:cy="1025.3622" - sodipodi:cx="-17.000048" - sodipodi:type="arc" - id="path4431" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - d="m 12.000043,1022.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1 l 0,2 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="2" - sodipodi:rx="2" - sodipodi:cy="1020.3622" - sodipodi:cx="12.000043" - sodipodi:type="arc" - id="path4433" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="scale(-1,1)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4435" - sodipodi:type="arc" - sodipodi:cx="12.000043" - sodipodi:cy="1025.3622" - sodipodi:rx="2" - sodipodi:ry="2" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m 12.000043,1027.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1 l 0,2 z" - transform="scale(-1,1)" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - inkscape:connector-curvature="0" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m -12.000048,1013.3622 a 2,2 0 0 0 -1.732422,1 2,2 0 0 0 -0.265625,1 l -0.0019,0 0,1 2,0 0,-1 2.5000001,0 2.5,0 0,3 0,2 -1,0 0,2 1,0 a 2,2 0 0 0 1.732422,-1 2,2 0 0 0 0.265625,-1 l 0.002,0 0,-5 -0.002,0 a 2,2 0 0 0 -0.265625,-1 2,2 0 0 0 -1.732422,-1 l -2.5,0 -2.5000001,0 z" - id="path4437" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - inkscape:connector-curvature="0" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m -17.000048,1013.3622 a 2,2 0 0 0 -1.732422,1 2,2 0 0 0 -0.265625,1 c 0,0 -0.0019,0 -0.0019,0 l 0,7 c 0,0 0.446,0 1,0 0.554,0 1,0 1,0 l 0,-5 0,-2 5,0 5.0000001,0 0,-2 -5.0000001,0 -5,0 z m 10.0000001,5 0,7 -4.5000001,0 -4.5,0 0,2 4.5,0 4.5000001,0 a 2,2 0 0 0 1.732422,-1 2,2 0 0 0 0.265625,-1 c 0,0 0.002,0 0.002,0 l 0,-7 c 0,0 -0.446,0 -1,0 -0.554,0 -1,0 -1,0 z" - id="path4439" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4441" - width="2" - height="2" - x="-14.000048" - y="1016.3622" - rx="2.00001" - ry="3.3799501e-05" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - ry="3.3799501e-05" - rx="2.00001" - y="1020.3622" - x="-10.000052" - height="2" - width="2" - id="rect4443" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4445" - sodipodi:type="arc" - sodipodi:cx="3.9999421" - sodipodi:cy="1019.3622" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m 3.9999421,1020.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - transform="scale(-1,1)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4447" - sodipodi:type="arc" - sodipodi:cx="-8.9999523" - sodipodi:cy="1024.3622" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m -8.9999523,1025.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - ry="4.3456599e-05" - rx="2.00001" - y="1020.3622" - x="0.99994206" - height="5" - width="2" - id="rect4449" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4451" - width="4.9999962" - height="1.9999754" - x="2.9999459" - y="1018.3622" - rx="5.000021" - ry="1.7382426e-05" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4453" - width="2" - height="5" - x="7.9999528" - y="1020.3622" - rx="2.00001" - ry="4.3456599e-05" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - ry="4.3456599e-05" - rx="2.00001" - y="-7.9999528" - x="1025.3622" - height="5" - width="2" - id="rect4455" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - d="m 2.9999478,1022.3622 a 2,2 0 0 1 -1.7320508,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1 l 0,2 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="2" - sodipodi:rx="2" - sodipodi:cy="1020.3622" - sodipodi:cx="2.9999478" - sodipodi:type="arc" - id="path4457" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4459" - sodipodi:type="arc" - sodipodi:cx="2.9999478" - sodipodi:cy="1025.3622" - sodipodi:rx="2" - sodipodi:ry="2" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m 2.9999478,1027.3622 a 2,2 0 0 1 -1.7320508,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1 l 0,2 z" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - transform="scale(-1,1)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4461" - sodipodi:type="arc" - sodipodi:cx="-7.9999528" - sodipodi:cy="1020.3622" - sodipodi:rx="2" - sodipodi:ry="2" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m -7.9999527,1022.3622 a 2,2 0 0 1 -1.7320509,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1 l 0,2 z" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - transform="scale(-1,1)" - d="m -7.9999527,1027.3622 a 2,2 0 0 1 -1.7320509,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1 l 0,2 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="2" - sodipodi:rx="2" - sodipodi:cy="1025.3622" - sodipodi:cx="-7.9999528" - sodipodi:type="arc" - id="path4463" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <path - id="path4465" - d="m 7.9999475,1013.3622 a 2,2 0 0 0 -1.732422,1 2,2 0 0 0 -0.265625,1 l -0.0019,0 0,1 2,0 0,-1 2.5000005,0 2.5,0 0,3 0,2 -1,0 0,2 1,0 a 2,2 0 0 0 1.732422,-1 2,2 0 0 0 0.265625,-1 l 0.002,0 0,-5 -0.002,0 a 2,2 0 0 0 -0.265625,-1 2,2 0 0 0 -1.732422,-1 l -2.5,0 -2.5000005,0 z" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:connector-curvature="0" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - ry="3.3799501e-05" - rx="2.00001" - y="1016.3622" - x="5.999948" - height="2" - width="2" - id="rect4469" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4471" - width="2" - height="2" - x="9.9999428" - y="1020.3622" - rx="2.00001" - ry="3.3799501e-05" - inkscape:export-filename="/home/djrm/rect4471.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4473" - width="12" - height="1" - x="1038.3622" - y="-35.500008" - rx="24" - ry="8.6913296e-06" /> - <rect - ry="8.6913296e-06" - rx="24" - y="1037.3622" - x="35.500008" - height="1" - width="12" - id="rect4475" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <rect - ry="8.6913296e-06" - rx="24" - y="-48.500004" - x="1038.3622" - height="1" - width="12" - id="rect4477" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="matrix(0,1,-1,0,0,0)" /> - <rect - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4479" - width="12" - height="1" - x="35.500008" - y="1050.3622" - rx="24" - ry="8.6913296e-06" /> - <rect - ry="8.6913606e-06" - rx="9.9999619" - y="-37.5" - x="1043.3622" - height="1.0000036" - width="4.9999809" - id="rect4481" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="matrix(0,1,-1,0,0,0)" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4483" - width="1.0000067" - height="4.9999976" - x="1042.3622" - y="-42.499992" - rx="2.0000134" - ry="4.3456628e-05" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4485" - width="4.9999809" - height="1.0000036" - x="1043.3622" - y="-43.500008" - rx="9.9999619" - ry="8.6913606e-06" /> - <rect - ry="4.3456628e-05" - rx="2.0000134" - y="-42.499992" - x="1048.3622" - height="4.9999976" - width="1.0000067" - id="rect4487" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="matrix(0,1,-1,0,0,0)" /> - <path - d="m 35.500008,1039.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="1038.3622" - sodipodi:cx="35.500008" - sodipodi:type="arc" - id="path4489" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - transform="scale(-1,1)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4491" - sodipodi:type="arc" - sodipodi:cx="-47.5" - sodipodi:cy="1038.3622" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m -47.5,1039.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" /> - <path - d="m -47.5,1051.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="1050.3622" - sodipodi:cx="-47.5" - sodipodi:type="arc" - id="path4493" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="scale(-1,1)" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4495" - sodipodi:type="arc" - sodipodi:cx="35.5" - sodipodi:cy="1050.3622" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m 35.5,1051.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" /> - <path - d="m 37.5,1049.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="1048.3622" - sodipodi:cx="37.5" - sodipodi:type="arc" - id="path4497" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4499" - sodipodi:type="arc" - sodipodi:cx="37.5" - sodipodi:cy="1043.3622" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m 37.5,1044.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" /> - <path - transform="scale(-1,1)" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4501" - sodipodi:type="arc" - sodipodi:cx="-42.500011" - sodipodi:cy="1048.3622" - sodipodi:rx="1" - sodipodi:ry="1" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m -42.500011,1049.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" /> - <path - transform="scale(-1,1)" - d="m -42.500011,1044.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="1" - sodipodi:rx="1" - sodipodi:cy="1043.3622" - sodipodi:cx="-42.500011" - sodipodi:type="arc" - id="path4503" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - id="path4505" - d="m 40.500005,1039.3623 a 1,1 0 0 0 -0.865235,0.5 1,1 0 0 0 -0.134765,0.5235 l 0,0.9765 c 0.361502,0 0.445997,0 1,0 l 0,-1 5,0 0,1 0,1.5 0,2.5 -1,0 0,1 1,0 a 1,1 0 0 0 0.865234,-0.5 1,1 0 0 0 0.134766,-0.5 l 0,-2.5 0,-2.4765 a 1,1 0 0 0 0,-0.024 1,1 0 0 0 -0.134766,-0.5 1,1 0 0 0 -0.865234,-0.5 l -5,-10e-5 z" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:connector-curvature="0" /> - <rect - inkscape:export-ydpi="180" - inkscape:export-xdpi="180" - inkscape:export-filename="/home/djrm/rect4471.png" - ry="4.3456599e-05" - rx="2.00001" - y="1044.3622" - x="-18.000057" - height="5" - width="2" - id="rect4536" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <rect - inkscape:export-ydpi="180" - inkscape:export-xdpi="180" - inkscape:export-filename="/home/djrm/rect4471.png" - transform="matrix(0,1,-1,0,0,0)" - ry="4.3456599e-05" - rx="2.00001" - y="11.000047" - x="1049.3622" - height="5" - width="2" - id="rect4542" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - inkscape:export-ydpi="180" - inkscape:export-xdpi="180" - inkscape:export-filename="/home/djrm/rect4471.png" - d="m -16.00005,1046.3622 a 2,2 0 0 1 -1.73205,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.73205,-1 l 0,2 z" - sodipodi:end="4.712389" - sodipodi:start="1.5707963" - sodipodi:ry="2" - sodipodi:rx="2" - sodipodi:cy="1044.3622" - sodipodi:cx="-16.00005" - sodipodi:type="arc" - id="path4544" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - inkscape:export-ydpi="180" - inkscape:export-xdpi="180" - inkscape:export-filename="/home/djrm/rect4471.png" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path4546" - sodipodi:type="arc" - sodipodi:cx="-16.00005" - sodipodi:cy="1049.3622" - sodipodi:rx="2" - sodipodi:ry="2" - sodipodi:start="1.5707963" - sodipodi:end="4.712389" - d="m -16.00005,1051.3622 a 2,2 0 0 1 -1.73205,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.73205,-1 l 0,2 z" /> - <path - inkscape:export-ydpi="180" - inkscape:export-xdpi="180" - inkscape:export-filename="/home/djrm/rect4471.png" - id="path4554" - d="m -16.000053,1037.3622 a 2,2 0 0 0 -1.732422,1 2,2 0 0 0 -0.265625,1 c 0,0 -0.0019,0 -0.0019,0 l 0,7 c 0,0 0.446,0 1,0 0.554,0 1,0 1,0 l 0,-5 0,-2 5.000001,0 5,0 0,-2 -5,0 -5.000001,0 z m 10.000001,5 0,7 -4.5,0 -4.500001,0 0,2 4.500001,0 4.5,0 a 2,2 0 0 0 1.732422,-1 2,2 0 0 0 0.265625,-1 c 0,0 0.002,0 0.002,0 l 0,-7 c 0,0 -0.446,0 -1,0 -0.554,0 -1,0 -1,0 z" - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:connector-curvature="0" /> - <rect - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4560" - width="4" - height="4" - x="-14" - y="1041.3622" - rx="2.00001" - ry="3.3799501e-05" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m 33.000005,1021.3622 c 1.107999,0 2,0.892 2,2 l 0,5 c 0,1.108 -0.892001,2 -2,2 l -1,0 0,-3 a 2.9999926,2.9999926 0 0 0 -3,-3 l -3,0 0,-1 c 0,-1.108 0.892001,-2 2,-2 l 5,0 z m -7,6 a 2.9999926,2.9999926 0 0 0 3,3 l -1,0 c -1.107999,0 -2,-0.892 -2,-2 l 0,-1 z" - id="rect4562" - inkscape:connector-curvature="0" /> - <rect - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4566" - width="8.9999924" - height="9.0000114" - x="-30.000002" - y="1026.3622" - rx="1.9999952" - ry="2.0000174" - transform="scale(-1,1)" /> - <rect - inkscape:export-ydpi="180" - inkscape:export-xdpi="180" - inkscape:export-filename="/home/djrm/rect4471.png" - style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4579" - width="36.000008" - height="15.999995" - x="-20.000004" - y="980.36218" - rx="4.5000234" - ry="4.3456585e-05" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m -32.000005,1037.3622 c -1.10801,0 -2,0.892 -2,2 l 0,10 c 0,1.108 0.89199,2 2,2 l 10,0 c 1.10801,0 2,-0.892 2,-2 l 0,-10 c 0,-1.108 -0.89199,-2 -2,-2 l -10,0 z m 0,2 10,0 0,10 -10,0 0,-10 z" - id="rect4601" - inkscape:connector-curvature="0" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m 21,1044.3622 a 3.4999881,3.4999881 0 0 0 -3.5,3.5 3.4999881,3.4999881 0 0 0 3.5,3.5 3.4999881,3.4999881 0 0 0 3.5,-3.5 3.4999881,3.4999881 0 0 0 -3.5,-3.5 z m 0,2 a 1.5000153,1.5000153 0 0 1 1.5,1.5 1.5000153,1.5000153 0 0 1 -1.5,1.5 1.5000153,1.5000153 0 0 1 -1.5,-1.5 1.5000153,1.5000153 0 0 1 1.5,-1.5 z" - id="path4644" - inkscape:connector-curvature="0" /> - <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m 28,1037.3622 a 3.4999881,3.4999881 0 0 0 -3.5,3.5 3.4999881,3.4999881 0 0 0 3.5,3.5 3.4999881,3.4999881 0 0 0 3.5,-3.5 3.4999881,3.4999881 0 0 0 -3.5,-3.5 z m 0,2 a 1.5000153,1.5000153 0 0 1 1.5,1.5 1.5000153,1.5000153 0 0 1 -1.5,1.5 1.5000153,1.5000153 0 0 1 -1.5,-1.5 1.5000153,1.5000153 0 0 1 1.5,-1.5 z" - id="circle4646" - inkscape:connector-curvature="0" /> - <rect style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect4679" width="2" diff --git a/tools/editor/icons/source/icon_h_t_t_p_request.svg b/tools/editor/icons/source/icon_h_t_t_p_request.svg index 2aee12b2af..f43141dd7c 100644 --- a/tools/editor/icons/source/icon_h_t_t_p_request.svg +++ b/tools/editor/icons/source/icon_h_t_t_p_request.svg @@ -15,7 +15,7 @@ id="svg2" version="1.1" inkscape:version="0.91 r13725" - inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_h_t_t_p_request.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" sodipodi:docname="icon_h_t_t_p_request.svg"> @@ -28,9 +28,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="45.254836" - inkscape:cx="10.430372" - inkscape:cy="8.7048298" + inkscape:zoom="32.000001" + inkscape:cx="14.357316" + inkscape:cy="9.4289864" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -59,7 +59,7 @@ <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> + <dc:title /> </cc:Work> </rdf:RDF> </metadata> @@ -73,18 +73,18 @@ id="rect4200" width="1" height="5" - x="0" - y="1042.3622" /> + x="1" + y="1046.3622" /> <rect - y="1044.3622" - x="0" + y="1048.3622" + x="1" height="0.9999826" width="2" id="rect4202" style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" /> <rect - y="1042.3622" - x="2" + y="1046.3622" + x="3" height="5" width="1" id="rect4204" @@ -94,18 +94,18 @@ id="rect4206" width="1" height="5" - x="5" - y="1042.3622" /> + x="6" + y="1046.3622" /> <rect - y="1042.3622" - x="4" + y="1046.3622" + x="5" height="1.0000174" width="3" id="rect4208" style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" /> <rect - y="1042.3622" - x="9" + y="1046.3622" + x="10" height="5" width="1" id="rect4210" @@ -115,18 +115,18 @@ id="rect4212" width="3" height="1.0000174" - x="8" - y="1042.3622" /> + x="9" + y="1046.3622" /> <rect style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" id="rect4214" width="1" height="5" - x="12" - y="1042.3622" /> + x="13" + y="1046.3622" /> <rect - y="1042.3622" - x="12" + y="1046.3622" + x="13" height="1.0000174" width="3" id="rect4216" @@ -136,14 +136,38 @@ id="rect4218" width="1" height="3.0000174" - x="14" - y="1042.3622" /> + x="15" + y="1046.3622" /> <rect style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" id="rect4220" width="3" height="1.0000174" - x="12" - y="1044.3622" /> + x="13" + y="1048.3622" /> + <path + style="fill:#e0e0e0;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 1,1041.3622 6,0 -3,-4 z" + id="path4279" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + id="path4281" + d="m 9,1040.3622 6,0 -3,4 z" + style="fill:#e0e0e0;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4283" + width="2" + height="3" + x="3" + y="1041.3622" /> + <rect + y="1037.3622" + x="11" + height="3" + width="2" + id="rect4285" + style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> </g> </svg> diff --git a/tools/editor/icons/source/icon_line_shape_2d.svg b/tools/editor/icons/source/icon_line_shape_2d.svg index 551439b4f3..6a8ab39ef3 100644 --- a/tools/editor/icons/source/icon_line_shape_2d.svg +++ b/tools/editor/icons/source/icon_line_shape_2d.svg @@ -1,23 +1,95 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" viewBox="0 0 16 16" id="svg2" version="1.1" inkscape:version="0.91 r13725" inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" sodipodi:docname="icon_line_shape_2d.svg"> - <defs id="defs4" /> - <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="22.627416" inkscape:cx="-0.53108971" inkscape:cy="10.128279" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" units="px" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:snap-object-midpoints="true" inkscape:snap-center="true" inkscape:window-width="1920" inkscape:window-height="1055" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:object-paths="true" inkscape:snap-intersection-paths="true" inkscape:object-nodes="true" inkscape:snap-smooth-nodes="true" inkscape:snap-midpoints="true"> - <inkscape:grid type="xygrid" id="grid3336" /> - </sodipodi:namedview> - <metadata id="metadata7"> - <rdf:RDF> - <cc:Work rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1036.3622)"> - <path style="fill:none;fill-rule:evenodd;stroke:#a5b7f3;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.39215687" d="m 1,1037.3622 14,14" id="path4139" inkscape:connector-curvature="0" sodipodi:nodetypes="cc" /> - <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path4201" d="m 3,1039.3622 10,10" style="fill:none;fill-rule:evenodd;stroke:#a5b7f3;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.58823532" /> - <path style="fill:none;fill-rule:evenodd;stroke:#a5b7f3;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.98823529" d="m 5,1041.3622 6,6" id="path4203" inkscape:connector-curvature="0" sodipodi:nodetypes="cc" /> - </g> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + viewBox="0 0 16 16" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" + sodipodi:docname="icon_line_shape_2d.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="22.627416" + inkscape:cx="0.66215304" + inkscape:cy="8.0069586" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-paths="true" + inkscape:snap-intersection-paths="true" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true" + inkscape:snap-midpoints="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1036.3622)"> + <path + style="fill:#68b6ff;fill-rule:evenodd;stroke:#68b6ff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.39215687;fill-opacity:1" + d="m 1,1037.3622 14,14" + id="path4139" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path4201" + d="m 3,1039.3622 10,10" + style="fill:none;fill-rule:evenodd;stroke:#68b6ff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.58823532" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#68b6ff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 5,1041.3622 6,6" + id="path4203" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> </svg> diff --git a/tools/editor/icons/source/icon_mini_aabb.svg b/tools/editor/icons/source/icon_mini_aabb.svg new file mode 100644 index 0000000000..ebfd505bea --- /dev/null +++ b/tools/editor/icons/source/icon_mini_aabb.svg @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_aabb.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254835" + inkscape:cx="5.0272453" + inkscape:cy="5.132155" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="false" + inkscape:snap-smooth-nodes="false"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + style="fill:#ee7991;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 5,1041.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 l 2,0 0,-6 -2,0 z m 0,2 0,2 a 1.0000174,1.0000174 0 0 1 -1,-1 1.0000174,1.0000174 0 0 1 1,-1 z" + id="path4893" + inkscape:connector-curvature="0" /> + <path + style="fill:#f39bad;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 3,1046.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 l 2,0 0,-6 -2,0 z m 0,2 0,2 a 1.0000174,1.0000174 0 0 1 -1,-1 1.0000174,1.0000174 0 0 1 1,-1 z" + id="path4234" + inkscape:connector-curvature="0" /> + <path + id="path4145" + d="m 12.999983,1043.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + style="fill:#ee7991;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="fill:#ee7991;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 12.999983,1049.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z" + id="path4147" /> + <rect + transform="matrix(0,1,1,0,0,0)" + y="11" + x="1041.3622" + height="2.0000002" + width="8.0000172" + id="rect4149" + style="fill:#ee7991;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#f39bad;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8,1044.3622 0,8 2,0 a 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 l 0,-2 -2,0 z m 2,4 a 1.0000174,1.0000174 0 0 1 1,1 1.0000174,1.0000174 0 0 1 -1,1 l 0,-2 z" + id="path4151" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_array.svg b/tools/editor/icons/source/icon_mini_array.svg new file mode 100644 index 0000000000..a0a2014fbb --- /dev/null +++ b/tools/editor/icons/source/icon_mini_array.svg @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_array.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254835" + inkscape:cx="9.4953495" + inkscape:cy="4.8350599" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4245" + width="2" + height="2.999984" + x="11" + y="1047.3622" /> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 14,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4253" + inkscape:connector-curvature="0" /> + <rect + y="1047.3622" + x="7" + height="2.999984" + width="2" + id="rect4150" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + inkscape:connector-curvature="0" + id="path4152" + d="m 10,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + id="path4849" + d="m 4,1050.3625 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 4,1044.3625 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4851" /> + <rect + transform="scale(1,-1)" + y="-1050.3622" + x="4" + height="6.0000014" + width="2" + id="rect4853" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4141" + width="1" + height="2.0000174" + x="10" + y="1044.3622" /> + <rect + y="1044.3622" + x="14" + height="2.0000174" + width="1" + id="rect4143" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_boolean.svg b/tools/editor/icons/source/icon_mini_boolean.svg new file mode 100644 index 0000000000..eb17279a62 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_boolean.svg @@ -0,0 +1,131 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_boolean.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000002" + inkscape:cx="3.4941399" + inkscape:cy="6.2480463" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4364" + width="2" + height="5.9999666" + x="-2" + y="1044.3622" + transform="scale(-1,1)" /> + <rect + y="1044.3622" + x="-2" + height="2.0000174" + width="1" + id="rect4368" + style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(-1,1)" /> + <path + style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 2,1044.3623 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + id="path4370" + inkscape:connector-curvature="0" /> + <rect + transform="scale(1,-1)" + y="-1047.3622" + x="13" + height="5" + width="2" + id="rect4374" + style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + inkscape:connector-curvature="0" + id="path4378" + d="m 2,1050.3623 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z" + style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + transform="scale(-1,1)" + y="1042.3622" + x="-2" + height="3.9999492" + width="2" + id="rect4384" + style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16,1050.3623 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4392" + inkscape:connector-curvature="0" /> + <path + style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 7,1044.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 z m 0,2 a 1.0000174,1.0000174 0 0 1 1,1 1.0000174,1.0000174 0 0 1 -1,1 1.0000174,1.0000174 0 0 1 -1,-1 1.0000174,1.0000174 0 0 1 1,-1 z" + id="path4148" + inkscape:connector-curvature="0" /> + <path + style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 11,1044.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 z m 0,2 a 1.0000174,1.0000174 0 0 1 1,1 1.0000174,1.0000174 0 0 1 -1,1 1.0000174,1.0000174 0 0 1 -1,-1 1.0000174,1.0000174 0 0 1 1,-1 z" + id="path4174" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_color.svg b/tools/editor/icons/source/icon_mini_color.svg new file mode 100644 index 0000000000..cdc176e00c --- /dev/null +++ b/tools/editor/icons/source/icon_mini_color.svg @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_color.svg"> + <defs + id="defs4"> + <clipPath + id="clipPath4253" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4255" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4199" + clipPathUnits="userSpaceOnUse"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + id="path4201" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4392"> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + id="path4394" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + id="clipPath4196" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4198" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254835" + inkscape:cx="5.4869016" + inkscape:cy="6.8192689" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + style="fill:#ff7070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 4 4 A 3 3 0 0 0 1 7 A 3 3 0 0 0 4 10 L 5 10 L 5 8 L 4 8 A 1.0000174 1.0000174 0 0 1 3 7 A 1.0000174 1.0000174 0 0 1 4 6 L 5 6 L 5 4 L 4 4 z " + transform="translate(0,1040.3622)" + id="rect4667" /> + <path + style="fill:#70bfff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 14 4 A 3 3 0 0 0 11 7 L 11 10 L 13 10 L 13 7 A 1.0000174 1.0000174 0 0 1 14 6 L 15 6 L 15 4 L 14 4 z " + transform="translate(0,1040.3622)" + id="rect4245" /> + <path + style="fill:#7aff70;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 6 2 L 6 7 A 3 3 0 0 0 9 10 L 10 10 L 10 8 L 9 8 A 1.0000174 1.0000174 0 0 1 8 7 L 8 2 L 6 2 z " + transform="translate(0,1040.3622)" + id="rect4815" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_color_array.svg b/tools/editor/icons/source/icon_mini_color_array.svg new file mode 100644 index 0000000000..2ec0e186b5 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_color_array.svg @@ -0,0 +1,250 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_color_array.svg"> + <defs + id="defs4"> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4253"> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + id="path4255" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4199"> + <path + inkscape:connector-curvature="0" + id="path4201" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4392" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4394" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4196"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + id="path4198" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4253-7"> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + id="path4255-5" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4199-3"> + <path + inkscape:connector-curvature="0" + id="path4201-5" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4392-6" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4394-2" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4196-9"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + id="path4198-1" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4253-75"> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + id="path4255-3" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4199-5"> + <path + inkscape:connector-curvature="0" + id="path4201-6" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4392-2" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4394-9" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4196-1"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + id="path4198-2" + inkscape:connector-curvature="0" /> + </clipPath> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000002" + inkscape:cx="2.3647109" + inkscape:cy="10.148485" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + y="1050.3622" + x="0" + height="1.9999826" + width="4" + id="rect4158" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4160" + width="2" + height="12.000017" + x="0" + y="1040.3622" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4162" + width="4" + height="2.0000174" + x="0" + y="1040.3622" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4155" + width="4" + height="1.9999826" + x="-16" + y="1050.3622" + transform="scale(-1,1)" /> + <rect + y="1040.3622" + x="-16" + height="12.000017" + width="2" + id="rect4157" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(-1,1)" /> + <rect + y="1040.3622" + x="-16" + height="2.0000174" + width="4" + id="rect4159" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(-1,1)" /> + <path + style="fill:#ff7070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 6 3.5 A 3 3 0 0 0 3 6.5 A 3 3 0 0 0 6 9.5 L 7 9.5 L 7 7.5 L 6 7.5 A 1.0000174 1.0000174 0 0 1 5 6.5 A 1.0000174 1.0000174 0 0 1 6 5.5 L 7 5.5 L 7 3.5 L 6 3.5 z " + transform="translate(0,1040.3622)" + id="rect4667" /> + <rect + style="fill:#70bfff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4245" + width="2" + height="2.999984" + x="10" + y="1046.8622" /> + <path + style="fill:#70bfff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 13,1043.8622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4253" + inkscape:connector-curvature="0" /> + <path + style="fill:#7aff70;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 7 1.5 L 7 6.5 A 3 3 0 0 0 10 9.5 L 10 7.5 A 1.0000174 1.0000174 0 0 1 9 6.5 L 9 1.5 L 7 1.5 z " + transform="translate(0,1040.3622)" + id="rect4815" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_dictionary.svg b/tools/editor/icons/source/icon_mini_dictionary.svg new file mode 100644 index 0000000000..813ba97613 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_dictionary.svg @@ -0,0 +1,150 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_dictionary.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254835" + inkscape:cx="4.4726786" + inkscape:cy="6.5768127" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + transform="scale(1,-1)" + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4607" + width="2" + height="4.9999828" + x="13" + y="-1047.3623" /> + <rect + transform="scale(1,-1)" + y="-1046.3623" + x="15" + height="2.0000174" + width="1" + id="rect4609" + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4611" + inkscape:connector-curvature="0" /> + <path + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 11,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4617" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + id="path4621" + d="m 11,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4412" + width="2" + height="3.9999492" + x="6" + y="1046.3623" /> + <rect + y="1042.3623" + x="6" + height="1.9999928" + width="2" + id="rect4432" + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + inkscape:connector-curvature="0" + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 3,1044.362 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4843" /> + <path + id="path4845" + d="m 3,1050.362 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <rect + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4847" + width="2" + height="7.9999843" + x="3" + y="1042.3622" /> + <rect + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4144" + width="1" + height="1.9999928" + x="11" + y="1044.3622" /> + <rect + y="1048.3622" + x="11" + height="1.9999928" + width="1" + id="rect4146" + style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_float.svg b/tools/editor/icons/source/icon_mini_float.svg new file mode 100644 index 0000000000..1007955ea9 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_float.svg @@ -0,0 +1,147 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_float.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254835" + inkscape:cx="5.8021561" + inkscape:cy="5.7934213" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + y="1045.3623" + x="0" + height="4.9999828" + width="2" + id="rect4498" + style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4500" + width="2" + height="2.0000174" + x="2" + y="1046.3623" /> + <path + inkscape:connector-curvature="0" + id="path4502" + d="m 3,1042.3623 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4504" + width="2" + height="5" + x="6" + y="-1047.3622" + transform="scale(1,-1)" /> + <path + inkscape:connector-curvature="0" + id="path4506" + d="m 9,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + y="-1047.3623" + x="12" + height="4.9999828" + width="2" + id="rect4508" + style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(1,-1)" /> + <path + inkscape:connector-curvature="0" + id="path4512" + d="m 15,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#61daf4;fill-opacity:1;stroke:none" + id="rect4142" + width="1" + height="2" + x="9" + y="1048.3622" /> + <rect + y="1044.3622" + x="14" + height="2" + width="2" + id="rect4144" + style="fill:#61daf4;fill-opacity:1;stroke:none" /> + <rect + style="fill:#61daf4;fill-opacity:1;stroke:none" + id="rect4146" + width="1" + height="2" + x="15" + y="1048.3622" /> + <rect + y="1042.3622" + x="3" + height="2" + width="1" + id="rect4148" + style="fill:#61daf4;fill-opacity:1;stroke:none" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_float_array.svg b/tools/editor/icons/source/icon_mini_float_array.svg new file mode 100644 index 0000000000..86807ca731 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_float_array.svg @@ -0,0 +1,133 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_float_array.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="64.000006" + inkscape:cx="5.0069742" + inkscape:cy="7.9592671" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + y="1050.3622" + x="0" + height="2.0000174" + width="4" + id="rect4158" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4160" + width="2" + height="12.000017" + x="0" + y="1040.3622" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4162" + width="4" + height="2.0000174" + x="0" + y="1040.3622" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4170" + width="4" + height="2.0000174" + x="-16" + y="1050.3622" + transform="scale(-1,1)" /> + <rect + y="1040.3622" + x="-16" + height="12.000017" + width="2" + id="rect4172" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(-1,1)" /> + <rect + y="1040.3622" + x="-16" + height="2.0000174" + width="4" + id="rect4175" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(-1,1)" /> + <path + style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 6,1042.3622 a 3,3 0 0 0 -3,3 l 0,5 2,0 0,-2 1,0 0,-2 -1,0 0,-1 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4146" /> + <path + style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 10,1042.3622 0,5 a 3,3 0 0 0 3,3 l 0,-2 a 1.0000174,1.0000174 0 0 1 -1,-1 l 0,-1 1,0 0,-2 -1,0 0,-2 -2,0 z" + id="rect4498" + inkscape:connector-curvature="0" /> + <path + style="fill:#c6f2fb;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 7,1042.3622 0,5 a 3,3 0 0 0 3,3 l 0,-2 a 1.0000174,1.0000174 0 0 1 -1,-1 l 0,-5 -2,0 z" + id="rect4504" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_image.svg b/tools/editor/icons/source/icon_mini_image.svg new file mode 100644 index 0000000000..57faded5c8 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_image.svg @@ -0,0 +1,156 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_image.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="3.9410412" + inkscape:cy="6.0438587" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4412" + width="2" + height="3.9999492" + x="0" + y="1045.3622" /> + <rect + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4414" + width="2" + height="5.9999843" + x="3" + y="1043.3622" /> + <path + inkscape:connector-curvature="0" + id="path4428" + d="m 5,1043.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + y="1046.3622" + x="6" + height="3.0000174" + width="2" + id="rect4430" + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + y="1041.3622" + x="0" + height="1.9999928" + width="2" + id="rect4432" + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + y="1043.3622" + x="6" + height="5.9999843" + width="2" + id="rect4175" + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8,1043.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + id="path4177" + inkscape:connector-curvature="0" /> + <rect + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4179" + width="2" + height="3.0000174" + x="9" + y="1046.3622" /> + <path + inkscape:connector-curvature="0" + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 14,1049.3624 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4843" /> + <path + id="path4845" + d="m 14,1043.3624 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <rect + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4847" + width="2" + height="6.0000014" + x="14" + y="-1049.3622" + transform="scale(1,-1)" /> + <path + inkscape:connector-curvature="0" + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 13,1052.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z" + id="path4408" /> + <rect + style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4410" + width="1" + height="2" + x="12" + y="1050.3622" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_input.svg b/tools/editor/icons/source/icon_mini_input.svg new file mode 100644 index 0000000000..9e966f77d1 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_input.svg @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_input.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="2.8417629" + inkscape:cy="8.0681941" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + id="path4809" + d="m 10,1050.3625 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z" + style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 10,1044.3625 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + id="path4811" /> + <rect + transform="scale(-1,-1)" + y="-1052.3622" + x="-10" + height="7.9999843" + width="2" + id="rect4813" + style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4412" + width="2" + height="3.9999492" + x="0" + y="1046.3625" /> + <rect + style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4414" + width="2" + height="5.9999843" + x="3" + y="1044.3624" /> + <path + inkscape:connector-curvature="0" + id="path4428" + d="m 5,1044.3625 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + y="1047.3624" + x="6" + height="3.0000174" + width="2" + id="rect4430" + style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + y="1042.3625" + x="0" + height="1.9999928" + width="2" + id="rect4432" + style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + transform="scale(1,-1)" + style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4455" + width="2" + height="4.9999828" + x="13" + y="-1047.3625" /> + <rect + transform="scale(1,-1)" + y="-1046.3625" + x="15" + height="2.0000174" + width="1" + id="rect4457" + style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16,1050.3625 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4459" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_int_array.svg b/tools/editor/icons/source/icon_mini_int_array.svg new file mode 100644 index 0000000000..23b086d5e1 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_int_array.svg @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_int_array.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254835" + inkscape:cx="4.3434649" + inkscape:cy="6.0813959" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 0 0 L 0 2 L 0 10 L 0 12 L 2 12 L 4 12 L 4 10 L 2 10 L 2 2 L 4 2 L 4 0 L 0 0 z M 12 0 L 12 2 L 14 2 L 14 10 L 12 10 L 12 12 L 16 12 L 16 10 L 16 2 L 16 0 L 14 0 L 12 0 z " + transform="translate(0,1040.3622)" + id="rect4158" /> + <path + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 3 2 L 3 4 L 5 4 L 5 2 L 3 2 z M 3 6 L 3 10 L 5 10 L 5 6 L 3 6 z " + id="rect4412" + transform="translate(0,1040.3622)" /> + <path + style="fill:#c8e7f9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 5 4 L 5 10 L 7 10 L 7 6 A 1.0000174 1.0000174 0 0 1 8 7 L 8 10 L 10 10 L 10 7 A 3 3 0 0 0 7 4 L 5 4 z " + transform="translate(0,1040.3622)" + id="rect4414" /> + <path + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 10 2 L 10 7 A 3 3 0 0 0 13 10 L 13 8 A 1.0000174 1.0000174 0 0 1 12 7 L 12 6 L 13 6 L 13 4 L 12 4 L 12 2 L 10 2 z " + id="rect4455" + transform="translate(0,1040.3622)" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_integer.svg b/tools/editor/icons/source/icon_mini_integer.svg new file mode 100644 index 0000000000..c21322adb2 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_integer.svg @@ -0,0 +1,143 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_integer.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254837" + inkscape:cx="7.0145943" + inkscape:cy="6.0949691" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4412" + width="2" + height="3.9999492" + x="1" + y="1046.3622" /> + <rect + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4414" + width="2" + height="5.9999843" + x="4" + y="1044.3622" /> + <path + inkscape:connector-curvature="0" + id="path4428" + d="m 7,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + y="1047.3622" + x="8" + height="3.0000174" + width="2" + id="rect4430" + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + y="1042.3622" + x="1" + height="1.9999928" + width="2" + id="rect4432" + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + transform="scale(1,-1)" + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4455" + width="2" + height="4.9999828" + x="12" + y="-1047.3622" /> + <rect + transform="scale(1,-1)" + y="-1046.3622" + x="14" + height="2.0000174" + width="2" + id="rect4457" + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 15,1050.3621 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4459" + inkscape:connector-curvature="0" /> + <rect + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4142" + width="2" + height="1.9999928" + x="5" + y="1044.3622" /> + <rect + style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4144" + width="1" + height="2.0000174" + x="15" + y="-1050.3622" + transform="scale(1,-1)" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_matrix3.svg b/tools/editor/icons/source/icon_mini_matrix3.svg new file mode 100644 index 0000000000..592230d13c --- /dev/null +++ b/tools/editor/icons/source/icon_mini_matrix3.svg @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_matrix3.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="4.071303" + inkscape:cy="4.582959" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 12.00042,1044.3622 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0.226563,-2.5 l -2.824219,0 z" + id="path4753" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + id="path4757" + d="m 12.00042,1046.3622 0,2 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597656,-1.5 z" + style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 3,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + id="path4771" + inkscape:connector-curvature="0" /> + <rect + y="-1050.3622" + x="4" + height="3" + width="2" + id="rect4773" + style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(1,-1)" /> + <rect + style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4775" + width="2" + height="5.9999828" + x="1" + y="-1050.3622" + transform="scale(1,-1)" /> + <rect + transform="scale(1,-1)" + y="-1050.3622" + x="4" + height="5.9999828" + width="2" + id="rect4777" + style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + inkscape:connector-curvature="0" + id="path4779" + d="m 6,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4781" + width="2" + height="3.0000002" + x="7" + y="-1050.3622" + transform="scale(1,-1)" /> + <rect + style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4783" + width="4.0004196" + height="2" + x="11" + y="1043.3622" /> + <rect + y="1050.3622" + x="11" + height="2" + width="1" + id="rect4173" + style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_matrix32.svg b/tools/editor/icons/source/icon_mini_matrix32.svg new file mode 100644 index 0000000000..5159ea0b87 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_matrix32.svg @@ -0,0 +1,145 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_matrix32.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="1.5471383" + inkscape:cy="5.978497" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + style="fill:#ddf4aa;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 8 2 L 8 4 L 9 4 L 10 4 A 1 1 0 0 1 9 5 L 9 7 A 1 1 0 0 1 10 8 A 1 1 0 0 1 9 9 L 8 9 L 8 11 L 9 11 A 3 3 0 0 0 11.597656 9.5 A 3 3 0 0 0 11.597656 6.5 A 3 3 0 0 0 11.232422 5.9980469 A 3 3 0 0 0 11.597656 5.5 A 3 3 0 0 0 11.994141 4 L 12 4 L 12 2 L 9 2 L 8 2 z " + transform="translate(0,1040.3622)" + id="path4753" /> + <rect + y="1048.3622" + x="11" + height="2" + width="5" + id="rect4763" + style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + sodipodi:open="true" + d="m 13,1050.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="2" + sodipodi:rx="2" + sodipodi:cy="1048.3622" + sodipodi:cx="13" + sodipodi:type="arc" + id="path4765" + style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + inkscape:connector-curvature="0" + id="path4767" + d="m 13,1042.3622 0,2 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597656,-1.5 z" + style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 2,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + id="path4771" + inkscape:connector-curvature="0" /> + <rect + y="-1050.3622" + x="3" + height="3" + width="2" + id="rect4773" + style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(1,-1)" /> + <rect + style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4775" + width="2" + height="5.9999828" + x="0" + y="-1050.3622" + transform="scale(1,-1)" /> + <rect + transform="scale(1,-1)" + y="-1050.3622" + x="3" + height="5.9999828" + width="2" + id="rect4777" + style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + inkscape:connector-curvature="0" + id="path4779" + d="m 5,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4781" + width="2" + height="3.0000002" + x="6" + y="-1050.3622" + transform="scale(1,-1)" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_object.svg b/tools/editor/icons/source/icon_mini_object.svg new file mode 100644 index 0000000000..380be34903 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_object.svg @@ -0,0 +1,111 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_object.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254836" + inkscape:cx="1.4141272" + inkscape:cy="5.8428771" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8,1050.3622 a 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 l 0,-2 -2,0 0,8 2,0 z m 0,-2 0,-2 a 1.0000174,1.0000174 0 0 1 1,1 1.0000174,1.0000174 0 0 1 -1,1 z" + id="path4843" + inkscape:connector-curvature="0" /> + <path + id="path4849" + d="m 3,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 3,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4851" /> + <path + style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 15,1044.3622 0,5 a 3,3 0 0 1 -3,3 l 0,-2 a 1.0000174,1.0000174 0 0 0 1,-1 l 0,-5 2,0 z" + id="rect4293-6" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 3,1050.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z" + id="path4174" /> + <path + id="path4176" + d="m 3,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <rect + style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4140" + width="1" + height="2" + x="11" + y="1050.3622" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_path.svg b/tools/editor/icons/source/icon_mini_path.svg new file mode 100644 index 0000000000..ef247b8b8c --- /dev/null +++ b/tools/editor/icons/source/icon_mini_path.svg @@ -0,0 +1,142 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_path.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254835" + inkscape:cx="8.9618505" + inkscape:cy="5.9123718" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + y="-1047.3622" + x="6" + height="4.9999828" + width="2" + id="rect4293" + style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(1,-1)" /> + <rect + style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4295" + width="2" + height="2.0000174" + x="8" + y="-1046.3622" + transform="scale(1,-1)" /> + <path + inkscape:connector-curvature="0" + id="path4297" + d="m 9,1050.3621 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + transform="scale(1,-1)" + style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4299" + width="2" + height="7.9999828" + x="11" + y="-1050.3622" /> + <path + style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 13,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + id="path4301" + inkscape:connector-curvature="0" /> + <rect + transform="scale(1,-1)" + y="-1050.3622" + x="14" + height="3.0000348" + width="2" + id="rect4303" + style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + inkscape:connector-curvature="0" + style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 2,1048.3625 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z" + id="path4461" /> + <path + id="path4463" + d="m 2,1042.3625 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <rect + style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4465" + width="2" + height="7.9999843" + x="-2" + y="-1050.3622" + transform="scale(-1,-1)" /> + <rect + transform="scale(1,-1)" + y="-1050.3622" + x="9" + height="2.0000174" + width="1" + id="rect4143" + style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_plane.svg b/tools/editor/icons/source/icon_mini_plane.svg new file mode 100644 index 0000000000..bc3992cdd6 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_plane.svg @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_plane.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="5.5391662" + inkscape:cy="7.4683409" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + id="path4809" + d="m 3,1048.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z" + style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 3,1042.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + id="path4811" /> + <rect + transform="scale(-1,-1)" + y="-1050.3619" + x="-3" + height="7.9999843" + width="2" + id="rect4813" + style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + transform="scale(1,-1)" + style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4815" + width="2" + height="4.9999828" + x="7" + y="-1047.3623" /> + <path + style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 10,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4819" + inkscape:connector-curvature="0" /> + <rect + y="1044.3622" + x="11" + height="5.9999843" + width="2" + id="rect4324" + style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 13,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + id="path4342" + inkscape:connector-curvature="0" /> + <rect + style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4344" + width="2" + height="3.0000174" + x="14" + y="1047.3622" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_quat.svg b/tools/editor/icons/source/icon_mini_quat.svg new file mode 100644 index 0000000000..27188a3410 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_quat.svg @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_quat.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254836" + inkscape:cx="7.0330887" + inkscape:cy="6.0717303" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + inkscape:connector-curvature="0" + style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 3,1049.3625 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4843" /> + <path + id="path4845" + d="m 3,1043.3625 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <rect + style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4847" + width="2" + height="7.9999843" + x="3" + y="-1051.3622" + transform="scale(1,-1)" /> + <rect + y="-1046.3623" + x="13" + height="4.9999828" + width="2" + id="rect4293-6" + style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(1,-1)" /> + <rect + style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4295-2" + width="1" + height="2.0000174" + x="15" + y="-1045.3623" + transform="scale(1,-1)" /> + <path + inkscape:connector-curvature="0" + id="path4297-9" + d="m 16,1049.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#f298c0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 4,1043.3622 0,3 a 3,3 0 0 0 3,3 l 2,0 0,-6 -2,0 0,4 a 1.0000174,1.0000174 0 0 1 -1,-1 l 0,-3 -2,0 z" + id="rect4366" + inkscape:connector-curvature="0" /> + <path + style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 11 3 A 3 3 0 0 0 8 6 A 3 3 0 0 0 11 9 L 13 9 L 13 3 L 11 3 z M 11 5 L 11 7 A 1.0000174 1.0000174 0 0 1 10 6 A 1.0000174 1.0000174 0 0 1 11 5 z " + transform="translate(0,1040.3622)" + id="path4849" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_raw_array.svg b/tools/editor/icons/source/icon_mini_raw_array.svg new file mode 100644 index 0000000000..cb735b5615 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_raw_array.svg @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_raw_array.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="-2.5947078" + inkscape:cy="7.7867435" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 0 0 L 0 2 L 0 10 L 0 12 L 4 12 L 4 10 L 2 10 L 2 2 L 4 2 L 4 0 L 2 0 L 0 0 z M 12 0 L 12 2 L 14 2 L 14 10 L 12 10 L 12 12 L 16 12 L 16 10 L 16 2 L 16 0 L 14 0 L 12 0 z " + transform="translate(0,1040.3622)" + id="rect4158" /> + <rect + style="fill:#69ec9e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4245" + width="2" + height="2.999984" + x="2" + y="1046.3622" /> + <rect + y="1043.3622" + x="5" + height="2.0000174" + width="1" + id="rect4251" + style="fill:#69ec9e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#69ec9e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 5,1043.3623 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4253" + inkscape:connector-curvature="0" /> + <path + style="fill:#aaf4c8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 6,1049.3622 0,-6 2,0 0,4 a 1.0000174,1.0000174 0 0 0 1,-1 l 0,-3 2,0 0,3 0,1 a 1.0000174,1.0000174 0 0 0 1,-1 l 0,-3 2,0 0,3 a 3,3 0 0 1 -3,3 l -2,0 0,-0.1758 a 3,3 0 0 1 -1,0.1758 l -2,0 z" + id="path4771" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_rect2.svg b/tools/editor/icons/source/icon_mini_rect2.svg new file mode 100644 index 0000000000..ded27f049f --- /dev/null +++ b/tools/editor/icons/source/icon_mini_rect2.svg @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_rect2.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000002" + inkscape:cx="2.7000496" + inkscape:cy="5.1067461" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + y="1047.3622" + x="0" + height="2.999984" + width="2" + id="rect4601" + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + inkscape:connector-curvature="0" + id="path4605" + d="m 3,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + transform="scale(1,-1)" + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4607" + width="2" + height="4.9999828" + x="13" + y="-1047.3622" /> + <rect + transform="scale(1,-1)" + y="-1046.3622" + x="15" + height="2.0000174" + width="1" + id="rect4609" + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16,1050.3621 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4611" + inkscape:connector-curvature="0" /> + <path + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 7,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4617" + inkscape:connector-curvature="0" /> + <rect + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4619" + width="1" + height="2.0000174" + x="7" + y="-1050.3622" + transform="scale(1,-1)" /> + <path + inkscape:connector-curvature="0" + id="path4621" + d="m 7,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4144" + width="1" + height="2.0000174" + x="12" + y="1044.3622" /> + <path + inkscape:connector-curvature="0" + id="path4146" + d="m 12,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + transform="scale(1,-1)" + y="-1050.3622" + x="12" + height="2.0000174" + width="1" + id="rect4148" + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 12,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4150" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + id="path4152" + d="m 7,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4154" + width="2" + height="1" + x="6" + y="1046.3622" /> + <rect + style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4156" + width="1" + height="2.0000174" + x="3" + y="-1046.3622" + transform="scale(1,-1)" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_rid.svg b/tools/editor/icons/source/icon_mini_rid.svg new file mode 100644 index 0000000000..6df13ae43d --- /dev/null +++ b/tools/editor/icons/source/icon_mini_rid.svg @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_rid.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254836" + inkscape:cx="8.577775" + inkscape:cy="6.6679205" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="false" + inkscape:snap-smooth-nodes="false" + inkscape:snap-nodes="true" + inkscape:snap-midpoints="false"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4245" + width="2" + height="2.999984" + x="1" + y="1047.3622" /> + <rect + y="1042.3623" + x="7" + height="1.9998953" + width="2" + id="rect4247" + style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4249" + width="2" + height="4.0000014" + x="7" + y="1046.3622" /> + <rect + y="1044.3622" + x="4" + height="2.0000174" + width="1" + id="rect4251" + style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 4,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4253" + inkscape:connector-curvature="0" /> + <path + id="path4260" + d="m 13,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 13,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4262" /> + <rect + y="1042.3622" + x="14" + height="7.9999843" + width="2" + id="rect4264" + style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4142" + width="1" + height="2.0000174" + x="13" + y="1044.3622" /> + <rect + y="1048.3622" + x="13" + height="2.0000174" + width="1" + id="rect4144" + style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_string.svg b/tools/editor/icons/source/icon_mini_string.svg new file mode 100644 index 0000000000..a655f70d33 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_string.svg @@ -0,0 +1,236 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_string.svg"> + <defs + id="defs4"> + <clipPath + id="clipPath4253" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4255" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4199" + clipPathUnits="userSpaceOnUse"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + id="path4201" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4392"> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + id="path4394" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + id="clipPath4196" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4198" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4253-75" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4255-3" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4199-5" + clipPathUnits="userSpaceOnUse"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + id="path4201-6" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4392-2"> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + id="path4394-9" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + id="clipPath4196-1" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4198-2" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4253-7" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4255-5" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4199-3" + clipPathUnits="userSpaceOnUse"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + id="path4201-5" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4392-6"> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + id="path4394-2" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + id="clipPath4196-9" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4198-1" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32" + inkscape:cx="10.223117" + inkscape:cy="7.0200789" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 5,1042.3622 a 3,3 0 0 0 -3,3 l 0,2 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 3,-3 l 0,-2 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4534" + inkscape:connector-curvature="0" /> + <rect + transform="scale(1,-1)" + style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4540" + width="2" + height="4.9999828" + x="7" + y="-1047.3623" /> + <rect + transform="scale(1,-1)" + y="-1046.3623" + x="9" + height="2.0000174" + width="2" + id="rect4542" + style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 10,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4544" + inkscape:connector-curvature="0" /> + <path + style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 15 4 A 3 3 0 0 0 12 7 L 12 10 L 14 10 L 14 7 A 1.0000174 1.0000174 0 0 1 15 6 L 16 6 L 16 4 L 15 4 z " + transform="translate(0,1040.3622)" + id="rect4245-5" /> + <rect + style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4208" + width="1" + height="2" + x="0" + y="1048.3622" /> + <rect + y="1042.3622" + x="5" + height="2" + width="1" + id="rect4210" + style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4165" + width="1" + height="2.0000174" + x="10" + y="-1050.3622" + transform="scale(1,-1)" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_string_array.svg b/tools/editor/icons/source/icon_mini_string_array.svg new file mode 100644 index 0000000000..cd2e850c49 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_string_array.svg @@ -0,0 +1,289 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_string_array.svg"> + <defs + id="defs4"> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4253"> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + id="path4255" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4199"> + <path + inkscape:connector-curvature="0" + id="path4201" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4392" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4394" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4196"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + id="path4198" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4253-7"> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + id="path4255-5" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4199-3"> + <path + inkscape:connector-curvature="0" + id="path4201-5" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4392-6" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4394-2" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4196-9"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + id="path4198-1" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4253-753"> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + id="path4255-56" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4199-2"> + <path + inkscape:connector-curvature="0" + id="path4201-9" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4392-1" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4394-27" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4196-0"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + id="path4198-9" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4253-75"> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + id="path4255-3" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4199-5"> + <path + inkscape:connector-curvature="0" + id="path4201-6" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4392-2" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4394-9" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4196-1"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + id="path4198-2" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4253-7-3"> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z" + id="path4255-5-6" + inkscape:connector-curvature="0" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4199-3-0"> + <path + inkscape:connector-curvature="0" + id="path4201-5-6" + d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </clipPath> + <clipPath + id="clipPath4392-6-2" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path4394-2-6" + d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </clipPath> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath4196-9-1"> + <path + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z" + id="path4198-1-8" + inkscape:connector-curvature="0" /> + </clipPath> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="45.254838" + inkscape:cx="8.8695857" + inkscape:cy="6.6197" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 0 0 L 0 2 L 0 10 L 0 12 L 2 12 L 4 12 L 4 10 L 2 10 L 2 2 L 4 2 L 4 0 L 2 0 L 0 0 z M 12 0 L 12 2 L 14 2 L 14 10 L 12 10 L 12 12 L 16 12 L 16 10 L 16 0 L 12 0 z " + transform="translate(0,1040.3622)" + id="rect4158" /> + <path + style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 7,1042.3622 a 3,3 0 0 0 -3,3 l 0,2 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 3,-3 l 0,-2 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4184" + inkscape:connector-curvature="0" /> + <path + style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 14,1044.3622 a 3,3 0 0 0 -3,3 l 0,3 2,0 0,-3 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4534" + inkscape:connector-curvature="0" /> + <path + style="fill:#b5d3f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8,1042.3622 0,5 a 3,3 0 0 0 3,3 l 0,-2 a 1.0000174,1.0000174 0 0 1 -1,-1 l 0,-1 1,0 0,-2 -1,0 0,-2 -2,0 z" + id="rect4540" + inkscape:connector-curvature="0" /> + <rect + style="fill:#6ba7ec;fill-opacity:1;stroke:none" + id="rect4184" + width="1" + height="2" + x="7" + y="1042.3622" /> + <rect + y="1048.3622" + x="2" + height="2" + width="1" + id="rect4186" + style="fill:#6ba7ec;fill-opacity:1;stroke:none" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_transform.svg b/tools/editor/icons/source/icon_mini_transform.svg new file mode 100644 index 0000000000..6da4eb806d --- /dev/null +++ b/tools/editor/icons/source/icon_mini_transform.svg @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_transform.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32" + inkscape:cx="8.2643591" + inkscape:cy="7.6152896" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + style="fill:#f6a86e;fill-opacity:1;stroke:none;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 4,1042.3622 3.0917969,1044.5438 2,1042.3622 l -2,0 2,4 -2,4 2,0 0.9082031,-2.1816 L 4,1050.3622 l 2,0 -2,-4 2,-4 z" + id="rect4214" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccccccccc" /> + <path + style="fill:#f8bf95;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 9,1042.3622 a 3,3 0 0 0 -3,3 l 0,5 2,0 0,-2 1,0 0,-2 -1,0 0,-1 a 1.0000174,1.0000174 0 0 1 1,-1 l 1,0 0,-2 -1,0 z" + id="rect4455" + inkscape:connector-curvature="0" /> + <path + style="fill:#f6a86e;fill-opacity:1;stroke:none;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 10 4 L 10 6 L 10 8 L 10 10 L 12 10 L 12 8 L 13 9 L 14 8 L 14 10 L 16 10 L 16 8 L 16 6 L 16 4 L 14 4 L 13 6 L 12 4 L 10 4 z " + transform="translate(0,1040.3622)" + id="rect4231" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_variant.svg b/tools/editor/icons/source/icon_mini_variant.svg new file mode 100644 index 0000000000..6883baa584 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_variant.svg @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_variant.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="5.8864792" + inkscape:cy="6.2518921" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + y="1044.3622" + x="3" + height="5.9999666" + width="2" + id="rect4320" + style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + y="1044.3622" + x="6" + height="5.9999843" + width="2" + id="rect4324" + style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4326" + width="1" + height="2.0000174" + x="3" + y="1044.3622" /> + <path + inkscape:connector-curvature="0" + id="path4328" + d="m 3,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + inkscape:connector-curvature="0" + style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 14,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4330" /> + <rect + style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4334" + width="2" + height="7.9999843" + x="14" + y="-1052.3622" + transform="scale(1,-1)" /> + <rect + style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4338" + width="2" + height="2.9999826" + x="11" + y="-1047.3622" + transform="scale(1,-1)" /> + <path + style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 3,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4340" + inkscape:connector-curvature="0" /> + <path + style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z" + id="path4342" + inkscape:connector-curvature="0" /> + <rect + style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4344" + width="2" + height="3.0000174" + x="9" + y="1047.3622" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_vector2.svg b/tools/editor/icons/source/icon_mini_vector2.svg new file mode 100644 index 0000000000..5c9aaeccff --- /dev/null +++ b/tools/editor/icons/source/icon_mini_vector2.svg @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_vector2.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="-0.61809703" + inkscape:cy="8.3891446" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 3,1050.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z" + id="path4301" + inkscape:connector-curvature="0" /> + <rect + y="1044.3622" + x="4" + height="3" + width="2" + id="rect4303" + style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#dcc5f8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4159" + width="5" + height="2" + x="11" + y="1048.3622" /> + <rect + style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4661" + width="2" + height="5.9999828" + x="1" + y="1044.3622" /> + <rect + style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4667" + width="1" + height="2.0000174" + x="9" + y="1044.3622" /> + <path + inkscape:connector-curvature="0" + id="path4669" + d="m 9,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + transform="scale(1,-1)" + y="-1050.3622" + x="9" + height="2.0000174" + width="1" + id="rect4671" + style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 9,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + id="path4673" + inkscape:connector-curvature="0" /> + <path + style="fill:#dcc5f8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4677" + sodipodi:type="arc" + sodipodi:cx="13" + sodipodi:cy="1048.3622" + sodipodi:rx="2" + sodipodi:ry="2" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m 13,1050.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1" + sodipodi:open="true" /> + <path + style="fill:#dcc5f8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 13,1042.3622 0,2 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597656,-1.5 z" + id="path4679" + inkscape:connector-curvature="0" /> + <rect + y="1042.3622" + x="12" + height="2" + width="1" + id="rect4684" + style="fill:#dcc5f8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_vector2_array.svg b/tools/editor/icons/source/icon_mini_vector2_array.svg new file mode 100644 index 0000000000..03850f7c86 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_vector2_array.svg @@ -0,0 +1,129 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_vector2_array.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="7.5779741" + inkscape:cy="8.910903" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + y="1050.3622" + x="0" + height="2.0000174" + width="4" + id="rect4158" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4160" + width="2" + height="12.000017" + x="0" + y="1040.3622" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4162" + width="4" + height="2.0000174" + x="0" + y="1040.3622" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4170" + width="4" + height="2.0000174" + x="-16" + y="1050.3622" + transform="scale(-1,1)" /> + <rect + y="1040.3622" + x="-16" + height="12.000017" + width="2" + id="rect4172" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(-1,1)" /> + <rect + y="1040.3622" + x="-16" + height="2.0000174" + width="4" + id="rect4175" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(-1,1)" /> + <path + style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 3 3 L 3 9 L 5 9 A 3 3 0 0 0 8 6 L 8 3 L 6 3 L 6 6 A 1.0000174 1.0000174 0 0 1 5 7 L 5 3 L 3 3 z " + transform="translate(0,1040.3622)" + id="path4301" /> + <path + style="fill:#dcc5f8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8.9999969,1042.3622 0,2 1.0000001,0 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 2,2 0 0 0 -1.732422,1 2,2 0 0 0 -0.265625,1 l -0.00195,0 0,0.047 0,1.9531 2,0 3,0 0,-2 -3,0 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597659,-1.5001 l -1.0000001,0 z" + id="rect4159" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_vector3.svg b/tools/editor/icons/source/icon_mini_vector3.svg new file mode 100644 index 0000000000..e99a211ae0 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_vector3.svg @@ -0,0 +1,142 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_vector3.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000002" + inkscape:cx="5.3282118" + inkscape:cy="6.0229362" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <path + inkscape:connector-curvature="0" + id="path4705" + d="m 3.0004202,1050.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z" + style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4707" + width="2" + height="3" + x="4.0004206" + y="1044.3622" /> + <rect + y="1044.3622" + x="1.0004202" + height="5.9999828" + width="2" + id="rect4711" + style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + y="1044.3622" + x="9.0004196" + height="2.0000174" + width="1" + id="rect4713" + style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 9.0004202,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z" + id="path4715" + inkscape:connector-curvature="0" /> + <rect + style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4717" + width="1" + height="2.0000174" + x="9.0004196" + y="-1050.3622" + transform="scale(1,-1)" /> + <path + inkscape:connector-curvature="0" + id="path4719" + d="m 9.0004202,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z" + style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:#eeb9f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 13 2 L 13 3 A 1 1 0 0 1 14 4 A 1 1 0 0 1 13 5 L 13 7 A 3 3 0 0 0 15.597656 5.5 A 3 3 0 0 0 15.597656 2.5 A 3 3 0 0 0 15.234375 2 L 13 2 z " + transform="translate(0,1040.3622)" + id="path4723" /> + <rect + style="fill:#eeb9f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4725" + width="3.9995804" + height="2" + x="12.00042" + y="1042.3622" /> + <path + style="fill:#eeb9f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 13.00042,1045.3622 0,2 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597656,-1.5 z" + id="path4727" + inkscape:connector-curvature="0" /> + <rect + y="1049.3622" + x="12.00042" + height="2" + width="1" + id="rect4729" + style="fill:#eeb9f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_mini_vector3_array.svg b/tools/editor/icons/source/icon_mini_vector3_array.svg new file mode 100644 index 0000000000..bbac554614 --- /dev/null +++ b/tools/editor/icons/source/icon_mini_vector3_array.svg @@ -0,0 +1,129 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="12" + viewBox="0 0 16 12" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_mini_vector3_array.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="4.9242706" + inkscape:cy="8.3355467" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1040.3622)"> + <rect + y="1050.3622" + x="0" + height="2.0000174" + width="4" + id="rect4158" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4160" + width="2" + height="12.000017" + x="0" + y="1040.3622" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4162" + width="4" + height="2.0000174" + x="0" + y="1040.3622" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4170" + width="4" + height="2.0000174" + x="-16" + y="1050.3622" + transform="scale(-1,1)" /> + <rect + y="1040.3622" + x="-16" + height="12.000017" + width="2" + id="rect4172" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(-1,1)" /> + <rect + y="1040.3622" + x="-16" + height="2.0000174" + width="4" + id="rect4175" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(-1,1)" /> + <path + style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 3 3 L 3 9 L 5 9 A 3 3 0 0 0 8 6 L 8 3 L 6 3 L 6 6 A 1.0000174 1.0000174 0 0 1 5 7 L 5 3 L 3 3 z " + transform="translate(0,1040.3622)" + id="path4705" /> + <path + style="fill:#eeb9f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 8 1 L 8 3 L 9 3 L 10 3 A 1 1 0 0 1 9 4 L 9 6 A 1 1 0 0 1 10 7 A 1 1 0 0 1 9 8 L 8 8 L 8 10 L 9 10 A 3 3 0 0 0 11.597656 8.5 A 3 3 0 0 0 11.597656 5.5 A 3 3 0 0 0 11.232422 4.9980469 A 3 3 0 0 0 11.597656 4.5 A 3 3 0 0 0 11.996094 3 L 12 3 L 12 1 L 11.234375 1 L 9 1 L 8 1 z " + transform="translate(0,1040.3622)" + id="path4723" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_override.svg b/tools/editor/icons/source/icon_override.svg new file mode 100644 index 0000000000..b7948c531c --- /dev/null +++ b/tools/editor/icons/source/icon_override.svg @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + viewBox="0 0 16 16" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" + sodipodi:docname="icon_override.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="22.627417" + inkscape:cx="9.4650176" + inkscape:cy="7.2694249" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:snap-smooth-nodes="true" + inkscape:object-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" + empspacing="4" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1036.3622)"> + <path + style="fill:#f3f3f3;fill-opacity:1;stroke:#e4e4e4;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4135" + r="3" + cy="1041.3622" + cx="4" /> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 5 1 C 3.8919904 1 3 1.8919904 3 3 L 3 4 L 7 4 L 7 3 L 9 3 L 9 4 L 13 4 L 13 3 C 13 1.8919904 12.10801 1 11 1 L 5 1 z " + transform="translate(0,1036.3622)" + id="rect4212" /> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 3 6 C 1.8919904 6 1 6.8919904 1 8 L 1 13 C 1 14.10801 1.8919904 15 3 15 L 13 15 C 14.10801 15 15 14.10801 15 13 L 15 8 C 15 6.8919904 14.10801 6 13 6 L 9 6 L 9 9 L 11 9 L 8 13 L 5 9 L 7 9 L 7 6 L 3 6 z " + transform="translate(0,1036.3622)" + id="rect4214" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_ray_shape_2d.svg b/tools/editor/icons/source/icon_ray_shape_2d.svg index e6ac9c40fa..7ffc2ff3b5 100644 --- a/tools/editor/icons/source/icon_ray_shape_2d.svg +++ b/tools/editor/icons/source/icon_ray_shape_2d.svg @@ -1,22 +1,89 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" viewBox="0 0 16 16" id="svg2" version="1.1" inkscape:version="0.91 r13725" inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" sodipodi:docname="icon_ray_shape_2d.svg"> - <defs id="defs4" /> - <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1" inkscape:cx="-0.53108971" inkscape:cy="10.128279" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" units="px" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:snap-object-midpoints="true" inkscape:snap-center="true" inkscape:window-width="1920" inkscape:window-height="1055" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:object-paths="true" inkscape:snap-intersection-paths="true" inkscape:object-nodes="true" inkscape:snap-smooth-nodes="true" inkscape:snap-midpoints="true"> - <inkscape:grid type="xygrid" id="grid3336" /> - </sodipodi:namedview> - <metadata id="metadata7"> - <rdf:RDF> - <cc:Work rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1036.3622)"> - <path style="fill:none;fill-rule:evenodd;stroke:#a5b7f3;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.98823529" d="m 8,1038.3622 0,12" id="path4203" inkscape:connector-curvature="0" sodipodi:nodetypes="cc" /> - <path sodipodi:nodetypes="ccc" inkscape:connector-curvature="0" id="path4224" d="m 5,1047.3622 3,3 3,-3" style="fill:none;fill-rule:evenodd;stroke:#a5b7f3;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.98823529" /> - </g> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + viewBox="0 0 16 16" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" + sodipodi:docname="icon_ray_shape_2d.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="16" + inkscape:cx="-3.626492" + inkscape:cy="10.256723" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-paths="true" + inkscape:snap-intersection-paths="true" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true" + inkscape:snap-midpoints="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1036.3622)"> + <path + style="fill:none;fill-rule:evenodd;stroke:#68b6ff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8,1038.3622 0,12" + id="path4203" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="ccc" + inkscape:connector-curvature="0" + id="path4224" + d="m 5,1047.3622 3,3 3,-3" + style="fill:none;fill-rule:evenodd;stroke:#68b6ff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </g> </svg> diff --git a/tools/editor/icons/source/icon_rectangle_shape_2d.svg b/tools/editor/icons/source/icon_rectangle_shape_2d.svg index dd0941fe85..d362944e7a 100644 --- a/tools/editor/icons/source/icon_rectangle_shape_2d.svg +++ b/tools/editor/icons/source/icon_rectangle_shape_2d.svg @@ -1,21 +1,86 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" viewBox="0 0 16 16" id="svg2" version="1.1" inkscape:version="0.91 r13725" inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" sodipodi:docname="icon_rectangle_shape_2d.svg"> - <defs id="defs4" /> - <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="52.6875" inkscape:cx="8" inkscape:cy="8" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" units="px" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:snap-object-midpoints="true" inkscape:snap-center="true" inkscape:window-width="1920" inkscape:window-height="1055" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:object-paths="true" inkscape:snap-intersection-paths="true" inkscape:object-nodes="true" inkscape:snap-smooth-nodes="true" inkscape:snap-midpoints="true"> - <inkscape:grid type="xygrid" id="grid3336" /> - </sodipodi:namedview> - <metadata id="metadata7"> - <rdf:RDF> - <cc:Work rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1036.3622)"> - <rect style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:0.98823529;fill-rule:evenodd;stroke:#a5b7f3;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.98823529;marker:none;enable-background:accumulate" id="rect4226" width="12" height="7.9999824" x="2" y="1040.3622" rx="1.7382812e-05" ry="1.7382812e-05" /> - </g> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + viewBox="0 0 16 16" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" + sodipodi:docname="icon_rectangle_shape_2d.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="52.6875" + inkscape:cx="4.6595492" + inkscape:cy="7.9620403" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-paths="true" + inkscape:snap-intersection-paths="true" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true" + inkscape:snap-midpoints="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1036.3622)"> + <rect + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:0.98823529;fill-rule:evenodd;stroke:#68b6ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" + id="rect4226" + width="12" + height="7.9999824" + x="2" + y="1040.3622" + rx="1.7382812e-05" + ry="1.7382812e-05" /> + </g> </svg> diff --git a/tools/editor/icons/source/icon_segment_shape_2d.svg b/tools/editor/icons/source/icon_segment_shape_2d.svg index 99c8f80e9b..b509a31362 100644 --- a/tools/editor/icons/source/icon_segment_shape_2d.svg +++ b/tools/editor/icons/source/icon_segment_shape_2d.svg @@ -1,21 +1,82 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" viewBox="0 0 16 16" id="svg2" version="1.1" inkscape:version="0.91 r13725" inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" sodipodi:docname="icon_segment_shape_2d.svg"> - <defs id="defs4" /> - <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="52.6875" inkscape:cx="8" inkscape:cy="8" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" units="px" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:snap-object-midpoints="true" inkscape:snap-center="true" inkscape:window-width="1920" inkscape:window-height="1055" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:object-paths="true" inkscape:snap-intersection-paths="true" inkscape:object-nodes="true" inkscape:snap-smooth-nodes="true" inkscape:snap-midpoints="true"> - <inkscape:grid type="xygrid" id="grid3336" /> - </sodipodi:namedview> - <metadata id="metadata7"> - <rdf:RDF> - <cc:Work rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1036.3622)"> - <path style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#a4b6f2;fill-opacity:1;fill-rule:evenodd;stroke:#a5b7f4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.98823529;marker:none;enable-background:accumulate" d="m 2,1050.3622 12,-12" id="path4268" inkscape:connector-curvature="0" /> - </g> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + viewBox="0 0 16 16" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" + sodipodi:docname="icon_segment_shape_2d.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="52.6875" + inkscape:cx="5.5326216" + inkscape:cy="8.6453144" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:object-paths="true" + inkscape:snap-intersection-paths="true" + inkscape:object-nodes="true" + inkscape:snap-smooth-nodes="true" + inkscape:snap-midpoints="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1036.3622)"> + <path + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#68b6ff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" + d="m 2,1050.3622 12,-12" + id="path4268" + inkscape:connector-curvature="0" /> + </g> </svg> diff --git a/tools/editor/icons/source/icon_snap.svg b/tools/editor/icons/source/icon_snap.svg index 04059eb6a2..321dedf6b6 100644 --- a/tools/editor/icons/source/icon_snap.svg +++ b/tools/editor/icons/source/icon_snap.svg @@ -29,8 +29,8 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="30.700696" - inkscape:cx="6.9452673" - inkscape:cy="8.3355658" + inkscape:cx="3.5856659" + inkscape:cy="9.0785551" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -46,7 +46,8 @@ inkscape:window-height="1016" inkscape:window-x="0" inkscape:window-y="27" - inkscape:window-maximized="1"> + inkscape:window-maximized="1" + showguides="false"> <inkscape:grid type="xygrid" id="grid3336" /> @@ -59,7 +60,7 @@ <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> + <dc:title /> </cc:Work> </rdf:RDF> </metadata> @@ -69,37 +70,42 @@ id="layer1" transform="translate(0,-1036.3622)"> <path - style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="M 8 1 A 7 7 0 0 0 1 8 L 4 8 A 4.0000172 4.0000172 0 0 1 8 4 A 4.0000172 4.0000172 0 0 1 12 8 L 15 8 A 7 7 0 0 0 8 1 z " - transform="translate(0,1036.3622)" - id="path4137" /> - <rect - style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4156" - width="3" - height="3.0000174" - x="1" - y="1048.3622" /> + style="fill:#f3f3f3;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 3,1036.3622 0,3 -3,0 0,2 3,0 0,4 -3,0 0,2 3,0 0,3 2,0 0,-3 0,-2 0,-4 4,0 2,0 3,0 0,-2 -3,0 0,-3 -2,0 0,3 -4,0 0,-3 -2,0 z" + id="rect4139" + inkscape:connector-curvature="0" /> + <path + style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 11,1043.3622 a 4,4 0 0 0 -4,4 l 2,0 a 2.0000174,2.0000174 0 0 1 2,-2 2.0000174,2.0000174 0 0 1 2,2 l 2,0 a 4,4 0 0 0 -4,-4 z" + id="path4151" + inkscape:connector-curvature="0" /> <rect - style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" - id="rect4158" - width="3" - height="4" - x="1" - y="1044.3622" /> + style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4155" + width="2" + height="2" + x="7" + y="1047.3622" /> <rect - y="1044.3622" - x="12" - height="4" - width="3" - id="rect4160" - style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" /> + y="1047.3622" + x="13" + height="2" + width="2" + id="rect4157" + style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> <rect - y="1048.3622" - x="12" - height="3.0000174" - width="3" - id="rect4162" + y="1049.3622" + x="7" + height="2.0000174" + width="2" + id="rect4161" style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <rect + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4163" + width="2" + height="2.0000174" + x="13" + y="1049.3622" /> </g> </svg> diff --git a/tools/editor/icons/source/icon_visual_script.svg b/tools/editor/icons/source/icon_visual_script.svg new file mode 100644 index 0000000000..be4b47ca54 --- /dev/null +++ b/tools/editor/icons/source/icon_visual_script.svg @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + viewBox="0 0 16 16" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item_shader_graph.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" + sodipodi:docname="icon_visual_script.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="15.999999" + inkscape:cx="2.7930637" + inkscape:cy="10.792256" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:snap-smooth-nodes="true" + inkscape:object-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1036.3622)"> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 3 1 A 2 2 0 0 0 1 3 A 2 2 0 0 0 2 4.7304688 L 2 11.271484 A 2 2 0 0 0 1 13 A 2 2 0 0 0 3 15 A 2 2 0 0 0 5 13 A 2 2 0 0 0 4 11.269531 L 4 5.4140625 L 6.2929688 7.7070312 L 7.7070312 6.2929688 L 5.4140625 4 L 11.271484 4 A 2 2 0 0 0 13 5 A 2 2 0 0 0 15 3 A 2 2 0 0 0 13 1 A 2 2 0 0 0 11.269531 2 L 4.7285156 2 A 2 2 0 0 0 3 1 z " + transform="translate(0,1036.3622)" + id="path4198" /> + <ellipse + r="2" + style="opacity:1;fill:#6e6e6e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="ellipse4152" + cx="3" + cy="1039.3622" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" + d="m 11,1050.3622 3,-3 -3,-3" + id="path3378" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + </g> +</svg> diff --git a/tools/editor/icons/source/icon_visual_shader_port.svg b/tools/editor/icons/source/icon_visual_shader_port.svg new file mode 100644 index 0000000000..9e80e0e9e9 --- /dev/null +++ b/tools/editor/icons/source/icon_visual_shader_port.svg @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="10" + height="10" + viewBox="0 0 10 10" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45" + sodipodi:docname="icon_visual_shader_port.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32.000001" + inkscape:cx="-0.97644929" + inkscape:cy="7.6043186" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="false" + inkscape:snap-object-midpoints="true" + inkscape:snap-center="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:snap-smooth-nodes="true" + inkscape:object-nodes="true"> + <inkscape:grid + type="xygrid" + id="grid3336" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1042.3622)"> + <path + style="fill:#f3f3f3;fill-rule:evenodd;stroke:#e4e4e4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" + d="m 2,1051.3622 0,-8 6,4 z" + id="path4135" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + </g> +</svg> diff --git a/tools/editor/io_plugins/editor_bitmask_import_plugin.cpp b/tools/editor/io_plugins/editor_bitmask_import_plugin.cpp index dca7d011ff..757d2ed5d4 100644 --- a/tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +++ b/tools/editor/io_plugins/editor_bitmask_import_plugin.cpp @@ -147,7 +147,7 @@ public: dst = dst.plus_file(bitmasks[i].get_file().basename() + ".pbm"); - Error err = plugin->import(dst, imd); + plugin->import(dst, imd); } hide(); diff --git a/tools/editor/io_plugins/editor_font_import_plugin.cpp b/tools/editor/io_plugins/editor_font_import_plugin.cpp index 70bc44ba7d..df3741f0d4 100644 --- a/tools/editor/io_plugins/editor_font_import_plugin.cpp +++ b/tools/editor/io_plugins/editor_font_import_plugin.cpp @@ -100,7 +100,7 @@ public: bool color_use_monochrome; String gradient_image; - bool disable_filter; + bool enable_filter; bool round_advance; bool premultiply_alpha; @@ -166,8 +166,8 @@ public: color_use_monochrome=p_value; else if (n=="advanced/round_advance") round_advance=p_value; - else if (n=="advanced/disable_filter") - disable_filter=p_value; + else if (n=="advanced/enable_filter") + enable_filter=p_value; else if (n=="advanced/premultiply_alpha") premultiply_alpha=p_value; else @@ -236,8 +236,8 @@ public: r_ret=color_use_monochrome; else if (n=="advanced/round_advance") r_ret=round_advance; - else if (n=="advanced/disable_filter") - r_ret=disable_filter; + else if (n=="advanced/enable_filter") + r_ret=enable_filter; else if (n=="advanced/premultiply_alpha") r_ret=premultiply_alpha; else @@ -301,7 +301,7 @@ public: } p_list->push_back(PropertyInfo(Variant::BOOL,"advanced/round_advance")); - p_list->push_back(PropertyInfo(Variant::BOOL,"advanced/disable_filter")); + p_list->push_back(PropertyInfo(Variant::BOOL,"advanced/enable_filter")); p_list->push_back(PropertyInfo(Variant::BOOL,"advanced/premultiply_alpha")); } @@ -341,7 +341,7 @@ public: font_mode=FONT_BITMAP; round_advance=true; - disable_filter=false; + enable_filter=true; premultiply_alpha=false; } @@ -374,7 +374,7 @@ public: color_use_monochrome=false; round_advance=true; - disable_filter=false; + enable_filter=true; premultiply_alpha=false; } @@ -1591,7 +1591,10 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe int space_space = from->get_option("extra_space/space"); int top_space = from->get_option("extra_space/top"); int bottom_space = from->get_option("extra_space/bottom"); - bool disable_filter = from->get_option("advanced/disable_filter"); + bool enable_filter = from->get_option("advanced/enable_filter"); + if (from->has_option("advanced/disable_filter")){ // this is a compatibility check for a deprecated option + enable_filter = !from->get_option("advanced/disable_filter"); + } Ref<BitmapFont> font; @@ -1613,7 +1616,7 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe { Ref<ImageTexture> t = memnew(ImageTexture); int flags; - if (disable_filter) + if (!enable_filter) flags=0; else flags=Texture::FLAG_FILTER; diff --git a/tools/editor/io_plugins/editor_mesh_import_plugin.cpp b/tools/editor/io_plugins/editor_mesh_import_plugin.cpp index 2c3ed2afd6..da608292c1 100644 --- a/tools/editor/io_plugins/editor_mesh_import_plugin.cpp +++ b/tools/editor/io_plugins/editor_mesh_import_plugin.cpp @@ -496,7 +496,6 @@ Error EditorMeshImportPlugin::import(const String& p_path, const Ref<ResourceImp } int vtx = face[idx][0].to_int()-1; - print_line("vtx: "+itos(vtx)+"/"+itos(vertices.size())); ERR_FAIL_INDEX_V(vtx,vertices.size(),ERR_PARSE_ERROR); Vector3 vertex = vertices[vtx]; diff --git a/tools/editor/io_plugins/editor_sample_import_plugin.cpp b/tools/editor/io_plugins/editor_sample_import_plugin.cpp index ac0795f522..7dc74e58dd 100644 --- a/tools/editor/io_plugins/editor_sample_import_plugin.cpp +++ b/tools/editor/io_plugins/editor_sample_import_plugin.cpp @@ -298,7 +298,7 @@ public: dst = dst.plus_file(samples[i].get_file().basename()+".smp"); - Error err = plugin->import(dst,imd); + plugin->import(dst,imd); } hide(); diff --git a/tools/editor/io_plugins/editor_scene_import_plugin.cpp b/tools/editor/io_plugins/editor_scene_import_plugin.cpp index fa62283e37..190b56faba 100644 --- a/tools/editor/io_plugins/editor_scene_import_plugin.cpp +++ b/tools/editor/io_plugins/editor_scene_import_plugin.cpp @@ -1447,6 +1447,7 @@ void EditorSceneImportPlugin::_find_resources(const Variant& p_var, Map<Ref<Imag } } break; + default: {} } @@ -2325,7 +2326,7 @@ void EditorSceneImportPlugin::_filter_tracks(Node *scene, const String& p_text) if (!scene->has_node(String("AnimationPlayer"))) return; - Node* n = scene->get_node(String("AnimationPlayer")); + Node* n = scene->get_node(String("AnimationPlayer")); ERR_FAIL_COND(!n); AnimationPlayer *anim = n->cast_to<AnimationPlayer>(); ERR_FAIL_COND(!anim); @@ -2443,7 +2444,7 @@ void EditorSceneImportPlugin::_optimize_animations(Node *scene, float p_max_lin_ if (!scene->has_node(String("AnimationPlayer"))) return; - Node* n = scene->get_node(String("AnimationPlayer")); + Node* n = scene->get_node(String("AnimationPlayer")); ERR_FAIL_COND(!n); AnimationPlayer *anim = n->cast_to<AnimationPlayer>(); ERR_FAIL_COND(!anim); @@ -2842,7 +2843,7 @@ Error EditorSceneImportPlugin::import2(Node *scene, const String& p_dest_path, c } } - Error err = EditorTextureImportPlugin::get_singleton()->import(target_path,imd); + EditorTextureImportPlugin::get_singleton()->import(target_path,imd); } } diff --git a/tools/editor/plugins/baked_light_baker.cpp b/tools/editor/plugins/baked_light_baker.cpp index 6a88ba4cbe..f43bec1cd3 100644 --- a/tools/editor/plugins/baked_light_baker.cpp +++ b/tools/editor/plugins/baked_light_baker.cpp @@ -1177,8 +1177,6 @@ float BakedLightBaker::_throw_ray(ThreadStack& thread_stack,bool p_bake_direct,c diffuse_at_point.g=res_light.g*diffuse_at_point.g; diffuse_at_point.b=res_light.b*diffuse_at_point.b; - float ret=1e6; - if (p_bounces>0) { @@ -1220,7 +1218,7 @@ float BakedLightBaker::_throw_ray(ThreadStack& thread_stack,bool p_bake_direct,c #endif - ret=_throw_ray(thread_stack,p_bake_direct,r_point,r_point+rn*p_rest,p_rest,diffuse_at_point,p_att_curve,p_att_pos,p_att_curve_len,p_bounces-1); + _throw_ray(thread_stack,p_bake_direct,r_point,r_point+rn*p_rest,p_rest,diffuse_at_point,p_att_curve,p_att_pos,p_att_curve_len,p_bounces-1); } if (use_specular && (specular_at_point.r>CMP_EPSILON || specular_at_point.g>CMP_EPSILON || specular_at_point.b>CMP_EPSILON)) { @@ -1772,6 +1770,10 @@ void BakedLightBaker::bake(const Ref<BakedLight> &p_light, Node* p_node) { mat_map.clear(); tex_map.clear(); print_line("\ttotal triangles: "+itos(triangles.size())); + // no geometry + if (triangles.size() == 0) { + return; + } ep.step(TTR("Fixing Lights"),1); _fix_lights(); ep.step(TTR("Making BVH"),2); diff --git a/tools/editor/plugins/baked_light_editor_plugin.cpp b/tools/editor/plugins/baked_light_editor_plugin.cpp index df76f28ae0..a58a0c25e2 100644 --- a/tools/editor/plugins/baked_light_editor_plugin.cpp +++ b/tools/editor/plugins/baked_light_editor_plugin.cpp @@ -206,8 +206,9 @@ void BakedLightEditor::_menu_option(int p_option) { void BakedLightEditor::_bake_pressed() { ERR_FAIL_COND(!node); - if (node->get_baked_light().is_null()) { - err_dialog->set_text(TTR("BakedLightInstance does not contain a BakedLight resource.")); + const String conf_warning = node->get_configuration_warning(); + if (!conf_warning.empty()) { + err_dialog->set_text(conf_warning); err_dialog->popup_centered_minsize(); button_bake->set_pressed(false); return; @@ -236,6 +237,7 @@ void BakedLightEditor::_bake_pressed() { update_timeout=0; last_rays_time=0; + button_bake->set_pressed(false); set_process(true); } diff --git a/tools/editor/plugins/canvas_item_editor_plugin.cpp b/tools/editor/plugins/canvas_item_editor_plugin.cpp index 02a24f8ddb..3468f42a6c 100644 --- a/tools/editor/plugins/canvas_item_editor_plugin.cpp +++ b/tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -290,6 +290,7 @@ Dictionary CanvasItemEditor::get_state() const { state["snap_rotation"]=snap_rotation; state["snap_relative"]=snap_relative; state["snap_pixel"]=snap_pixel; + state["skeleton_show_bones"]=skeleton_show_bones; return state; } void CanvasItemEditor::set_state(const Dictionary& p_state){ @@ -351,6 +352,12 @@ void CanvasItemEditor::set_state(const Dictionary& p_state){ int idx = edit_menu->get_popup()->get_item_index(SNAP_USE_PIXEL); edit_menu->get_popup()->set_item_checked(idx,snap_pixel); } + + if (state.has("skeleton_show_bones")) { + skeleton_show_bones=state["skeleton_show_bones"]; + int idx = skeleton_menu->get_item_index(SKELETON_SHOW_BONES); + skeleton_menu->set_item_checked(idx,skeleton_show_bones); + } } @@ -648,7 +655,7 @@ void CanvasItemEditor::_key_move(const Vector2& p_dir, bool p_snap, KeyMoveMODE if (editor_selection->get_selected_node_list().empty()) return; - undo_redo->create_action(TTR("Move Action"),true); + undo_redo->create_action(TTR("Move Action"),UndoRedo::MERGE_ENDS); List<Node*> &selection = editor_selection->get_selected_node_list(); @@ -2083,76 +2090,78 @@ void CanvasItemEditor::_viewport_draw() { } - int bone_width = EditorSettings::get_singleton()->get("2d_editor/bone_width"); - Color bone_color1 = EditorSettings::get_singleton()->get("2d_editor/bone_color1"); - Color bone_color2 = EditorSettings::get_singleton()->get("2d_editor/bone_color2"); - Color bone_ik_color = EditorSettings::get_singleton()->get("2d_editor/bone_ik_color"); - Color bone_selected_color = EditorSettings::get_singleton()->get("2d_editor/bone_selected_color"); + if (skeleton_show_bones) { + int bone_width = EditorSettings::get_singleton()->get("2d_editor/bone_width"); + Color bone_color1 = EditorSettings::get_singleton()->get("2d_editor/bone_color1"); + Color bone_color2 = EditorSettings::get_singleton()->get("2d_editor/bone_color2"); + Color bone_ik_color = EditorSettings::get_singleton()->get("2d_editor/bone_ik_color"); + Color bone_selected_color = EditorSettings::get_singleton()->get("2d_editor/bone_selected_color"); - for(Map<ObjectID,BoneList>::Element*E=bone_list.front();E;E=E->next()) { + for(Map<ObjectID,BoneList>::Element*E=bone_list.front();E;E=E->next()) { - E->get().from=Vector2(); - E->get().to=Vector2(); + E->get().from=Vector2(); + E->get().to=Vector2(); - Object *obj = ObjectDB::get_instance(E->get().bone); - if (!obj) - continue; + Object *obj = ObjectDB::get_instance(E->get().bone); + if (!obj) + continue; - Node2D* n2d = obj->cast_to<Node2D>(); - if (!n2d) - continue; + Node2D* n2d = obj->cast_to<Node2D>(); + if (!n2d) + continue; - if (!n2d->get_parent()) - continue; + if (!n2d->get_parent()) + continue; - CanvasItem *pi = n2d->get_parent_item(); + CanvasItem *pi = n2d->get_parent_item(); - Node2D* pn2d=n2d->get_parent()->cast_to<Node2D>(); + Node2D* pn2d=n2d->get_parent()->cast_to<Node2D>(); - if (!pn2d) - continue; + if (!pn2d) + continue; - Vector2 from = transform.xform(pn2d->get_global_pos()); - Vector2 to = transform.xform(n2d->get_global_pos()); + Vector2 from = transform.xform(pn2d->get_global_pos()); + Vector2 to = transform.xform(n2d->get_global_pos()); - E->get().from=from; - E->get().to=to; + E->get().from=from; + E->get().to=to; - Vector2 rel = to-from; - Vector2 relt = rel.tangent().normalized()*bone_width; + Vector2 rel = to-from; + Vector2 relt = rel.tangent().normalized()*bone_width; - Vector<Vector2> bone_shape; - bone_shape.push_back(from); - bone_shape.push_back(from+rel*0.2+relt); - bone_shape.push_back(to); - bone_shape.push_back(from+rel*0.2-relt); - Vector<Color> colors; - if (pi->has_meta("_edit_ik_")) { + Vector<Vector2> bone_shape; + bone_shape.push_back(from); + bone_shape.push_back(from+rel*0.2+relt); + bone_shape.push_back(to); + bone_shape.push_back(from+rel*0.2-relt); + Vector<Color> colors; + if (pi->has_meta("_edit_ik_")) { - colors.push_back(bone_ik_color); - colors.push_back(bone_ik_color); - colors.push_back(bone_ik_color); - colors.push_back(bone_ik_color); - } else { - colors.push_back(bone_color1); - colors.push_back(bone_color2); - colors.push_back(bone_color1); - colors.push_back(bone_color2); - } + colors.push_back(bone_ik_color); + colors.push_back(bone_ik_color); + colors.push_back(bone_ik_color); + colors.push_back(bone_ik_color); + } else { + colors.push_back(bone_color1); + colors.push_back(bone_color2); + colors.push_back(bone_color1); + colors.push_back(bone_color2); + } - VisualServer::get_singleton()->canvas_item_add_primitive(ci,bone_shape,colors,Vector<Vector2>(),RID()); + VisualServer::get_singleton()->canvas_item_add_primitive(ci,bone_shape,colors,Vector<Vector2>(),RID()); - if (editor_selection->is_selected(pi)) { - for(int i=0;i<bone_shape.size();i++) { + if (editor_selection->is_selected(pi)) { + for(int i=0;i<bone_shape.size();i++) { - VisualServer::get_singleton()->canvas_item_add_line(ci,bone_shape[i],bone_shape[(i+1)%bone_shape.size()],bone_selected_color,2); + VisualServer::get_singleton()->canvas_item_add_line(ci,bone_shape[i],bone_shape[(i+1)%bone_shape.size()],bone_selected_color,2); + } } - } + } } } @@ -2536,6 +2545,12 @@ void CanvasItemEditor::_popup_callback(int p_op) { ((SnapDialog *)snap_dialog)->set_fields(snap_offset, snap_step, snap_rotation_offset, snap_rotation_step); snap_dialog->popup_centered(Size2(220,160)); } break; + case SKELETON_SHOW_BONES: { + skeleton_show_bones = !skeleton_show_bones; + int idx = skeleton_menu->get_item_index(SKELETON_SHOW_BONES); + skeleton_menu->set_item_checked(idx,skeleton_show_bones); + viewport->update(); + } break; case ZOOM_IN: { if (zoom>MAX_ZOOM) return; @@ -2979,57 +2994,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { case VIEW_CENTER_TO_SELECTION: case VIEW_FRAME_TO_SELECTION: { - Vector2 center(0.f, 0.f); - Rect2 rect; - int count = 0; - - Map<Node*,Object*> &selection = editor_selection->get_selection(); - for(Map<Node*,Object*>::Element *E=selection.front();E;E=E->next()) { - CanvasItem *canvas_item = E->key()->cast_to<CanvasItem>(); - if (!canvas_item) continue; - if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root()) - continue; - - - // counting invisible items, for now - //if (!canvas_item->is_visible()) continue; - ++count; - - Rect2 item_rect = canvas_item->get_item_rect(); - - Vector2 pos = canvas_item->get_global_transform().get_origin(); - Vector2 scale = canvas_item->get_global_transform().get_scale(); - real_t angle = canvas_item->get_global_transform().get_rotation(); - - Matrix32 t(angle, Vector2(0.f,0.f)); - item_rect = t.xform(item_rect); - Rect2 canvas_item_rect(pos + scale*item_rect.pos, scale*item_rect.size); - if (count == 1) { - rect = canvas_item_rect; - } else { - rect = rect.merge(canvas_item_rect); - } - }; - if (count==0) break; - - if (p_op == VIEW_CENTER_TO_SELECTION) { - - center = rect.pos + rect.size/2; - Vector2 offset = viewport->get_size()/2 - editor->get_scene_root()->get_global_canvas_transform().xform(center); - h_scroll->set_val(h_scroll->get_val() - offset.x/zoom); - v_scroll->set_val(v_scroll->get_val() - offset.y/zoom); - - } else { // VIEW_FRAME_TO_SELECTION - - if (rect.size.x > CMP_EPSILON && rect.size.y > CMP_EPSILON) { - float scale_x = viewport->get_size().x/rect.size.x; - float scale_y = viewport->get_size().y/rect.size.y; - zoom = scale_x < scale_y? scale_x:scale_y; - zoom *= 0.90; - _update_scroll(0); - call_deferred("_popup_callback", VIEW_CENTER_TO_SELECTION); - } - } + _focus_selection(p_op); } break; case SKELETON_MAKE_BONES: { @@ -3049,6 +3014,8 @@ void CanvasItemEditor::_popup_callback(int p_op) { continue; n2d->set_meta("_edit_bone_",true); + if (!skeleton_show_bones) + skeleton_menu->activate_item(skeleton_menu->get_item_index(SKELETON_SHOW_BONES)); } viewport->update(); @@ -3067,6 +3034,8 @@ void CanvasItemEditor::_popup_callback(int p_op) { continue; n2d->set_meta("_edit_bone_",Variant()); + if (!skeleton_show_bones) + skeleton_menu->activate_item(skeleton_menu->get_item_index(SKELETON_SHOW_BONES)); } viewport->update(); @@ -3086,6 +3055,8 @@ void CanvasItemEditor::_popup_callback(int p_op) { continue; canvas_item->set_meta("_edit_ik_",true); + if (!skeleton_show_bones) + skeleton_menu->activate_item(skeleton_menu->get_item_index(SKELETON_SHOW_BONES)); } @@ -3105,6 +3076,8 @@ void CanvasItemEditor::_popup_callback(int p_op) { continue; n2d->set_meta("_edit_ik_",Variant()); + if (!skeleton_show_bones) + skeleton_menu->activate_item(skeleton_menu->get_item_index(SKELETON_SHOW_BONES)); } viewport->update(); @@ -3142,6 +3115,62 @@ template< class P, class C > void CanvasItemEditor::space_selected_items() { } #endif + +void CanvasItemEditor::_focus_selection(int p_op) { + Vector2 center(0.f, 0.f); + Rect2 rect; + int count = 0; + + Map<Node*,Object*> &selection = editor_selection->get_selection(); + for(Map<Node*,Object*>::Element *E=selection.front();E;E=E->next()) { + CanvasItem *canvas_item = E->key()->cast_to<CanvasItem>(); + if (!canvas_item) continue; + if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root()) + continue; + + + // counting invisible items, for now + //if (!canvas_item->is_visible()) continue; + ++count; + + Rect2 item_rect = canvas_item->get_item_rect(); + + Vector2 pos = canvas_item->get_global_transform().get_origin(); + Vector2 scale = canvas_item->get_global_transform().get_scale(); + real_t angle = canvas_item->get_global_transform().get_rotation(); + + Matrix32 t(angle, Vector2(0.f,0.f)); + item_rect = t.xform(item_rect); + Rect2 canvas_item_rect(pos + scale*item_rect.pos, scale*item_rect.size); + if (count == 1) { + rect = canvas_item_rect; + } else { + rect = rect.merge(canvas_item_rect); + } + }; + if (count==0) return; + + if (p_op == VIEW_CENTER_TO_SELECTION) { + + center = rect.pos + rect.size/2; + Vector2 offset = viewport->get_size()/2 - editor->get_scene_root()->get_global_canvas_transform().xform(center); + h_scroll->set_val(h_scroll->get_val() - offset.x/zoom); + v_scroll->set_val(v_scroll->get_val() - offset.y/zoom); + + } else { // VIEW_FRAME_TO_SELECTION + + if (rect.size.x > CMP_EPSILON && rect.size.y > CMP_EPSILON) { + float scale_x = viewport->get_size().x/rect.size.x; + float scale_y = viewport->get_size().y/rect.size.y; + zoom = scale_x < scale_y? scale_x:scale_y; + zoom *= 0.90; + _update_scroll(0); + call_deferred("_popup_callback", VIEW_CENTER_TO_SELECTION); + } + } +} + + void CanvasItemEditor::_bind_methods() { ObjectTypeDB::bind_method("_node_removed",&CanvasItemEditor::_node_removed); @@ -3247,6 +3276,12 @@ VSplitContainer *CanvasItemEditor::get_bottom_split() { return bottom_split; } + +void CanvasItemEditor::focus_selection() { + _focus_selection(VIEW_CENTER_TO_SELECTION); +} + + CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { tool = TOOL_SELECT; @@ -3389,15 +3424,17 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p->add_shortcut(ED_SHORTCUT("canvas_item_editor/expand_to_parent", TTR("Expand to Parent"), KEY_MASK_CMD | KEY_P), EXPAND_TO_PARENT); p->add_separator(); p->add_submenu_item(TTR("Skeleton.."),"skeleton"); - PopupMenu *p2 = memnew(PopupMenu); - p->add_child(p2); - p2->set_name("skeleton"); - p2->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_make_bones", TTR("Make Bones"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B ),SKELETON_MAKE_BONES); - p2->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_bones", TTR("Clear Bones")), SKELETON_CLEAR_BONES); - p2->add_separator(); - p2->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_set_ik_chain", TTR("Make IK Chain")), SKELETON_SET_IK_CHAIN); - p2->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_ik_chain", TTR("Clear IK Chain")), SKELETON_CLEAR_IK_CHAIN); - p2->connect("item_pressed", this,"_popup_callback"); + skeleton_menu = memnew(PopupMenu); + p->add_child(skeleton_menu); + skeleton_menu->set_name("skeleton"); + skeleton_menu->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_make_bones", TTR("Make Bones"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B ),SKELETON_MAKE_BONES); + skeleton_menu->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_bones", TTR("Clear Bones")), SKELETON_CLEAR_BONES); + skeleton_menu->add_separator(); + skeleton_menu->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_show_bones", TTR("Show Bones")), SKELETON_SHOW_BONES); + skeleton_menu->add_separator(); + skeleton_menu->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_set_ik_chain", TTR("Make IK Chain")), SKELETON_SET_IK_CHAIN); + skeleton_menu->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_ik_chain", TTR("Clear IK Chain")), SKELETON_CLEAR_IK_CHAIN); + skeleton_menu->connect("item_pressed", this,"_popup_callback"); /* @@ -3523,6 +3560,8 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { snap_show_grid=false; snap_rotation=false; snap_pixel=false; + skeleton_show_bones=true; + skeleton_menu->set_item_checked(skeleton_menu->get_item_index(SKELETON_SHOW_BONES),true); updating_value_dialog=false; box_selecting=false; //zoom=0.5; diff --git a/tools/editor/plugins/canvas_item_editor_plugin.h b/tools/editor/plugins/canvas_item_editor_plugin.h index 22acfceed0..9f4bc46eb4 100644 --- a/tools/editor/plugins/canvas_item_editor_plugin.h +++ b/tools/editor/plugins/canvas_item_editor_plugin.h @@ -124,6 +124,7 @@ class CanvasItemEditor : public VBoxContainer { VIEW_FRAME_TO_SELECTION, SKELETON_MAKE_BONES, SKELETON_CLEAR_BONES, + SKELETON_SHOW_BONES, SKELETON_SET_IK_CHAIN, SKELETON_CLEAR_IK_CHAIN @@ -175,6 +176,7 @@ class CanvasItemEditor : public VBoxContainer { bool snap_rotation; bool snap_relative; bool snap_pixel; + bool skeleton_show_bones; bool box_selecting; Point2 box_selecting_to; bool key_pos; @@ -256,6 +258,7 @@ class CanvasItemEditor : public VBoxContainer { ToolButton *ungroup_button; MenuButton *edit_menu; + PopupMenu *skeleton_menu; MenuButton *view_menu; HBoxContainer *animation_hb; MenuButton *animation_menu; @@ -352,6 +355,8 @@ class CanvasItemEditor : public VBoxContainer { void _viewport_input_event(const InputEvent& p_event); void _viewport_draw(); + void _focus_selection(int p_op); + void _set_anchor(Control::AnchorType p_left,Control::AnchorType p_top,Control::AnchorType p_right,Control::AnchorType p_bottom); HSplitContainer *palette_split; @@ -414,10 +419,12 @@ public: Control *get_viewport_control() { return viewport; } - bool get_remove_list(List<Node*> *p_list); void set_undo_redo(UndoRedo *p_undo_redo) {undo_redo=p_undo_redo; } void edit(CanvasItem *p_canvas_item); + + void focus_selection(); + CanvasItemEditor(EditorNode *p_editor); }; diff --git a/tools/editor/plugins/color_ramp_editor_plugin.cpp b/tools/editor/plugins/color_ramp_editor_plugin.cpp index cb7f6a1809..4e2045edc6 100644 --- a/tools/editor/plugins/color_ramp_editor_plugin.cpp +++ b/tools/editor/plugins/color_ramp_editor_plugin.cpp @@ -84,7 +84,7 @@ void ColorRampEditorPlugin::_ramp_changed() { if (old_offsets.size()!=new_offsets.size()) ur->create_action(TTR("Add/Remove Color Ramp Point")); else - ur->create_action(TTR("Modify Color Ramp"),true); + ur->create_action(TTR("Modify Color Ramp"),UndoRedo::MERGE_ENDS); ur->add_do_method(this,"undo_redo_color_ramp",new_offsets,new_colors); ur->add_undo_method(this,"undo_redo_color_ramp",old_offsets,old_colors); ur->commit_action(); diff --git a/tools/editor/plugins/material_editor_plugin.cpp b/tools/editor/plugins/material_editor_plugin.cpp index f4258836e5..876fab0d6e 100644 --- a/tools/editor/plugins/material_editor_plugin.cpp +++ b/tools/editor/plugins/material_editor_plugin.cpp @@ -103,7 +103,7 @@ MaterialEditor::MaterialEditor() { world.instance(); viewport->set_world(world); //use own world add_child(viewport); - viewport->set_process_input(false); + viewport->set_disable_input(true); camera = memnew( Camera ); camera->set_transform(Transform(Matrix3(),Vector3(0,0,3))); diff --git a/tools/editor/plugins/mesh_editor_plugin.cpp b/tools/editor/plugins/mesh_editor_plugin.cpp index 71cf33ba1b..b70cbad25f 100644 --- a/tools/editor/plugins/mesh_editor_plugin.cpp +++ b/tools/editor/plugins/mesh_editor_plugin.cpp @@ -147,7 +147,7 @@ MeshEditor::MeshEditor() { world.instance(); viewport->set_world(world); //use own world add_child(viewport); - viewport->set_process_input(false); + viewport->set_disable_input(true); camera = memnew( Camera ); camera->set_transform(Transform(Matrix3(),Vector3(0,0,3))); diff --git a/tools/editor/plugins/script_editor_plugin.cpp b/tools/editor/plugins/script_editor_plugin.cpp index 4032a790d8..7f41949613 100644 --- a/tools/editor/plugins/script_editor_plugin.cpp +++ b/tools/editor/plugins/script_editor_plugin.cpp @@ -263,369 +263,11 @@ ScriptEditorQuickOpen::ScriptEditorQuickOpen() { ScriptEditor *ScriptEditor::script_editor=NULL; -Vector<String> ScriptTextEditor::get_functions() { - - - String errortxt; - int line=-1,col; - TextEdit *te=get_text_edit(); - String text = te->get_text(); - List<String> fnc; - - if (script->get_language()->validate(text,line,col,errortxt,script->get_path(),&fnc)) { - - //if valid rewrite functions to latest - functions.clear(); - for (List<String>::Element *E=fnc.front();E;E=E->next()) { - - functions.push_back(E->get()); - } - - - } - - return functions; -} - -void ScriptTextEditor::apply_code() { - - if (script.is_null()) - return; -// print_line("applying code"); - script->set_source_code(get_text_edit()->get_text()); - script->update_exports(); -} - -Ref<Script> ScriptTextEditor::get_edited_script() const { - - return script; -} - -void ScriptTextEditor::_load_theme_settings() { - - get_text_edit()->clear_colors(); - - /* keyword color */ - - - get_text_edit()->set_custom_bg_color(EDITOR_DEF("text_editor/background_color",Color(0,0,0,0))); - get_text_edit()->add_color_override("completion_background_color", EDITOR_DEF("text_editor/completion_background_color", Color(0,0,0,0))); - get_text_edit()->add_color_override("completion_selected_color", EDITOR_DEF("text_editor/completion_selected_color", Color::html("434244"))); - get_text_edit()->add_color_override("completion_existing_color", EDITOR_DEF("text_editor/completion_existing_color", Color::html("21dfdfdf"))); - get_text_edit()->add_color_override("completion_scroll_color", EDITOR_DEF("text_editor/completion_scroll_color", Color::html("ffffff"))); - get_text_edit()->add_color_override("completion_font_color", EDITOR_DEF("text_editor/completion_font_color", Color::html("aaaaaa"))); - get_text_edit()->add_color_override("font_color",EDITOR_DEF("text_editor/text_color",Color(0,0,0))); - get_text_edit()->add_color_override("line_number_color",EDITOR_DEF("text_editor/line_number_color",Color(0,0,0))); - get_text_edit()->add_color_override("caret_color",EDITOR_DEF("text_editor/caret_color",Color(0,0,0))); - get_text_edit()->add_color_override("caret_background_color",EDITOR_DEF("text_editor/caret_background_color",Color(0,0,0))); - get_text_edit()->add_color_override("font_selected_color",EDITOR_DEF("text_editor/text_selected_color",Color(1,1,1))); - get_text_edit()->add_color_override("selection_color",EDITOR_DEF("text_editor/selection_color",Color(0.2,0.2,1))); - get_text_edit()->add_color_override("brace_mismatch_color",EDITOR_DEF("text_editor/brace_mismatch_color",Color(1,0.2,0.2))); - get_text_edit()->add_color_override("current_line_color",EDITOR_DEF("text_editor/current_line_color",Color(0.3,0.5,0.8,0.15))); - get_text_edit()->add_color_override("word_highlighted_color",EDITOR_DEF("text_editor/word_highlighted_color",Color(0.8,0.9,0.9,0.15))); - get_text_edit()->add_color_override("number_color",EDITOR_DEF("text_editor/number_color",Color(0.9,0.6,0.0,2))); - get_text_edit()->add_color_override("function_color",EDITOR_DEF("text_editor/function_color",Color(0.4,0.6,0.8))); - get_text_edit()->add_color_override("member_variable_color",EDITOR_DEF("text_editor/member_variable_color",Color(0.9,0.3,0.3))); - get_text_edit()->add_color_override("mark_color", EDITOR_DEF("text_editor/mark_color", Color(1.0,0.4,0.4,0.4))); - get_text_edit()->add_color_override("breakpoint_color", EDITOR_DEF("text_editor/breakpoint_color", Color(0.8,0.8,0.4,0.2))); - get_text_edit()->add_color_override("search_result_color",EDITOR_DEF("text_editor/search_result_color",Color(0.05,0.25,0.05,1))); - get_text_edit()->add_color_override("search_result_border_color",EDITOR_DEF("text_editor/search_result_border_color",Color(0.1,0.45,0.1,1))); - get_text_edit()->add_constant_override("line_spacing", EDITOR_DEF("text_editor/line_spacing",4)); - - Color keyword_color= EDITOR_DEF("text_editor/keyword_color",Color(0.5,0.0,0.2)); - - List<String> keywords; - script->get_language()->get_reserved_words(&keywords); - for(List<String>::Element *E=keywords.front();E;E=E->next()) { - - get_text_edit()->add_keyword_color(E->get(),keyword_color); - } - - //colorize core types - Color basetype_color= EDITOR_DEF("text_editor/base_type_color",Color(0.3,0.3,0.0)); - - get_text_edit()->add_keyword_color("Vector2",basetype_color); - get_text_edit()->add_keyword_color("Vector3",basetype_color); - get_text_edit()->add_keyword_color("Plane",basetype_color); - get_text_edit()->add_keyword_color("Quat",basetype_color); - get_text_edit()->add_keyword_color("AABB",basetype_color); - get_text_edit()->add_keyword_color("Matrix3",basetype_color); - get_text_edit()->add_keyword_color("Transform",basetype_color); - get_text_edit()->add_keyword_color("Color",basetype_color); - get_text_edit()->add_keyword_color("Image",basetype_color); - get_text_edit()->add_keyword_color("InputEvent",basetype_color); - get_text_edit()->add_keyword_color("Rect2",basetype_color); - get_text_edit()->add_keyword_color("NodePath",basetype_color); - - //colorize engine types - Color type_color= EDITOR_DEF("text_editor/engine_type_color",Color(0.0,0.2,0.4)); - - List<StringName> types; - ObjectTypeDB::get_type_list(&types); - - for(List<StringName>::Element *E=types.front();E;E=E->next()) { - - String n = E->get(); - if (n.begins_with("_")) - n = n.substr(1, n.length()); - - get_text_edit()->add_keyword_color(n,type_color); - } - - //colorize comments - Color comment_color = EDITOR_DEF("text_editor/comment_color",Color::hex(0x797e7eff)); - List<String> comments; - script->get_language()->get_comment_delimiters(&comments); - - for(List<String>::Element *E=comments.front();E;E=E->next()) { - - String comment = E->get(); - String beg = comment.get_slice(" ",0); - String end = comment.get_slice_count(" ")>1?comment.get_slice(" ",1):String(); - - get_text_edit()->add_color_region(beg,end,comment_color,end==""); - } - - //colorize strings - Color string_color = EDITOR_DEF("text_editor/string_color",Color::hex(0x6b6f00ff)); - List<String> strings; - script->get_language()->get_string_delimiters(&strings); - - for (List<String>::Element *E=strings.front();E;E=E->next()) { - - String string = E->get(); - String beg = string.get_slice(" ",0); - String end = string.get_slice_count(" ")>1?string.get_slice(" ",1):String(); - get_text_edit()->add_color_region(beg,end,string_color,end==""); - } - - //colorize symbols - Color symbol_color= EDITOR_DEF("text_editor/symbol_color",Color::hex(0x005291ff)); - get_text_edit()->set_symbol_color(symbol_color); - -} - - -void ScriptTextEditor::reload_text() { - - ERR_FAIL_COND(script.is_null()) ; - - TextEdit *te = get_text_edit(); - int column = te->cursor_get_column(); - int row = te->cursor_get_line(); - int h = te->get_h_scroll(); - int v = te->get_v_scroll(); - - te->set_text(script->get_source_code()); - te->clear_undo_history(); - te->cursor_set_line(row); - te->cursor_set_column(column); - te->set_h_scroll(h); - te->set_v_scroll(v); - - te->tag_saved_version(); - - _line_col_changed(); - -} - -void ScriptTextEditor::_notification(int p_what) { - - if (p_what==NOTIFICATION_READY) { - - //emit_signal("name_changed"); - } -} - - -bool ScriptTextEditor::is_unsaved() { - - return get_text_edit()->get_version()!=get_text_edit()->get_saved_version(); -} - -String ScriptTextEditor::get_name() { - String name; - - if (script->get_path().find("local://")==-1 && script->get_path().find("::")==-1) { - name=script->get_path().get_file(); - if (get_text_edit()->get_version()!=get_text_edit()->get_saved_version()) { - name+="(*)"; - } - } else if (script->get_name()!="") - name=script->get_name(); - else - name=script->get_type()+"("+itos(script->get_instance_ID())+")"; - - return name; - -} - -Ref<Texture> ScriptTextEditor::get_icon() { - - if (get_parent_control() && get_parent_control()->has_icon(script->get_type(),"EditorIcons")) { - return get_parent_control()->get_icon(script->get_type(),"EditorIcons"); - } - - return Ref<Texture>(); -} - - - -void ScriptTextEditor::set_edited_script(const Ref<Script>& p_script) { - - ERR_FAIL_COND(!script.is_null()); - - script=p_script; - - - _load_theme_settings(); - - get_text_edit()->set_text(script->get_source_code()); - get_text_edit()->clear_undo_history(); - get_text_edit()->tag_saved_version(); - - - emit_signal("name_changed"); - _line_col_changed(); -} - - -void ScriptTextEditor::_validate_script() { - - String errortxt; - int line=-1,col; - TextEdit *te=get_text_edit(); - - String text = te->get_text(); - List<String> fnc; - - if (!script->get_language()->validate(text,line,col,errortxt,script->get_path(),&fnc)) { - String error_text="error("+itos(line)+","+itos(col)+"): "+errortxt; - set_error(error_text); - } else { - set_error(""); - line=-1; - if (!script->is_tool()) { - script->set_source_code(text); - script->update_exports(); - //script->reload(); //will update all the variables in property editors - } - - functions.clear(); - for (List<String>::Element *E=fnc.front();E;E=E->next()) { - - functions.push_back(E->get()); - } - - } - - line--; - for(int i=0;i<te->get_line_count();i++) { - te->set_line_as_marked(i,line==i); - } - - emit_signal("name_changed"); -} - - -static Node* _find_node_for_script(Node* p_base, Node*p_current, const Ref<Script>& p_script) { - - if (p_current->get_owner()!=p_base && p_base!=p_current) - return NULL; - Ref<Script> c = p_current->get_script(); - if (c==p_script) - return p_current; - for(int i=0;i<p_current->get_child_count();i++) { - Node *found = _find_node_for_script(p_base,p_current->get_child(i),p_script); - if (found) - return found; - } - - return NULL; -} - -static void _find_changed_scripts_for_external_editor(Node* p_base, Node*p_current, Set<Ref<Script> > &r_scripts) { - - if (p_current->get_owner()!=p_base && p_base!=p_current) - return; - Ref<Script> c = p_current->get_script(); - - if (c.is_valid()) - r_scripts.insert(c); - - for(int i=0;i<p_current->get_child_count();i++) { - _find_changed_scripts_for_external_editor(p_base,p_current->get_child(i),r_scripts); - } - -} - -void ScriptEditor::_update_modified_scripts_for_external_editor(Ref<Script> p_for_script) { - - if (!bool(EditorSettings::get_singleton()->get("external_editor/use_external_editor"))) - return; - - Set<Ref<Script> > scripts; - - Node *base = get_tree()->get_edited_scene_root(); - if (base) { - _find_changed_scripts_for_external_editor(base,base,scripts); - } - - for (Set<Ref<Script> >::Element *E=scripts.front();E;E=E->next()) { - - Ref<Script> script = E->get(); - - if (p_for_script.is_valid() && p_for_script!=script) - continue; - - if (script->get_path()=="" || script->get_path().find("local://")!=-1 || script->get_path().find("::")!=-1) { - - continue; //internal script, who cares, though weird - } - - uint64_t last_date = script->get_last_modified_time(); - uint64_t date = FileAccess::get_modified_time(script->get_path()); - - if (last_date!=date) { - - Ref<Script> rel_script = ResourceLoader::load(script->get_path(),script->get_type(),true); - ERR_CONTINUE(!rel_script.is_valid()); - script->set_source_code( rel_script->get_source_code() ); - script->set_last_modified_time( rel_script->get_last_modified_time() ); - script->update_exports(); - } - - } -} - - - -void ScriptTextEditor::_code_complete_script(const String& p_code, List<String>* r_options) { - - Node *base = get_tree()->get_edited_scene_root(); - if (base) { - base = _find_node_for_script(base,base,script); - } - String hint; - Error err = script->get_language()->complete_code(p_code,script->get_path().get_base_dir(),base,r_options,hint); - if (hint!="") { - get_text_edit()->set_code_hint(hint); - } - -} -void ScriptTextEditor::_bind_methods() { - - ADD_SIGNAL(MethodInfo("name_changed")); -} - -ScriptTextEditor::ScriptTextEditor() { -} - /*** SCRIPT EDITOR ******/ -String ScriptEditor::_get_debug_tooltip(const String&p_text,Node *_ste) { +String ScriptEditor::_get_debug_tooltip(const String&p_text,Node *_se) { - ScriptTextEditor *ste=_ste->cast_to<ScriptTextEditor>(); +// ScriptEditorBase *se=_se->cast_to<ScriptEditorBase>(); String val = debugger->get_var_value(p_text); if (val!=String()) { @@ -643,6 +285,17 @@ void ScriptEditor::_breaked(bool p_breaked,bool p_can_debug) { debug_menu->get_popup()->set_item_disabled( debug_menu->get_popup()->get_item_index(DEBUG_BREAK), p_breaked ); debug_menu->get_popup()->set_item_disabled( debug_menu->get_popup()->get_item_index(DEBUG_CONTINUE), !p_breaked ); + for(int i=0;i<tab_container->get_child_count();i++) { + + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (!se) { + + continue; + } + + se->set_debugger_active(p_breaked); + } + } void ScriptEditor::_show_debugger(bool p_show) { @@ -654,33 +307,6 @@ void ScriptEditor::_script_created(Ref<Script> p_script) { editor->push_item(p_script.operator->()); } -void ScriptEditor::_trim_trailing_whitespace(TextEdit *tx) { - - bool trimed_whitespace = false; - for (int i = 0; i < tx->get_line_count(); i++) { - String line = tx->get_line(i); - if (line.ends_with(" ") || line.ends_with("\t")) { - - if (!trimed_whitespace) { - tx->begin_complex_operation(); - trimed_whitespace = true; - } - - int end = 0; - for (int j = line.length() - 1; j > -1; j--) { - if (line[j] != ' ' && line[j] != '\t') { - end = j+1; - break; - } - } - tx->set_line(i, line.substr(0, end)); - } - } - if (trimed_whitespace) { - tx->end_complex_operation(); - tx->update(); - } -} void ScriptEditor::_goto_script_line2(int p_line) { @@ -688,11 +314,11 @@ void ScriptEditor::_goto_script_line2(int p_line) { if (selected<0 || selected>=tab_container->get_child_count()) return; - ScriptTextEditor *current = tab_container->get_child(selected)->cast_to<ScriptTextEditor>(); + ScriptEditorBase *current = tab_container->get_child(selected)->cast_to<ScriptEditorBase>(); if (!current) return; - current->get_text_edit()->cursor_set_line(p_line); + current->goto_line(p_line); } @@ -700,7 +326,16 @@ void ScriptEditor::_goto_script_line(REF p_script,int p_line) { editor->push_item(p_script.ptr()); - _goto_script_line2(p_line); + + int selected = tab_container->get_current_tab(); + if (selected<0 || selected>=tab_container->get_child_count()) + return; + + ScriptEditorBase *current = tab_container->get_child(selected)->cast_to<ScriptEditorBase>(); + if (!current) + return; + + current->goto_line(p_line,true); } @@ -725,22 +360,20 @@ void ScriptEditor::_go_to_tab(int p_idx) { Node *n = tab_container->get_current_tab_control(); - if (n->cast_to<ScriptTextEditor>()) { + if (n->cast_to<ScriptEditorBase>()) { - history[history_pos].scroll_pos=n->cast_to<ScriptTextEditor>()->get_text_edit()->get_v_scroll(); - history[history_pos].cursor_column=n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_get_column(); - history[history_pos].cursor_row=n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_get_line(); + history[history_pos].state=n->cast_to<ScriptEditorBase>()->get_edit_state(); } if (n->cast_to<EditorHelp>()) { - history[history_pos].scroll_pos=n->cast_to<EditorHelp>()->get_scroll(); + history[history_pos].state=n->cast_to<EditorHelp>()->get_scroll(); } } history.resize(history_pos+1); ScriptHistory sh; sh.control=c; - sh.scroll_pos=0; + sh.state=Variant(); history.push_back(sh); history_pos++; @@ -750,12 +383,12 @@ void ScriptEditor::_go_to_tab(int p_idx) { c = tab_container->get_current_tab_control(); - if (c->cast_to<ScriptTextEditor>()) { + if (c->cast_to<ScriptEditorBase>()) { - script_name_label->set_text(c->cast_to<ScriptTextEditor>()->get_name()); - script_icon->set_texture(c->cast_to<ScriptTextEditor>()->get_icon()); + script_name_label->set_text(c->cast_to<ScriptEditorBase>()->get_name()); + script_icon->set_texture(c->cast_to<ScriptEditorBase>()->get_icon()); if (is_visible()) - c->cast_to<ScriptTextEditor>()->get_text_edit()->grab_focus(); + c->cast_to<ScriptEditorBase>()->ensure_focus(); } if (c->cast_to<EditorHelp>()) { @@ -769,7 +402,8 @@ void ScriptEditor::_go_to_tab(int p_idx) { c->set_meta("__editor_pass",++edit_pass); _update_history_arrows(); - _update_script_colors(); + _update_script_colors(); + _update_selected_editor_menu(); } void ScriptEditor::_close_tab(int p_idx) { @@ -779,9 +413,12 @@ void ScriptEditor::_close_tab(int p_idx) { return; Node *tselected = tab_container->get_child(selected); - ScriptTextEditor *current = tab_container->get_child(selected)->cast_to<ScriptTextEditor>(); + ScriptEditorBase *current = tab_container->get_child(selected)->cast_to<ScriptEditorBase>(); if (current) { apply_scripts(); + if (current->get_edit_menu()) { + memdelete(current->get_edit_menu()); + } } //remove from history @@ -833,9 +470,9 @@ void ScriptEditor::_close_docs_tab() { int child_count = tab_container->get_child_count(); for (int i = child_count-1; i>=0; i--) { - EditorHelp *ste = tab_container->get_child(i)->cast_to<EditorHelp>(); + EditorHelp *se = tab_container->get_child(i)->cast_to<EditorHelp>(); - if (ste) { + if (se) { _close_tab(i); } @@ -843,6 +480,33 @@ void ScriptEditor::_close_docs_tab() { } +void ScriptEditor::_close_all_tabs() { + + int child_count = tab_container->get_child_count(); + for (int i = child_count-1; i>=0; i--) { + + tab_container->set_current_tab(i); + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + + if (se) { + + // Maybe there are unsaved changes + if (se->is_unsaved()) { + _ask_close_current_unsaved_tab(se); + continue; + } + + } + + _close_current_tab(); + } + +} + +void ScriptEditor::_ask_close_current_unsaved_tab(ScriptEditorBase *current) { + erase_tab_confirm->set_text("Close and save changes?\n\""+current->get_name()+"\""); + erase_tab_confirm->popup_centered_minsize(); +} void ScriptEditor::_resave_scripts(const String& p_str) { @@ -851,21 +515,21 @@ void ScriptEditor::_resave_scripts(const String& p_str) { for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (!se) continue; - Ref<Script> script = ste->get_edited_script(); + Ref<Script> script = se->get_edited_script(); if (script->get_path()=="" || script->get_path().find("local://")!=-1 || script->get_path().find("::")!=-1) continue; //internal script, who cares if (trim_trailing_whitespace_on_save) { - _trim_trailing_whitespace(ste->get_text_edit()); + se->trim_trailing_whitespace(); } editor->save_resource(script); - ste->get_text_edit()->tag_saved_version(); + se->tag_saved_version(); } disk_changed->hide(); @@ -878,14 +542,14 @@ void ScriptEditor::_reload_scripts(){ for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) { + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (!se) { continue; } - Ref<Script> script = ste->get_edited_script(); + Ref<Script> script = se->get_edited_script(); if (script->get_path()=="" || script->get_path().find("local://")!=-1 || script->get_path().find("::")!=-1) { @@ -907,7 +571,7 @@ void ScriptEditor::_reload_scripts(){ script->set_source_code( rel_script->get_source_code() ); script->set_last_modified_time( rel_script->get_last_modified_time() ); script->reload(); - ste->reload_text(); + se->reload_text(); } @@ -925,14 +589,14 @@ void ScriptEditor::_res_saved_callback(const Ref<Resource>& p_res) { for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) { + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (!se) { continue; } - Ref<Script> script = ste->get_edited_script(); + Ref<Script> script = se->get_edited_script(); if (script->get_path()=="" || script->get_path().find("local://")!=-1 || script->get_path().find("::")!=-1) { continue; //internal script, who cares @@ -940,7 +604,7 @@ void ScriptEditor::_res_saved_callback(const Ref<Resource>& p_res) { if (script==p_res) { - ste->get_text_edit()->tag_saved_version(); + se->tag_saved_version(); } } @@ -975,10 +639,10 @@ bool ScriptEditor::_test_script_times_on_disk(Ref<Script> p_for_script) { for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (ste) { + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (se) { - Ref<Script> script = ste->get_edited_script(); + Ref<Script> script = se->get_edited_script(); if (p_for_script.is_valid() && p_for_script!=script) continue; @@ -996,7 +660,7 @@ bool ScriptEditor::_test_script_times_on_disk(Ref<Script> p_for_script) { TreeItem *ti = disk_changed_list->create_item(r); ti->set_text(0,script->get_path().get_file()); - if (!use_autoreload || ste->is_unsaved()) { + if (!use_autoreload || se->is_unsaved()) { need_ask=true; } need_reload=true; @@ -1019,27 +683,6 @@ bool ScriptEditor::_test_script_times_on_disk(Ref<Script> p_for_script) { return need_reload; } -void ScriptEditor::swap_lines(TextEdit *tx, int line1, int line2) -{ - String tmp = tx->get_line(line1); - String tmp2 = tx->get_line(line2); - tx->set_line(line2, tmp); - tx->set_line(line1, tmp2); - - tx->cursor_set_line(line2); -} - -void ScriptEditor::_breakpoint_toggled(const int p_row) { - int selected = tab_container->get_current_tab(); - if (selected<0 || selected>=tab_container->get_child_count()) { - return; - } - - ScriptTextEditor *current = tab_container->get_child(selected)->cast_to<ScriptTextEditor>(); - if (current) { - get_debugger()->set_breakpoint(current->get_edited_script()->get_path(),p_row+1,current->get_text_edit()->is_line_set_as_breakpoint(p_row)); - } -} void ScriptEditor::_file_dialog_action(String p_file) { @@ -1081,12 +724,12 @@ void ScriptEditor::_menu_option(int p_option) { #if 0 for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) + ScriptTextEditor *se = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); + if (!se) continue; - Ref<Script> script = ste->get_edited_script(); + Ref<Script> script = se->get_edited_script(); if (script->get_path()=="" || script->get_path().find("local://")!=-1 || script->get_path().find("::")!=-1) continue; //internal script, who cares @@ -1180,7 +823,7 @@ void ScriptEditor::_menu_option(int p_option) { if (selected<0 || selected>=tab_container->get_child_count()) return; - ScriptTextEditor *current = tab_container->get_child(selected)->cast_to<ScriptTextEditor>(); + ScriptEditorBase *current = tab_container->get_child(selected)->cast_to<ScriptEditorBase>(); if (current) { switch(p_option) { @@ -1193,403 +836,38 @@ void ScriptEditor::_menu_option(int p_option) { if (_test_script_times_on_disk()) return; - if (trim_trailing_whitespace_on_save) { - _trim_trailing_whitespace(current->get_text_edit()); - } + if (trim_trailing_whitespace_on_save) + current->trim_trailing_whitespace(); editor->save_resource( current->get_edited_script() ); } break; case FILE_SAVE_AS: { - if (trim_trailing_whitespace_on_save) { - _trim_trailing_whitespace(current->get_text_edit()); - } + current->trim_trailing_whitespace(); editor->push_item(current->get_edited_script()->cast_to<Object>()); editor->save_resource_as( current->get_edited_script() ); } break; - case EDIT_UNDO: { - current->get_text_edit()->undo(); - current->get_text_edit()->call_deferred("grab_focus"); - } break; - case EDIT_REDO: { - current->get_text_edit()->redo(); - current->get_text_edit()->call_deferred("grab_focus"); - } break; - case EDIT_CUT: { - - current->get_text_edit()->cut(); - current->get_text_edit()->call_deferred("grab_focus"); - } break; - case EDIT_COPY: { - current->get_text_edit()->copy(); - current->get_text_edit()->call_deferred("grab_focus"); - - } break; - case EDIT_PASTE: { - current->get_text_edit()->paste(); - current->get_text_edit()->call_deferred("grab_focus"); - - } break; - case EDIT_SELECT_ALL: { - - current->get_text_edit()->select_all(); - current->get_text_edit()->call_deferred("grab_focus"); - - } break; - case EDIT_MOVE_LINE_UP: { - - TextEdit *tx = current->get_text_edit(); - Ref<Script> scr = current->get_edited_script(); - if (scr.is_null()) - return; - - tx->begin_complex_operation(); - if (tx->is_selection_active()) - { - int from_line = tx->get_selection_from_line(); - int from_col = tx->get_selection_from_column(); - int to_line = tx->get_selection_to_line(); - int to_column = tx->get_selection_to_column(); - - for (int i = from_line; i <= to_line; i++) - { - int line_id = i; - int next_id = i - 1; - - if (line_id == 0 || next_id < 0) - return; - - swap_lines(tx, line_id, next_id); - } - int from_line_up = from_line > 0 ? from_line-1 : from_line; - int to_line_up = to_line > 0 ? to_line-1 : to_line; - tx->select(from_line_up, from_col, to_line_up, to_column); - } - else - { - int line_id = tx->cursor_get_line(); - int next_id = line_id - 1; - - if (line_id == 0 || next_id < 0) - return; - - swap_lines(tx, line_id, next_id); - } - tx->end_complex_operation(); - tx->update(); - - } break; - case EDIT_MOVE_LINE_DOWN: { - - TextEdit *tx = current->get_text_edit(); - Ref<Script> scr = current->get_edited_script(); - if (scr.is_null()) - return; - - tx->begin_complex_operation(); - if (tx->is_selection_active()) - { - int from_line = tx->get_selection_from_line(); - int from_col = tx->get_selection_from_column(); - int to_line = tx->get_selection_to_line(); - int to_column = tx->get_selection_to_column(); - - for (int i = to_line; i >= from_line; i--) - { - int line_id = i; - int next_id = i + 1; - - if (line_id == tx->get_line_count()-1 || next_id > tx->get_line_count()) - return; - - swap_lines(tx, line_id, next_id); - } - int from_line_down = from_line < tx->get_line_count() ? from_line+1 : from_line; - int to_line_down = to_line < tx->get_line_count() ? to_line+1 : to_line; - tx->select(from_line_down, from_col, to_line_down, to_column); - } - else - { - int line_id = tx->cursor_get_line(); - int next_id = line_id + 1; - - if (line_id == tx->get_line_count()-1 || next_id > tx->get_line_count()) - return; - - swap_lines(tx, line_id, next_id); - } - tx->end_complex_operation(); - tx->update(); - - } break; - case EDIT_INDENT_LEFT: { - - TextEdit *tx = current->get_text_edit(); - Ref<Script> scr = current->get_edited_script(); - if (scr.is_null()) - return; - - tx->begin_complex_operation(); - if (tx->is_selection_active()) - { - tx->indent_selection_left(); - } - else - { - int begin = tx->cursor_get_line(); - String line_text = tx->get_line(begin); - // begins with tab - if (line_text.begins_with("\t")) - { - line_text = line_text.substr(1, line_text.length()); - tx->set_line(begin, line_text); - } - // begins with 4 spaces - else if (line_text.begins_with(" ")) - { - line_text = line_text.substr(4, line_text.length()); - tx->set_line(begin, line_text); - } - } - tx->end_complex_operation(); - tx->update(); - //tx->deselect(); - - } break; - case EDIT_INDENT_RIGHT: { - - TextEdit *tx = current->get_text_edit(); - Ref<Script> scr = current->get_edited_script(); - if (scr.is_null()) - return; - - tx->begin_complex_operation(); - if (tx->is_selection_active()) - { - tx->indent_selection_right(); - } - else - { - int begin = tx->cursor_get_line(); - String line_text = tx->get_line(begin); - line_text = '\t' + line_text; - tx->set_line(begin, line_text); - } - tx->end_complex_operation(); - tx->update(); - //tx->deselect(); - - } break; - case EDIT_CLONE_DOWN: { - - TextEdit *tx = current->get_text_edit(); - Ref<Script> scr = current->get_edited_script(); - if (scr.is_null()) - return; - - int from_line = tx->cursor_get_line(); - int to_line = tx->cursor_get_line(); - int column = tx->cursor_get_column(); - - if (tx->is_selection_active()) { - from_line = tx->get_selection_from_line(); - to_line = tx->get_selection_to_line(); - column = tx->cursor_get_column(); - } - int next_line = to_line + 1; - - tx->begin_complex_operation(); - for (int i = from_line; i <= to_line; i++) { - - if (i >= tx->get_line_count() - 1) { - tx->set_line(i, tx->get_line(i) + "\n"); - } - String line_clone = tx->get_line(i); - tx->insert_at(line_clone, next_line); - next_line++; - } - - tx->cursor_set_column(column); - if (tx->is_selection_active()) { - tx->select(to_line + 1, tx->get_selection_from_column(), next_line - 1, tx->get_selection_to_column()); - } - - tx->end_complex_operation(); - tx->update(); - - } break; - case EDIT_TOGGLE_COMMENT: { - - TextEdit *tx = current->get_text_edit(); - Ref<Script> scr = current->get_edited_script(); - if (scr.is_null()) - return; - - tx->begin_complex_operation(); - if (tx->is_selection_active()) - { - int begin = tx->get_selection_from_line(); - int end = tx->get_selection_to_line(); - - // End of selection ends on the first column of the last line, ignore it. - if(tx->get_selection_to_column() == 0) - end -= 1; - - for (int i = begin; i <= end; i++) - { - String line_text = tx->get_line(i); - - if (line_text.begins_with("#")) - line_text = line_text.substr(1, line_text.length()); - else - line_text = "#" + line_text; - tx->set_line(i, line_text); - } - } - else - { - int begin = tx->cursor_get_line(); - String line_text = tx->get_line(begin); - - if (line_text.begins_with("#")) - line_text = line_text.substr(1, line_text.length()); - else - line_text = "#" + line_text; - tx->set_line(begin, line_text); - } - tx->end_complex_operation(); - tx->update(); - //tx->deselect(); - - } break; - case EDIT_COMPLETE: { - - current->get_text_edit()->query_code_comple(); - - } break; - case EDIT_AUTO_INDENT: { - - TextEdit *te = current->get_text_edit(); - String text = te->get_text(); - Ref<Script> scr = current->get_edited_script(); - if (scr.is_null()) - return; - int begin,end; - if (te->is_selection_active()) { - begin=te->get_selection_from_line(); - end=te->get_selection_to_line(); - } else { - begin=0; - end=te->get_line_count()-1; - } - scr->get_language()->auto_indent_code(text,begin,end); - te->set_text(text); - - - } break; case FILE_TOOL_RELOAD: case FILE_TOOL_RELOAD_SOFT: { - TextEdit *te = current->get_text_edit(); - Ref<Script> scr = current->get_edited_script(); - if (scr.is_null()) - return; - scr->set_source_code(te->get_text()); - bool soft = p_option==FILE_TOOL_RELOAD_SOFT || scr->get_instance_base_type()=="EditorPlugin"; //always soft-reload editor plugins - - scr->get_language()->reload_tool_script(scr,soft); - } break; - case EDIT_TRIM_TRAILING_WHITESAPCE: { - _trim_trailing_whitespace(current->get_text_edit()); - } break; - case SEARCH_FIND: { - - current->get_find_replace_bar()->popup_search(); - } break; - case SEARCH_FIND_NEXT: { - - current->get_find_replace_bar()->search_next(); - } break; - case SEARCH_FIND_PREV: { - - current->get_find_replace_bar()->search_prev(); - } break; - case SEARCH_REPLACE: { + current->reload(p_option==FILE_TOOL_RELOAD_SOFT); - current->get_find_replace_bar()->popup_replace(); } break; - case SEARCH_LOCATE_FUNCTION: { - if (!current) - return; - quick_open->popup(current->get_functions()); - } break; - case SEARCH_GOTO_LINE: { - - goto_line_dialog->popup_find_line(current->get_text_edit()); - } break; - case DEBUG_TOGGLE_BREAKPOINT: { - int line=current->get_text_edit()->cursor_get_line(); - bool dobreak = !current->get_text_edit()->is_line_set_as_breakpoint(line); - current->get_text_edit()->set_line_as_breakpoint(line,dobreak); - get_debugger()->set_breakpoint(current->get_edited_script()->get_path(),line+1,dobreak); - } break; - case DEBUG_REMOVE_ALL_BREAKPOINTS: { - List<int> bpoints; - current->get_text_edit()->get_breakpoints(&bpoints); - - for(List<int>::Element *E=bpoints.front();E;E=E->next()) { - int line = E->get(); - bool dobreak = !current->get_text_edit()->is_line_set_as_breakpoint(line); - current->get_text_edit()->set_line_as_breakpoint(line,dobreak); - get_debugger()->set_breakpoint(current->get_edited_script()->get_path(),line+1,dobreak); - } - } - case DEBUG_GOTO_NEXT_BREAKPOINT: { - List<int> bpoints; - current->get_text_edit()->get_breakpoints(&bpoints); - if (bpoints.size() <= 0) { - return; - } - - int line=current->get_text_edit()->cursor_get_line(); - // wrap around - if (line >= bpoints[bpoints.size() - 1]) { - current->get_text_edit()->cursor_set_line(bpoints[0]); + case FILE_CLOSE: { + if (current->is_unsaved()) { + _ask_close_current_unsaved_tab(current); } else { - for(List<int>::Element *E=bpoints.front();E;E=E->next()) { - int bline = E->get(); - if (bline > line) { - current->get_text_edit()->cursor_set_line(bline); - return; - } - } + _close_current_tab(); } - } break; - case DEBUG_GOTO_PREV_BREAKPOINT: { - List<int> bpoints; - current->get_text_edit()->get_breakpoints(&bpoints); - if (bpoints.size() <= 0) { - return; - } - - int line=current->get_text_edit()->cursor_get_line(); - // wrap around - if (line <= bpoints[0]) { - current->get_text_edit()->cursor_set_line(bpoints[bpoints.size() - 1]); - } else { - for(List<int>::Element *E=bpoints.back();E;E=E->prev()) { - int bline = E->get(); - if (bline < line) { - current->get_text_edit()->cursor_set_line(bline); - return; - } - } - } - + case CLOSE_DOCS: { + _close_docs_tab(); + } break; + case CLOSE_ALL: { + _close_all_tabs(); } break; case DEBUG_NEXT: { @@ -1614,24 +892,6 @@ void ScriptEditor::_menu_option(int p_option) { debugger->debug_continue(); } break; - case HELP_CONTEXTUAL: { - String text = current->get_text_edit()->get_selection_text(); - if (text == "") - text = current->get_text_edit()->get_word_under_cursor(); - if (text != "") - help_search_dialog->popup(text); - } break; - case FILE_CLOSE: { - if (current->get_text_edit()->get_version()!=current->get_text_edit()->get_saved_version()) { - erase_tab_confirm->set_text("Close and save changes?\n\""+current->get_name()+"\""); - erase_tab_confirm->popup_centered_minsize(); - } else { - _close_current_tab(); - } - } break; - case CLOSE_DOCS: { - _close_docs_tab(); - } break; case WINDOW_MOVE_LEFT: { if (tab_container->get_current_tab()>0) { @@ -1670,10 +930,10 @@ void ScriptEditor::_menu_option(int p_option) { switch(p_option) { - case SEARCH_FIND: { + case HELP_SEARCH_FIND: { help->popup_search(); } break; - case SEARCH_FIND_NEXT: { + case HELP_SEARCH_FIND_NEXT: { help->search_again(); } break; case FILE_CLOSE: { @@ -1682,6 +942,9 @@ void ScriptEditor::_menu_option(int p_option) { case CLOSE_DOCS: { _close_docs_tab(); } break; + case CLOSE_ALL: { + _close_all_tabs(); + } break; } @@ -1756,6 +1019,20 @@ void ScriptEditor::_notification(int p_what) { } +bool ScriptEditor::can_take_away_focus() const { + + int selected = tab_container->get_current_tab(); + if (selected<0 || selected>=tab_container->get_child_count()) + return true; + + ScriptEditorBase *current = tab_container->get_child(selected)->cast_to<ScriptEditorBase>(); + if (!current) + return true; + + + return current->can_lose_focus_on_node_selection(); + +} void ScriptEditor::close_builtin_scripts_from_scene(const String& p_scene) { @@ -1763,11 +1040,11 @@ void ScriptEditor::close_builtin_scripts_from_scene(const String& p_scene) { for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); - if (ste) { + if (se) { - Ref<Script> script = ste->get_edited_script(); + Ref<Script> script = se->get_edited_script(); if (!script.is_valid()) continue; @@ -1816,12 +1093,12 @@ Dictionary ScriptEditor::get_state() const { for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) + ScriptTextEditor *se = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); + if (!se) continue; - Ref<Script> script = ste->get_edited_script(); + Ref<Script> script = se->get_edited_script(); if (script->get_path()!="" && script->get_path().find("local://")==-1 && script->get_path().find("::")==-1) { paths.push_back(script->get_path()); @@ -1893,10 +1170,10 @@ void ScriptEditor::clear() { List<ScriptTextEditor*> stes; for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) + ScriptTextEditor *se = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); + if (!se) continue; - stes.push_back(ste); + stes.push_back(se); } @@ -1922,16 +1199,16 @@ void ScriptEditor::clear() { void ScriptEditor::get_breakpoints(List<String> *p_breakpoints) { + for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (!se) continue; List<int> bpoints; - ste->get_text_edit()->get_breakpoints(&bpoints); - - Ref<Script> script = ste->get_edited_script(); + se->get_breakpoints(&bpoints); + Ref<Script> script = se->get_edited_script(); String base = script->get_path(); ERR_CONTINUE( base.begins_with("local://") || base=="" ); @@ -1957,10 +1234,10 @@ void ScriptEditor::ensure_focus_current() { Control *c = tab_container->get_child(cidx)->cast_to<Control>(); if (!c) return; - ScriptTextEditor *ste = c->cast_to<ScriptTextEditor>(); - if (!ste) + ScriptEditorBase *se = c->cast_to<ScriptEditorBase>(); + if (!se) return; - ste->get_text_edit()->grab_focus(); + se->ensure_focus(); } void ScriptEditor::_script_selected(int p_idx) { @@ -1979,17 +1256,17 @@ void ScriptEditor::ensure_select_current() { Node *current = tab_container->get_child(tab_container->get_current_tab()); - ScriptTextEditor *ste = current->cast_to<ScriptTextEditor>(); - if (ste) { + ScriptEditorBase *se = current->cast_to<ScriptEditorBase>(); + if (se) { - Ref<Script> script = ste->get_edited_script(); + Ref<Script> script = se->get_edited_script(); if (!grab_focus_block && is_visible()) - ste->get_text_edit()->grab_focus(); + se->ensure_focus(); + - edit_menu->show(); - search_menu->show(); - script_search_menu->hide(); + //edit_menu->show(); + //search_menu->show(); } @@ -1997,14 +1274,14 @@ void ScriptEditor::ensure_select_current() { EditorHelp *eh = current->cast_to<EditorHelp>(); if (eh) { - edit_menu->hide(); - search_menu->hide(); - script_search_menu->show(); + //edit_menu->hide(); + //search_menu->hide(); + //script_search_menu->show(); } } - + _update_selected_editor_menu(); @@ -2047,6 +1324,7 @@ struct _ScriptEditorItemData { void ScriptEditor::_update_script_colors() { bool enabled = EditorSettings::get_singleton()->get("text_editor/script_temperature_enabled"); + bool highlight_current = EditorSettings::get_singleton()->get("text_editor/highlight_current_script"); if (!enabled) return; @@ -2074,8 +1352,12 @@ void ScriptEditor::_update_script_colors() { int non_zero_hist_size = ( hist_size == 0 ) ? 1 : hist_size; float v = Math::ease((edit_pass-pass)/float(non_zero_hist_size),0.4); - - script_list->set_item_custom_bg_color(i,hot_color.linear_interpolate(cold_color,v)); + bool current = tab_container->get_current_tab() == c; + if (current && highlight_current) { + script_list->set_item_custom_bg_color(i, EditorSettings::get_singleton()->get("text_editor/current_script_background_color")); + } else { + script_list->set_item_custom_bg_color(i,hot_color.linear_interpolate(cold_color,v)); + } } } @@ -2099,19 +1381,19 @@ void ScriptEditor::_update_script_names() { for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (ste) { + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (se) { - String name = ste->get_name(); - Ref<Texture> icon = ste->get_icon(); - String tooltip = ste->get_edited_script()->get_path(); + String name = se->get_name(); + Ref<Texture> icon = se->get_icon(); + String tooltip = se->get_edited_script()->get_path(); _ScriptEditorItemData sd; sd.icon=icon; sd.name=name; sd.tooltip=tooltip; sd.index=i; - sd.used=used.has(ste->get_edited_script()); + sd.used=used.has(se->get_edited_script()); sd.category=0; sedata.push_back(sd); @@ -2166,7 +1448,7 @@ void ScriptEditor::_update_script_names() { -void ScriptEditor::edit(const Ref<Script>& p_script) { +void ScriptEditor::edit(const Ref<Script>& p_script, bool p_grab_focus) { if (p_script.is_null()) return; @@ -2202,11 +1484,11 @@ void ScriptEditor::edit(const Ref<Script>& p_script) { for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (!se) continue; - if (ste->get_edited_script()==p_script) { + if (se->get_edited_script()==p_script) { if (open_dominant || !EditorNode::get_singleton()->is_changing_scene()) { if (tab_container->get_current_tab()!=i) { @@ -2214,7 +1496,7 @@ void ScriptEditor::edit(const Ref<Script>& p_script) { script_list->select( script_list->find_metadata(i) ); } if (is_visible()) - ste->get_text_edit()->grab_focus(); + se->ensure_focus(); } return; } @@ -2222,33 +1504,37 @@ void ScriptEditor::edit(const Ref<Script>& p_script) { // doesn't have it, make a new one - ScriptTextEditor *ste = memnew( ScriptTextEditor ); - ste->set_edited_script(p_script); - ste->get_text_edit()->set_tooltip_request_func(this,"_get_debug_tooltip",ste); - ste->get_text_edit()->set_scroll_pass_end_of_file(EditorSettings::get_singleton()->get("text_editor/scroll_past_end_of_file")); - ste->get_text_edit()->set_auto_brace_completion(EditorSettings::get_singleton()->get("text_editor/auto_brace_complete")); - ste->get_text_edit()->set_tab_size(EditorSettings::get_singleton()->get("text_editor/tab_size")); - ste->get_text_edit()->set_draw_tabs(EditorSettings::get_singleton()->get("text_editor/draw_tabs")); - ste->get_text_edit()->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/show_line_numbers")); - ste->get_text_edit()->set_syntax_coloring(EditorSettings::get_singleton()->get("text_editor/syntax_highlighting")); - ste->get_text_edit()->set_highlight_all_occurrences(EditorSettings::get_singleton()->get("text_editor/highlight_all_occurrences")); - ste->get_text_edit()->cursor_set_blink_enabled(EditorSettings::get_singleton()->get("text_editor/caret_blink")); - ste->get_text_edit()->cursor_set_blink_speed(EditorSettings::get_singleton()->get("text_editor/caret_blink_speed")); - ste->get_text_edit()->set_draw_breakpoint_gutter(EditorSettings::get_singleton()->get("text_editor/show_breakpoint_gutter")); - ste->get_text_edit()->cursor_set_block_mode(EditorSettings::get_singleton()->get("text_editor/block_caret")); - ste->get_text_edit()->set_callhint_settings( - EditorSettings::get_singleton()->get("text_editor/put_callhint_tooltip_below_current_line"), - EditorSettings::get_singleton()->get("text_editor/callhint_tooltip_offset")); - ste->get_text_edit()->connect("breakpoint_toggled", this, "_breakpoint_toggled"); - tab_container->add_child(ste); - _go_to_tab(tab_container->get_tab_count()-1); + ScriptEditorBase *se; + + for(int i=script_editor_func_count-1;i>=0;i--) { + se = script_editor_funcs[i](p_script); + if (se) + break; + } + ERR_FAIL_COND(!se); + tab_container->add_child(se); + se->set_edited_script(p_script); + se->set_tooltip_request_func("_get_debug_tooltip",this); + if (se->get_edit_menu()) { + se->get_edit_menu()->hide(); + menu_hb->add_child(se->get_edit_menu()); + menu_hb->move_child(se->get_edit_menu(),1); + } + + + if (p_grab_focus) { + _go_to_tab(tab_container->get_tab_count()-1); + } + _update_script_names(); _save_layout(); - ste->connect("name_changed",this,"_update_script_names"); + se->connect("name_changed",this,"_update_script_names"); + se->connect("request_help_search",this,"_help_search"); + //test for modification, maybe the script was not edited but was loaded @@ -2262,20 +1548,21 @@ void ScriptEditor::save_all_scripts() { for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (!se) continue; + if (!se->is_unsaved()) + continue; + if (trim_trailing_whitespace_on_save) { - _trim_trailing_whitespace(ste->get_text_edit()); + se->trim_trailing_whitespace(); } - if (ste->get_text_edit()->get_version()==ste->get_text_edit()->get_saved_version()) - continue; - Ref<Script> script = ste->get_edited_script(); + Ref<Script> script = se->get_edited_script(); if (script.is_valid()) - ste->apply_code(); + se->apply_code(); if (script->get_path()!="" && script->get_path().find("local://")==-1 &&script->get_path().find("::")==-1) { //external script, save it @@ -2287,16 +1574,18 @@ void ScriptEditor::save_all_scripts() { } + _update_script_names(); + } void ScriptEditor::apply_scripts() const { for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (!se) continue; - ste->apply_code(); + se->apply_code(); } } @@ -2323,6 +1612,17 @@ void ScriptEditor::_editor_stop() { debug_menu->get_popup()->set_item_disabled( debug_menu->get_popup()->get_item_index(DEBUG_STEP), true ); debug_menu->get_popup()->set_item_disabled( debug_menu->get_popup()->get_item_index(DEBUG_BREAK), true ); debug_menu->get_popup()->set_item_disabled( debug_menu->get_popup()->get_item_index(DEBUG_CONTINUE), true ); + + for(int i=0;i<tab_container->get_child_count();i++) { + + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (!se) { + + continue; + } + + se->set_debugger_active(false); + } } @@ -2337,28 +1637,15 @@ void ScriptEditor::_add_callback(Object *p_obj, const String& p_function, const for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (!se) continue; - if (ste->get_edited_script()!=script) + if (se->get_edited_script()!=script) continue; - String code = ste->get_text_edit()->get_text(); - int pos = script->get_language()->find_function(p_function,code); - if (pos==-1) { - //does not exist - ste->get_text_edit()->deselect(); - pos=ste->get_text_edit()->get_line_count()+2; - String func = script->get_language()->make_function("",p_function,p_args); - //code=code+func; - ste->get_text_edit()->cursor_set_line(pos+1); - ste->get_text_edit()->cursor_set_column(1000000); //none shall be that big - ste->get_text_edit()->insert_text_at_cursor("\n\n"+func); - } + se->add_callback(p_function,p_args); _go_to_tab(i); - ste->get_text_edit()->cursor_set_line(pos); - ste->get_text_edit()->cursor_set_column(1); script_list->select( script_list->find_metadata(i) ); @@ -2397,21 +1684,11 @@ void ScriptEditor::_editor_settings_changed() { for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (!ste) + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (!se) continue; - ste->get_text_edit()->set_auto_brace_completion(EditorSettings::get_singleton()->get("text_editor/auto_brace_complete")); - ste->get_text_edit()->set_scroll_pass_end_of_file(EditorSettings::get_singleton()->get("text_editor/scroll_past_end_of_file")); - ste->get_text_edit()->set_tab_size(EditorSettings::get_singleton()->get("text_editor/tab_size")); - ste->get_text_edit()->set_draw_tabs(EditorSettings::get_singleton()->get("text_editor/draw_tabs")); - ste->get_text_edit()->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/show_line_numbers")); - ste->get_text_edit()->set_syntax_coloring(EditorSettings::get_singleton()->get("text_editor/syntax_highlighting")); - ste->get_text_edit()->set_highlight_all_occurrences(EditorSettings::get_singleton()->get("text_editor/highlight_all_occurrences")); - ste->get_text_edit()->cursor_set_blink_enabled(EditorSettings::get_singleton()->get("text_editor/caret_blink")); - ste->get_text_edit()->cursor_set_blink_speed(EditorSettings::get_singleton()->get("text_editor/caret_blink_speed")); - ste->get_text_edit()->set_draw_breakpoint_gutter(EditorSettings::get_singleton()->get("text_editor/show_breakpoint_gutter")); - ste->get_text_edit()->cursor_set_block_mode(EditorSettings::get_singleton()->get("text_editor/block_caret")); + se->update_settings(); } ScriptServer::set_reload_scripts_on_save(EDITOR_DEF("text_editor/auto_reload_and_parse_scripts_on_save",true)); @@ -2507,10 +1784,10 @@ void ScriptEditor::get_window_layout(Ref<ConfigFile> p_layout) { for(int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); - if (ste) { + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (se) { - String path = ste->get_edited_script()->get_path(); + String path = se->get_edited_script()->get_path(); if (!path.is_resource_file()) continue; @@ -2589,19 +1866,47 @@ void ScriptEditor::_help_class_goto(const String& p_desc) { _save_layout(); } +void ScriptEditor::_update_selected_editor_menu() { + + for(int i=0;i<tab_container->get_child_count();i++) { + + bool current = tab_container->get_current_tab() == i; + + ScriptEditorBase *se = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); + if (se && se->get_edit_menu()) { + + if (current) + se->get_edit_menu()->show(); + else + se->get_edit_menu()->hide(); + } + + EditorHelp *eh = tab_container->get_child(i)->cast_to<EditorHelp>(); + + if (eh) { + + if (current) + script_search_menu->show(); + else + script_search_menu->hide(); + } + + + } + +} + void ScriptEditor::_update_history_pos(int p_new_pos) { Node *n = tab_container->get_current_tab_control(); - if (n->cast_to<ScriptTextEditor>()) { + if (n->cast_to<ScriptEditorBase>()) { - history[history_pos].scroll_pos=n->cast_to<ScriptTextEditor>()->get_text_edit()->get_v_scroll(); - history[history_pos].cursor_column=n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_get_column(); - history[history_pos].cursor_row=n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_get_line(); + history[history_pos].state=n->cast_to<ScriptEditorBase>()->get_edit_state(); } if (n->cast_to<EditorHelp>()) { - history[history_pos].scroll_pos=n->cast_to<EditorHelp>()->get_scroll(); + history[history_pos].state=n->cast_to<EditorHelp>()->get_scroll(); } history_pos=p_new_pos; @@ -2609,23 +1914,22 @@ void ScriptEditor::_update_history_pos(int p_new_pos) { n = history[history_pos].control; - if (n->cast_to<ScriptTextEditor>()) { + if (n->cast_to<ScriptEditorBase>()) { - n->cast_to<ScriptTextEditor>()->get_text_edit()->set_v_scroll(history[history_pos].scroll_pos); - n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_set_column( history[history_pos].cursor_column ); - n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_set_line( history[history_pos].cursor_row ); - n->cast_to<ScriptTextEditor>()->get_text_edit()->grab_focus(); + n->cast_to<ScriptEditorBase>()->set_edit_state(history[history_pos].state); + n->cast_to<ScriptEditorBase>()->ensure_focus(); } if (n->cast_to<EditorHelp>()) { - n->cast_to<EditorHelp>()->set_scroll(history[history_pos].scroll_pos); + n->cast_to<EditorHelp>()->set_scroll(history[history_pos].state); n->cast_to<EditorHelp>()->set_focused(); } n->set_meta("__editor_pass",++edit_pass); _update_script_names(); _update_history_arrows(); + _update_selected_editor_menu(); } @@ -2657,52 +1961,45 @@ void ScriptEditor::set_scene_root_script( Ref<Script> p_script ) { bool ScriptEditor::script_go_to_method(Ref<Script> p_script, const String& p_method) { - Vector<String> functions; - bool found=false; for (int i=0;i<tab_container->get_child_count();i++) { - ScriptTextEditor *current = tab_container->get_child(i)->cast_to<ScriptTextEditor>(); + ScriptEditorBase *current = tab_container->get_child(i)->cast_to<ScriptEditorBase>(); if (current && current->get_edited_script()==p_script) { - functions=current->get_functions(); - found=true; + if (current->goto_method(p_method)) { + edit(p_script); + return true; + } break; } } + return false; +} - if (!found) { - String errortxt; - int line=-1,col; - String text=p_script->get_source_code(); - List<String> fnc; - - if (p_script->get_language()->validate(text,line,col,errortxt,p_script->get_path(),&fnc)) { - - for (List<String>::Element *E=fnc.front();E;E=E->next()) - functions.push_back(E->get()); - } - } +void ScriptEditor::set_live_auto_reload_running_scripts(bool p_enabled) { - String method_search = p_method + ":"; + auto_reload_running_scripts=p_enabled; +} - for (int i=0;i<functions.size();i++) { - String function=functions[i]; +void ScriptEditor::_help_search(String p_text) { + help_search_dialog->popup(p_text); +} - if (function.begins_with(method_search)) { +void ScriptEditor::_open_script_request(const String& p_path) { - edit(p_script); - int line=function.get_slice(":",1).to_int(); - _goto_script_line2(line-1); - return true; - } + Ref<Script> script = ResourceLoader::load(p_path); + if (script.is_valid()) { + script_editor->edit(script,false); } - - return false; } -void ScriptEditor::set_live_auto_reload_running_scripts(bool p_enabled) { +int ScriptEditor::script_editor_func_count=0; +CreateScriptEditorFunc ScriptEditor::script_editor_funcs[ScriptEditor::SCRIPT_EDITOR_FUNC_MAX]; - auto_reload_running_scripts=p_enabled; +void ScriptEditor::register_create_script_editor_function(CreateScriptEditorFunc p_func) { + + ERR_FAIL_COND(script_editor_func_count==SCRIPT_EDITOR_FUNC_MAX); + script_editor_funcs[script_editor_func_count++]=p_func; } void ScriptEditor::_bind_methods() { @@ -2712,6 +2009,7 @@ void ScriptEditor::_bind_methods() { ObjectTypeDB::bind_method("_menu_option",&ScriptEditor::_menu_option); ObjectTypeDB::bind_method("_close_current_tab",&ScriptEditor::_close_current_tab); ObjectTypeDB::bind_method("_close_docs_tab", &ScriptEditor::_close_docs_tab); + ObjectTypeDB::bind_method("_close_all_tabs", &ScriptEditor::_close_all_tabs); ObjectTypeDB::bind_method("_editor_play",&ScriptEditor::_editor_play); ObjectTypeDB::bind_method("_editor_pause",&ScriptEditor::_editor_pause); ObjectTypeDB::bind_method("_editor_stop",&ScriptEditor::_editor_stop); @@ -2721,7 +2019,9 @@ void ScriptEditor::_bind_methods() { ObjectTypeDB::bind_method("_res_saved_callback",&ScriptEditor::_res_saved_callback); ObjectTypeDB::bind_method("_goto_script_line",&ScriptEditor::_goto_script_line); ObjectTypeDB::bind_method("_goto_script_line2",&ScriptEditor::_goto_script_line2); - ObjectTypeDB::bind_method("_breakpoint_toggled", &ScriptEditor::_breakpoint_toggled); + ObjectTypeDB::bind_method("_help_search",&ScriptEditor::_help_search); + + ObjectTypeDB::bind_method("_breaked",&ScriptEditor::_breaked); ObjectTypeDB::bind_method("_show_debugger",&ScriptEditor::_show_debugger); ObjectTypeDB::bind_method("_get_debug_tooltip",&ScriptEditor::_get_debug_tooltip); @@ -2749,6 +2049,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { completion_cache = memnew( EditorScriptCodeCompletionCache ); restoring_layout=false; waiting_update_names=false; + pending_auto_reload=false; auto_reload_running_scripts=false; editor=p_editor; @@ -2786,6 +2087,9 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_as", TTR("Save As..")), FILE_SAVE_AS); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_all", TTR("Save All"), KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_MASK_ALT|KEY_S), FILE_SAVE_ALL); file_menu->get_popup()->add_separator(); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reload_script_soft", TTR("Soft Reload Script"), KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_R), FILE_TOOL_RELOAD_SOFT); + file_menu->get_popup()->add_separator(); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_previous", TTR("History Prev"), KEY_MASK_CTRL|KEY_MASK_ALT|KEY_LEFT), WINDOW_PREV); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_next", TTR("History Next"), KEY_MASK_CTRL|KEY_MASK_ALT|KEY_RIGHT), WINDOW_NEXT); file_menu->get_popup()->add_separator(); @@ -2796,56 +2100,16 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { file_menu->get_popup()->add_separator(); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_docs", TTR("Close Docs")), CLOSE_DOCS); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_file", TTR("Close"), KEY_MASK_CMD | KEY_W), FILE_CLOSE); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_all", TTR("Close All")), CLOSE_ALL); file_menu->get_popup()->connect("item_pressed", this,"_menu_option"); - edit_menu = memnew( MenuButton ); - menu_hb->add_child(edit_menu); - edit_menu->set_text(TTR("Edit")); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/undo", TTR("Undo"), KEY_MASK_CMD|KEY_Z), EDIT_UNDO); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/redo", TTR("Redo"), KEY_MASK_CMD|KEY_Y), EDIT_REDO); - edit_menu->get_popup()->add_separator(); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/cut", TTR("Cut"), KEY_MASK_CMD|KEY_X), EDIT_CUT); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/copy", TTR("Copy"), KEY_MASK_CMD|KEY_C), EDIT_COPY); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/paste", TTR("Paste"), KEY_MASK_CMD|KEY_V), EDIT_PASTE); - edit_menu->get_popup()->add_separator(); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/select_all", TTR("Select All"), KEY_MASK_CMD|KEY_A), EDIT_SELECT_ALL); - edit_menu->get_popup()->add_separator(); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/move_up", TTR("Move Up"), KEY_MASK_ALT|KEY_UP), EDIT_MOVE_LINE_UP); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/move_down", TTR("Move Down"), KEY_MASK_ALT|KEY_DOWN), EDIT_MOVE_LINE_DOWN); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/indent_left", TTR("Indent Left"), KEY_MASK_ALT|KEY_LEFT), EDIT_INDENT_LEFT); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/indent_right", TTR("Indent Right"), KEY_MASK_ALT|KEY_RIGHT), EDIT_INDENT_RIGHT); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/toggle_comment", TTR("Toggle Comment"), KEY_MASK_CMD|KEY_K), EDIT_TOGGLE_COMMENT); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/clone_down", TTR("Clone Down"), KEY_MASK_CMD|KEY_B), EDIT_CLONE_DOWN); - edit_menu->get_popup()->add_separator(); -#ifdef OSX_ENABLED - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/complete_symbol", TTR("Complete Symbol"), KEY_MASK_CTRL|KEY_SPACE), EDIT_COMPLETE); -#else - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/complete_symbol", TTR("Complete Symbol"), KEY_MASK_CMD|KEY_SPACE), EDIT_COMPLETE); -#endif - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/trim_trailing_whitespace", TTR("Trim Trailing Whitespace"), KEY_MASK_CTRL|KEY_MASK_ALT|KEY_T), EDIT_TRIM_TRAILING_WHITESAPCE); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/auto_indent", TTR("Auto Indent"), KEY_MASK_CMD|KEY_I), EDIT_AUTO_INDENT); - edit_menu->get_popup()->connect("item_pressed", this,"_menu_option"); - edit_menu->get_popup()->add_separator(); - edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reload_script_soft", TTR("Soft Reload Script"), KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_R), FILE_TOOL_RELOAD_SOFT); - - - search_menu = memnew( MenuButton ); - menu_hb->add_child(search_menu); - search_menu->set_text(TTR("Search")); - search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find.."), KEY_MASK_CMD|KEY_F), SEARCH_FIND); - search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), SEARCH_FIND_NEXT); - search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_previous", TTR("Find Previous"), KEY_MASK_SHIFT|KEY_F3), SEARCH_FIND_PREV); - search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/replace", TTR("Replace.."), KEY_MASK_CMD|KEY_R), SEARCH_REPLACE); - search_menu->get_popup()->add_separator(); - search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/goto_function", TTR("Goto Function.."), KEY_MASK_SHIFT|KEY_MASK_CMD|KEY_F), SEARCH_LOCATE_FUNCTION); - search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/goto_line", TTR("Goto Line.."), KEY_MASK_CMD|KEY_L), SEARCH_GOTO_LINE); - search_menu->get_popup()->connect("item_pressed", this,"_menu_option"); + script_search_menu = memnew( MenuButton ); menu_hb->add_child(script_search_menu); script_search_menu->set_text(TTR("Search")); - script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find.."), KEY_MASK_CMD|KEY_F), SEARCH_FIND); - script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), SEARCH_FIND_NEXT); + script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find.."), KEY_MASK_CMD|KEY_F), HELP_SEARCH_FIND); + script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), HELP_SEARCH_FIND_NEXT); script_search_menu->get_popup()->connect("item_pressed", this,"_menu_option"); script_search_menu->hide(); @@ -2853,10 +2117,6 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { debug_menu = memnew( MenuButton ); menu_hb->add_child(debug_menu); debug_menu->set_text(TTR("Debug")); - debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_F9), DEBUG_TOGGLE_BREAKPOINT); - debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/remove_all_breakpoints", TTR("Remove All Breakpoints"), KEY_MASK_CTRL|KEY_MASK_SHIFT|KEY_F9), DEBUG_REMOVE_ALL_BREAKPOINTS); - debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/goto_next_breakpoint", TTR("Goto Next Breakpoint"), KEY_MASK_CTRL|KEY_PERIOD), DEBUG_GOTO_NEXT_BREAKPOINT); - debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/goto_previous_breakpoint", TTR("Goto Previous Breakpoint"), KEY_MASK_CTRL|KEY_COMMA), DEBUG_GOTO_PREV_BREAKPOINT); debug_menu->get_popup()->add_separator(); debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_over", TTR("Step Over"), KEY_F10), DEBUG_NEXT); debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_into", TTR("Step Into"), KEY_F11), DEBUG_STEP); @@ -2887,11 +2147,6 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { #endif - help_menu = memnew( MenuButton ); - menu_hb->add_child(help_menu); - help_menu->set_text(TTR("Help")); - help_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/Contextual", TTR("Contextual Help"), KEY_MASK_SHIFT|KEY_F1), HELP_CONTEXTUAL); - help_menu->get_popup()->connect("item_pressed", this,"_menu_option"); menu_hb->add_spacer(); @@ -2956,8 +2211,6 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { add_child(file_dialog); file_dialog->connect("file_selected", this,"_file_dialog_action"); - goto_line_dialog = memnew(GotoLineDialog); - add_child(goto_line_dialog); debugger = memnew( ScriptEditorDebugger(editor) ); debugger->connect("goto_script_line",this,"_goto_script_line"); @@ -2990,11 +2243,6 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { script_editor=this; - quick_open = memnew( ScriptEditorQuickOpen ); - add_child(quick_open); - - quick_open->connect("goto_line",this,"_goto_script_line2"); - Button *db = EditorNode::get_singleton()->add_bottom_panel_item(TTR("Debugger"),debugger); debugger->set_tool_button(db); @@ -3022,6 +2270,8 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { edit_pass=0; trim_trailing_whitespace_on_save = false; + + ScriptServer::edit_request_func=_open_script_request; } @@ -3145,9 +2395,11 @@ ScriptEditorPlugin::ScriptEditorPlugin(EditorNode *p_node) { EDITOR_DEF("external_editor/use_external_editor",false); EDITOR_DEF("external_editor/exec_path",""); EDITOR_DEF("text_editor/script_temperature_enabled",true); + EDITOR_DEF("text_editor/highlight_current_script", true); EDITOR_DEF("text_editor/script_temperature_history_size",15); EDITOR_DEF("text_editor/script_temperature_hot_color",Color(1,0,0,0.3)); EDITOR_DEF("text_editor/script_temperature_cold_color",Color(0,0,1,0.3)); + EDITOR_DEF("text_editor/current_script_background_color",Color(0.81,0.81,0.14,0.63)); EDITOR_DEF("text_editor/group_help_pages",true); EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING,"external_editor/exec_path",PROPERTY_HINT_GLOBAL_FILE)); EDITOR_DEF("external_editor/exec_flags",""); diff --git a/tools/editor/plugins/script_editor_plugin.h b/tools/editor/plugins/script_editor_plugin.h index 2f079b9fc7..907240a352 100644 --- a/tools/editor/plugins/script_editor_plugin.h +++ b/tools/editor/plugins/script_editor_plugin.h @@ -73,40 +73,45 @@ public: class ScriptEditorDebugger; -class ScriptTextEditor : public CodeTextEditor { - OBJ_TYPE( ScriptTextEditor, CodeTextEditor ); - Ref<Script> script; +class ScriptEditorBase : public Control { + OBJ_TYPE( ScriptEditorBase, Control ); - Vector<String> functions; - - -protected: - - - - virtual void _validate_script(); - virtual void _code_complete_script(const String& p_code, List<String>* r_options); - virtual void _load_theme_settings(); - void _notification(int p_what); - static void _bind_methods(); +public: + virtual void apply_code()=0; + virtual Ref<Script> get_edited_script() const=0; + virtual Vector<String> get_functions()=0; + virtual void set_edited_script(const Ref<Script>& p_script)=0; + virtual void reload_text()=0; + virtual String get_name()=0; + virtual Ref<Texture> get_icon()=0; + virtual bool is_unsaved()=0; + virtual Variant get_edit_state()=0; + virtual void set_edit_state(const Variant& p_state)=0; + virtual void goto_line(int p_line,bool p_with_error=false)=0; + virtual void trim_trailing_whitespace()=0; + virtual void ensure_focus()=0; + virtual void tag_saved_version()=0; + virtual void reload(bool p_soft)=0; + virtual void get_breakpoints(List<int> *p_breakpoints)=0; + virtual bool goto_method(const String& p_method)=0; + virtual void add_callback(const String& p_function,StringArray p_args)=0; + virtual void update_settings()=0; + virtual void set_debugger_active(bool p_active)=0; + virtual bool can_lose_focus_on_node_selection() { return true; } + + virtual void set_tooltip_request_func(String p_method,Object* p_obj)=0; + virtual Control *get_edit_menu()=0; + + ScriptEditorBase() {} +}; -public: - virtual void apply_code(); - Ref<Script> get_edited_script() const; - Vector<String> get_functions() ; - void set_edited_script(const Ref<Script>& p_script); - void reload_text(); - String get_name() ; - Ref<Texture> get_icon() ; - bool is_unsaved(); - ScriptTextEditor(); +typedef ScriptEditorBase* (*CreateScriptEditorFunc)(const Ref<Script>& p_script); -}; class EditorScriptCodeCompletionCache; @@ -128,43 +133,20 @@ class ScriptEditor : public VBoxContainer { FILE_SAVE_THEME_AS, FILE_CLOSE, CLOSE_DOCS, - EDIT_UNDO, - EDIT_REDO, - EDIT_CUT, - EDIT_COPY, - EDIT_PASTE, - EDIT_SELECT_ALL, - EDIT_COMPLETE, - EDIT_AUTO_INDENT, - EDIT_TRIM_TRAILING_WHITESAPCE, - EDIT_TOGGLE_COMMENT, - EDIT_MOVE_LINE_UP, - EDIT_MOVE_LINE_DOWN, - EDIT_INDENT_RIGHT, - EDIT_INDENT_LEFT, - EDIT_CLONE_DOWN, + CLOSE_ALL, FILE_TOOL_RELOAD, FILE_TOOL_RELOAD_SOFT, - SEARCH_FIND, - SEARCH_FIND_NEXT, - SEARCH_FIND_PREV, - SEARCH_REPLACE, - SEARCH_LOCATE_FUNCTION, - SEARCH_GOTO_LINE, - SEARCH_HELP, - SEARCH_CLASSES, - SEARCH_WEBSITE, - DEBUG_TOGGLE_BREAKPOINT, - DEBUG_REMOVE_ALL_BREAKPOINTS, - DEBUG_GOTO_NEXT_BREAKPOINT, - DEBUG_GOTO_PREV_BREAKPOINT, DEBUG_NEXT, DEBUG_STEP, DEBUG_BREAK, DEBUG_CONTINUE, DEBUG_SHOW, DEBUG_SHOW_KEEP_OPEN, - HELP_CONTEXTUAL, + SEARCH_HELP, + SEARCH_CLASSES, + SEARCH_WEBSITE, + HELP_SEARCH_FIND, + HELP_SEARCH_FIND_NEXT, WINDOW_MOVE_LEFT, WINDOW_MOVE_RIGHT, WINDOW_NEXT, @@ -175,10 +157,8 @@ class ScriptEditor : public VBoxContainer { HBoxContainer *menu_hb; MenuButton *file_menu; MenuButton *edit_menu; - MenuButton *search_menu; MenuButton *script_search_menu; MenuButton *debug_menu; - MenuButton *help_menu; Timer *autosave_timer; uint64_t idle; @@ -191,7 +171,6 @@ class ScriptEditor : public VBoxContainer { HSplitContainer *script_split; TabContainer *tab_container; EditorFileDialog *file_dialog; - GotoLineDialog *goto_line_dialog; ConfirmationDialog *erase_tab_confirm; ScriptCreateDialog *script_create_dialog; ScriptEditorDebugger* debugger; @@ -205,13 +184,17 @@ class ScriptEditor : public VBoxContainer { ToolButton *script_back; ToolButton *script_forward; + enum { + SCRIPT_EDITOR_FUNC_MAX=32 + }; + + static int script_editor_func_count; + static CreateScriptEditorFunc script_editor_funcs[SCRIPT_EDITOR_FUNC_MAX]; struct ScriptHistory { Control *control; - int scroll_pos; - int cursor_column; - int cursor_row; + Variant state; }; Vector<ScriptHistory> history; @@ -239,6 +222,9 @@ class ScriptEditor : public VBoxContainer { void _close_current_tab(); void _close_docs_tab(); + void _close_all_tabs(); + + void _ask_close_current_unsaved_tab(ScriptEditorBase *current); bool grab_focus_block; @@ -246,7 +232,7 @@ class ScriptEditor : public VBoxContainer { bool auto_reload_running_scripts; void _live_auto_reload_running_scripts(); - ScriptEditorQuickOpen *quick_open; + void _update_selected_editor_menu(); EditorScriptCodeCompletionCache *completion_cache; @@ -286,6 +272,7 @@ class ScriptEditor : public VBoxContainer { void _unhandled_input(const InputEvent& p_event); + void _help_search(String p_text); void _history_forward(); void _history_back(); @@ -303,6 +290,8 @@ class ScriptEditor : public VBoxContainer { int file_dialog_option; void _file_dialog_action(String p_file); + static void _open_script_request(const String& p_path); + static ScriptEditor *script_editor; protected: void _notification(int p_what); @@ -315,7 +304,7 @@ public: void apply_scripts() const; void ensure_select_current(); - void edit(const Ref<Script>& p_script); + void edit(const Ref<Script>& p_script,bool p_grab_focus=true); Dictionary get_state() const; void set_state(const Dictionary& p_state); @@ -323,8 +312,7 @@ public: void get_breakpoints(List<String> *p_breakpoints); - void swap_lines(TextEdit *tx, int line1, int line2); - void _breakpoint_toggled(const int p_row); + //void swap_lines(TextEdit *tx, int line1, int line2); void save_all_scripts(); @@ -339,9 +327,14 @@ public: void close_builtin_scripts_from_scene(const String& p_scene); + void goto_help(const String& p_desc) { _help_class_goto(p_desc); } + + bool can_take_away_focus() const; + ScriptEditorDebugger *get_debugger() { return debugger; } void set_live_auto_reload_running_scripts(bool p_enabled); + static void register_create_script_editor_function(CreateScriptEditorFunc p_func); ScriptEditor(EditorNode *p_editor); ~ScriptEditor(); }; diff --git a/tools/editor/plugins/script_text_editor.cpp b/tools/editor/plugins/script_text_editor.cpp new file mode 100644 index 0000000000..57cf8cbea3 --- /dev/null +++ b/tools/editor/plugins/script_text_editor.cpp @@ -0,0 +1,1091 @@ +/*************************************************************************/ +/* script_text_editor.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#include "script_text_editor.h" +#include "tools/editor/editor_settings.h" +#include "os/keyboard.h" +#include "tools/editor/script_editor_debugger.h" + +Vector<String> ScriptTextEditor::get_functions() { + + + String errortxt; + int line=-1,col; + TextEdit *te=code_editor->get_text_edit(); + String text = te->get_text(); + List<String> fnc; + + if (script->get_language()->validate(text,line,col,errortxt,script->get_path(),&fnc)) { + + //if valid rewrite functions to latest + functions.clear(); + for (List<String>::Element *E=fnc.front();E;E=E->next()) { + + functions.push_back(E->get()); + } + + + } + + return functions; +} + +void ScriptTextEditor::apply_code() { + + if (script.is_null()) + return; +// print_line("applying code"); + script->set_source_code(code_editor->get_text_edit()->get_text()); + script->update_exports(); +} + +Ref<Script> ScriptTextEditor::get_edited_script() const { + + return script; +} + +bool ScriptTextEditor::goto_method(const String& p_method) { + + + Vector<String> functions = get_functions(); + + String method_search = p_method + ":"; + + for (int i=0;i<functions.size();i++) { + String function=functions[i]; + + if (function.begins_with(method_search)) { + + int line=function.get_slice(":",1).to_int(); + goto_line(line-1); + return true; + } + } + + return false; +} + +void ScriptTextEditor::_load_theme_settings() { + + TextEdit *text_edit = code_editor->get_text_edit(); + + text_edit->clear_colors(); + + /* keyword color */ + + + text_edit->set_custom_bg_color(EDITOR_DEF("text_editor/background_color",Color(0,0,0,0))); + text_edit->add_color_override("completion_background_color", EDITOR_DEF("text_editor/completion_background_color", Color(0,0,0,0))); + text_edit->add_color_override("completion_selected_color", EDITOR_DEF("text_editor/completion_selected_color", Color::html("434244"))); + text_edit->add_color_override("completion_existing_color", EDITOR_DEF("text_editor/completion_existing_color", Color::html("21dfdfdf"))); + text_edit->add_color_override("completion_scroll_color", EDITOR_DEF("text_editor/completion_scroll_color", Color::html("ffffff"))); + text_edit->add_color_override("completion_font_color", EDITOR_DEF("text_editor/completion_font_color", Color::html("aaaaaa"))); + text_edit->add_color_override("font_color",EDITOR_DEF("text_editor/text_color",Color(0,0,0))); + text_edit->add_color_override("line_number_color",EDITOR_DEF("text_editor/line_number_color",Color(0,0,0))); + text_edit->add_color_override("caret_color",EDITOR_DEF("text_editor/caret_color",Color(0,0,0))); + text_edit->add_color_override("caret_background_color",EDITOR_DEF("text_editor/caret_background_color",Color(0,0,0))); + text_edit->add_color_override("font_selected_color",EDITOR_DEF("text_editor/text_selected_color",Color(1,1,1))); + text_edit->add_color_override("selection_color",EDITOR_DEF("text_editor/selection_color",Color(0.2,0.2,1))); + text_edit->add_color_override("brace_mismatch_color",EDITOR_DEF("text_editor/brace_mismatch_color",Color(1,0.2,0.2))); + text_edit->add_color_override("current_line_color",EDITOR_DEF("text_editor/current_line_color",Color(0.3,0.5,0.8,0.15))); + text_edit->add_color_override("word_highlighted_color",EDITOR_DEF("text_editor/word_highlighted_color",Color(0.8,0.9,0.9,0.15))); + text_edit->add_color_override("number_color",EDITOR_DEF("text_editor/number_color",Color(0.9,0.6,0.0,2))); + text_edit->add_color_override("function_color",EDITOR_DEF("text_editor/function_color",Color(0.4,0.6,0.8))); + text_edit->add_color_override("member_variable_color",EDITOR_DEF("text_editor/member_variable_color",Color(0.9,0.3,0.3))); + text_edit->add_color_override("mark_color", EDITOR_DEF("text_editor/mark_color", Color(1.0,0.4,0.4,0.4))); + text_edit->add_color_override("breakpoint_color", EDITOR_DEF("text_editor/breakpoint_color", Color(0.8,0.8,0.4,0.2))); + text_edit->add_color_override("search_result_color",EDITOR_DEF("text_editor/search_result_color",Color(0.05,0.25,0.05,1))); + text_edit->add_color_override("search_result_border_color",EDITOR_DEF("text_editor/search_result_border_color",Color(0.1,0.45,0.1,1))); + text_edit->add_constant_override("line_spacing", EDITOR_DEF("text_editor/line_spacing",4)); + + Color keyword_color= EDITOR_DEF("text_editor/keyword_color",Color(0.5,0.0,0.2)); + + List<String> keywords; + script->get_language()->get_reserved_words(&keywords); + for(List<String>::Element *E=keywords.front();E;E=E->next()) { + + text_edit->add_keyword_color(E->get(),keyword_color); + } + + //colorize core types + Color basetype_color= EDITOR_DEF("text_editor/base_type_color",Color(0.3,0.3,0.0)); + + text_edit->add_keyword_color("Vector2",basetype_color); + text_edit->add_keyword_color("Vector3",basetype_color); + text_edit->add_keyword_color("Plane",basetype_color); + text_edit->add_keyword_color("Quat",basetype_color); + text_edit->add_keyword_color("AABB",basetype_color); + text_edit->add_keyword_color("Matrix3",basetype_color); + text_edit->add_keyword_color("Transform",basetype_color); + text_edit->add_keyword_color("Color",basetype_color); + text_edit->add_keyword_color("Image",basetype_color); + text_edit->add_keyword_color("InputEvent",basetype_color); + text_edit->add_keyword_color("Rect2",basetype_color); + text_edit->add_keyword_color("NodePath",basetype_color); + + //colorize engine types + Color type_color= EDITOR_DEF("text_editor/engine_type_color",Color(0.0,0.2,0.4)); + + List<StringName> types; + ObjectTypeDB::get_type_list(&types); + + for(List<StringName>::Element *E=types.front();E;E=E->next()) { + + String n = E->get(); + if (n.begins_with("_")) + n = n.substr(1, n.length()); + + text_edit->add_keyword_color(n,type_color); + } + + //colorize comments + Color comment_color = EDITOR_DEF("text_editor/comment_color",Color::hex(0x797e7eff)); + List<String> comments; + script->get_language()->get_comment_delimiters(&comments); + + for(List<String>::Element *E=comments.front();E;E=E->next()) { + + String comment = E->get(); + String beg = comment.get_slice(" ",0); + String end = comment.get_slice_count(" ")>1?comment.get_slice(" ",1):String(); + + text_edit->add_color_region(beg,end,comment_color,end==""); + } + + //colorize strings + Color string_color = EDITOR_DEF("text_editor/string_color",Color::hex(0x6b6f00ff)); + List<String> strings; + script->get_language()->get_string_delimiters(&strings); + + for (List<String>::Element *E=strings.front();E;E=E->next()) { + + String string = E->get(); + String beg = string.get_slice(" ",0); + String end = string.get_slice_count(" ")>1?string.get_slice(" ",1):String(); + text_edit->add_color_region(beg,end,string_color,end==""); + } + + //colorize symbols + Color symbol_color= EDITOR_DEF("text_editor/symbol_color",Color::hex(0x005291ff)); + text_edit->set_symbol_color(symbol_color); + +} + + +void ScriptTextEditor::reload_text() { + + ERR_FAIL_COND(script.is_null()) ; + + TextEdit *te = code_editor->get_text_edit(); + int column = te->cursor_get_column(); + int row = te->cursor_get_line(); + int h = te->get_h_scroll(); + int v = te->get_v_scroll(); + + te->set_text(script->get_source_code()); + te->clear_undo_history(); + te->cursor_set_line(row); + te->cursor_set_column(column); + te->set_h_scroll(h); + te->set_v_scroll(v); + + te->tag_saved_version(); + + code_editor->update_line_and_column(); + +} + +void ScriptTextEditor::_notification(int p_what) { + + if (p_what==NOTIFICATION_READY) { + + //emit_signal("name_changed"); + } +} + +void ScriptTextEditor::add_callback(const String& p_function,StringArray p_args) { + + String code = code_editor->get_text_edit()->get_text(); + int pos = script->get_language()->find_function(p_function,code); + if (pos==-1) { + //does not exist + code_editor->get_text_edit()->deselect(); + pos=code_editor->get_text_edit()->get_line_count()+2; + String func = script->get_language()->make_function("",p_function,p_args); + //code=code+func; + code_editor->get_text_edit()->cursor_set_line(pos+1); + code_editor->get_text_edit()->cursor_set_column(1000000); //none shall be that big + code_editor->get_text_edit()->insert_text_at_cursor("\n\n"+func); + } + code_editor->get_text_edit()->cursor_set_line(pos); + code_editor->get_text_edit()->cursor_set_column(1); +} + +void ScriptTextEditor::update_settings() { + + code_editor->get_text_edit()->set_auto_brace_completion(EditorSettings::get_singleton()->get("text_editor/auto_brace_complete")); + code_editor->get_text_edit()->set_scroll_pass_end_of_file(EditorSettings::get_singleton()->get("text_editor/scroll_past_end_of_file")); + code_editor->get_text_edit()->set_tab_size(EditorSettings::get_singleton()->get("text_editor/tab_size")); + code_editor->get_text_edit()->set_draw_tabs(EditorSettings::get_singleton()->get("text_editor/draw_tabs")); + code_editor->get_text_edit()->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/show_line_numbers")); + code_editor->get_text_edit()->set_syntax_coloring(EditorSettings::get_singleton()->get("text_editor/syntax_highlighting")); + code_editor->get_text_edit()->set_highlight_all_occurrences(EditorSettings::get_singleton()->get("text_editor/highlight_all_occurrences")); + code_editor->get_text_edit()->cursor_set_blink_enabled(EditorSettings::get_singleton()->get("text_editor/caret_blink")); + code_editor->get_text_edit()->cursor_set_blink_speed(EditorSettings::get_singleton()->get("text_editor/caret_blink_speed")); + code_editor->get_text_edit()->set_draw_breakpoint_gutter(EditorSettings::get_singleton()->get("text_editor/show_breakpoint_gutter")); + code_editor->get_text_edit()->cursor_set_block_mode(EditorSettings::get_singleton()->get("text_editor/block_caret")); +} + +bool ScriptTextEditor::is_unsaved() { + + return code_editor->get_text_edit()->get_version()!=code_editor->get_text_edit()->get_saved_version(); +} + +Variant ScriptTextEditor::get_edit_state() { + + Dictionary state; + + state["scroll_pos"]=code_editor->get_text_edit()->get_v_scroll(); + state["column"]=code_editor->get_text_edit()->cursor_get_column(); + state["row"]=code_editor->get_text_edit()->cursor_get_line(); + + return state; +} + +void ScriptTextEditor::trim_trailing_whitespace() { + + TextEdit *tx = code_editor->get_text_edit(); + + bool trimed_whitespace = false; + for (int i = 0; i < tx->get_line_count(); i++) { + String line = tx->get_line(i); + if (line.ends_with(" ") || line.ends_with("\t")) { + + if (!trimed_whitespace) { + tx->begin_complex_operation(); + trimed_whitespace = true; + } + + int end = 0; + for (int j = line.length() - 1; j > -1; j--) { + if (line[j] != ' ' && line[j] != '\t') { + end = j+1; + break; + } + } + tx->set_line(i, line.substr(0, end)); + } + } + if (trimed_whitespace) { + tx->end_complex_operation(); + tx->update(); + } +} + +void ScriptTextEditor::tag_saved_version() { + + code_editor->get_text_edit()->tag_saved_version(); +} + +void ScriptTextEditor::goto_line(int p_line, bool p_with_error) { + code_editor->get_text_edit()->cursor_set_line(p_line); +} + +void ScriptTextEditor::ensure_focus() { + + code_editor->get_text_edit()->grab_focus(); +} + +void ScriptTextEditor::set_edit_state(const Variant& p_state) { + + Dictionary state=p_state; + code_editor->get_text_edit()->set_v_scroll(state["scroll_pos"]); + code_editor->get_text_edit()->cursor_set_column( state["column"]); + code_editor->get_text_edit()->cursor_set_line( state["row"] ); + code_editor->get_text_edit()->grab_focus(); + + //int scroll_pos; + //int cursor_column; + //int cursor_row; +} + +String ScriptTextEditor::get_name() { + String name; + + if (script->get_path().find("local://")==-1 && script->get_path().find("::")==-1) { + name=script->get_path().get_file(); + if (is_unsaved()) { + name+="(*)"; + } + } else if (script->get_name()!="") + name=script->get_name(); + else + name=script->get_type()+"("+itos(script->get_instance_ID())+")"; + + return name; + +} + +Ref<Texture> ScriptTextEditor::get_icon() { + + if (get_parent_control() && get_parent_control()->has_icon(script->get_type(),"EditorIcons")) { + return get_parent_control()->get_icon(script->get_type(),"EditorIcons"); + } + + return Ref<Texture>(); +} + + + +void ScriptTextEditor::set_edited_script(const Ref<Script>& p_script) { + + ERR_FAIL_COND(!script.is_null()); + + script=p_script; + + + _load_theme_settings(); + + code_editor->get_text_edit()->set_text(script->get_source_code()); + code_editor->get_text_edit()->clear_undo_history(); + code_editor->get_text_edit()->tag_saved_version(); + + emit_signal("name_changed"); + code_editor->update_line_and_column(); +} + + +void ScriptTextEditor::_validate_script() { + + String errortxt; + int line=-1,col; + TextEdit *te=code_editor->get_text_edit(); + + String text = te->get_text(); + List<String> fnc; + + if (!script->get_language()->validate(text,line,col,errortxt,script->get_path(),&fnc)) { + String error_text="error("+itos(line)+","+itos(col)+"): "+errortxt; + code_editor->set_error(error_text); + } else { + code_editor->set_error(""); + line=-1; + if (!script->is_tool()) { + script->set_source_code(text); + script->update_exports(); + //script->reload(); //will update all the variables in property editors + } + + functions.clear(); + for (List<String>::Element *E=fnc.front();E;E=E->next()) { + + functions.push_back(E->get()); + } + + } + + line--; + for(int i=0;i<te->get_line_count();i++) { + te->set_line_as_marked(i,line==i); + } + + emit_signal("name_changed"); +} + + +static Node* _find_node_for_script(Node* p_base, Node*p_current, const Ref<Script>& p_script) { + + if (p_current->get_owner()!=p_base && p_base!=p_current) + return NULL; + Ref<Script> c = p_current->get_script(); + if (c==p_script) + return p_current; + for(int i=0;i<p_current->get_child_count();i++) { + Node *found = _find_node_for_script(p_base,p_current->get_child(i),p_script); + if (found) + return found; + } + + return NULL; +} + +static void _find_changed_scripts_for_external_editor(Node* p_base, Node*p_current, Set<Ref<Script> > &r_scripts) { + + if (p_current->get_owner()!=p_base && p_base!=p_current) + return; + Ref<Script> c = p_current->get_script(); + + if (c.is_valid()) + r_scripts.insert(c); + + for(int i=0;i<p_current->get_child_count();i++) { + _find_changed_scripts_for_external_editor(p_base,p_current->get_child(i),r_scripts); + } + +} + +void ScriptEditor::_update_modified_scripts_for_external_editor(Ref<Script> p_for_script) { + + if (!bool(EditorSettings::get_singleton()->get("external_editor/use_external_editor"))) + return; + + Set<Ref<Script> > scripts; + + Node *base = get_tree()->get_edited_scene_root(); + if (base) { + _find_changed_scripts_for_external_editor(base,base,scripts); + } + + for (Set<Ref<Script> >::Element *E=scripts.front();E;E=E->next()) { + + Ref<Script> script = E->get(); + + if (p_for_script.is_valid() && p_for_script!=script) + continue; + + if (script->get_path()=="" || script->get_path().find("local://")!=-1 || script->get_path().find("::")!=-1) { + + continue; //internal script, who cares, though weird + } + + uint64_t last_date = script->get_last_modified_time(); + uint64_t date = FileAccess::get_modified_time(script->get_path()); + + if (last_date!=date) { + + Ref<Script> rel_script = ResourceLoader::load(script->get_path(),script->get_type(),true); + ERR_CONTINUE(!rel_script.is_valid()); + script->set_source_code( rel_script->get_source_code() ); + script->set_last_modified_time( rel_script->get_last_modified_time() ); + script->update_exports(); + } + + } +} + + +void ScriptTextEditor::_code_complete_scripts(void* p_ud,const String& p_code, List<String>* r_options) { + + ScriptTextEditor *ste = (ScriptTextEditor *)p_ud; + ste->_code_complete_script(p_code,r_options); +} + +void ScriptTextEditor::_code_complete_script(const String& p_code, List<String>* r_options) { + + Node *base = get_tree()->get_edited_scene_root(); + if (base) { + base = _find_node_for_script(base,base,script); + } + String hint; + Error err = script->get_language()->complete_code(p_code,script->get_path().get_base_dir(),base,r_options,hint); + if (hint!="") { + code_editor->get_text_edit()->set_code_hint(hint); + } + +} + +void ScriptTextEditor::_breakpoint_toggled(int p_row) { + + ScriptEditor::get_singleton()->get_debugger()->set_breakpoint(script->get_path(),p_row+1,code_editor->get_text_edit()->is_line_set_as_breakpoint(p_row)); + +} + +static void swap_lines(TextEdit *tx, int line1, int line2) +{ + String tmp = tx->get_line(line1); + String tmp2 = tx->get_line(line2); + tx->set_line(line2, tmp); + tx->set_line(line1, tmp2); + + tx->cursor_set_line(line2); +} + + +void ScriptTextEditor::_edit_option(int p_op) { + + switch(p_op) { + case EDIT_UNDO: { + code_editor->get_text_edit()->undo(); + code_editor->get_text_edit()->call_deferred("grab_focus"); + } break; + case EDIT_REDO: { + code_editor->get_text_edit()->redo(); + code_editor->get_text_edit()->call_deferred("grab_focus"); + } break; + case EDIT_CUT: { + + code_editor->get_text_edit()->cut(); + code_editor->get_text_edit()->call_deferred("grab_focus"); + } break; + case EDIT_COPY: { + code_editor->get_text_edit()->copy(); + code_editor->get_text_edit()->call_deferred("grab_focus"); + + } break; + case EDIT_PASTE: { + code_editor->get_text_edit()->paste(); + code_editor->get_text_edit()->call_deferred("grab_focus"); + + } break; + case EDIT_SELECT_ALL: { + + code_editor->get_text_edit()->select_all(); + code_editor->get_text_edit()->call_deferred("grab_focus"); + + } break; + case EDIT_MOVE_LINE_UP: { + + TextEdit *tx = code_editor->get_text_edit(); + Ref<Script> scr = script; + if (scr.is_null()) + return; + + tx->begin_complex_operation(); + if (tx->is_selection_active()) + { + int from_line = tx->get_selection_from_line(); + int from_col = tx->get_selection_from_column(); + int to_line = tx->get_selection_to_line(); + int to_column = tx->get_selection_to_column(); + + for (int i = from_line; i <= to_line; i++) + { + int line_id = i; + int next_id = i - 1; + + if (line_id == 0 || next_id < 0) + return; + + swap_lines(tx, line_id, next_id); + } + int from_line_up = from_line > 0 ? from_line-1 : from_line; + int to_line_up = to_line > 0 ? to_line-1 : to_line; + tx->select(from_line_up, from_col, to_line_up, to_column); + } + else + { + int line_id = tx->cursor_get_line(); + int next_id = line_id - 1; + + if (line_id == 0 || next_id < 0) + return; + + swap_lines(tx, line_id, next_id); + } + tx->end_complex_operation(); + tx->update(); + + } break; + case EDIT_MOVE_LINE_DOWN: { + + TextEdit *tx = code_editor->get_text_edit(); + Ref<Script> scr = get_edited_script(); + if (scr.is_null()) + return; + + tx->begin_complex_operation(); + if (tx->is_selection_active()) + { + int from_line = tx->get_selection_from_line(); + int from_col = tx->get_selection_from_column(); + int to_line = tx->get_selection_to_line(); + int to_column = tx->get_selection_to_column(); + + for (int i = to_line; i >= from_line; i--) + { + int line_id = i; + int next_id = i + 1; + + if (line_id == tx->get_line_count()-1 || next_id > tx->get_line_count()) + return; + + swap_lines(tx, line_id, next_id); + } + int from_line_down = from_line < tx->get_line_count() ? from_line+1 : from_line; + int to_line_down = to_line < tx->get_line_count() ? to_line+1 : to_line; + tx->select(from_line_down, from_col, to_line_down, to_column); + } + else + { + int line_id = tx->cursor_get_line(); + int next_id = line_id + 1; + + if (line_id == tx->get_line_count()-1 || next_id > tx->get_line_count()) + return; + + swap_lines(tx, line_id, next_id); + } + tx->end_complex_operation(); + tx->update(); + + } break; + case EDIT_INDENT_LEFT: { + + TextEdit *tx = code_editor->get_text_edit(); + Ref<Script> scr = get_edited_script(); + if (scr.is_null()) + return; + + tx->begin_complex_operation(); + if (tx->is_selection_active()) + { + tx->indent_selection_left(); + } + else + { + int begin = tx->cursor_get_line(); + String line_text = tx->get_line(begin); + // begins with tab + if (line_text.begins_with("\t")) + { + line_text = line_text.substr(1, line_text.length()); + tx->set_line(begin, line_text); + } + // begins with 4 spaces + else if (line_text.begins_with(" ")) + { + line_text = line_text.substr(4, line_text.length()); + tx->set_line(begin, line_text); + } + } + tx->end_complex_operation(); + tx->update(); + //tx->deselect(); + + } break; + case EDIT_INDENT_RIGHT: { + + TextEdit *tx = code_editor->get_text_edit(); + Ref<Script> scr = get_edited_script(); + if (scr.is_null()) + return; + + tx->begin_complex_operation(); + if (tx->is_selection_active()) + { + tx->indent_selection_right(); + } + else + { + int begin = tx->cursor_get_line(); + String line_text = tx->get_line(begin); + line_text = '\t' + line_text; + tx->set_line(begin, line_text); + } + tx->end_complex_operation(); + tx->update(); + //tx->deselect(); + + } break; + case EDIT_CLONE_DOWN: { + + TextEdit *tx = code_editor->get_text_edit(); + Ref<Script> scr = get_edited_script(); + if (scr.is_null()) + return; + + int from_line = tx->cursor_get_line(); + int to_line = tx->cursor_get_line(); + int column = tx->cursor_get_column(); + + if (tx->is_selection_active()) { + from_line = tx->get_selection_from_line(); + to_line = tx->get_selection_to_line(); + column = tx->cursor_get_column(); + } + int next_line = to_line + 1; + + tx->begin_complex_operation(); + for (int i = from_line; i <= to_line; i++) { + + if (i >= tx->get_line_count() - 1) { + tx->set_line(i, tx->get_line(i) + "\n"); + } + String line_clone = tx->get_line(i); + tx->insert_at(line_clone, next_line); + next_line++; + } + + tx->cursor_set_column(column); + if (tx->is_selection_active()) { + tx->select(to_line + 1, tx->get_selection_from_column(), next_line - 1, tx->get_selection_to_column()); + } + + tx->end_complex_operation(); + tx->update(); + + } break; + case EDIT_TOGGLE_COMMENT: { + + TextEdit *tx = code_editor->get_text_edit(); + Ref<Script> scr = get_edited_script(); + if (scr.is_null()) + return; + + + tx->begin_complex_operation(); + if (tx->is_selection_active()) + { + int begin = tx->get_selection_from_line(); + int end = tx->get_selection_to_line(); + + // End of selection ends on the first column of the last line, ignore it. + if(tx->get_selection_to_column() == 0) + end -= 1; + + for (int i = begin; i <= end; i++) + { + String line_text = tx->get_line(i); + + if (line_text.begins_with("#")) + line_text = line_text.substr(1, line_text.length()); + else + line_text = "#" + line_text; + tx->set_line(i, line_text); + } + } + else + { + int begin = tx->cursor_get_line(); + String line_text = tx->get_line(begin); + + if (line_text.begins_with("#")) + line_text = line_text.substr(1, line_text.length()); + else + line_text = "#" + line_text; + tx->set_line(begin, line_text); + } + tx->end_complex_operation(); + tx->update(); + //tx->deselect(); + + } break; + case EDIT_COMPLETE: { + + code_editor->get_text_edit()->query_code_comple(); + + } break; + case EDIT_AUTO_INDENT: { + + TextEdit *te = code_editor->get_text_edit(); + String text = te->get_text(); + Ref<Script> scr = get_edited_script(); + if (scr.is_null()) + return; + int begin,end; + if (te->is_selection_active()) { + begin=te->get_selection_from_line(); + end=te->get_selection_to_line(); + } else { + begin=0; + end=te->get_line_count()-1; + } + scr->get_language()->auto_indent_code(text,begin,end); + te->set_text(text); + + + } break; + case EDIT_TRIM_TRAILING_WHITESAPCE: { + trim_trailing_whitespace(); + } break; + + + case SEARCH_FIND: { + + code_editor->get_find_replace_bar()->popup_search(); + } break; + case SEARCH_FIND_NEXT: { + + code_editor->get_find_replace_bar()->search_next(); + } break; + case SEARCH_FIND_PREV: { + + code_editor->get_find_replace_bar()->search_prev(); + } break; + case SEARCH_REPLACE: { + + code_editor->get_find_replace_bar()->popup_replace(); + } break; + case SEARCH_LOCATE_FUNCTION: { + + quick_open->popup(get_functions()); + } break; + case SEARCH_GOTO_LINE: { + + goto_line_dialog->popup_find_line(code_editor->get_text_edit()); + } break; + case DEBUG_TOGGLE_BREAKPOINT: { + int line=code_editor->get_text_edit()->cursor_get_line(); + bool dobreak = !code_editor->get_text_edit()->is_line_set_as_breakpoint(line); + code_editor->get_text_edit()->set_line_as_breakpoint(line,dobreak); + ScriptEditor::get_singleton()->get_debugger()->set_breakpoint(get_edited_script()->get_path(),line+1,dobreak); + } break; + case DEBUG_REMOVE_ALL_BREAKPOINTS: { + List<int> bpoints; + code_editor->get_text_edit()->get_breakpoints(&bpoints); + + for(List<int>::Element *E=bpoints.front();E;E=E->next()) { + int line = E->get(); + bool dobreak = !code_editor->get_text_edit()->is_line_set_as_breakpoint(line); + code_editor->get_text_edit()->set_line_as_breakpoint(line,dobreak); + ScriptEditor::get_singleton()->get_debugger()->set_breakpoint(get_edited_script()->get_path(),line+1,dobreak); + } + } + case DEBUG_GOTO_NEXT_BREAKPOINT: { + List<int> bpoints; + code_editor->get_text_edit()->get_breakpoints(&bpoints); + if (bpoints.size() <= 0) { + return; + } + + int line=code_editor->get_text_edit()->cursor_get_line(); + // wrap around + if (line >= bpoints[bpoints.size() - 1]) { + code_editor->get_text_edit()->cursor_set_line(bpoints[0]); + } else { + for(List<int>::Element *E=bpoints.front();E;E=E->next()) { + int bline = E->get(); + if (bline > line) { + code_editor->get_text_edit()->cursor_set_line(bline); + return; + } + } + } + + } break; + case DEBUG_GOTO_PREV_BREAKPOINT: { + List<int> bpoints; + code_editor->get_text_edit()->get_breakpoints(&bpoints); + if (bpoints.size() <= 0) { + return; + } + + int line=code_editor->get_text_edit()->cursor_get_line(); + // wrap around + if (line <= bpoints[0]) { + code_editor->get_text_edit()->cursor_set_line(bpoints[bpoints.size() - 1]); + } else { + for(List<int>::Element *E=bpoints.back();E;E=E->prev()) { + int bline = E->get(); + if (bline < line) { + code_editor->get_text_edit()->cursor_set_line(bline); + return; + } + } + } + + } break; + + case HELP_CONTEXTUAL: { + String text = code_editor->get_text_edit()->get_selection_text(); + if (text == "") + text = code_editor->get_text_edit()->get_word_under_cursor(); + if (text != "") { + emit_signal("request_help_search",text); + } + } break; + } +} + +void ScriptTextEditor::_bind_methods() { + + ObjectTypeDB::bind_method("_validate_script",&ScriptTextEditor::_validate_script); + ObjectTypeDB::bind_method("_load_theme_settings",&ScriptTextEditor::_load_theme_settings); + ObjectTypeDB::bind_method("_breakpoint_toggled",&ScriptTextEditor::_breakpoint_toggled); + ObjectTypeDB::bind_method("_edit_option",&ScriptTextEditor::_edit_option); + ObjectTypeDB::bind_method("_goto_line",&ScriptTextEditor::_goto_line); + + ADD_SIGNAL(MethodInfo("name_changed")); + ADD_SIGNAL(MethodInfo("request_help_search",PropertyInfo(Variant::STRING,"topic"))); +} + +Control *ScriptTextEditor::get_edit_menu() { + + return edit_hb; +} + +void ScriptTextEditor::reload(bool p_soft) { + + TextEdit *te = code_editor->get_text_edit(); + Ref<Script> scr = get_edited_script(); + if (scr.is_null()) + return; + scr->set_source_code(te->get_text()); + bool soft = p_soft || scr->get_instance_base_type()=="EditorPlugin"; //always soft-reload editor plugins + + scr->get_language()->reload_tool_script(scr,soft); +} + +void ScriptTextEditor::get_breakpoints(List<int> *p_breakpoints) { + + code_editor->get_text_edit()->get_breakpoints(p_breakpoints); + +} + +void ScriptTextEditor::set_tooltip_request_func(String p_method,Object* p_obj) { + + code_editor->get_text_edit()->set_tooltip_request_func(p_obj,p_method,this); +} + +void ScriptTextEditor::set_debugger_active(bool p_active) { + + +} + +ScriptTextEditor::ScriptTextEditor() { + + code_editor = memnew( CodeTextEditor ); + add_child(code_editor); + code_editor->set_area_as_parent_rect(); + code_editor->connect("validate_script",this,"_validate_script"); + code_editor->connect("load_theme_settings",this,"_load_theme_settings"); + code_editor->set_code_complete_func(_code_complete_scripts,this); + code_editor->get_text_edit()->connect("breakpoint_toggled", this, "_breakpoint_toggled"); + + code_editor->get_text_edit()->set_scroll_pass_end_of_file(EditorSettings::get_singleton()->get("text_editor/scroll_past_end_of_file")); + code_editor->get_text_edit()->set_auto_brace_completion(EditorSettings::get_singleton()->get("text_editor/auto_brace_complete")); + code_editor->get_text_edit()->set_tab_size(EditorSettings::get_singleton()->get("text_editor/tab_size")); + code_editor->get_text_edit()->set_draw_tabs(EditorSettings::get_singleton()->get("text_editor/draw_tabs")); + code_editor->get_text_edit()->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/show_line_numbers")); + code_editor->get_text_edit()->set_syntax_coloring(EditorSettings::get_singleton()->get("text_editor/syntax_highlighting")); + code_editor->get_text_edit()->set_highlight_all_occurrences(EditorSettings::get_singleton()->get("text_editor/highlight_all_occurrences")); + code_editor->get_text_edit()->cursor_set_blink_enabled(EditorSettings::get_singleton()->get("text_editor/caret_blink")); + code_editor->get_text_edit()->cursor_set_blink_speed(EditorSettings::get_singleton()->get("text_editor/caret_blink_speed")); + code_editor->get_text_edit()->set_draw_breakpoint_gutter(EditorSettings::get_singleton()->get("text_editor/show_breakpoint_gutter")); + code_editor->get_text_edit()->cursor_set_block_mode(EditorSettings::get_singleton()->get("text_editor/block_caret")); + code_editor->get_text_edit()->set_callhint_settings( + EditorSettings::get_singleton()->get("text_editor/put_callhint_tooltip_below_current_line"), + EditorSettings::get_singleton()->get("text_editor/callhint_tooltip_offset")); + + edit_hb = memnew (HBoxContainer); + + edit_menu = memnew( MenuButton ); + edit_menu->set_text(TTR("Edit")); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/undo"), EDIT_UNDO); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/redo"), EDIT_REDO); + edit_menu->get_popup()->add_separator(); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/cut"), EDIT_CUT); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/copy"), EDIT_COPY); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/paste"), EDIT_PASTE); + edit_menu->get_popup()->add_separator(); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/select_all"), EDIT_SELECT_ALL); + edit_menu->get_popup()->add_separator(); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/move_up"), EDIT_MOVE_LINE_UP); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/move_down"), EDIT_MOVE_LINE_DOWN); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/indent_left"), EDIT_INDENT_LEFT); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/indent_right"), EDIT_INDENT_RIGHT); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_comment"), EDIT_TOGGLE_COMMENT); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/clone_down"), EDIT_CLONE_DOWN); + edit_menu->get_popup()->add_separator(); +#ifdef OSX_ENABLED + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/complete_symbol"), EDIT_COMPLETE); +#else + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/complete_symbol"), EDIT_COMPLETE); +#endif + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/trim_trailing_whitespace"), EDIT_TRIM_TRAILING_WHITESAPCE); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/auto_indent"), EDIT_AUTO_INDENT); + edit_menu->get_popup()->connect("item_pressed", this,"_edit_option"); + edit_menu->get_popup()->add_separator(); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_breakpoint"), DEBUG_TOGGLE_BREAKPOINT); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/remove_all_breakpoints"), DEBUG_REMOVE_ALL_BREAKPOINTS); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_next_breakpoint"), DEBUG_GOTO_NEXT_BREAKPOINT); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_previous_breakpoint"), DEBUG_GOTO_PREV_BREAKPOINT); + + search_menu = memnew( MenuButton ); + edit_hb->add_child(search_menu); + search_menu->set_text(TTR("Search")); + search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find"), SEARCH_FIND); + search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_next"), SEARCH_FIND_NEXT); + search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_previous"), SEARCH_FIND_PREV); + search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/replace"), SEARCH_REPLACE); + search_menu->get_popup()->add_separator(); + search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_function"), SEARCH_LOCATE_FUNCTION); + search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_line"), SEARCH_GOTO_LINE); + search_menu->get_popup()->add_separator(); + search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/contextual_help"), HELP_CONTEXTUAL); + + search_menu->get_popup()->connect("item_pressed", this,"_edit_option"); + + edit_hb->add_child(edit_menu); + + quick_open = memnew( ScriptEditorQuickOpen ); + add_child(quick_open); + quick_open->connect("goto_line",this,"_goto_line"); + + goto_line_dialog = memnew(GotoLineDialog); + add_child(goto_line_dialog); +} + +static ScriptEditorBase * create_editor(const Ref<Script>& p_script) { + + if (p_script->has_source_code()) { + return memnew( ScriptTextEditor ); + } + + return NULL; +} + +void ScriptTextEditor::register_editor() { + + ED_SHORTCUT("script_text_editor/undo", TTR("Undo"), KEY_MASK_CMD|KEY_Z); + ED_SHORTCUT("script_text_editor/redo", TTR("Redo"), KEY_MASK_CMD|KEY_Y); + ED_SHORTCUT("script_text_editor/cut", TTR("Cut"), KEY_MASK_CMD|KEY_X); + ED_SHORTCUT("script_text_editor/copy", TTR("Copy"), KEY_MASK_CMD|KEY_C); + ED_SHORTCUT("script_text_editor/paste", TTR("Paste"), KEY_MASK_CMD|KEY_V); + ED_SHORTCUT("script_text_editor/select_all", TTR("Select All"), KEY_MASK_CMD|KEY_A); + ED_SHORTCUT("script_text_editor/move_up", TTR("Move Up"), KEY_MASK_ALT|KEY_UP); + ED_SHORTCUT("script_text_editor/move_down", TTR("Move Down"), KEY_MASK_ALT|KEY_DOWN); + ED_SHORTCUT("script_text_editor/indent_left", TTR("Indent Left"), KEY_MASK_ALT|KEY_LEFT); + ED_SHORTCUT("script_text_editor/indent_right", TTR("Indent Right"), KEY_MASK_ALT|KEY_RIGHT); + ED_SHORTCUT("script_text_editor/toggle_comment", TTR("Toggle Comment"), KEY_MASK_CMD|KEY_K); + ED_SHORTCUT("script_text_editor/clone_down", TTR("Clone Down"), KEY_MASK_CMD|KEY_B); +#ifdef OSX_ENABLED + ED_SHORTCUT("script_text_editor/complete_symbol", TTR("Complete Symbol"), KEY_MASK_CTRL|KEY_SPACE); +#else + ED_SHORTCUT("script_text_editor/complete_symbol", TTR("Complete Symbol"), KEY_MASK_CMD|KEY_SPACE); +#endif + ED_SHORTCUT("script_text_editor/trim_trailing_whitespace", TTR("Trim Trailing Whitespace"), KEY_MASK_CTRL|KEY_MASK_ALT|KEY_T); + ED_SHORTCUT("script_text_editor/auto_indent", TTR("Auto Indent"), KEY_MASK_CMD|KEY_I); + + ED_SHORTCUT("script_text_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_F9); + ED_SHORTCUT("script_text_editor/remove_all_breakpoints", TTR("Remove All Breakpoints"), KEY_MASK_CTRL|KEY_MASK_SHIFT|KEY_F9); + ED_SHORTCUT("script_text_editor/goto_next_breakpoint", TTR("Goto Next Breakpoint"), KEY_MASK_CTRL|KEY_PERIOD); + ED_SHORTCUT("script_text_editor/goto_previous_breakpoint", TTR("Goto Previous Breakpoint"), KEY_MASK_CTRL|KEY_COMMA); + + ED_SHORTCUT("script_text_editor/find", TTR("Find.."), KEY_MASK_CMD|KEY_F); + ED_SHORTCUT("script_text_editor/find_next", TTR("Find Next"), KEY_F3); + ED_SHORTCUT("script_text_editor/find_previous", TTR("Find Previous"), KEY_MASK_SHIFT|KEY_F3); + ED_SHORTCUT("script_text_editor/replace", TTR("Replace.."), KEY_MASK_CMD|KEY_R); + + ED_SHORTCUT("script_text_editor/goto_function", TTR("Goto Function.."), KEY_MASK_SHIFT|KEY_MASK_CMD|KEY_F); + ED_SHORTCUT("script_text_editor/goto_line", TTR("Goto Line.."), KEY_MASK_CMD|KEY_L); + + ED_SHORTCUT("script_text_editor/contextual_help", TTR("Contextual Help"), KEY_MASK_SHIFT|KEY_F1); + + ScriptEditor::register_create_script_editor_function(create_editor); +} diff --git a/tools/editor/plugins/script_text_editor.h b/tools/editor/plugins/script_text_editor.h new file mode 100644 index 0000000000..247fd97e81 --- /dev/null +++ b/tools/editor/plugins/script_text_editor.h @@ -0,0 +1,142 @@ +/*************************************************************************/ +/* script_text_editor.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#ifndef SCRIPT_TEXT_EDITOR_H +#define SCRIPT_TEXT_EDITOR_H + +#include "script_editor_plugin.h" + + +class ScriptTextEditor : public ScriptEditorBase { + + OBJ_TYPE( ScriptTextEditor, ScriptEditorBase ); + + CodeTextEditor *code_editor; + + Ref<Script> script; + + + Vector<String> functions; + + HBoxContainer *edit_hb; + + MenuButton *edit_menu; + MenuButton *search_menu; + + GotoLineDialog *goto_line_dialog; + ScriptEditorQuickOpen *quick_open; + + enum { + EDIT_UNDO, + EDIT_REDO, + EDIT_CUT, + EDIT_COPY, + EDIT_PASTE, + EDIT_SELECT_ALL, + EDIT_COMPLETE, + EDIT_AUTO_INDENT, + EDIT_TRIM_TRAILING_WHITESAPCE, + EDIT_TOGGLE_COMMENT, + EDIT_MOVE_LINE_UP, + EDIT_MOVE_LINE_DOWN, + EDIT_INDENT_RIGHT, + EDIT_INDENT_LEFT, + EDIT_CLONE_DOWN, + SEARCH_FIND, + SEARCH_FIND_NEXT, + SEARCH_FIND_PREV, + SEARCH_REPLACE, + SEARCH_LOCATE_FUNCTION, + SEARCH_GOTO_LINE, + DEBUG_TOGGLE_BREAKPOINT, + DEBUG_REMOVE_ALL_BREAKPOINTS, + DEBUG_GOTO_NEXT_BREAKPOINT, + DEBUG_GOTO_PREV_BREAKPOINT, + HELP_CONTEXTUAL, + }; + + +protected: + + + static void _code_complete_scripts(void* p_ud,const String& p_code, List<String>* r_options); + void _breakpoint_toggled(int p_row); + + //no longer virtual + void _validate_script(); + void _code_complete_script(const String& p_code, List<String>* r_options); + void _load_theme_settings(); + + void _notification(int p_what); + static void _bind_methods(); + + void _edit_option(int p_op); + + void _goto_line(int p_line) { goto_line(p_line); } +public: + + virtual void apply_code(); + virtual Ref<Script> get_edited_script() const; + virtual Vector<String> get_functions() ; + virtual void set_edited_script(const Ref<Script>& p_script); + virtual void reload_text(); + virtual String get_name() ; + virtual Ref<Texture> get_icon() ; + virtual bool is_unsaved(); + + virtual Variant get_edit_state(); + virtual void set_edit_state(const Variant& p_state); + virtual void ensure_focus(); + virtual void trim_trailing_whitespace(); + virtual void tag_saved_version(); + + virtual void goto_line(int p_line,bool p_with_error=false); + + virtual void reload(bool p_soft); + virtual void get_breakpoints(List<int> *p_breakpoints); + + virtual void add_callback(const String& p_function,StringArray p_args); + virtual void update_settings(); + virtual bool goto_method(const String& p_method); + + virtual void set_tooltip_request_func(String p_method,Object* p_obj); + + virtual void set_debugger_active(bool p_active); + + Control *get_edit_menu(); + + static void register_editor(); + + ScriptTextEditor(); + +}; + + + + +#endif // SCRIPT_TEXT_EDITOR_H diff --git a/tools/editor/plugins/shader_graph_editor_plugin.cpp b/tools/editor/plugins/shader_graph_editor_plugin.cpp index 375220051c..aa66a2e0d9 100644 --- a/tools/editor/plugins/shader_graph_editor_plugin.cpp +++ b/tools/editor/plugins/shader_graph_editor_plugin.cpp @@ -675,7 +675,7 @@ GraphCurveMapEdit::GraphCurveMapEdit(){ void ShaderGraphView::_scalar_const_changed(double p_value,int p_id) { UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo(); - ur->create_action(TTR("Change Scalar Constant"),true); + ur->create_action(TTR("Change Scalar Constant"),UndoRedo::MERGE_ENDS); ur->add_do_method(graph.ptr(),"scalar_const_node_set_value",type,p_id,p_value); ur->add_undo_method(graph.ptr(),"scalar_const_node_set_value",type,p_id,graph->scalar_const_node_get_value(type,p_id)); ur->add_do_method(this,"_update_graph"); @@ -693,7 +693,7 @@ void ShaderGraphView::_vec_const_changed(double p_value, int p_id,Array p_arr){ } UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo(); - ur->create_action(TTR("Change Vec Constant"),true); + ur->create_action(TTR("Change Vec Constant"),UndoRedo::MERGE_ENDS); ur->add_do_method(graph.ptr(),"vec_const_node_set_value",type,p_id,val); ur->add_undo_method(graph.ptr(),"vec_const_node_set_value",type,p_id,graph->vec_const_node_get_value(type,p_id)); ur->add_do_method(this,"_update_graph"); @@ -706,7 +706,7 @@ void ShaderGraphView::_vec_const_changed(double p_value, int p_id,Array p_arr){ void ShaderGraphView::_rgb_const_changed(const Color& p_color, int p_id){ UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo(); - ur->create_action(TTR("Change RGB Constant"),true); + ur->create_action(TTR("Change RGB Constant"),UndoRedo::MERGE_ENDS); ur->add_do_method(graph.ptr(),"rgb_const_node_set_value",type,p_id,p_color); ur->add_undo_method(graph.ptr(),"rgb_const_node_set_value",type,p_id,graph->rgb_const_node_get_value(type,p_id)); ur->add_do_method(this,"_update_graph"); @@ -807,7 +807,7 @@ void ShaderGraphView::_vec_func_changed(int p_func, int p_id){ void ShaderGraphView::_scalar_input_changed(double p_value,int p_id){ UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo(); - ur->create_action(TTR("Change Scalar Uniform"),true); + ur->create_action(TTR("Change Scalar Uniform"),UndoRedo::MERGE_ENDS); ur->add_do_method(graph.ptr(),"scalar_input_node_set_value",type,p_id,p_value); ur->add_undo_method(graph.ptr(),"scalar_input_node_set_value",type,p_id,graph->scalar_input_node_get_value(type,p_id)); ur->add_do_method(this,"_update_graph"); @@ -825,7 +825,7 @@ void ShaderGraphView::_vec_input_changed(double p_value, int p_id,Array p_arr){ } UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo(); - ur->create_action(TTR("Change Vec Uniform"),true); + ur->create_action(TTR("Change Vec Uniform"),UndoRedo::MERGE_ENDS); ur->add_do_method(graph.ptr(),"vec_input_node_set_value",type,p_id,val); ur->add_undo_method(graph.ptr(),"vec_input_node_set_value",type,p_id,graph->vec_input_node_get_value(type,p_id)); ur->add_do_method(this,"_update_graph"); @@ -863,7 +863,7 @@ void ShaderGraphView::_rgb_input_changed(const Color& p_color, int p_id){ UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo(); - ur->create_action(TTR("Change RGB Uniform"),true); + ur->create_action(TTR("Change RGB Uniform"),UndoRedo::MERGE_ENDS); ur->add_do_method(graph.ptr(),"rgb_input_node_set_value",type,p_id,p_color); ur->add_undo_method(graph.ptr(),"rgb_input_node_set_value",type,p_id,graph->rgb_input_node_get_value(type,p_id)); ur->add_do_method(this,"_update_graph"); @@ -901,6 +901,7 @@ void ShaderGraphView::_variant_edited() { case Variant::COLOR: v2=Color(); break; + default: {} } UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo(); ur->create_action(TTR("Change Default Value")); @@ -963,7 +964,7 @@ void ShaderGraphView::_comment_edited(int p_id,Node* p_button) { UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo(); TextEdit *te=p_button->cast_to<TextEdit>(); - ur->create_action(TTR("Change Comment"),true); + ur->create_action(TTR("Change Comment"),UndoRedo::MERGE_ENDS); ur->add_do_method(graph.ptr(),"comment_node_set_text",type,p_id,te->get_text()); ur->add_undo_method(graph.ptr(),"comment_node_set_text",type,p_id,graph->comment_node_get_text(type,p_id)); ur->add_do_method(this,"_update_graph"); @@ -1005,7 +1006,7 @@ void ShaderGraphView::_color_ramp_changed(int p_id,Node* p_ramp) { if (old_offsets.size()!=new_offsets.size()) ur->create_action(TTR("Add/Remove to Color Ramp")); else - ur->create_action(TTR("Modify Color Ramp"),true); + ur->create_action(TTR("Modify Color Ramp"),UndoRedo::MERGE_ENDS); ur->add_do_method(graph.ptr(),"color_ramp_node_set_ramp",type,p_id,new_colors,new_offsets); ur->add_undo_method(graph.ptr(),"color_ramp_node_set_ramp",type,p_id,old_colors,old_offsets); @@ -1041,7 +1042,7 @@ void ShaderGraphView::_curve_changed(int p_id,Node* p_curve) { if (old_points.size()!=new_points.size()) ur->create_action(TTR("Add/Remove to Curve Map")); else - ur->create_action(TTR("Modify Curve Map"),true); + ur->create_action(TTR("Modify Curve Map"),UndoRedo::MERGE_ENDS); ur->add_do_method(graph.ptr(),"curve_map_node_set_points",type,p_id,new_points); ur->add_undo_method(graph.ptr(),"curve_map_node_set_points",type,p_id,old_points); @@ -1321,6 +1322,7 @@ void ShaderGraphView::_default_changed(int p_id, Node *p_button, int p_param, in h=PROPERTY_HINT_COLOR_NO_ALPHA; v=Color(); break; + default: {} } ped_popup->edit(NULL,"",vt,v,h,p_hint); @@ -1347,6 +1349,8 @@ ToolButton *ShaderGraphView::make_label(String text, Variant::Type v_type) { break; case Variant::COLOR: l->set_icon(ped_popup->get_icon("Color", "EditorIcons")); + break; + default: {} } return l; } @@ -1372,7 +1376,7 @@ ToolButton *ShaderGraphView::make_editor(String text,GraphNode* gn,int p_id,int case Variant::TRANSFORM: edit->set_icon(ped_popup->get_icon("Matrix", "EditorIcons")); break; - case Variant::COLOR: + case Variant::COLOR: { Image icon_color = Image(15,15,false,Image::FORMAT_RGB); Color c = graph->default_get_value(type,p_id,param); for (int x=1;x<14;x++) @@ -1382,7 +1386,8 @@ ToolButton *ShaderGraphView::make_editor(String text,GraphNode* gn,int p_id,int t.instance(); t->create_from_image(icon_color); edit->set_icon(t); - break; + } break; + default: {} } return edit; } diff --git a/tools/editor/plugins/spatial_editor_plugin.cpp b/tools/editor/plugins/spatial_editor_plugin.cpp index a70df78697..41956747e1 100644 --- a/tools/editor/plugins/spatial_editor_plugin.cpp +++ b/tools/editor/plugins/spatial_editor_plugin.cpp @@ -1980,33 +1980,8 @@ void SpatialEditorViewport::_menu_option(int p_option) { } break; case VIEW_CENTER_TO_SELECTION: { - if (!get_selected_count()) - break; - - Vector3 center; - int count=0; - - List<Node*> &selection = editor_selection->get_selected_node_list(); - - for(List<Node*>::Element *E=selection.front();E;E=E->next()) { - - Spatial *sp = E->get()->cast_to<Spatial>(); - if (!sp) - continue; + focus_selection(); - SpatialEditorSelectedItem *se=editor_selection->get_node_editor_data<SpatialEditorSelectedItem>(sp); - if (!se) - continue; - - center+=sp->get_global_transform().origin; - count++; - } - - if( count != 0 ) { - center/=float(count); - } - - cursor.pos=center; } break; case VIEW_ALIGN_SELECTION_WITH_VIEW: { @@ -2323,6 +2298,38 @@ void SpatialEditorViewport::reset() { _update_name(); } + +void SpatialEditorViewport::focus_selection() { + if (!get_selected_count()) + return; + + Vector3 center; + int count=0; + + List<Node*> &selection = editor_selection->get_selected_node_list(); + + for(List<Node*>::Element *E=selection.front();E;E=E->next()) { + + Spatial *sp = E->get()->cast_to<Spatial>(); + if (!sp) + continue; + + SpatialEditorSelectedItem *se=editor_selection->get_node_editor_data<SpatialEditorSelectedItem>(sp); + if (!se) + continue; + + center+=sp->get_global_transform().origin; + count++; + } + + if( count != 0 ) { + center/=float(count); + } + + cursor.pos=center; +} + + SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, EditorNode *p_editor, int p_index) { _edit.mode=TRANSFORM_NONE; @@ -3144,6 +3151,8 @@ void SpatialEditor::_init_indicators() { Vector<Color> origin_colors; Vector<Vector3> origin_points; + Color grid_color = EditorSettings::get_singleton()->get("3d_editor/grid_color"); + for(int i=0;i<3;i++) { Vector3 axis; axis[i]=1; @@ -3161,10 +3170,10 @@ void SpatialEditor::_init_indicators() { for(int j=-ORIGIN_GRID_SIZE;j<=ORIGIN_GRID_SIZE;j++) { - grid_colors[i].push_back(Color(axis.x,axis.y,axis.z,0.2)); - grid_colors[i].push_back(Color(axis.x,axis.y,axis.z,0.2)); - grid_colors[i].push_back(Color(axis.x,axis.y,axis.z,0.2)); - grid_colors[i].push_back(Color(axis.x,axis.y,axis.z,0.2)); + grid_colors[i].push_back(grid_color); + grid_colors[i].push_back(grid_color); + grid_colors[i].push_back(grid_color); + grid_colors[i].push_back(grid_color); grid_points[i].push_back(axis_n1*ORIGIN_GRID_SIZE+axis_n2*j); grid_points[i].push_back(-axis_n1*ORIGIN_GRID_SIZE+axis_n2*j); grid_points[i].push_back(axis_n2*ORIGIN_GRID_SIZE+axis_n1*j); diff --git a/tools/editor/plugins/spatial_editor_plugin.h b/tools/editor/plugins/spatial_editor_plugin.h index 54086b0031..975092a01d 100644 --- a/tools/editor/plugins/spatial_editor_plugin.h +++ b/tools/editor/plugins/spatial_editor_plugin.h @@ -253,6 +253,9 @@ public: void set_state(const Dictionary& p_state); Dictionary get_state() const; void reset(); + + void focus_selection(); + Viewport *get_viewport_node() { return viewport; } diff --git a/tools/editor/plugins/sprite_frames_editor_plugin.cpp b/tools/editor/plugins/sprite_frames_editor_plugin.cpp index e29a0c8d52..41beaa96a1 100644 --- a/tools/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/tools/editor/plugins/sprite_frames_editor_plugin.cpp @@ -524,7 +524,7 @@ void SpriteFramesEditor::_animation_fps_changed(double p_value) { if (updating) return; - undo_redo->create_action(TTR("Change Animation FPS"),true); + undo_redo->create_action(TTR("Change Animation FPS"),UndoRedo::MERGE_ENDS); undo_redo->add_do_method(frames,"set_animation_speed",edited_anim,p_value); undo_redo->add_undo_method(frames,"set_animation_speed",edited_anim,frames->get_animation_speed(edited_anim)); undo_redo->add_do_method(this,"_update_library",true); diff --git a/tools/editor/plugins/texture_region_editor_plugin.cpp b/tools/editor/plugins/texture_region_editor_plugin.cpp index db888208fb..43086fb208 100644 --- a/tools/editor/plugins/texture_region_editor_plugin.cpp +++ b/tools/editor/plugins/texture_region_editor_plugin.cpp @@ -388,6 +388,10 @@ void TextureRegionEditor::_region_input(const InputEvent& p_input) drag_index = -1; } } + } else if (mb.button_index == BUTTON_WHEEL_UP) { + _zoom_in(); + } else if (mb.button_index == BUTTON_WHEEL_DOWN) { + _zoom_out(); } } else if (p_input.type==InputEvent::MOUSE_MOTION) { @@ -503,8 +507,8 @@ void TextureRegionEditor::_scroll_changed(float) void TextureRegionEditor::_set_snap_mode(int p_mode) { - snap_mode_button->get_popup()->set_item_checked(snap_mode,false); snap_mode = p_mode; + snap_mode_button->get_popup()->set_item_checked(snap_mode,false); snap_mode_button->set_text(snap_mode_button->get_popup()->get_item_text(p_mode)); snap_mode_button->get_popup()->set_item_checked(snap_mode,true); diff --git a/tools/editor/plugins/tile_map_editor_plugin.cpp b/tools/editor/plugins/tile_map_editor_plugin.cpp index d686c37d1a..43fe7d7ea9 100644 --- a/tools/editor/plugins/tile_map_editor_plugin.cpp +++ b/tools/editor/plugins/tile_map_editor_plugin.cpp @@ -34,6 +34,7 @@ #include "canvas_item_editor_plugin.h" #include "tools/editor/editor_settings.h" +#include "tools/editor/editor_scale.h" void TileMapEditor::_notification(int p_what) { @@ -50,6 +51,12 @@ void TileMapEditor::_notification(int p_what) { rotate_270->set_icon(get_icon("Rotate270","EditorIcons")); } break; + case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { + + if (is_visible()) { + _update_palette(); + } + } break; } } @@ -205,16 +212,16 @@ void TileMapEditor::_update_palette() { if (tiles.empty()) return; + float min_size = EDITOR_DEF("tile_map/preview_size", 64); + min_size *= EDSCALE; + int hseparation = EDITOR_DEF("tile_map/palette_item_hseparation",8); + bool show_tile_names = bool(EDITOR_DEF("tile_map/show_tile_names", true)); - palette->set_max_columns(0); - palette->add_constant_override("hseparation", 6); + palette->add_constant_override("hseparation", hseparation*EDSCALE); + palette->add_constant_override("vseparation", 8*EDSCALE); - float min_size = EDITOR_DEF("tile_map/preview_size",64); palette->set_fixed_icon_size(Size2(min_size, min_size)); - palette->set_fixed_column_width(min_size*3/2); - palette->set_icon_mode(ItemList::ICON_MODE_TOP); - palette->set_max_text_lines(2); - + palette->set_fixed_column_width(min_size * MAX(size_slider->get_val(), 1)); String filter = search_box->get_text().strip_edges(); @@ -228,10 +235,14 @@ void TileMapEditor::_update_palette() { name = "#"+itos(E->get()); } - if (filter != "" && name.findn(filter) == -1) + if (filter != "" && !filter.is_subsequence_ofi(name)) continue; - palette->add_item(name); + if (show_tile_names) { + palette->add_item(name); + } else { + palette->add_item(String()); + } Ref<Texture> tex = tileset->tile_get_texture(E->get()); @@ -252,7 +263,7 @@ void TileMapEditor::_update_palette() { if (selected != -1) set_selected_tile(selected); else - palette->select(0, true); + palette->select(0); } void TileMapEditor::_pick_tile(const Point2& p_pos) { @@ -278,15 +289,16 @@ void TileMapEditor::_pick_tile(const Point2& p_pos) { canvas_item_editor->update(); } -DVector<Vector2> TileMapEditor::_bucket_fill(const Point2i& p_start) { - - if (node->get_cell(p_start.x, p_start.y) != TileMap::INVALID_CELL) - return DVector<Vector2>(); +DVector<Vector2> TileMapEditor::_bucket_fill(const Point2i& p_start, bool erase) { - int id = get_selected_tile(); + int prev_id = node->get_cell(p_start.x, p_start.y); + int id = TileMap::INVALID_CELL; + if (!erase) { + id = get_selected_tile(); - if (id == TileMap::INVALID_CELL) - return DVector<Vector2>(); + if (id == TileMap::INVALID_CELL) + return DVector<Vector2>(); + } Rect2 r = node->get_item_rect(); r.pos = r.pos/node->get_cell_size(); @@ -305,7 +317,7 @@ DVector<Vector2> TileMapEditor::_bucket_fill(const Point2i& p_start) { if (!r.has_point(n)) continue; - if (node->get_cell(n.x, n.y) == TileMap::INVALID_CELL) { + if (node->get_cell(n.x, n.y) == prev_id) { node->set_cellv(n, id, flip_h, flip_v, transpose); @@ -674,6 +686,12 @@ bool TileMapEditor::forward_input_event(const InputEvent& p_event) { } else if (tool==TOOL_BUCKET) { + Dictionary pop; + pop["id"] = node->get_cell(over_tile.x, over_tile.y); + pop["flip_h"] = node->is_cell_x_flipped(over_tile.x, over_tile.y); + pop["flip_v"] = node->is_cell_y_flipped(over_tile.x, over_tile.y); + pop["transpose"] = node->is_cell_transposed(over_tile.x, over_tile.y); + DVector<Vector2> points = _bucket_fill(over_tile); if (points.size() == 0) @@ -688,7 +706,7 @@ bool TileMapEditor::forward_input_event(const InputEvent& p_event) { undo_redo->create_action("Bucket Fill"); undo_redo->add_do_method(this, "_fill_points", points, op); - undo_redo->add_undo_method(this, "_erase_points", points); + undo_redo->add_undo_method(this, "_fill_points", points, pop); undo_redo->commit_action(); } @@ -771,6 +789,26 @@ bool TileMapEditor::forward_input_event(const InputEvent& p_event) { tool=TOOL_NONE; return true; + + } else if (tool==TOOL_BUCKET) { + + Dictionary pop; + pop["id"] = node->get_cell(over_tile.x, over_tile.y); + pop["flip_h"] = node->is_cell_x_flipped(over_tile.x, over_tile.y); + pop["flip_v"] = node->is_cell_y_flipped(over_tile.x, over_tile.y); + pop["transpose"] = node->is_cell_transposed(over_tile.x, over_tile.y); + + DVector<Vector2> points = _bucket_fill(over_tile, true); + + if (points.size() == 0) + return false; + + undo_redo->create_action("Bucket Fill"); + + undo_redo->add_do_method(this, "_erase_points", points); + undo_redo->add_undo_method(this, "_fill_points", points, pop); + + undo_redo->commit_action(); } } } @@ -787,6 +825,13 @@ bool TileMapEditor::forward_input_event(const InputEvent& p_event) { canvas_item_editor->update(); } + int tile_under = node->get_cell(over_tile.x, over_tile.y); + String tile_name = "none"; + + if (node->get_tileset()->has_tile(tile_under)) + tile_name = node->get_tileset()->tile_get_name(tile_under); + tile_info->set_text(String::num(over_tile.x)+", "+String::num(over_tile.y)+" ["+tile_name+"]"); + if (tool==TOOL_PAINTING) { int id = get_selected_tile(); @@ -1348,6 +1393,9 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { palette = memnew( ItemList ); palette->set_v_size_flags(SIZE_EXPAND_FILL); palette->set_custom_minimum_size(Size2(mw,0)); + palette->set_max_columns(0); + palette->set_icon_mode(ItemList::ICON_MODE_TOP); + palette->set_max_text_lines(2); add_child(palette); // Add menu items @@ -1356,6 +1404,10 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { toolbar->set_alignment(BoxContainer::ALIGN_END); CanvasItemEditor::get_singleton()->add_control_to_menu_panel(toolbar); + // Tile position + tile_info = memnew( Label ); + toolbar->add_child(tile_info); + options = memnew( MenuButton ); options->set_text("Tile Map"); options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("TileMap", "EditorIcons")); @@ -1458,6 +1510,9 @@ void TileMapEditorPlugin::make_visible(bool p_visible) { TileMapEditorPlugin::TileMapEditorPlugin(EditorNode *p_node) { EDITOR_DEF("tile_map/preview_size",64); + EDITOR_DEF("tile_map/palette_item_hseparation",8); + EDITOR_DEF("tile_map/show_tile_names", true); + tile_map_editor = memnew( TileMapEditor(p_node) ); add_control_to_container(CONTAINER_CANVAS_EDITOR_SIDE, tile_map_editor); tile_map_editor->hide(); diff --git a/tools/editor/plugins/tile_map_editor_plugin.h b/tools/editor/plugins/tile_map_editor_plugin.h index f586c5bf13..4b47dccd15 100644 --- a/tools/editor/plugins/tile_map_editor_plugin.h +++ b/tools/editor/plugins/tile_map_editor_plugin.h @@ -36,6 +36,7 @@ #include "scene/gui/line_edit.h" #include "scene/gui/tool_button.h" #include "scene/gui/menu_button.h" +#include "scene/gui/label.h" /** @author Juan Linietsky <reduzio@gmail.com> @@ -81,6 +82,7 @@ class TileMapEditor : public VBoxContainer { HBoxContainer *toolbar; + Label *tile_info; MenuButton *options; ToolButton *transp; ToolButton *mirror_x; @@ -127,7 +129,7 @@ class TileMapEditor : public VBoxContainer { void _pick_tile(const Point2& p_pos); - DVector<Vector2> _bucket_fill(const Point2i& p_start); + DVector<Vector2> _bucket_fill(const Point2i& p_start, bool erase=false); void _fill_points(const DVector<Vector2> p_points, const Dictionary& p_op); void _erase_points(const DVector<Vector2> p_points); diff --git a/tools/editor/project_manager.cpp b/tools/editor/project_manager.cpp index b7d3abfd5b..0c734436cd 100644 --- a/tools/editor/project_manager.cpp +++ b/tools/editor/project_manager.cpp @@ -31,6 +31,7 @@ #include "os/os.h" #include "os/dir_access.h" #include "os/file_access.h" +#include "os/keyboard.h" #include "editor_settings.h" #include "scene/gui/separator.h" #include "scene/gui/tool_button.h" @@ -491,6 +492,10 @@ void ProjectManager::_notification(int p_what) { if (p_what==NOTIFICATION_ENTER_TREE) { get_tree()->set_editor_hint(true); + + } else if (p_what==NOTIFICATION_VISIBILITY_CHANGED) { + + set_process_unhandled_input(is_visible()); } } @@ -505,6 +510,27 @@ void ProjectManager::_panel_draw(Node *p_hb) { } } +void ProjectManager::_update_project_buttons() +{ + for(int i=0;i<scroll_childs->get_child_count();i++) { + + CanvasItem *item = scroll_childs->get_child(i)->cast_to<CanvasItem>(); + item->update(); + } + + bool has_runnable_scene = false; + for (Map<String,String>::Element *E=selected_list.front(); E; E=E->next()) { + const String &selected_main = E->get(); + if (selected_main == "") continue; + has_runnable_scene = true; + break; + } + + erase_btn->set_disabled(selected_list.size()<1); + open_btn->set_disabled(selected_list.size()<1); + run_btn->set_disabled(!has_runnable_scene); +} + void ProjectManager::_panel_input(const InputEvent& p_ev,Node *p_hb) { if (p_ev.type==InputEvent::MOUSE_BUTTON && p_ev.mouse_button.pressed && p_ev.mouse_button.button_index==BUTTON_LEFT) { @@ -552,27 +578,147 @@ void ProjectManager::_panel_input(const InputEvent& p_ev,Node *p_hb) { } } - String single_selected = ""; - if (selected_list.size() == 1) { - single_selected = selected_list.front()->key(); - } + _update_project_buttons(); - single_selected_main = ""; - for(int i=0;i<scroll_childs->get_child_count();i++) { - CanvasItem *item = scroll_childs->get_child(i)->cast_to<CanvasItem>(); - item->update(); + if (p_ev.mouse_button.doubleclick) + _open_project(); //open if doubleclicked - if (single_selected!="" && single_selected == item->get_meta("name")) - single_selected_main = item->get_meta("main_scene"); - } + } +} - erase_btn->set_disabled(selected_list.size()<1); - open_btn->set_disabled(selected_list.size()<1); - run_btn->set_disabled(selected_list.size()<1 || (selected_list.size()==1 && single_selected_main=="")); +void ProjectManager::_unhandled_input(const InputEvent& p_ev) { - if (p_ev.mouse_button.doubleclick) - _open_project(); //open if doubleclicked + if (p_ev.type==InputEvent::KEY) { + + const InputEventKey &k = p_ev.key; + + if (!k.pressed) + return; + + bool scancode_handled = true; + + switch (k.scancode) { + + case KEY_RETURN: { + + _open_project(); + } break; + case KEY_HOME: { + + for (int i=0; i<scroll_childs->get_child_count(); i++) { + + HBoxContainer *hb = scroll_childs->get_child(i)->cast_to<HBoxContainer>(); + if (hb) { + selected_list.clear(); + selected_list.insert(hb->get_meta("name"), hb->get_meta("main_scene")); + scroll->set_v_scroll(0); + _update_project_buttons(); + break; + } + } + + } break; + case KEY_END: { + + for (int i=scroll_childs->get_child_count()-1; i>=0; i--) { + + HBoxContainer *hb = scroll_childs->get_child(i)->cast_to<HBoxContainer>(); + if (hb) { + selected_list.clear(); + selected_list.insert(hb->get_meta("name"), hb->get_meta("main_scene")); + scroll->set_v_scroll(scroll_childs->get_size().y); + _update_project_buttons(); + break; + } + } + + } break; + case KEY_UP: { + + if (k.mod.shift) + break; + + if (selected_list.size()) { + + bool found = false; + + for (int i=scroll_childs->get_child_count()-1; i>=0; i--) { + + HBoxContainer *hb = scroll_childs->get_child(i)->cast_to<HBoxContainer>(); + if (!hb) continue; + + String current = hb->get_meta("name"); + + if (found) { + selected_list.clear(); + selected_list.insert(current, hb->get_meta("main_scene")); + + int offset_diff = scroll->get_v_scroll() - hb->get_pos().y; + + if (offset_diff > 0) + scroll->set_v_scroll(scroll->get_v_scroll() - offset_diff); + + _update_project_buttons(); + + break; + + } else if (current==selected_list.back()->key()) { + found = true; + } + } + + break; + } + // else fallthrough to key_down + } + case KEY_DOWN: { + + if (k.mod.shift) + break; + + bool found = selected_list.empty(); + + for (int i=0; i<scroll_childs->get_child_count(); i++) { + + HBoxContainer *hb = scroll_childs->get_child(i)->cast_to<HBoxContainer>(); + if (!hb) continue; + + String current = hb->get_meta("name"); + + if (found) { + selected_list.clear(); + selected_list.insert(current, hb->get_meta("main_scene")); + + int last_y_visible = scroll->get_v_scroll() + scroll->get_size().y; + int offset_diff = (hb->get_pos().y + hb->get_size().y) - last_y_visible; + + if (offset_diff > 0) + scroll->set_v_scroll(scroll->get_v_scroll() + offset_diff); + + _update_project_buttons(); + + break; + + } else if (current==selected_list.back()->key()) { + + found = true; + } + } + + } break; + case KEY_F: { + if (k.mod.command) this->project_filter->search_box->grab_focus(); + else scancode_handled = false; + } break; + default: { + scancode_handled = false; + } break; + } + + if (scancode_handled) { + accept_event(); + } } } @@ -602,6 +748,8 @@ void ProjectManager::_load_recent_projects() { memdelete( scroll_childs->get_child(0)); } + Map<String, String> selected_list_copy = selected_list; + List<PropertyInfo> properties; EditorSettings::get_singleton()->get_property_list(&properties); @@ -708,6 +856,8 @@ void ProjectManager::_load_recent_projects() { main_scene = cf->get_value("application","main_scene"); } + selected_list_copy.erase(project); + HBoxContainer *hb = memnew( HBoxContainer ); hb->set_meta("name",project); hb->set_meta("main_scene",main_scene); @@ -746,11 +896,14 @@ void ProjectManager::_load_recent_projects() { scroll_childs->add_child(hb); } + for (Map<String,String>::Element *E = selected_list_copy.front();E;E = E->next()) { + String key = E->key(); + selected_list.erase(key); + } + scroll->set_v_scroll(0); - erase_btn->set_disabled(selected_list.size()<1); - open_btn->set_disabled(selected_list.size()<1); - run_btn->set_disabled(selected_list.size()<1 || (selected_list.size()==1 && single_selected_main=="")); + _update_project_buttons(); EditorSettings::get_singleton()->save(); @@ -788,7 +941,7 @@ void ProjectManager::_open_project() { } if (selected_list.size()>1) { - multi_open_ask->set_text(TTR("Are you sure to open more than one projects?")); + multi_open_ask->set_text(TTR("Are you sure to open more than one project?")); multi_open_ask->popup_centered_minsize(); } else { _open_project_confirm(); @@ -828,7 +981,7 @@ void ProjectManager::_run_project() { } if (selected_list.size()>1) { - multi_run_ask->set_text(TTR("Are you sure to run more than one projects?")); + multi_run_ask->set_text(TTR("Are you sure to run more than one project?")); multi_run_ask->popup_centered_minsize(); } else { _run_project_confirm(); @@ -917,7 +1070,6 @@ void ProjectManager::_erase_project_confirm() { EditorSettings::get_singleton()->save(); selected_list.clear(); last_clicked = ""; - single_selected_main=""; _load_recent_projects(); } @@ -948,6 +1100,54 @@ void ProjectManager::_install_project(const String& p_zip_path,const String& p_t npdialog->show_dialog(); } +void ProjectManager::_files_dropped(StringArray p_files, int p_screen) { + Set<String> folders_set; + DirAccess *da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + for (int i = 0; i < p_files.size(); i++) { + String file = p_files[i]; + folders_set.insert(da->dir_exists(file) ? file : file.get_base_dir()); + } + memdelete(da); + if (folders_set.size()>0) { + StringArray folders; + for (Set<String>::Element *E=folders_set.front();E;E=E->next()) { + folders.append(E->get()); + } + + bool confirm = true; + if (folders.size()==1) { + DirAccess *dir = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + if (dir->change_dir(folders[0])==OK) { + dir->list_dir_begin(); + String file = dir->get_next(); + while(confirm && file!=String()) { + if (!da->current_is_dir() && file.ends_with("engine.cfg")) { + confirm = false; + } + file = dir->get_next(); + } + dir->list_dir_end(); + } + memdelete(dir); + } + if (confirm) { + multi_scan_ask->get_ok()->disconnect("pressed", this, "_scan_multiple_folders"); + multi_scan_ask->get_ok()->connect("pressed", this, "_scan_multiple_folders", varray(folders)); + multi_scan_ask->set_text(vformat(TTR("You are about the scan %s folders for existing Godot projects. Do you confirm?"), folders.size())); + multi_scan_ask->popup_centered_minsize(); + } else { + _scan_multiple_folders(folders); + } + } +} + +void ProjectManager::_scan_multiple_folders(StringArray p_files) +{ + for (int i = 0; i < p_files.size(); i++) { + _scan_begin(p_files.get(i)); + } +} + void ProjectManager::_bind_methods() { ObjectTypeDB::bind_method("_open_project",&ProjectManager::_open_project); @@ -964,8 +1164,11 @@ void ProjectManager::_bind_methods() { ObjectTypeDB::bind_method("_load_recent_projects",&ProjectManager::_load_recent_projects); ObjectTypeDB::bind_method("_panel_draw",&ProjectManager::_panel_draw); ObjectTypeDB::bind_method("_panel_input",&ProjectManager::_panel_input); + ObjectTypeDB::bind_method("_unhandled_input",&ProjectManager::_unhandled_input); ObjectTypeDB::bind_method("_favorite_pressed",&ProjectManager::_favorite_pressed); ObjectTypeDB::bind_method("_install_project",&ProjectManager::_install_project); + ObjectTypeDB::bind_method("_files_dropped",&ProjectManager::_files_dropped); + ObjectTypeDB::bind_method(_MD("_scan_multiple_folders", "files"),&ProjectManager::_scan_multiple_folders); } @@ -993,15 +1196,12 @@ ProjectManager::ProjectManager() { FileDialog::set_default_show_hidden_files(EditorSettings::get_singleton()->get("file_dialog/show_hidden_files")); set_area_as_parent_rect(); + set_theme(create_default_theme()); gui_base = memnew( Control ); add_child(gui_base); gui_base->set_area_as_parent_rect(); - set_theme(create_default_theme()); - Ref<Theme> theme = create_editor_theme(); - gui_base->set_theme(theme); - Panel *panel = memnew( Panel ); gui_base->add_child(panel); panel->set_area_as_parent_rect(); @@ -1100,6 +1300,7 @@ ProjectManager::ProjectManager() { scan_dir = memnew( FileDialog ); scan_dir->set_access(FileDialog::ACCESS_FILESYSTEM); scan_dir->set_mode(FileDialog::MODE_OPEN_DIR); + scan_dir->set_title(TTR("Select a Folder to Scan")); // must be after mode or it's overridden scan_dir->set_current_dir( EditorSettings::get_singleton()->get("global/default_project_path") ); gui_base->add_child(scan_dir); scan_dir->connect("dir_selected",this,"_scan_begin"); @@ -1164,6 +1365,11 @@ ProjectManager::ProjectManager() { gui_base->add_child(multi_run_ask); + multi_scan_ask = memnew( ConfirmationDialog ); + multi_scan_ask->get_ok()->set_text(TTR("Scan")); + + gui_base->add_child(multi_scan_ask); + OS::get_singleton()->set_low_processor_usage_mode(true); npdialog = memnew( NewProjectDialog ); @@ -1180,6 +1386,10 @@ ProjectManager::ProjectManager() { //get_ok()->set_text("Exit"); last_clicked = ""; + + SceneTree::get_singleton()->connect("files_dropped", this, "_files_dropped"); + + gui_base->set_theme(create_editor_theme()); } diff --git a/tools/editor/project_manager.h b/tools/editor/project_manager.h index 69467f50e7..46f7aea3a5 100644 --- a/tools/editor/project_manager.h +++ b/tools/editor/project_manager.h @@ -55,12 +55,12 @@ class ProjectManager : public Control { ConfirmationDialog *erase_ask; ConfirmationDialog *multi_open_ask; ConfirmationDialog *multi_run_ask; + ConfirmationDialog *multi_scan_ask; NewProjectDialog *npdialog; ScrollContainer *scroll; VBoxContainer *scroll_childs; Map<String, String> selected_list; // name -> main_scene String last_clicked; - String single_selected_main; bool importing; HBoxContainer *projects_hb; @@ -69,8 +69,6 @@ class ProjectManager : public Control { Control *gui_base; - void _item_doubleclicked(); - void _scan_projects(); @@ -82,6 +80,7 @@ class ProjectManager : public Control { void _new_project(); void _erase_project(); void _erase_project_confirm(); + void _update_project_buttons(); void _exit_dialog(); void _scan_begin(const String& p_base); @@ -92,7 +91,10 @@ class ProjectManager : public Control { void _panel_draw(Node *p_hb); void _panel_input(const InputEvent& p_ev,Node *p_hb); + void _unhandled_input(const InputEvent& p_ev); void _favorite_pressed(Node *p_hb); + void _files_dropped(StringArray p_files, int p_screen); + void _scan_multiple_folders(StringArray p_files); protected: diff --git a/tools/editor/project_settings.cpp b/tools/editor/project_settings.cpp index 6be1abf52f..02d95abfa2 100644 --- a/tools/editor/project_settings.cpp +++ b/tools/editor/project_settings.cpp @@ -245,7 +245,7 @@ void ProjectSettings::_device_input_add() { undo_redo->add_undo_method(this,"_settings_changed"); undo_redo->commit_action(); - + _show_last_added(ie); } @@ -283,7 +283,34 @@ void ProjectSettings::_press_a_key_confirm() { undo_redo->add_undo_method(this,"_settings_changed"); undo_redo->commit_action(); + _show_last_added(ie); +} + +void ProjectSettings::_show_last_added(const InputEvent& p_event) { + TreeItem *r = input_editor->get_root(); + if (!r) + return; + r=r->get_children(); + if (!r) + return; + bool found = false; + while(r){ + TreeItem *child = r->get_children(); + while(child){ + Variant input = child->get_meta("__input"); + if (p_event==input){ + child->select(0); + found = true; + break; + } + child=child->get_next(); + } + if (found) break; + r=r->get_next(); + } + + if (found) input_editor->ensure_cursor_is_visible(); } void ProjectSettings::_wait_for_key(const InputEvent& p_event) { @@ -337,7 +364,7 @@ void ProjectSettings::_add_item(int p_item){ device_index->add_item(TTR("Button 7")); device_index->add_item(TTR("Button 8")); device_index->add_item(TTR("Button 9")); - device_input->popup_centered(Size2(350,95)); + device_input->popup_centered_minsize(Size2(350,95)); } break; case InputEvent::JOYSTICK_MOTION: { @@ -349,12 +376,12 @@ void ProjectSettings::_add_item(int p_item){ String desc = _axis_names[i]; device_index->add_item(TTR("Axis")+" "+itos(i/2)+" "+(i&1?"+":"-")+desc); } - device_input->popup_centered(Size2(350,95)); + device_input->popup_centered_minsize(Size2(350,95)); } break; case InputEvent::JOYSTICK_BUTTON: { - device_id->set_val(0); + device_id->set_val(3); device_index_label->set_text(TTR("Joystick Button Index:")); device_index->clear(); @@ -362,7 +389,7 @@ void ProjectSettings::_add_item(int p_item){ device_index->add_item(itos(i)+": "+String(_button_names[i])); } - device_input->popup_centered(Size2(350,95)); + device_input->popup_centered_minsize(Size2(350,95)); } break; default:{} @@ -543,6 +570,7 @@ void ProjectSettings::_update_actions() { } action->add_button(0,get_icon("Remove","EditorIcons"),2); action->set_metadata(0,i); + action->set_meta("__input", ie); } } } @@ -1375,34 +1403,35 @@ ProjectSettings::ProjectSettings(EditorData *p_data) { input_base->set_area_as_parent_rect();; tab_container->add_child(input_base); + VBoxContainer *vbc = memnew( VBoxContainer ); + input_base->add_child(vbc); + vbc->set_anchor_and_margin(MARGIN_TOP,ANCHOR_BEGIN, 5 ); + vbc->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END, 5 ); + vbc->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN, 5 ); + vbc->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END, 5 ); + l = memnew( Label ); - input_base->add_child(l); + vbc->add_child(l); l->set_pos(Point2(6,5)); l->set_text(TTR("Action:")); + hbc = memnew( HBoxContainer ); + vbc->add_child(hbc); + action_name = memnew( LineEdit ); - action_name->set_anchor(MARGIN_RIGHT,ANCHOR_RATIO); - action_name->set_begin( Point2(5,25) ); - action_name->set_end( Point2(0.85,26) ); - input_base->add_child(action_name); + action_name->set_h_size_flags(SIZE_EXPAND_FILL); + hbc->add_child(action_name); action_name->connect("text_entered",this,"_action_adds"); add = memnew( Button ); - input_base->add_child(add); - add->set_anchor(MARGIN_LEFT,ANCHOR_RATIO); - add->set_begin( Point2(0.86,25) ); - add->set_anchor(MARGIN_RIGHT,ANCHOR_END); - add->set_end( Point2(5,26) ); + hbc->add_child(add); + add->set_custom_minimum_size(Size2(150, 0)); add->set_text(TTR("Add")); add->connect("pressed",this,"_action_add"); input_editor = memnew( Tree ); - input_base->add_child(input_editor); - input_editor->set_area_as_parent_rect(); - input_editor->set_anchor_and_margin(MARGIN_TOP,ANCHOR_BEGIN, 55 ); - input_editor->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END, 35 ); - input_editor->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN, 5 ); - input_editor->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END, 5 ); + vbc->add_child(input_editor); + input_editor->set_v_size_flags(SIZE_EXPAND_FILL); input_editor->connect("item_edited",this,"_action_edited"); input_editor->connect("cell_selected",this,"_action_selected"); input_editor->connect("button_pressed",this,"_action_button_pressed"); @@ -1431,30 +1460,32 @@ ProjectSettings::ProjectSettings(EditorData *p_data) { device_input->get_ok()->set_text(TTR("Add")); device_input->connect("confirmed",this,"_device_input_add"); - l = memnew( Label ); - l->set_text(TTR("Device:")); - l->set_pos(Point2(15,10)); - device_input->add_child(l); + hbc = memnew( HBoxContainer ); + device_input->add_child(hbc); + device_input->set_child_rect(hbc); + + VBoxContainer *vbc_left = memnew( VBoxContainer ); + hbc->add_child(vbc_left); l = memnew( Label ); - l->set_text(TTR("Index:")); - l->set_pos(Point2(90,10)); - device_input->add_child(l); - device_index_label=l; + l->set_text(TTR("Device:")); + vbc_left->add_child(l); device_id = memnew( SpinBox ); - device_id->set_pos(Point2(20,30)); - device_id->set_size(Size2(70,10)); device_id->set_val(0); + vbc_left->add_child(device_id); - device_input->add_child(device_id); + VBoxContainer *vbc_right = memnew( VBoxContainer ); + hbc->add_child(vbc_right); + vbc_right->set_h_size_flags(SIZE_EXPAND_FILL); - device_index = memnew( OptionButton ); - device_index->set_pos(Point2(95,30)); - device_index->set_size(Size2(300,10)); - device_index->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,10); + l = memnew( Label ); + l->set_text(TTR("Index:")); + vbc_right->add_child(l); + device_index_label=l; - device_input->add_child(device_index); + device_index = memnew( OptionButton ); + vbc_right->add_child(device_index); /* save = memnew( Button ); diff --git a/tools/editor/project_settings.h b/tools/editor/project_settings.h index 46e98f69ad..61ad094d00 100644 --- a/tools/editor/project_settings.h +++ b/tools/editor/project_settings.h @@ -111,7 +111,7 @@ class ProjectSettings : public AcceptDialog { void _action_button_pressed(Object* p_obj, int p_column,int p_id); void _wait_for_key(const InputEvent& p_event); void _press_a_key_confirm(); - + void _show_last_added(const InputEvent& p_event); void _settings_prop_edited(const String& p_name); void _settings_changed(); diff --git a/tools/editor/property_editor.cpp b/tools/editor/property_editor.cpp index 54d197f10d..de10e68f33 100644 --- a/tools/editor/property_editor.cpp +++ b/tools/editor/property_editor.cpp @@ -45,6 +45,8 @@ #include "scene/resources/packed_scene.h" #include "scene/main/viewport.h" #include "editor_file_system.h" +#include "create_dialog.h" +#include "property_selector.h" void CustomPropertyEditor::_notification(int p_what) { @@ -82,6 +84,20 @@ void CustomPropertyEditor::_menu_option(int p_which) { v=val; emit_signal("variant_changed"); + } else if (hint==PROPERTY_HINT_ENUM) { + + v=p_which; + emit_signal("variant_changed"); + + } + } break; + case Variant::STRING: { + + if (hint==PROPERTY_HINT_ENUM) { + + v=hint_text.get_slice(",",p_which); + emit_signal("variant_changed"); + } } break; case Variant::OBJECT: { @@ -210,6 +226,10 @@ void CustomPropertyEditor::_menu_option(int p_which) { ERR_BREAK( !obj ); Resource *res=obj->cast_to<Resource>(); ERR_BREAK( !res ); + if (owner && hint==PROPERTY_HINT_RESOURCE_TYPE && hint_text=="Script") { + //make visual script the right type + res->call("set_instance_base_type",owner->get_type()); + } v=Ref<Resource>(res).get_ref_ptr(); emit_signal("variant_changed"); @@ -277,6 +297,16 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty switch(type) { + case Variant::BOOL: { + + CheckBox *c=checks20[0]; + c->set_text("True"); + c->set_pos(Vector2(4,4)); + c->set_pressed(v); + c->show(); + set_size(checks20[0]->get_pos()+checks20[0]->get_size()+Vector2(4,4)*EDSCALE); + + } break; case Variant::INT: case Variant::REAL: { @@ -317,9 +347,24 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty set_size(Size2(70,35)*EDSCALE); } + } else if (hint==PROPERTY_HINT_ENUM) { + + menu->clear(); + Vector<String> options = hint_text.split(","); + for(int i=0;i<options.size();i++) { + menu->add_item(options[i],i); + } + menu->set_pos(get_pos()); + menu->popup(); + hide(); + updating=false; + return false; + } else if (hint==PROPERTY_HINT_ALL_FLAGS) { + checks20[0]->set_text(""); + uint32_t flgs = v; for(int i=0;i<2;i++) { @@ -410,7 +455,16 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty config_action_buttons(names); } else if (hint==PROPERTY_HINT_ENUM) { - + menu->clear(); + Vector<String> options = hint_text.split(","); + for(int i=0;i<options.size();i++) { + menu->add_item(options[i],i); + } + menu->set_pos(get_pos()); + menu->popup(); + hide(); + updating=false; + return false; } else if (hint==PROPERTY_HINT_MULTILINE_TEXT) { @@ -431,6 +485,130 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty action_buttons[0]->set_text(TTR("Close")); action_buttons[0]->show(); + } else if (hint==PROPERTY_HINT_TYPE_STRING) { + + + if (!create_dialog) { + create_dialog = memnew( CreateDialog ); + create_dialog->connect("create",this,"_create_dialog_callback"); + add_child(create_dialog); + } + + if (hint_text!=String()) { + create_dialog->set_base_type(hint_text); + } else { + create_dialog->set_base_type("Object"); + } + + create_dialog->popup(false); + hide(); + updating=false; + return false; + + + } else if (hint==PROPERTY_HINT_METHOD_OF_VARIANT_TYPE) { +#define MAKE_PROPSELECT if (!property_select) { property_select = memnew(PropertySelector); property_select->connect("selected",this,"_create_selected_property"); add_child(property_select); } hide(); + + MAKE_PROPSELECT; + + Variant::Type type=Variant::NIL; + for(int i=0;i<Variant::VARIANT_MAX;i++) { + if (hint_text==Variant::get_type_name(Variant::Type(i))) { + type=Variant::Type(i); + } + } + if (type) + property_select->select_method_from_basic_type(type,v); + updating=false; + return false; + + } else if (hint==PROPERTY_HINT_METHOD_OF_BASE_TYPE) { + MAKE_PROPSELECT + + property_select->select_method_from_base_type(hint_text,v); + + updating=false; + return false; + + } else if (hint==PROPERTY_HINT_METHOD_OF_INSTANCE) { + + MAKE_PROPSELECT + + Object *instance = ObjectDB::get_instance(hint_text.to_int64()); + if (instance) + property_select->select_method_from_instance(instance,v); + updating=false; + return false; + + } else if (hint==PROPERTY_HINT_METHOD_OF_SCRIPT) { + MAKE_PROPSELECT + + Object *obj = ObjectDB::get_instance(hint_text.to_int64()); + if (obj && obj->cast_to<Script>()) { + property_select->select_method_from_script(obj->cast_to<Script>(),v); + } + + updating=false; + return false; + + } else if (hint==PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE) { + + MAKE_PROPSELECT + Variant::Type type=Variant::NIL; + String tname=hint_text; + if (tname.find(".")!=-1) + tname=tname.get_slice(".",0); + for(int i=0;i<Variant::VARIANT_MAX;i++) { + if (tname==Variant::get_type_name(Variant::Type(i))) { + type=Variant::Type(Variant::Type(i)); + } + } + InputEvent::Type iet = InputEvent::NONE; + if (hint_text.find(".")!=-1) { + iet=InputEvent::Type(int(hint_text.get_slice(".",1).to_int())); + } + if (type) + property_select->select_property_from_basic_type(type,iet,v); + + updating=false; + return false; + + } else if (hint==PROPERTY_HINT_PROPERTY_OF_BASE_TYPE) { + + MAKE_PROPSELECT + + property_select->select_property_from_base_type(hint_text,v); + + updating=false; + return false; + + } else if (hint==PROPERTY_HINT_PROPERTY_OF_INSTANCE) { + + Object *instance = ObjectDB::get_instance(hint_text.to_int64()); + if (instance) + property_select->select_property_from_instance(instance,v); + + updating=false; + return false; + + } else if (hint==PROPERTY_HINT_PROPERTY_OF_SCRIPT) { + MAKE_PROPSELECT + + Object *obj = ObjectDB::get_instance(hint_text.to_int64()); + if (obj && obj->cast_to<Script>()) { + property_select->select_property_from_script(obj->cast_to<Script>(),v); + } + + updating=false; + return false; + + } else if (hint==PROPERTY_HINT_TYPE_STRING) { + if (!create_dialog) { + create_dialog = memnew( CreateDialog ); + create_dialog->connect("create",this,"_create_dialog_callback"); + add_child(create_dialog); + } + } else { List<String> names; names.push_back("string:"); @@ -940,11 +1118,23 @@ void CustomPropertyEditor::_color_changed(const Color& p_color) { void CustomPropertyEditor::_node_path_selected(NodePath p_path) { - if (owner) { + + if (hint==PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE && hint_text!=String()) { + + Node* node=get_node(hint_text); + if (node) { + + Node *tonode=node->get_node(p_path); + if (tonode) { + p_path=node->get_path_to(tonode); + } + } + + } else if (owner) { Node *node=NULL; - if (owner->is_type("Node")) + if (owner->is_type("Node")) node = owner->cast_to<Node>(); else if (owner->is_type("ArrayPropertyEdit")) node = owner->cast_to<ArrayPropertyEdit>()->get_node(); @@ -975,6 +1165,10 @@ void CustomPropertyEditor::_action_pressed(int p_which) { return; switch(type) { + case Variant::BOOL: { + v=checks20[0]->is_pressed(); + emit_signal("variant_changed"); + } break; case Variant::INT: { if (hint==PROPERTY_HINT_ALL_FLAGS) { @@ -1009,6 +1203,7 @@ void CustomPropertyEditor::_action_pressed(int p_which) { file->clear_filters(); + if (hint_text!="") { Vector<String> extensions=hint_text.split(","); for(int i=0;i<extensions.size();i++) { @@ -1319,17 +1514,41 @@ void CustomPropertyEditor::_text_edit_changed() { } +void CustomPropertyEditor::_create_dialog_callback() { + + + v=create_dialog->get_selected_type(); + emit_signal("variant_changed"); +} + +void CustomPropertyEditor::_create_selected_property(const String& p_prop) { + + + v=p_prop; + emit_signal("variant_changed"); +} + void CustomPropertyEditor::_modified(String p_string) { if (updating) return; updating=true; switch(type) { + case Variant::INT: { + + if (evaluator) + v=evaluator->eval(value_editor[0]->get_text()); + else + v=value_editor[0]->get_text().to_int(); + emit_signal("variant_changed"); + + + } break; case Variant::REAL: { if (hint!=PROPERTY_HINT_EXP_EASING) { if (evaluator) - evaluator->eval(value_editor[0]->get_text()); + v=evaluator->eval(value_editor[0]->get_text()); else v=value_editor[0]->get_text().to_double(); emit_signal("variant_changed"); @@ -1533,7 +1752,8 @@ void CustomPropertyEditor::_modified(String p_string) { } break; case Variant::NODE_PATH: { - + v=NodePath(value_editor[0]->get_text()); + emit_signal("variant_changed"); } break; case Variant::INPUT_EVENT: { @@ -1700,6 +1920,8 @@ void CustomPropertyEditor::_bind_methods() { ObjectTypeDB::bind_method("_drag_easing",&CustomPropertyEditor::_drag_easing); ObjectTypeDB::bind_method( "_text_edit_changed",&CustomPropertyEditor::_text_edit_changed); ObjectTypeDB::bind_method( "_menu_option",&CustomPropertyEditor::_menu_option); + ObjectTypeDB::bind_method( "_create_dialog_callback",&CustomPropertyEditor::_create_dialog_callback); + ObjectTypeDB::bind_method( "_create_selected_property",&CustomPropertyEditor::_create_selected_property); @@ -1822,6 +2044,9 @@ CustomPropertyEditor::CustomPropertyEditor() { add_child(slider); slider->set_area_as_parent_rect(5); slider->connect("value_changed",this,"_range_modified"); + + create_dialog = NULL; + property_select = NULL; } bool PropertyEditor::_might_be_in_instance() { @@ -2089,6 +2314,25 @@ void PropertyEditor::set_item_text(TreeItem *p_item, int p_type, const String& p } break; case Variant::STRING: + + if (p_hint==PROPERTY_HINT_TYPE_STRING) { + + p_item->set_text(1,obj->get(p_name)); + } + + if ( p_hint==PROPERTY_HINT_METHOD_OF_VARIANT_TYPE || + p_hint==PROPERTY_HINT_METHOD_OF_BASE_TYPE || + p_hint==PROPERTY_HINT_METHOD_OF_INSTANCE || + p_hint==PROPERTY_HINT_METHOD_OF_SCRIPT || + p_hint==PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE || + p_hint==PROPERTY_HINT_PROPERTY_OF_BASE_TYPE || + p_hint==PROPERTY_HINT_PROPERTY_OF_INSTANCE || + p_hint==PROPERTY_HINT_PROPERTY_OF_SCRIPT ) { + + p_item->set_text(1,obj->get(p_name)); + } + + if (p_hint==PROPERTY_HINT_ENUM) { Vector<String> strings = p_hint_text.split(","); @@ -2355,15 +2599,27 @@ Variant PropertyEditor::get_drag_data_fw(const Point2& p_point,Control* p_from) if (!item) return Variant(); - int col = tree->get_column_at_pos(p_point); - if (col!=1) - return Variant(); - - Dictionary d = item->get_metadata(0); if (!d.has("name")) return Variant(); + int col = tree->get_column_at_pos(p_point); + if (col==0) { + + Dictionary dp; + dp["type"]="obj_property"; + dp["object"]=obj; + dp["property"]=d["name"]; + dp["value"]=obj->get(d["name"]); + + Label *label =memnew( Label ); + label->set_text(d["name"]); + set_drag_preview(label); + return dp; + } + + + Variant val = obj->get(d["name"]); if (val.get_type()==Variant::OBJECT) { @@ -3039,10 +3295,10 @@ void PropertyEditor::update_tree() { } else { if (p.type == Variant::REAL) { - item->set_range_config(1, -65536, 65535, 0.001); + item->set_range_config(1, -16777216, 16777216, 0.001); } else { - item->set_range_config(1, -65536, 65535, 1); + item->set_range_config(1, -2147483647, 2147483647, 1); } }; @@ -3099,6 +3355,24 @@ void PropertyEditor::update_tree() { } break; + case PROPERTY_HINT_METHOD_OF_VARIANT_TYPE: ///< a property of a type + case PROPERTY_HINT_METHOD_OF_BASE_TYPE: ///< a method of a base type + case PROPERTY_HINT_METHOD_OF_INSTANCE: ///< a method of an instance + case PROPERTY_HINT_METHOD_OF_SCRIPT: ///< a method of a script & base + case PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE: ///< a property of a type + case PROPERTY_HINT_PROPERTY_OF_BASE_TYPE: ///< a property of a base type + case PROPERTY_HINT_PROPERTY_OF_INSTANCE: ///< a property of an instance + case PROPERTY_HINT_PROPERTY_OF_SCRIPT: ///< a property of a script & base + case PROPERTY_HINT_TYPE_STRING: { + + item->set_cell_mode( 1, TreeItem::CELL_MODE_CUSTOM); + item->set_editable(1,!read_only); + if (show_type_icons) + item->set_icon( 0, get_icon("String","EditorIcons") ); + item->set_text(1,obj->get(p.name)); + + } break; + default: { item->set_cell_mode( 1, TreeItem::CELL_MODE_STRING ); @@ -3482,7 +3756,7 @@ void PropertyEditor::_edit_set(const String& p_name, const Variant& p_value) { } else { - undo_redo->create_action(TTR("Set")+" "+p_name,true); + undo_redo->create_action(TTR("Set")+" "+p_name,UndoRedo::MERGE_ENDS); undo_redo->add_do_property(obj,p_name,p_value); undo_redo->add_undo_property(obj,p_name,obj->get(p_name)); undo_redo->add_do_method(this,"_changed_callback",obj,p_name); @@ -4283,7 +4557,7 @@ void SectionedPropertyEditor::update_category_list() { else if ( !(pi.usage&PROPERTY_USAGE_EDITOR) ) continue; - if (pi.name.find(":")!=-1 || pi.name=="script/script") + if (pi.name.find(":")!=-1 || pi.name=="script/script" || pi.name.begins_with("resource/")) continue; int sp = pi.name.find("/"); if (sp!=-1) { @@ -4349,7 +4623,7 @@ SectionedPropertyEditor::~SectionedPropertyEditor() { double PropertyValueEvaluator::eval(const String& p_text) { - if (!obj) + if (!obj || !script_language) return _default_eval(p_text); Ref<Script> script= Ref<Script>(script_language ->create_script()); @@ -4361,6 +4635,8 @@ double PropertyValueEvaluator::eval(const String& p_text) { } ScriptInstance *script_instance = script->instance_create(this); + if (!script_instance) + return _default_eval(p_text); Variant::CallError call_err; script_instance->call("set_this",obj); @@ -4388,7 +4664,13 @@ String PropertyValueEvaluator::_build_script(const String& p_text) { } PropertyValueEvaluator::PropertyValueEvaluator() { - script_language = ScriptServer::get_language(0); // todo: get script language from editor setting + script_language=NULL; + + for(int i=0;i<ScriptServer::get_language_count();i++) { + if (ScriptServer::get_language(i)->get_name()=="GDScript") { + script_language=ScriptServer::get_language(i); + } + } } PropertyValueEvaluator::~PropertyValueEvaluator() { diff --git a/tools/editor/property_editor.h b/tools/editor/property_editor.h index a909b5ccd3..6c6c309d32 100644 --- a/tools/editor/property_editor.h +++ b/tools/editor/property_editor.h @@ -48,6 +48,8 @@ */ class PropertyValueEvaluator; +class CreateDialog; +class PropertySelector; class CustomPropertyEditor : public Popup { @@ -102,6 +104,8 @@ class CustomPropertyEditor : public Popup { Control *easing_draw; + CreateDialog *create_dialog; + PropertySelector *property_select; Object* owner; @@ -118,6 +122,8 @@ class CustomPropertyEditor : public Popup { void _focus_exit(); void _action_pressed(int p_which); void _type_create_selected(int p_idx); + void _create_dialog_callback(); + void _create_selected_property(const String &p_prop); void _color_changed(const Color& p_color); diff --git a/tools/editor/property_selector.cpp b/tools/editor/property_selector.cpp new file mode 100644 index 0000000000..20b72240d9 --- /dev/null +++ b/tools/editor/property_selector.cpp @@ -0,0 +1,598 @@ +#include "property_selector.h" +#include "editor_scale.h" + +#include "os/keyboard.h" + +void PropertySelector::_text_changed(const String& p_newtext) { + + _update_search(); +} + +void PropertySelector::_sbox_input(const InputEvent& p_ie) { + + if (p_ie.type==InputEvent::KEY) { + + switch(p_ie.key.scancode) { + case KEY_UP: + case KEY_DOWN: + case KEY_PAGEUP: + case KEY_PAGEDOWN: { + + search_options->call("_input_event", p_ie); + search_box->accept_event(); + + TreeItem *root = search_options->get_root(); + if (!root->get_children()) + break; + + TreeItem *current = search_options->get_selected(); + + TreeItem *item = search_options->get_next_selected(root); + while (item) { + item->deselect(0); + item = search_options->get_next_selected(item); + } + + current->select(0); + + } break; + } + } +} + + +void PropertySelector::_update_search() { + + + if (properties) + set_title(TTR("Select Property")); + else + set_title(TTR("Select Method")); + + search_options->clear(); + help_bit->set_text(""); + + + TreeItem *root = search_options->create_item(); + + + if (properties) { + + List<PropertyInfo> props; + + if (instance) { + instance->get_property_list(&props,true); + } else if (type!=Variant::NIL) { + Variant v; + if (type==Variant::INPUT_EVENT) { + InputEvent ie; + ie.type=event_type; + v=ie; + } else { + Variant::CallError ce; + v=Variant::construct(type,NULL,0,ce); + } + + v.get_property_list(&props); + } else { + + + Object *obj = ObjectDB::get_instance(script); + if (obj && obj->cast_to<Script>()) { + + props.push_back(PropertyInfo(Variant::NIL,"Script Variables",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_CATEGORY)); + obj->cast_to<Script>()->get_script_property_list(&props); + } + + StringName base=base_type; + while(base) { + props.push_back(PropertyInfo(Variant::NIL,base,PROPERTY_HINT_NONE,"",PROPERTY_USAGE_CATEGORY)); + ObjectTypeDB::get_property_list(base,&props,true); + base=ObjectTypeDB::type_inherits_from(base); + } + + } + + TreeItem *category=NULL; + + bool found=false; + + Ref<Texture> type_icons[Variant::VARIANT_MAX]={ + Control::get_icon("MiniVariant","EditorIcons"), + Control::get_icon("MiniBoolean","EditorIcons"), + Control::get_icon("MiniInteger","EditorIcons"), + Control::get_icon("MiniFloat","EditorIcons"), + Control::get_icon("MiniString","EditorIcons"), + Control::get_icon("MiniVector2","EditorIcons"), + Control::get_icon("MiniRect2","EditorIcons"), + Control::get_icon("MiniVector3","EditorIcons"), + Control::get_icon("MiniMatrix2","EditorIcons"), + Control::get_icon("MiniPlane","EditorIcons"), + Control::get_icon("MiniQuat","EditorIcons"), + Control::get_icon("MiniAabb","EditorIcons"), + Control::get_icon("MiniMatrix3","EditorIcons"), + Control::get_icon("MiniTransform","EditorIcons"), + Control::get_icon("MiniColor","EditorIcons"), + Control::get_icon("MiniImage","EditorIcons"), + Control::get_icon("MiniPath","EditorIcons"), + Control::get_icon("MiniRid","EditorIcons"), + Control::get_icon("MiniObject","EditorIcons"), + Control::get_icon("MiniInput","EditorIcons"), + Control::get_icon("MiniDictionary","EditorIcons"), + Control::get_icon("MiniArray","EditorIcons"), + Control::get_icon("MiniRawArray","EditorIcons"), + Control::get_icon("MiniIntArray","EditorIcons"), + Control::get_icon("MiniFloatArray","EditorIcons"), + Control::get_icon("MiniStringArray","EditorIcons"), + Control::get_icon("MiniVector2Array","EditorIcons"), + Control::get_icon("MiniVector3Array","EditorIcons"), + Control::get_icon("MiniColorArray","EditorIcons") + }; + + + for (List<PropertyInfo>::Element *E=props.front();E;E=E->next()) { + if (E->get().usage==PROPERTY_USAGE_CATEGORY) { + if (category && category->get_children()==NULL) { + memdelete(category); //old category was unused + } + category = search_options->create_item(root); + category->set_text(0,E->get().name); + category->set_selectable(0,false); + + Ref<Texture> icon; + if (E->get().name=="Script Variables") { + icon=get_icon("Script","EditorIcons"); + } else if (has_icon(E->get().name,"EditorIcons")) { + icon=get_icon(E->get().name,"EditorIcons"); + } else { + icon=get_icon("Object","EditorIcons"); + } + category->set_icon(0,icon); + continue; + } + + if (!(E->get().usage&PROPERTY_USAGE_EDITOR)) + continue; + + if (search_box->get_text()!=String() && E->get().name.find(search_box->get_text())==-1) + continue; + TreeItem *item = search_options->create_item(category?category:root); + item->set_text(0,E->get().name); + item->set_metadata(0,E->get().name); + item->set_icon(0,type_icons[E->get().type]); + + if (!found && search_box->get_text()!=String() && E->get().name.find(search_box->get_text())!=-1) { + item->select(0); + found=true; + } + + item->set_selectable(0,true); + } + + if (category && category->get_children()==NULL) { + memdelete(category); //old category was unused + } + } else { + + List<MethodInfo> methods; + + if (type!=Variant::NIL) { + Variant v; + Variant::CallError ce; + v=Variant::construct(type,NULL,0,ce); + v.get_method_list(&methods); + } else { + + + Object *obj = ObjectDB::get_instance(script); + if (obj && obj->cast_to<Script>()) { + + methods.push_back(MethodInfo("*Script Methods")); + obj->cast_to<Script>()->get_script_method_list(&methods); + } + + StringName base=base_type; + while(base) { + methods.push_back(MethodInfo("*"+String(base))); + ObjectTypeDB::get_method_list(base,&methods,true); + base=ObjectTypeDB::type_inherits_from(base); + } + + } + + TreeItem *category=NULL; + + bool found=false; + bool script_methods=false; + + for (List<MethodInfo>::Element *E=methods.front();E;E=E->next()) { + if (E->get().name.begins_with("*")) { + if (category && category->get_children()==NULL) { + memdelete(category); //old category was unused + } + category = search_options->create_item(root); + category->set_text(0,E->get().name.replace_first("*","")); + category->set_selectable(0,false); + + Ref<Texture> icon; + script_methods=false; + if (E->get().name=="*Script Methods") { + icon=get_icon("Script","EditorIcons"); + script_methods=true; + } else if (has_icon(E->get().name,"EditorIcons")) { + icon=get_icon(E->get().name,"EditorIcons"); + } else { + icon=get_icon("Object","EditorIcons"); + } + category->set_icon(0,icon); + + continue; + } + + String name = E->get().name.get_slice(":",0); + if (!script_methods && name.begins_with("_") && !(E->get().flags&METHOD_FLAG_VIRTUAL)) + continue; + + if (search_box->get_text()!=String() && name.find(search_box->get_text())==-1) + continue; + + TreeItem *item = search_options->create_item(category?category:root); + + MethodInfo mi=E->get(); + + String desc; + if (mi.name.find(":")!=-1) { + desc=mi.name.get_slice(":",1)+" "; + mi.name=mi.name.get_slice(":",0); + } else if (mi.return_val.type!=Variant::NIL) + desc=Variant::get_type_name(mi.return_val.type); + else + desc="void "; + + + + desc+=" "+mi.name+" ( "; + + for(int i=0;i<mi.arguments.size();i++) { + + if (i>0) + desc+=", "; + + if (mi.arguments[i].type==Variant::NIL) + desc+="var "; + else if (mi.arguments[i].name.find(":")!=-1) { + desc+=mi.arguments[i].name.get_slice(":",1)+" "; + mi.arguments[i].name=mi.arguments[i].name.get_slice(":",0); + } else + desc+=Variant::get_type_name(mi.arguments[i].type)+" "; + + desc+=mi.arguments[i].name; + + } + + desc+=" )"; + + item->set_text(0,desc); + item->set_metadata(0,name); + item->set_selectable(0,true); + + if (!found && search_box->get_text()!=String() && name.find(search_box->get_text())!=-1) { + item->select(0); + found=true; + } + + } + + if (category && category->get_children()==NULL) { + memdelete(category); //old category was unused + } + + } + + get_ok()->set_disabled(root->get_children()==NULL); + +} + + + +void PropertySelector::_confirmed() { + + TreeItem *ti = search_options->get_selected(); + if (!ti) + return; + emit_signal("selected",ti->get_metadata(0)); + hide(); +} + +void PropertySelector::_item_selected() { + + help_bit->set_text(""); + + TreeItem *item=search_options->get_selected(); + if (!item) + return; + String name = item->get_metadata(0); + + String class_type; + if (properties && type==Variant::INPUT_EVENT) { + + switch(event_type) { + case InputEvent::NONE: class_type="InputEvent"; break; + case InputEvent::KEY: class_type="InputEventKey"; break; + case InputEvent::MOUSE_MOTION: class_type="InputEventMouseMotion"; break; + case InputEvent::MOUSE_BUTTON: class_type="InputEventMouseButton"; break; + case InputEvent::JOYSTICK_MOTION: class_type="InputEventJoystickMotion"; break; + case InputEvent::JOYSTICK_BUTTON: class_type="InputEventJoystickButton"; break; + case InputEvent::SCREEN_TOUCH: class_type="InputEventScreenTouch"; break; + case InputEvent::SCREEN_DRAG: class_type="InputEventScreenDrag"; break; + case InputEvent::ACTION: class_type="InputEventAction"; break; + default: {} + } + + } else if (type) { + class_type=Variant::get_type_name(type); + + } else { + class_type=base_type; + } + + DocData *dd=EditorHelp::get_doc_data(); + String text; + + + if (properties) { + + String at_class=class_type; + + + + while(at_class!=String()) { + + + Map<String,DocData::ClassDoc>::Element *E=dd->class_list.find(at_class); + if (E) { + for(int i=0;i<E->get().properties.size();i++) { + if (E->get().properties[i].name==name) { + text=E->get().properties[i].description; + } + } + } + + at_class=ObjectTypeDB::type_inherits_from(at_class); + } + + if (text==String()) { + + StringName setter; + StringName type; + if (ObjectTypeDB::get_setter_and_type_for_property(class_type,name,type,setter)) { + Map<String,DocData::ClassDoc>::Element *E=dd->class_list.find(type); + if (E) { + for(int i=0;i<E->get().methods.size();i++) { + if (E->get().methods[i].name==setter.operator String()) { + text=E->get().methods[i].description; + } + } + } + + + } + } + + } else { + + + String at_class=class_type; + + while(at_class!=String()) { + + Map<String,DocData::ClassDoc>::Element *E=dd->class_list.find(at_class); + if (E) { + for(int i=0;i<E->get().methods.size();i++) { + if (E->get().methods[i].name==name) { + text=E->get().methods[i].description; + } + } + } + + at_class=ObjectTypeDB::type_inherits_from(at_class); + } + } + + + if (text==String()) + return; + + help_bit->set_text(text); + +} + + +void PropertySelector::_notification(int p_what) { + + if (p_what==NOTIFICATION_ENTER_TREE) { + + connect("confirmed",this,"_confirmed"); + + } +} + + + +void PropertySelector::select_method_from_base_type(const String& p_base,const String& p_current) { + + base_type=p_base; + selected=p_current; + type=Variant::NIL; + script=0; + properties=false; + instance=NULL; + + popup_centered_ratio(0.6); + search_box->set_text(""); + search_box->grab_focus(); + _update_search(); +} + +void PropertySelector::select_method_from_script(const Ref<Script>& p_script,const String& p_current){ + + ERR_FAIL_COND( p_script.is_null() ); + base_type=p_script->get_instance_base_type(); + selected=p_current; + type=Variant::NIL; + script=p_script->get_instance_ID(); + properties=false; + instance=NULL; + + popup_centered_ratio(0.6); + search_box->set_text(""); + search_box->grab_focus(); + _update_search(); + +} +void PropertySelector::select_method_from_basic_type(Variant::Type p_type, const String &p_current){ + + ERR_FAIL_COND(p_type==Variant::NIL); + base_type=""; + selected=p_current; + type=p_type; + script=0; + properties=false; + instance=NULL; + + popup_centered_ratio(0.6); + search_box->set_text(""); + search_box->grab_focus(); + _update_search(); + +} + +void PropertySelector::select_method_from_instance(Object* p_instance, const String &p_current){ + + + base_type=p_instance->get_type(); + selected=p_current; + type=Variant::NIL; + script=0; + { + Ref<Script> scr = p_instance->get_script(); + if (scr.is_valid()) + script=scr->get_instance_ID(); + } + properties=false; + instance=NULL; + + popup_centered_ratio(0.6); + search_box->set_text(""); + search_box->grab_focus(); + _update_search(); + +} + + +void PropertySelector::select_property_from_base_type(const String& p_base,const String& p_current) { + + base_type=p_base; + selected=p_current; + type=Variant::NIL; + script=0; + properties=true; + instance=NULL; + + popup_centered_ratio(0.6); + search_box->set_text(""); + search_box->grab_focus(); + _update_search(); +} + +void PropertySelector::select_property_from_script(const Ref<Script>& p_script,const String& p_current){ + + ERR_FAIL_COND( p_script.is_null() ); + + base_type=p_script->get_instance_base_type(); + selected=p_current; + type=Variant::NIL; + script=p_script->get_instance_ID(); + properties=true; + instance=NULL; + + popup_centered_ratio(0.6); + search_box->set_text(""); + search_box->grab_focus(); + _update_search(); + +} +void PropertySelector::select_property_from_basic_type(Variant::Type p_type, InputEvent::Type p_event_type, const String &p_current){ + + ERR_FAIL_COND(p_type==Variant::NIL); + base_type=""; + selected=p_current; + type=p_type; + event_type=p_event_type; + script=0; + properties=true; + instance=NULL; + + popup_centered_ratio(0.6); + search_box->set_text(""); + search_box->grab_focus(); + _update_search(); + +} + +void PropertySelector::select_property_from_instance(Object* p_instance, const String &p_current){ + + + base_type=""; + selected=p_current; + type=Variant::NIL; + script=0; + properties=true; + instance=p_instance; + + popup_centered_ratio(0.6); + search_box->set_text(""); + search_box->grab_focus(); + _update_search(); + +} + +void PropertySelector::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("_text_changed"),&PropertySelector::_text_changed); + ObjectTypeDB::bind_method(_MD("_confirmed"),&PropertySelector::_confirmed); + ObjectTypeDB::bind_method(_MD("_sbox_input"),&PropertySelector::_sbox_input); + ObjectTypeDB::bind_method(_MD("_item_selected"),&PropertySelector::_item_selected); + + ADD_SIGNAL(MethodInfo("selected",PropertyInfo(Variant::STRING,"name"))); + +} + + +PropertySelector::PropertySelector() { + + + VBoxContainer *vbc = memnew( VBoxContainer ); + add_child(vbc); + set_child_rect(vbc); + search_box = memnew( LineEdit ); + vbc->add_margin_child(TTR("Search:"),search_box); + search_box->connect("text_changed",this,"_text_changed"); + search_box->connect("input_event",this,"_sbox_input"); + search_options = memnew( Tree ); + vbc->add_margin_child(TTR("Matches:"),search_options,true); + get_ok()->set_text(TTR("Open")); + get_ok()->set_disabled(true); + register_text_enter(search_box); + set_hide_on_ok(false); + search_options->connect("item_activated",this,"_confirmed"); + search_options->connect("cell_selected",this,"_item_selected"); + search_options->set_hide_root(true); + search_options->set_hide_folding(true); + + help_bit = memnew( EditorHelpBit ); + vbc->add_margin_child(TTR("Description:"),help_bit); + help_bit->connect("request_hide",this,"_closed"); + + +} diff --git a/tools/editor/property_selector.h b/tools/editor/property_selector.h new file mode 100644 index 0000000000..f7f0e7e167 --- /dev/null +++ b/tools/editor/property_selector.h @@ -0,0 +1,55 @@ +#ifndef PROPERTYSELECTOR_H +#define PROPERTYSELECTOR_H + +#include "tools/editor/property_editor.h" +#include "scene/gui/rich_text_label.h" +#include "editor_help.h" + +class PropertySelector : public ConfirmationDialog { + OBJ_TYPE(PropertySelector,ConfirmationDialog ) + + + LineEdit *search_box; + Tree *search_options; + + void _update_search(); + + void _sbox_input(const InputEvent& p_ie); + + void _confirmed(); + void _text_changed(const String& p_newtext); + + EditorHelpBit *help_bit; + + bool properties; + String selected; + Variant::Type type; + InputEvent::Type event_type; + String base_type; + ObjectID script; + Object *instance; + + void _item_selected(); +protected: + void _notification(int p_what); + static void _bind_methods(); + + + +public: + + + void select_method_from_base_type(const String& p_base,const String& p_current=""); + void select_method_from_script(const Ref<Script>& p_script,const String& p_current=""); + void select_method_from_basic_type(Variant::Type p_type,const String& p_current=""); + void select_method_from_instance(Object* p_instance, const String &p_current=""); + + void select_property_from_base_type(const String& p_base,const String& p_current=""); + void select_property_from_script(const Ref<Script>& p_script,const String& p_current=""); + void select_property_from_basic_type(Variant::Type p_type,InputEvent::Type p_event_type,const String& p_current=""); + void select_property_from_instance(Object* p_instance, const String &p_current=""); + + PropertySelector(); +}; + +#endif // PROPERTYSELECTOR_H diff --git a/tools/editor/scene_tree_dock.cpp b/tools/editor/scene_tree_dock.cpp index a240b575aa..506dfd3889 100644 --- a/tools/editor/scene_tree_dock.cpp +++ b/tools/editor/scene_tree_dock.cpp @@ -33,6 +33,7 @@ #include "scene/resources/packed_scene.h" #include "editor_settings.h" #include "tools/editor/plugins/canvas_item_editor_plugin.h" +#include "tools/editor/plugins/spatial_editor_plugin.h" #include "script_editor_debugger.h" #include "tools/editor/plugins/script_editor_plugin.h" #include "core/io/resource_saver.h" @@ -42,17 +43,31 @@ #include "scene/main/viewport.h" +void SceneTreeDock::_nodes_drag_begin() { + + + if (restore_script_editor_on_drag) { + EditorNode::get_singleton()->set_visible_editor(EditorNode::EDITOR_SCRIPT); + restore_script_editor_on_drag=false; + } + +} + +void SceneTreeDock::_input(InputEvent p_event) { + + if (p_event.type==InputEvent::MOUSE_BUTTON && !p_event.mouse_button.pressed && p_event.mouse_button.button_index==BUTTON_LEFT) { + restore_script_editor_on_drag=false; //lost chance + } +} void SceneTreeDock::_unhandled_key_input(InputEvent p_event) { if (get_viewport()->get_modal_stack_top()) return; //ignore because of modal window - uint32_t sc = p_event.key.get_scancode_with_modifiers(); if (!p_event.key.pressed || p_event.key.echo) return; - if (ED_IS_SHORTCUT("scene_tree/add_child_node", p_event)) { _tool_selected(TOOL_NEW); } @@ -83,9 +98,11 @@ void SceneTreeDock::_unhandled_key_input(InputEvent p_event) { else if (ED_IS_SHORTCUT("scene_tree/save_branch_as_scene", p_event)) { _tool_selected(TOOL_NEW_SCENE_FROM); } - switch(sc) { - case KEY_MASK_SHIFT|KEY_DELETE: { _tool_selected(TOOL_ERASE, true); } break; - case KEY_DELETE: { _tool_selected(TOOL_ERASE); } break; + else if (ED_IS_SHORTCUT("scene_tree/delete_no_confirm", p_event)) { + _tool_selected(TOOL_ERASE, true); + } + else if (ED_IS_SHORTCUT("scene_tree/delete", p_event)) { + _tool_selected(TOOL_ERASE); } } @@ -106,11 +123,30 @@ void SceneTreeDock::instance(const String& p_file) { Vector<String> scenes; scenes.push_back(p_file); - instance_scenes(scenes,parent,-1); + _perform_instance_scenes(scenes,parent,-1); + +} + +void SceneTreeDock::instance_scenes(const Vector<String>& p_files, Node *p_parent) { + + Node *parent = p_parent; + + if (!parent) { + parent = scene_tree->get_selected(); + } + + if (!parent || !edited_scene) { + + accept->get_ok()->set_text(TTR("OK")); + accept->set_text(TTR("No parent to instance the scenes at.")); + accept->popup_centered_minsize(); + return; + }; + _perform_instance_scenes(p_files, parent, -1); } -void SceneTreeDock::instance_scenes(const Vector<String>& p_files,Node* parent,int p_pos) { +void SceneTreeDock::_perform_instance_scenes(const Vector<String>& p_files,Node* parent,int p_pos) { @@ -648,6 +684,8 @@ void SceneTreeDock::_notification(int p_what) { } button_add->set_icon(get_icon("Add","EditorIcons")); button_instance->set_icon(get_icon("Instance","EditorIcons")); + button_create_script->set_icon(get_icon("Script","EditorIcons")); + filter_icon->set_texture(get_icon("Zoom","EditorIcons")); @@ -679,7 +717,13 @@ void SceneTreeDock::_node_selected() { return; } + if (ScriptEditor::get_singleton()->is_visible()) { + restore_script_editor_on_drag=true; + } + editor->push_item(node); + + } void SceneTreeDock::_node_renamed() { @@ -1261,11 +1305,18 @@ void SceneTreeDock::_delete_confirm() { void SceneTreeDock::_selection_changed() { - if (EditorNode::get_singleton()->get_editor_selection()->get_selection().size()>1) { + int selection_size = EditorNode::get_singleton()->get_editor_selection()->get_selection().size(); + if (selection_size>1) { //automatically turn on multi-edit _tool_selected(TOOL_MULTI_EDIT); } + if (selection_size==1 && EditorNode::get_singleton()->get_editor_selection()->get_selection().front()->key()->get_script().is_null()) { + button_create_script->show(); + } else { + button_create_script->hide(); + } + //tool_buttons[TOOL_MULTI_EDIT]->set_disabled(EditorNode::get_singleton()->get_editor_selection()->get_selection().size()<2); } @@ -1677,7 +1728,7 @@ void SceneTreeDock::_files_dropped(Vector<String> p_files,NodePath p_to,int p_ty int to_pos=-1; _normalize_drop(node,to_pos,p_type); - instance_scenes(p_files,node,to_pos); + _perform_instance_scenes(p_files,node,to_pos); } void SceneTreeDock::_nodes_dragged(Array p_nodes,NodePath p_to,int p_type) { @@ -1750,7 +1801,7 @@ void SceneTreeDock::_tree_rmb(const Vector2& p_menu_pos) { } menu->add_separator(); - menu->add_icon_item(get_icon("Remove","EditorIcons"),TTR("Delete Node(s)"), TOOL_ERASE, KEY_DELETE); + menu->add_icon_shortcut(get_icon("Remove","EditorIcons"), ED_SHORTCUT("scene_tree/delete", TTR("Delete Node(s)"), KEY_DELETE), TOOL_ERASE); menu->set_size(Size2(1,1)); menu->set_pos(p_menu_pos); @@ -1775,6 +1826,21 @@ void SceneTreeDock::set_filter(const String& p_filter){ scene_tree->set_filter(p_filter); } + +void SceneTreeDock::_focus_node() { + + Node *node = scene_tree->get_selected(); + ERR_FAIL_COND(!node); + + if (node->is_type("CanvasItem")) { + CanvasItemEditorPlugin *editor = editor_data->get_editor("2D")->cast_to<CanvasItemEditorPlugin>(); + editor->get_canvas_item_editor()->focus_selection(); + } else { + SpatialEditorPlugin *editor = editor_data->get_editor("3D")->cast_to<SpatialEditorPlugin>(); + editor->get_spatial_editor()->get_editor_viewport(0)->focus_selection(); + } +} + void SceneTreeDock::_bind_methods() { ObjectTypeDB::bind_method(_MD("_tool_selected"),&SceneTreeDock::_tool_selected,DEFVAL(false)); @@ -1788,6 +1854,8 @@ void SceneTreeDock::_bind_methods() { ObjectTypeDB::bind_method(_MD("_load_request"),&SceneTreeDock::_load_request); ObjectTypeDB::bind_method(_MD("_script_open_request"),&SceneTreeDock::_script_open_request); ObjectTypeDB::bind_method(_MD("_unhandled_key_input"),&SceneTreeDock::_unhandled_key_input); + ObjectTypeDB::bind_method(_MD("_input"),&SceneTreeDock::_input); + ObjectTypeDB::bind_method(_MD("_nodes_drag_begin"),&SceneTreeDock::_nodes_drag_begin); ObjectTypeDB::bind_method(_MD("_delete_confirm"),&SceneTreeDock::_delete_confirm); ObjectTypeDB::bind_method(_MD("_node_prerenamed"),&SceneTreeDock::_node_prerenamed); ObjectTypeDB::bind_method(_MD("_import_subscene"),&SceneTreeDock::_import_subscene); @@ -1797,6 +1865,7 @@ void SceneTreeDock::_bind_methods() { ObjectTypeDB::bind_method(_MD("_files_dropped"),&SceneTreeDock::_files_dropped); ObjectTypeDB::bind_method(_MD("_tree_rmb"),&SceneTreeDock::_tree_rmb); ObjectTypeDB::bind_method(_MD("_filter_changed"),&SceneTreeDock::_filter_changed); + ObjectTypeDB::bind_method(_MD("_focus_node"),&SceneTreeDock::_focus_node); ObjectTypeDB::bind_method(_MD("instance"),&SceneTreeDock::instance); @@ -1827,6 +1896,8 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor,Node *p_scene_root,EditorSelec ED_SHORTCUT("scene_tree/reparent", TTR("Reparent")); ED_SHORTCUT("scene_tree/merge_from_scene", TTR("Merge From Scene")); ED_SHORTCUT("scene_tree/save_branch_as_scene", TTR("Save Branch as Scene")); + ED_SHORTCUT("scene_tree/delete_no_confirm", TTR("Delete (No Confirm)"), KEY_MASK_SHIFT|KEY_DELETE); + ED_SHORTCUT("scene_tree/delete", TTR("Delete"), KEY_DELETE); tb = memnew( ToolButton ); tb->connect("pressed",this,"_tool_selected",make_binds(TOOL_NEW, false)); @@ -1854,6 +1925,12 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor,Node *p_scene_root,EditorSelec filter->connect("text_changed",this,"_filter_changed"); + tb = memnew( ToolButton ); + tb->connect("pressed",this,"_tool_selected",make_binds(TOOL_SCRIPT, false)); + tb->set_tooltip(TTR("Create a new script for the selected node.")); + tb->set_shortcut(ED_GET_SHORTCUT("scene_tree/add_script")); + filter_hbc->add_child(tb); + button_create_script=tb; scene_tree = memnew( SceneTreeEditor(false,true,true )); @@ -1868,6 +1945,10 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor,Node *p_scene_root,EditorSelec scene_tree->connect("open_script",this,"_script_open_request"); scene_tree->connect("nodes_rearranged",this,"_nodes_dragged"); scene_tree->connect("files_dropped",this,"_files_dropped"); + scene_tree->connect("nodes_dragged",this,"_nodes_drag_begin"); + + scene_tree->get_scene_tree()->connect("item_double_clicked", this, "_focus_node"); + scene_tree->get_scene_tree()->set_delayed_text_editor(true); scene_tree->set_undo_redo(&editor_data->get_undo_redo()); scene_tree->set_editor_selection(editor_selection); @@ -1920,7 +2001,8 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor,Node *p_scene_root,EditorSelec add_child(menu); menu->connect("item_pressed",this,"_tool_selected"); first_enter=true; - + restore_script_editor_on_drag=false; vbc->add_constant_override("separation",4); + set_process_input(true); } diff --git a/tools/editor/scene_tree_dock.h b/tools/editor/scene_tree_dock.h index 51041a235b..d92f12c34b 100644 --- a/tools/editor/scene_tree_dock.h +++ b/tools/editor/scene_tree_dock.h @@ -71,12 +71,14 @@ class SceneTreeDock : public VBoxContainer { }; + bool restore_script_editor_on_drag; int current_option; CreateDialog *create_dialog; ToolButton *button_add; ToolButton *button_instance; + ToolButton *button_create_script; SceneTreeEditor *scene_tree; @@ -128,6 +130,8 @@ class SceneTreeDock : public VBoxContainer { void _node_prerenamed(Node* p_node, const String& p_new_name); + void _nodes_drag_begin(); + void _input(InputEvent p_event); void _unhandled_key_input(InputEvent p_event); void _import_subscene(); @@ -148,6 +152,8 @@ class SceneTreeDock : public VBoxContainer { void _filter_changed(const String& p_filter); + void _perform_instance_scenes(const Vector<String>& p_files,Node* parent,int p_pos); + protected: void _notification(int p_what); @@ -157,10 +163,12 @@ public: String get_filter(); void set_filter(const String& p_filter); + void _focus_node(); + void import_subscene(); void set_edited_scene(Node* p_scene); void instance(const String& p_path); - void instance_scenes(const Vector<String>& p_files,Node* parent,int p_pos); + void instance_scenes(const Vector<String>& p_files, Node *p_parent=NULL); void set_selected(Node *p_node, bool p_emit_selected=false); void fill_path_renames(Node* p_node, Node *p_new_parent, List<Pair<NodePath,NodePath> > *p_renames); void perform_node_renames(Node* p_base,List<Pair<NodePath,NodePath> > *p_renames, Map<Ref<Animation>, Set<int> > *r_rem_anims=NULL); diff --git a/tools/editor/scene_tree_editor.cpp b/tools/editor/scene_tree_editor.cpp index 73358e805d..e5a97fa26e 100644 --- a/tools/editor/scene_tree_editor.cpp +++ b/tools/editor/scene_tree_editor.cpp @@ -966,7 +966,7 @@ Variant SceneTreeEditor::get_drag_data_fw(const Point2& p_point,Control* p_from) drag_data["nodes"]=objs; tree->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN|Tree::DROP_MODE_ON_ITEM); - + emit_signal("nodes_dragged"); return drag_data; } @@ -1110,6 +1110,7 @@ void SceneTreeEditor::_bind_methods() { ADD_SIGNAL( MethodInfo("node_renamed") ); ADD_SIGNAL( MethodInfo("node_prerename") ); ADD_SIGNAL( MethodInfo("node_changed") ); + ADD_SIGNAL( MethodInfo("nodes_dragged") ); ADD_SIGNAL( MethodInfo("nodes_rearranged",PropertyInfo(Variant::ARRAY,"paths"),PropertyInfo(Variant::NODE_PATH,"to_path"),PropertyInfo(Variant::INT,"type") ) ); ADD_SIGNAL( MethodInfo("files_dropped",PropertyInfo(Variant::STRING_ARRAY,"files"),PropertyInfo(Variant::NODE_PATH,"to_path"),PropertyInfo(Variant::INT,"type") ) ); ADD_SIGNAL( MethodInfo("rmb_pressed",PropertyInfo(Variant::VECTOR2,"pos")) ) ; diff --git a/tools/editor/script_create_dialog.cpp b/tools/editor/script_create_dialog.cpp index e93a40efbc..749198314a 100644 --- a/tools/editor/script_create_dialog.cpp +++ b/tools/editor/script_create_dialog.cpp @@ -117,20 +117,20 @@ void ScriptCreateDialog::ok_pressed() { - String text = ScriptServer::get_language( language_menu->get_selected() )->get_template(cname,parent_name->get_text()); - Script *script = ScriptServer::get_language( language_menu->get_selected() )->create_script(); - script->set_source_code(text); - if (cname!="") - script->set_name(cname); + Ref<Script> scr = ScriptServer::get_language( language_menu->get_selected() )->get_template(cname,parent_name->get_text()); + //scr->set_source_code(text); + + + if (cname!="") + scr->set_name(cname); - Ref<Script> scr(script); if (!internal->is_pressed()) { String lpath = Globals::get_singleton()->localize_path(file_path->get_text()); - script->set_path(lpath); + scr->set_path(lpath); if (!path_valid) { alert->set_text(TTR("Invalid path!")); @@ -145,7 +145,7 @@ void ScriptCreateDialog::ok_pressed() { alert->popup_centered_minsize(); return; } - scr->set_path(lpath); + //scr->set_path(lpath); //EditorFileSystem::get_singleton()->update_file(lpath,scr->get_type()); diff --git a/tools/editor/script_editor_debugger.cpp b/tools/editor/script_editor_debugger.cpp index b6390e5aae..7fba73ca08 100644 --- a/tools/editor/script_editor_debugger.cpp +++ b/tools/editor/script_editor_debugger.cpp @@ -220,6 +220,7 @@ void ScriptEditorDebugger::debug_continue() { msg.push_back("continue"); ppeer->put_var(msg); + } void ScriptEditorDebugger::_scene_tree_folded(Object* obj) { @@ -360,7 +361,7 @@ void ScriptEditorDebugger::_parse_message(const String& p_msg,const Array& p_dat forward->set_disabled(true); dobreak->set_disabled(false); docontinue->set_disabled(true); - emit_signal("breaked",false,false); + emit_signal("breaked",false,false,Variant()); //tabs->set_current_tab(0); profiler->set_enabled(true); profiler->disable_seeking(); @@ -1086,6 +1087,9 @@ void ScriptEditorDebugger::start() { stop(); + if (!EditorNode::get_log()->is_visible()) { + EditorNode::get_singleton()->make_bottom_panel_item_visible(EditorNode::get_log()); + } uint16_t port = GLOBAL_DEF("debug/remote_port",6007); perf_history.clear(); diff --git a/tools/editor/spatial_editor_gizmos.cpp b/tools/editor/spatial_editor_gizmos.cpp index 480d33fd0a..84803eb6db 100644 --- a/tools/editor/spatial_editor_gizmos.cpp +++ b/tools/editor/spatial_editor_gizmos.cpp @@ -422,8 +422,6 @@ bool EditorSpatialGizmo::intersect_ray(const Camera *p_camera,const Point2& p_po if (billboard_handle) { t.set_look_at(t.origin,t.origin+p_camera->get_transform().basis.get_axis(2),p_camera->get_transform().basis.get_axis(1)); } - Transform ti=t.affine_inverse(); - float min_d=1e20; int idx=-1; diff --git a/tools/ios_xcode_template/data.pck b/tools/ios_xcode_template/data.pck deleted file mode 100644 index e69de29bb2..0000000000 --- a/tools/ios_xcode_template/data.pck +++ /dev/null diff --git a/tools/ios_xcode_template/godot_ios.xcodeproj/project.pbxproj b/tools/ios_xcode_template/godot_ios.xcodeproj/project.pbxproj deleted file mode 100644 index 4ae1ec8a53..0000000000 --- a/tools/ios_xcode_template/godot_ios.xcodeproj/project.pbxproj +++ /dev/null @@ -1,469 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; }; - D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */; }; - D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */; }; - D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */; }; - D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */; }; - D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */; }; - D0BCFE6218AEBDA3004A7AAE /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */; }; - D0BCFE6318AEBDA3004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; }; - D0BCFE6418AEBDA3004A7AAE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */; }; - D0BCFE6C18AEBDA3004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */; }; - D0BCFE6E18AEBDA3004A7AAE /* godot_iosTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */; }; - D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7718AEBFEB004A7AAE /* data.pck */; }; - D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - D0BCFE6518AEBDA3004A7AAE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D0BCFE2C18AEBDA2004A7AAE /* Project object */; - proxyType = 1; - remoteGlobalIDString = D0BCFE3318AEBDA2004A7AAE; - remoteInfo = godot_ios; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = godot_ios.app; sourceTree = BUILT_PRODUCTS_DIR; }; - D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; - D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "godot_ios-Info.plist"; sourceTree = "<group>"; }; - D0BCFE4518AEBDA2004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; - D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "godot_ios-Prefix.pch"; sourceTree = "<group>"; }; - D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = godot_iosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - D0BCFE6918AEBDA3004A7AAE /* godot_iosTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "godot_iosTests-Info.plist"; sourceTree = "<group>"; }; - D0BCFE6B18AEBDA3004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; - D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = godot_iosTests.m; sourceTree = "<group>"; }; - D0BCFE7718AEBFEB004A7AAE /* data.pck */ = {isa = PBXFileReference; lastKnownFileType = file; path = data.pck; sourceTree = "<group>"; }; - D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = godot_opt.iphone; sourceTree = "<group>"; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - D0BCFE3118AEBDA2004A7AAE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */, - D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */, - D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */, - D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */, - D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0BCFE5D18AEBDA3004A7AAE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D0BCFE6218AEBDA3004A7AAE /* XCTest.framework in Frameworks */, - D0BCFE6418AEBDA3004A7AAE /* UIKit.framework in Frameworks */, - D0BCFE6318AEBDA3004A7AAE /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D0BCFE2B18AEBDA2004A7AAE = { - isa = PBXGroup; - children = ( - D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */, - D0BCFE7718AEBFEB004A7AAE /* data.pck */, - D0BCFE4118AEBDA2004A7AAE /* godot_ios */, - D0BCFE6718AEBDA3004A7AAE /* godot_iosTests */, - D0BCFE3618AEBDA2004A7AAE /* Frameworks */, - D0BCFE3518AEBDA2004A7AAE /* Products */, - ); - sourceTree = "<group>"; - }; - D0BCFE3518AEBDA2004A7AAE /* Products */ = { - isa = PBXGroup; - children = ( - D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */, - D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */, - ); - name = Products; - sourceTree = "<group>"; - }; - D0BCFE3618AEBDA2004A7AAE /* Frameworks */ = { - isa = PBXGroup; - children = ( - D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */, - D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */, - D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */, - D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */, - D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */, - D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */, - ); - name = Frameworks; - sourceTree = "<group>"; - }; - D0BCFE4118AEBDA2004A7AAE /* godot_ios */ = { - isa = PBXGroup; - children = ( - D0BCFE4218AEBDA2004A7AAE /* Supporting Files */, - ); - path = godot_ios; - sourceTree = "<group>"; - }; - D0BCFE4218AEBDA2004A7AAE /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */, - D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */, - D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = "<group>"; - }; - D0BCFE6718AEBDA3004A7AAE /* godot_iosTests */ = { - isa = PBXGroup; - children = ( - D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */, - D0BCFE6818AEBDA3004A7AAE /* Supporting Files */, - ); - path = godot_iosTests; - sourceTree = "<group>"; - }; - D0BCFE6818AEBDA3004A7AAE /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D0BCFE6918AEBDA3004A7AAE /* godot_iosTests-Info.plist */, - D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */, - ); - name = "Supporting Files"; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - D0BCFE3318AEBDA2004A7AAE /* godot_ios */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */; - buildPhases = ( - D0BCFE3018AEBDA2004A7AAE /* Sources */, - D0BCFE3118AEBDA2004A7AAE /* Frameworks */, - D0BCFE3218AEBDA2004A7AAE /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = godot_ios; - productName = godot_ios; - productReference = D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */; - productType = "com.apple.product-type.application"; - }; - D0BCFE5F18AEBDA3004A7AAE /* godot_iosTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0BCFE7418AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_iosTests" */; - buildPhases = ( - D0BCFE5C18AEBDA3004A7AAE /* Sources */, - D0BCFE5D18AEBDA3004A7AAE /* Frameworks */, - D0BCFE5E18AEBDA3004A7AAE /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D0BCFE6618AEBDA3004A7AAE /* PBXTargetDependency */, - ); - name = godot_iosTests; - productName = godot_iosTests; - productReference = D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D0BCFE2C18AEBDA2004A7AAE /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0500; - ORGANIZATIONNAME = GodotEngine; - TargetAttributes = { - D0BCFE5F18AEBDA3004A7AAE = { - TestTargetID = D0BCFE3318AEBDA2004A7AAE; - }; - }; - }; - buildConfigurationList = D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = D0BCFE2B18AEBDA2004A7AAE; - productRefGroup = D0BCFE3518AEBDA2004A7AAE /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D0BCFE3318AEBDA2004A7AAE /* godot_ios */, - D0BCFE5F18AEBDA3004A7AAE /* godot_iosTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D0BCFE3218AEBDA2004A7AAE /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */, - D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */, - D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0BCFE5E18AEBDA3004A7AAE /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0BCFE6C18AEBDA3004A7AAE /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D0BCFE3018AEBDA2004A7AAE /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0BCFE5C18AEBDA3004A7AAE /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0BCFE6E18AEBDA3004A7AAE /* godot_iosTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - D0BCFE6618AEBDA3004A7AAE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D0BCFE3318AEBDA2004A7AAE /* godot_ios */; - targetProxy = D0BCFE6518AEBDA3004A7AAE /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - D0BCFE4518AEBDA2004A7AAE /* en */, - ); - name = InfoPlist.strings; - sourceTree = "<group>"; - }; - D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - D0BCFE6B18AEBDA3004A7AAE /* en */, - ); - name = InfoPlist.strings; - sourceTree = "<group>"; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - D0BCFE6F18AEBDA3004A7AAE /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - D0BCFE7018AEBDA3004A7AAE /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - D0BCFE7218AEBDA3004A7AAE /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch"; - INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "armv7 armv7s"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - D0BCFE7318AEBDA3004A7AAE /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch"; - INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "armv7 armv7s"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; - D0BCFE7518AEBDA3004A7AAE /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/godot_ios.app/godot_ios"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = "godot_iosTests/godot_iosTests-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = xctest; - }; - name = Debug; - }; - D0BCFE7618AEBDA3004A7AAE /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/godot_ios.app/godot_ios"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch"; - INFOPLIST_FILE = "godot_iosTests/godot_iosTests-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = xctest; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0BCFE6F18AEBDA3004A7AAE /* Debug */, - D0BCFE7018AEBDA3004A7AAE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0BCFE7218AEBDA3004A7AAE /* Debug */, - D0BCFE7318AEBDA3004A7AAE /* Release */, - ); - defaultConfigurationIsVisible = 0; - }; - D0BCFE7418AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_iosTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0BCFE7518AEBDA3004A7AAE /* Debug */, - D0BCFE7618AEBDA3004A7AAE /* Release */, - ); - defaultConfigurationIsVisible = 0; - }; -/* End XCConfigurationList section */ - }; - rootObject = D0BCFE2C18AEBDA2004A7AAE /* Project object */; -} diff --git a/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 3c9ba38bbe..0000000000 --- a/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "self:godot_ios.xcodeproj"> - </FileRef> -</Workspace> diff --git a/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/xcuserdata/punto.xcuserdatad/UserInterfaceState.xcuserstate b/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/xcuserdata/punto.xcuserdatad/UserInterfaceState.xcuserstate Binary files differdeleted file mode 100644 index 7c338929ed..0000000000 --- a/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/xcuserdata/punto.xcuserdatad/UserInterfaceState.xcuserstate +++ /dev/null diff --git a/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/godot_ios.xcscheme b/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/godot_ios.xcscheme deleted file mode 100644 index 19af55b4a2..0000000000 --- a/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/godot_ios.xcscheme +++ /dev/null @@ -1,96 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0500" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE" - BuildableName = "godot_ios.app" - BlueprintName = "godot_ios" - ReferencedContainer = "container:godot_ios.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - <TestableReference - skipped = "NO"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "D0BCFE5F18AEBDA3004A7AAE" - BuildableName = "godot_iosTests.xctest" - BlueprintName = "godot_iosTests" - ReferencedContainer = "container:godot_ios.xcodeproj"> - </BuildableReference> - </TestableReference> - </Testables> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE" - BuildableName = "godot_ios.app" - BlueprintName = "godot_ios" - ReferencedContainer = "container:godot_ios.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <BuildableProductRunnable> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE" - BuildableName = "godot_ios.app" - BlueprintName = "godot_ios" - ReferencedContainer = "container:godot_ios.xcodeproj"> - </BuildableReference> - </BuildableProductRunnable> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - <BuildableProductRunnable> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE" - BuildableName = "godot_ios.app" - BlueprintName = "godot_ios" - ReferencedContainer = "container:godot_ios.xcodeproj"> - </BuildableReference> - </BuildableProductRunnable> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/xcschememanagement.plist b/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 4a3a16cbdb..0000000000 --- a/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>SchemeUserState</key> - <dict> - <key>godot_ios.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>0</integer> - </dict> - </dict> - <key>SuppressBuildableAutocreation</key> - <dict> - <key>D0BCFE3318AEBDA2004A7AAE</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>D0BCFE5F18AEBDA3004A7AAE</key> - <dict> - <key>primary</key> - <true/> - </dict> - </dict> -</dict> -</plist> diff --git a/tools/ios_xcode_template/godot_ios/en.lproj/InfoPlist.strings b/tools/ios_xcode_template/godot_ios/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff8f..0000000000 --- a/tools/ios_xcode_template/godot_ios/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/tools/ios_xcode_template/godot_ios/godot_ios-Info.plist b/tools/ios_xcode_template/godot_ios/godot_ios-Info.plist deleted file mode 100644 index 357970920a..0000000000 --- a/tools/ios_xcode_template/godot_ios/godot_ios-Info.plist +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleDisplayName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundleExecutable</key> - <string>godot_opt.iphone</string> - <key>CFBundleIdentifier</key> - <string>org.godotengine.${PRODUCT_NAME:rfc1034identifier}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>APPL</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>1.0</string> - <key>LSRequiresIPhoneOS</key> - <true/> - <key>UIRequiredDeviceCapabilities</key> - <array> - <string>armv7</string> - </array> - <key>UIStatusBarHidden</key> - <true/> - <key>UISupportedInterfaceOrientations</key> - <array> - <string>UIInterfaceOrientationPortrait</string> - <string>UIInterfaceOrientationLandscapeLeft</string> - <string>UIInterfaceOrientationLandscapeRight</string> - </array> - <key>UISupportedInterfaceOrientations~ipad</key> - <array> - <string>UIInterfaceOrientationPortrait</string> - <string>UIInterfaceOrientationPortraitUpsideDown</string> - <string>UIInterfaceOrientationLandscapeLeft</string> - <string>UIInterfaceOrientationLandscapeRight</string> - </array> -</dict> -</plist> diff --git a/tools/ios_xcode_template/godot_ios/godot_ios-Prefix.pch b/tools/ios_xcode_template/godot_ios/godot_ios-Prefix.pch deleted file mode 100644 index 82a2bb4507..0000000000 --- a/tools/ios_xcode_template/godot_ios/godot_ios-Prefix.pch +++ /dev/null @@ -1,16 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#import <Availability.h> - -#ifndef __IPHONE_5_0 -#warning "This project uses features only available in iOS SDK 5.0 and later." -#endif - -#ifdef __OBJC__ - #import <UIKit/UIKit.h> - #import <Foundation/Foundation.h> -#endif diff --git a/tools/ios_xcode_template/godot_iosTests/en.lproj/InfoPlist.strings b/tools/ios_xcode_template/godot_iosTests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff8f..0000000000 --- a/tools/ios_xcode_template/godot_iosTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/tools/ios_xcode_template/godot_iosTests/godot_iosTests-Info.plist b/tools/ios_xcode_template/godot_iosTests/godot_iosTests-Info.plist deleted file mode 100644 index 0f69aa80eb..0000000000 --- a/tools/ios_xcode_template/godot_iosTests/godot_iosTests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>org.godotengine.${PRODUCT_NAME:rfc1034identifier}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundlePackageType</key> - <string>BNDL</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>1</string> -</dict> -</plist> diff --git a/tools/script_plugins/terrain/plugin.cfg b/tools/script_plugins/terrain/plugin.cfg deleted file mode 100644 index d2f2917420..0000000000 --- a/tools/script_plugins/terrain/plugin.cfg +++ /dev/null @@ -1,16 +0,0 @@ -[plugin] - -name="Terrain" -description="Simple plugin for generating and editing grid-based terrains. This type of terrains were all the rage in the early 2000's, but lost popularity to hand crafted geometry towards the end of the decade." -author="Juan Linietsky" -version="1.0" -installs=true -script="terrain.gd" -install_files=["terrain.gd","terrain_node.gd","icon_terrain.png"] - - - - - - - diff --git a/tools/script_plugins/terrain/terrain.gd b/tools/script_plugins/terrain/terrain.gd deleted file mode 100644 index b3e3121e7a..0000000000 --- a/tools/script_plugins/terrain/terrain.gd +++ /dev/null @@ -1,17 +0,0 @@ -tool # Always declare as Tool, if it's meant to run in the editor. -extends EditorPlugin - - -func get_name(): - return "Terrain" - - -func _init(): - print("PLUGIN INIT") - - -func _enter_scene(): - add_custom_type("Terrain","Spatial",preload("terrain_node.gd"),preload("terrain.png")) - -func _exit_scene(): - remove_custom_type("Terrain") diff --git a/tools/script_plugins/terrain/terrain.png b/tools/script_plugins/terrain/terrain.png Binary files differdeleted file mode 100644 index 7c1c3d70d6..0000000000 --- a/tools/script_plugins/terrain/terrain.png +++ /dev/null diff --git a/tools/script_plugins/terrain/terrain_node.gd b/tools/script_plugins/terrain/terrain_node.gd deleted file mode 100644 index 91cf3fcb2b..0000000000 --- a/tools/script_plugins/terrain/terrain_node.gd +++ /dev/null @@ -1,3 +0,0 @@ -extends Spatial - - diff --git a/tools/script_plugins/time/plugin.cfg b/tools/script_plugins/time/plugin.cfg deleted file mode 100644 index 5430306a79..0000000000 --- a/tools/script_plugins/time/plugin.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[plugin] - -name="The Time" -description="This plugin displays the current local time, with great accuracy, by harvesting the power of quartz crystals inside your computer.\nIt may also serve as simple example on how to write a non-installable editor plugin, or just remind you that it's time to go back home." -author="Juan Linietsky" -version="1.0" -installs=false -script="time.gd" - - - - - - diff --git a/tools/script_plugins/time/time.gd b/tools/script_plugins/time/time.gd deleted file mode 100644 index 2e56d89d4f..0000000000 --- a/tools/script_plugins/time/time.gd +++ /dev/null @@ -1,32 +0,0 @@ -tool # Always declare as Tool, if it's meant to run in the editor. -extends EditorPlugin - -var timer = null -var label = null - -func _timeout(): - if (label): - var time = OS.get_time() - label.set_text(str(time.hour).pad_zeros(2)+":"+str(time.minute).pad_zeros(2)+":"+str(time.second).pad_zeros(2)) - -func get_name(): - return "The Time" - - -func _init(): - print("PLUGIN INIT") - timer = Timer.new() - add_child(timer) - timer.set_wait_time(0.5) - timer.set_one_shot(false) - timer.connect("timeout",self,"_timeout") - -func _enter_tree(): - label = Label.new() - add_custom_control(CONTAINER_TOOLBAR,label) - timer.start() - -func _exit_tree(): - timer.stop() - label.free() - label=null diff --git a/tools/addheader/addheader.py b/tools/scripts/addheader.py index d040d8b5d6..d040d8b5d6 100644 --- a/tools/addheader/addheader.py +++ b/tools/scripts/addheader.py diff --git a/tools/bmfhdr/makehdr.py b/tools/scripts/make_bmfhdr.py index 0f6f453004..0f6f453004 100644 --- a/tools/bmfhdr/makehdr.py +++ b/tools/scripts/make_bmfhdr.py diff --git a/tools/glwrapper/makewrapper.py b/tools/scripts/make_glwrapper.py index 2e5f06be12..f3f8d39837 100644 --- a/tools/glwrapper/makewrapper.py +++ b/tools/scripts/make_glwrapper.py @@ -2,7 +2,7 @@ import sys if (len(sys.argv)<2): - print("usage: makewrapper.py <headers>") + print("usage: make_glwrapper.py <headers>") sys.exit(255) diff --git a/tools/steam/make_icons.sh b/tools/scripts/make_icons.sh index 71037cd1c3..71037cd1c3 100644 --- a/tools/steam/make_icons.sh +++ b/tools/scripts/make_icons.sh diff --git a/tools/memsort.py b/tools/scripts/memsort.py index d2e4fe0226..d2e4fe0226 100644 --- a/tools/memsort.py +++ b/tools/scripts/memsort.py diff --git a/tools/scripts/svgs_2_pngs.py b/tools/scripts/svgs_2_pngs.py index acb50892c3..879926ab42 100644 --- a/tools/scripts/svgs_2_pngs.py +++ b/tools/scripts/svgs_2_pngs.py @@ -125,7 +125,8 @@ special_icons = { 'icon_play': dict( theme_output_names= ['icon_play'] ), 'icon_stop': dict( theme_output_names= ['icon_stop'] ), 'icon_zoom_less': dict( theme_output_names= ['icon_zoom_less'], avoid_self=True ), - 'icon_zoom_reset': dict( theme_output_names= ['icon_zoom_reset'], avoid_self=True ) + 'icon_zoom_reset': dict( theme_output_names= ['icon_zoom_reset'], avoid_self=True ), + 'icon_snap': dict(theme_output_names=['icon_snap']) } theme_icons = { diff --git a/tools/translations/README.md b/tools/translations/README.md new file mode 100644 index 0000000000..351bc9e2d1 --- /dev/null +++ b/tools/translations/README.md @@ -0,0 +1,20 @@ +# How to contribute translations + +Godot's translation work is coordinated on +[Hosted Weblate](https://hosted.weblate.org/projects/godot-engine/godot), +an open source web-based translation platform, where contributors can work +together on translations using various internationalization features. +Creating an account there is free, and you can also login directly with +your GitHub, BitBucket, Google or Facebook account. + +To avoid merge conflicts when syncing translations from Weblate (currently +this is done manually), we ask all contributors to work there instead of +making pull requests on this repository. + +Link if you missed it: https://hosted.weblate.org/projects/godot-engine/godot + +## Adding new languages + +If you want to translate for a language which is not featured yet on Weblate, +open an issue on this repo to ask that the language is added, or contact +Akien/@akien-mga directly on IRC (#godotengine channel on Freenode). diff --git a/tools/translations/ar.po b/tools/translations/ar.po index 8a43e72eba..74393ad4f4 100644 --- a/tools/translations/ar.po +++ b/tools/translations/ar.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2016-06-20 11:18+0000\n" +"PO-Revision-Date: 2016-08-08 10:20+0000\n" "Last-Translator: Mohammmad Khashashneh <mohammad.rasmi@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" @@ -16,13 +16,15 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 2.7-dev\n" +"X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -36,7 +38,7 @@ msgstr "" #: modules/gdscript/gd_functions.cpp msgid "Not based on a script" -msgstr "" +msgstr "لا تستند الى شفرة مصدرية" #: modules/gdscript/gd_functions.cpp msgid "Not based on a resource file" @@ -58,6 +60,274 @@ msgstr "" msgid "Invalid instance dictionary (invalid subclasses)" msgstr "" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Function" +msgstr "عملية تحريك" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -95,6 +365,8 @@ msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" +"يجب تزويد ال CollisionShape2D بإحدى الأشكال (من نوع Shape2D) لتعمل بالشكل " +"المطلوب. الرجاء تكوين و ضبط الشكل لها اولا!" #: scene/2d/light_2d.cpp msgid "" @@ -164,6 +436,10 @@ msgid "" "as parent." msgstr "" +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -219,7 +495,7 @@ msgstr "" msgid "Cancel" msgstr "" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "" @@ -237,7 +513,7 @@ msgstr "" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "جميع الأنواع المعتمدة" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Files (*)" @@ -245,8 +521,9 @@ msgstr "" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "" @@ -369,13 +646,13 @@ msgid "Axis" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -383,7 +660,7 @@ msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -391,7 +668,7 @@ msgid "Paste" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -405,7 +682,7 @@ msgid "Clear" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "" @@ -519,7 +796,7 @@ msgstr "" #: tools/editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "" +msgstr "حذف الأطر الرئيسة" #: tools/editor/animation_editor.cpp #: tools/editor/plugins/tile_map_editor_plugin.cpp @@ -729,6 +1006,10 @@ msgid "Optimize" msgstr "" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "" @@ -778,7 +1059,8 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "" @@ -802,7 +1084,7 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "" +msgstr "الموقع:" #: tools/editor/asset_library_editor_plugin.cpp msgid "Support.." @@ -814,7 +1096,7 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp msgid "Community" -msgstr "" +msgstr "مجتمع" #: tools/editor/asset_library_editor_plugin.cpp msgid "Testing" @@ -822,7 +1104,7 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "" +msgstr "ملف اصول مضغوطة" #: tools/editor/call_dialog.cpp msgid "Method List For '%s':" @@ -830,19 +1112,7 @@ msgstr "" #: tools/editor/call_dialog.cpp msgid "Call" -msgstr "" - -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "" +msgstr "نداء" #: tools/editor/call_dialog.cpp msgid "Method List:" @@ -894,6 +1164,7 @@ msgstr "" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -935,6 +1206,20 @@ msgstr "" msgid "Skip" msgstr "" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "" @@ -1004,7 +1289,7 @@ msgstr "" #: tools/editor/connections_dialog.cpp msgid "Create Subscription" -msgstr "" +msgstr "عمل اشتراك" #: tools/editor/connections_dialog.cpp msgid "Connect.." @@ -1024,10 +1309,16 @@ msgid "Create New" msgstr "" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -1137,8 +1428,9 @@ msgid "Delete selected files?" msgstr "" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "" @@ -1285,7 +1577,7 @@ msgstr "" msgid "Move Favorite Down" msgstr "" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "" @@ -1298,10 +1590,6 @@ msgid "Preview:" msgstr "" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "" @@ -1339,25 +1627,13 @@ msgid "Public Methods:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "" @@ -1774,7 +2050,7 @@ msgstr "" msgid "TileSet.." msgstr "" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "" @@ -2185,6 +2461,90 @@ msgstr "" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2291,7 +2651,7 @@ msgstr "" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "The quick brown fox jumps over the lazy dog." -msgstr "" +msgstr "أبجد هوز حطي كلمن صعفص قرشت ثخذ ضظغ." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Test:" @@ -3140,10 +3500,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "" @@ -3184,7 +3540,7 @@ msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Action" -msgstr "" +msgstr "عملية تحريك" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit IK Chain" @@ -3207,7 +3563,7 @@ msgid "Paste Pose" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" +msgid "Select Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3227,13 +3583,12 @@ msgid "Alt+RMB: Depth list selection" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "" +#, fuzzy +msgid "Move Mode" +msgstr "عملية تحريك" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +msgid "Rotate Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3268,14 +3623,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "" @@ -3332,14 +3679,6 @@ msgid "View" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "" @@ -4037,6 +4376,10 @@ msgid "Save All" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "" @@ -4057,194 +4400,186 @@ msgid "Save Theme As" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" +msgid "Close Docs" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" +msgid "Debug" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" +#: tools/editor/script_editor_debugger.cpp +msgid "Break" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" +msgid "Keep Debugger Open" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find.." +msgid "Window" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Next" +msgid "Move Left" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" +msgid "Move Right" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." +msgid "Tutorials" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." +msgid "Open https://godotengine.org at tutorials section." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." +msgid "Classes" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Debug" +msgid "Search the class hierarchy." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" +msgid "Search the reference documentation." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" +msgid "Go to previous edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" +msgid "Go to next edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" +msgid "Create Script" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Reload" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Break" +msgid "Resave" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp -msgid "Continue" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Keep Debugger Open" +msgid "Debugger" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Window" +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Left" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Right" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Tutorials" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Open https://godotengine.org at tutorials section." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Classes" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the reference documentation." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to previous edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to next edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Create Script" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"The following files are newer on disk.\n" -"What action should be taken?:" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Reload" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Resave" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Debugger" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" msgstr "" #: tools/editor/plugins/shader_editor_plugin.cpp @@ -4508,6 +4843,14 @@ msgid "Could not instance scene!" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "" @@ -5175,7 +5518,7 @@ msgstr "" #: tools/editor/project_export.cpp msgid "Samples" -msgstr "" +msgstr "عينات (صوتية)" #: tools/editor/project_export.cpp msgid "Sample Conversion Mode: (.wav files):" @@ -5322,11 +5665,11 @@ msgid "Unnamed Project" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "" #: tools/editor/project_manager.cpp @@ -5334,6 +5677,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "" @@ -5350,6 +5699,10 @@ msgid "Scan" msgstr "" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "" @@ -5641,6 +5994,14 @@ msgstr "" msgid "Sections:" msgstr "" +#: tools/editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: tools/editor/property_selector.cpp +msgid "Select Method" +msgstr "" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "" @@ -5714,6 +6075,10 @@ msgid "No parent to instance a child at." msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "" @@ -5842,6 +6207,10 @@ msgid "Save Branch as Scene" msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "" @@ -5851,6 +6220,10 @@ msgid "" "exists." msgstr "" +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5913,90 +6286,6 @@ msgstr "" msgid "Select a Node" msgstr "" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "" diff --git a/tools/translations/bg.po b/tools/translations/bg.po index 5b3c4db057..9117731250 100644 --- a/tools/translations/bg.po +++ b/tools/translations/bg.po @@ -3,29 +3,32 @@ # This file is distributed under the same license as the Godot source code. # # Bojidar Marinov <bojidar.marinov.bg@gmail.com>, 2016. +# Иван Пенев (Адмирал АнимЕ) <aeternus.arcis@gmail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2016-06-27 15:36+0000\n" -"Last-Translator: Bojidar Marinov <bojidar.marinov.bg@gmail.com>\n" +"PO-Revision-Date: 2016-08-20 16:42+0000\n" +"Last-Translator: Иван Пенев (Адмирал АнимЕ) <aeternus.arcis@gmail.com>\n" "Language-Team: Bulgarian <https://hosted.weblate.org/projects/godot-engine/" "godot/bg/>\n" "Language: bg\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.7-dev\n" +"X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" "Невалиден агрумент тип на convert(), използвайте константите започващи с " "TYPE_*." #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "Недостатъчно байтове за декодиране на байтовете, или невалиден формат." +msgstr "Недостатъчно байтове за разкодиране или недействителен формат." #: modules/gdscript/gd_functions.cpp msgid "step argument is zero!" @@ -67,6 +70,275 @@ msgstr "" msgid "Invalid instance dictionary (invalid subclasses)" msgstr "Невалиден формат на инстанцията в речника (невалиден подклас)" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "Възел" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Поставяне" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -141,8 +413,8 @@ msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" -"На този нод трябва да бъде даден един NavigationPolygon ресурс. Моля, " -"задайте или нарисувайте един многоъгълник." +"За този възел трябва да бъде зададен или създаден един ресурс " +"NavigationPolygon. Моля, задайте или нарисувайте един многоъгълник." #: scene/2d/navigation_polygon.cpp msgid "" @@ -160,7 +432,8 @@ msgstr "ParallaxLayer работи само когато е наследник #: scene/2d/particles_2d.cpp msgid "Path property must point to a valid Particles2D node to work." msgstr "" -"Параметъра 'Path' трябва да сочи към работещ Particles2D нод за да работи." +"Параметърът 'Path' трябва да сочи към действителен възел Particles2D, за да " +"работи." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -168,7 +441,9 @@ msgstr "PathFollow2D работи само когато е наследник н #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." -msgstr "Параметъра 'Path' трябва да сочи към Node2D нод за да работи." +msgstr "" +"Параметърът 'Path' трябва да сочи към действителен възел Node2D, за да " +"работи." #: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp msgid "" @@ -198,6 +473,10 @@ msgid "" "as parent." msgstr "" +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -251,23 +530,23 @@ msgstr "" #: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Cancel" -msgstr "" +msgstr "Отказ" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" -msgstr "" +msgstr "Добре" #: scene/gui/dialogs.cpp msgid "Alert!" -msgstr "" +msgstr "Тревога!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "" +msgstr "Моля, потвърдете..." #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "" +msgstr "Файлът съществува. Искате ли да го презапишете?" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Recognized" @@ -279,8 +558,9 @@ msgstr "" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "" @@ -305,32 +585,32 @@ msgstr "" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save" -msgstr "" +msgstr "Запазване" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Save a File" -msgstr "" +msgstr "Запазване на файл" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp msgid "Create Folder" -msgstr "" +msgstr "Създаване на папка" #: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp #: tools/editor/editor_file_dialog.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp #: tools/editor/script_create_dialog.cpp msgid "Path:" -msgstr "" +msgstr "Път:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "Папки и файлове:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/script_editor_debugger.cpp msgid "File:" -msgstr "" +msgstr "Файл:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Filter:" @@ -340,16 +620,16 @@ msgstr "" #: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Name:" -msgstr "" +msgstr "Име:" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp msgid "Could not create folder." -msgstr "" +msgstr "Неуспешно създаване на папка." #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Must use a valid extension." -msgstr "" +msgstr "Трябва да се използва правилно разширение." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp @@ -372,74 +652,74 @@ msgstr "" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Device" -msgstr "" +msgstr "Устройство" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Button" -msgstr "" +msgstr "Копче" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Left Button." -msgstr "" +msgstr "Ляво копче." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Right Button." -msgstr "" +msgstr "Дясно копче." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Middle Button." -msgstr "" +msgstr "Средно копче." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Wheel Up." -msgstr "" +msgstr "Колелцето нагоре." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Wheel Down." -msgstr "" +msgstr "Колелцето надолу." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Axis" -msgstr "" +msgstr "Ос" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" -msgstr "" +msgstr "Изрязване" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" -msgstr "" +msgstr "Копиране" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Paste" -msgstr "" +msgstr "Поставяне" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" -msgstr "" +msgstr "Избиране на всичко" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp #: tools/editor/plugins/animation_tree_editor_plugin.cpp #: tools/editor/plugins/rich_text_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Clear" -msgstr "" +msgstr "Изчистване" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "" @@ -467,12 +747,12 @@ msgstr "" #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Unknown font format." -msgstr "" +msgstr "Непознат формат за шрифтове." #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Error loading font." -msgstr "" +msgstr "Грешка при зареждането на шрифта." #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp @@ -631,7 +911,7 @@ msgstr "" #: tools/editor/animation_editor.cpp msgid "Transitions" -msgstr "" +msgstr "Преходи" #: tools/editor/animation_editor.cpp msgid "Optimize Animation" @@ -643,7 +923,7 @@ msgstr "" #: tools/editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "" +msgstr "Преход" #: tools/editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" @@ -763,6 +1043,10 @@ msgid "Optimize" msgstr "" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "" @@ -812,7 +1096,8 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "" @@ -866,18 +1151,6 @@ msgstr "" msgid "Call" msgstr "" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "" @@ -928,6 +1201,7 @@ msgstr "" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -969,6 +1243,20 @@ msgstr "" msgid "Skip" msgstr "" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "" @@ -1058,10 +1346,16 @@ msgid "Create New" msgstr "" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -1132,7 +1426,7 @@ msgstr "" #: tools/editor/dependency_editor.cpp msgid "Scene failed to load due to missing dependencies:" -msgstr "" +msgstr "Сцената не успя да се зареди заради липсващи зависимости:" #: tools/editor/dependency_editor.cpp msgid "Open Anyway" @@ -1171,8 +1465,9 @@ msgid "Delete selected files?" msgstr "" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "" @@ -1262,7 +1557,7 @@ msgstr "" #: tools/editor/editor_data.cpp msgid "Updating Scene" -msgstr "" +msgstr "Обновяване на сцената" #: tools/editor/editor_data.cpp msgid "Storing local changes.." @@ -1270,7 +1565,7 @@ msgstr "" #: tools/editor/editor_data.cpp msgid "Updating scene.." -msgstr "" +msgstr "Обновяване на сцената.." #: tools/editor/editor_dir_dialog.cpp msgid "Choose a Directory" @@ -1320,9 +1615,9 @@ msgstr "" msgid "Move Favorite Down" msgstr "" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" -msgstr "" +msgstr "Любими:" #: tools/editor/editor_file_dialog.cpp msgid "Recent:" @@ -1333,10 +1628,6 @@ msgid "Preview:" msgstr "" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "" @@ -1374,25 +1665,13 @@ msgid "Public Methods:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "" @@ -1427,7 +1706,7 @@ msgstr "" #: tools/editor/editor_import_export.cpp msgid "Exporting for %s" -msgstr "" +msgstr "Изнасяне за %s" #: tools/editor/editor_import_export.cpp msgid "Setting Up.." @@ -1439,11 +1718,11 @@ msgstr "" #: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp msgid "Re-Importing" -msgstr "" +msgstr "Извършва се повторно внасяне" #: tools/editor/editor_node.cpp msgid "Importing:" -msgstr "" +msgstr "Внасяне:" #: tools/editor/editor_node.cpp msgid "Node From Scene" @@ -1479,7 +1758,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Saving Scene" -msgstr "" +msgstr "Запазване на сцената" #: tools/editor/editor_node.cpp msgid "Analyzing" @@ -1602,7 +1881,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Open Scene" -msgstr "" +msgstr "Отваряне на сцена" #: tools/editor/editor_node.cpp msgid "Open Base Scene" @@ -1610,7 +1889,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Quick Open Scene.." -msgstr "" +msgstr "Бързо отваряне на сцена.." #: tools/editor/editor_node.cpp msgid "Quick Open Script.." @@ -1622,11 +1901,11 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Close scene? (Unsaved changes will be lost)" -msgstr "" +msgstr "Да се затвори ли сцената? (незаразените промени ще се загубят)" #: tools/editor/editor_node.cpp msgid "Save Scene As.." -msgstr "" +msgstr "Запазване на сцената като.." #: tools/editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" @@ -1634,7 +1913,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Please save the scene first." -msgstr "" +msgstr "Моля, първо запазете сцената." #: tools/editor/editor_node.cpp msgid "Save Translatable Strings" @@ -1650,7 +1929,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Quit" -msgstr "" +msgstr "Изход" #: tools/editor/editor_node.cpp msgid "Exit the editor?" @@ -1674,7 +1953,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Quick Run Scene.." -msgstr "" +msgstr "Бързо пускане на сцена.." #: tools/editor/editor_node.cpp msgid "" @@ -1684,7 +1963,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Pick a Main Scene" -msgstr "" +msgstr "Изберете главна сцена" #: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp msgid "Ugh" @@ -1698,11 +1977,11 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Error loading scene." -msgstr "" +msgstr "Имаше грешка при зареждане на сцената." #: tools/editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "" +msgstr "Сцената '%s' има нарушени зависимости:" #: tools/editor/editor_node.cpp msgid "Save Layout" @@ -1731,7 +2010,7 @@ msgstr "" #: tools/editor/editor_node.cpp #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Scene" -msgstr "" +msgstr "Сцена" #: tools/editor/editor_node.cpp msgid "Go to previously opened scene." @@ -1759,7 +2038,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "New Scene" -msgstr "" +msgstr "Нова сцена" #: tools/editor/editor_node.cpp msgid "New Inherited Scene.." @@ -1767,19 +2046,19 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Open Scene.." -msgstr "" +msgstr "Отваряне на сцена.." #: tools/editor/editor_node.cpp msgid "Save Scene" -msgstr "" +msgstr "Запазване на сцената" #: tools/editor/editor_node.cpp msgid "Save all Scenes" -msgstr "" +msgstr "Запазване на всички сцени" #: tools/editor/editor_node.cpp msgid "Close Scene" -msgstr "" +msgstr "Затваряне на сцената" #: tools/editor/editor_node.cpp msgid "Close Goto Prev. Scene" @@ -1809,7 +2088,7 @@ msgstr "" msgid "TileSet.." msgstr "" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "" @@ -1820,7 +2099,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Project Settings" -msgstr "" +msgstr "Настройки на проекта" #: tools/editor/editor_node.cpp msgid "Revert Scene" @@ -1828,11 +2107,11 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Quit to Project List" -msgstr "" +msgstr "Изход до списъка с проекти" #: tools/editor/editor_node.cpp msgid "Import assets to the project." -msgstr "" +msgstr "Внасяне на обекти в проекта." #: tools/editor/editor_node.cpp #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp @@ -1844,7 +2123,7 @@ msgstr "" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp #: tools/editor/project_manager.cpp msgid "Import" -msgstr "" +msgstr "Внасяне" #: tools/editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." @@ -1856,15 +2135,15 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Export the project to many platforms." -msgstr "" +msgstr "Изнасяне на проекта на много платформи." #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Export" -msgstr "" +msgstr "Изнасяне" #: tools/editor/editor_node.cpp msgid "Play the project." -msgstr "" +msgstr "Възпроизвеждане на проекта." #: tools/editor/editor_node.cpp #: tools/editor/plugins/sample_library_editor_plugin.cpp @@ -1873,15 +2152,15 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Pause the scene" -msgstr "" +msgstr "Преустановяване на сцената" #: tools/editor/editor_node.cpp msgid "Pause Scene" -msgstr "" +msgstr "Преустановяване на сцената" #: tools/editor/editor_node.cpp msgid "Stop the scene." -msgstr "" +msgstr "Спиране на сцената." #: tools/editor/editor_node.cpp #: tools/editor/plugins/sample_library_editor_plugin.cpp @@ -1890,23 +2169,23 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Play the edited scene." -msgstr "" +msgstr "Възпроизвеждане на редактирана сцена." #: tools/editor/editor_node.cpp msgid "Play Scene" -msgstr "" +msgstr "Възпроизвеждане на сцената" #: tools/editor/editor_node.cpp msgid "Play custom scene" -msgstr "" +msgstr "Възпроизвеждане на сцена по избор" #: tools/editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "" +msgstr "Възпроизвеждане на сцена по избор" #: tools/editor/editor_node.cpp msgid "Debug options" -msgstr "" +msgstr "Настройки за отстраняване на грешки" #: tools/editor/editor_node.cpp msgid "Deploy with Remote Debug" @@ -1978,11 +2257,11 @@ msgstr "" #: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp msgid "Settings" -msgstr "" +msgstr "Настройки" #: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp msgid "Editor Settings" -msgstr "" +msgstr "Настройки на редактора" #: tools/editor/editor_node.cpp msgid "Editor Layout" @@ -1994,7 +2273,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "About" -msgstr "" +msgstr "Относно" #: tools/editor/editor_node.cpp msgid "Alerts when an external resource has changed." @@ -2058,7 +2337,7 @@ msgstr "" #: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp msgid "Re-Import" -msgstr "" +msgstr "Повторно внасяне" #: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp msgid "Update" @@ -2074,15 +2353,15 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Import Templates From ZIP File" -msgstr "" +msgstr "Внасяне на шаблони от архив във формат ZIP" #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Export Project" -msgstr "" +msgstr "Изнасяне на проекта" #: tools/editor/editor_node.cpp msgid "Export Library" -msgstr "" +msgstr "Изнасяне на библиотеката" #: tools/editor/editor_node.cpp msgid "Merge With Existing" @@ -2102,7 +2381,7 @@ msgstr "" #: tools/editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "" +msgstr "Инсталирани приставки:" #: tools/editor/editor_plugin_settings.cpp msgid "Version:" @@ -2167,10 +2446,11 @@ msgstr "" #: tools/editor/editor_reimport_dialog.cpp msgid "Current scene must be saved to re-import." msgstr "" +"За да се извърши повторното внасяне, текущата сцена трябва да бъде запазена." #: tools/editor/editor_reimport_dialog.cpp msgid "Save & Re-Import" -msgstr "" +msgstr "Запазване и повторно внасяне" #: tools/editor/editor_reimport_dialog.cpp msgid "Re-Import Changed Resources" @@ -2210,7 +2490,7 @@ msgstr "" #: tools/editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "" +msgstr "Път на сцената:" #: tools/editor/editor_sub_scene.cpp msgid "Import From Node:" @@ -2220,6 +2500,90 @@ msgstr "" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "Повторно внасяне.." + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2341,7 +2705,7 @@ msgstr "" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Font Import" -msgstr "" +msgstr "Внасяне на шрифт" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "" @@ -2466,11 +2830,11 @@ msgstr "" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error importing scene." -msgstr "" +msgstr "Имаше грешка при внасянето на сцената." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import 3D Scene" -msgstr "" +msgstr "Внасяне на триизмерна сцена" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Source Scene:" @@ -2506,11 +2870,11 @@ msgstr "" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import Anyway" -msgstr "" +msgstr "Внасяне въпреки това" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import & Open" -msgstr "" +msgstr "Внасяне и отваряне" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Edited scene has not been saved, open imported scene anyway?" @@ -2519,11 +2883,11 @@ msgstr "" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" -msgstr "" +msgstr "Внасяне на сцена" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." -msgstr "" +msgstr "Внасяне на сцената.." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." @@ -2543,7 +2907,7 @@ msgstr "" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import Image:" -msgstr "" +msgstr "Внасяне на изображение:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Can't import a file over itself:" @@ -2599,7 +2963,7 @@ msgstr "" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Error importing:" -msgstr "" +msgstr "Имаше грешка при внасянето:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Only one file is required for large texture." @@ -2611,7 +2975,7 @@ msgstr "" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures for Atlas (2D)" -msgstr "" +msgstr "Внасяне на текстури за Атлас (двуизмерно)" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Cell Size:" @@ -2623,7 +2987,7 @@ msgstr "" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Large Textures (2D)" -msgstr "" +msgstr "Внасяне на големи текстури (двуизмерно)" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Source Texture" @@ -2647,15 +3011,15 @@ msgstr "" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures" -msgstr "" +msgstr "Внасяне на текстури" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "2D Texture" -msgstr "" +msgstr "Двуизмерна текстура" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "3D Texture" -msgstr "" +msgstr "Триизмерна текстура" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Atlas Texture" @@ -2677,7 +3041,7 @@ msgstr "" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Large Texture" -msgstr "" +msgstr "Внасяне на голяма текстура" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Load Source Image" @@ -2750,7 +3114,7 @@ msgstr "" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "No items to import!" -msgstr "" +msgstr "Няма артикули за внасяне!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "No target path!" @@ -2758,15 +3122,15 @@ msgstr "" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Import Translations" -msgstr "" +msgstr "Внасяне на преводи" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Couldn't import!" -msgstr "" +msgstr "Неуспешно внасяне!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Import Translation" -msgstr "" +msgstr "Внасяне на превода" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Source CSV:" @@ -2786,7 +3150,7 @@ msgstr "" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Import Languages:" -msgstr "" +msgstr "Внасяне на езици:" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Translation" @@ -2798,7 +3162,7 @@ msgstr "" #: tools/editor/node_dock.cpp msgid "Node" -msgstr "" +msgstr "Възел" #: tools/editor/node_dock.cpp msgid "Groups" @@ -3116,7 +3480,7 @@ msgstr "" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Import Animations.." -msgstr "" +msgstr "Внасяне на анимации.." #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" @@ -3175,10 +3539,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "" @@ -3242,8 +3602,9 @@ msgid "Paste Pose" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" -msgstr "" +#, fuzzy +msgid "Select Mode" +msgstr "Избиране на всичко" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -3262,13 +3623,11 @@ msgid "Alt+RMB: Depth list selection" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" +msgid "Move Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +msgid "Rotate Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3303,14 +3662,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "" @@ -3367,14 +3718,6 @@ msgid "View" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "" @@ -3494,11 +3837,11 @@ msgstr "" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import from Scene" -msgstr "" +msgstr "Внасяне от сцена" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Update from Scene" -msgstr "" +msgstr "Обновяване от сцена" #: tools/editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" @@ -4035,15 +4378,15 @@ msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Error importing theme" -msgstr "" +msgstr "Имаше грешка при внасянето на сцената" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Error importing" -msgstr "" +msgstr "Имаше грешка при внасянето" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Import Theme" -msgstr "" +msgstr "Внасяне на тема" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save Theme As.." @@ -4072,6 +4415,10 @@ msgid "Save All" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "" @@ -4092,194 +4439,186 @@ msgid "Save Theme As" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" +msgid "Close Docs" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" -msgstr "" +msgid "Debug" +msgstr "Отстраняване на грешки" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" +#: tools/editor/script_editor_debugger.cpp +msgid "Break" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" -msgstr "" +msgid "Keep Debugger Open" +msgstr "Отстранителя на грешки да седи отворен" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find.." +msgid "Window" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Next" +msgid "Move Left" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" +msgid "Move Right" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." +msgid "Tutorials" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." +msgid "Open https://godotengine.org at tutorials section." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." +msgid "Classes" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Debug" +msgid "Search the class hierarchy." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" +msgid "Search the reference documentation." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" +msgid "Go to previous edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" +msgid "Go to next edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" +msgid "Create Script" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Reload" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Break" +msgid "Resave" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp -msgid "Continue" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Keep Debugger Open" -msgstr "" +msgid "Debugger" +msgstr "Отстранител на грешки" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Window" +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Left" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Right" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Tutorials" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Open https://godotengine.org at tutorials section." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Classes" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the reference documentation." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to previous edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to next edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Create Script" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"The following files are newer on disk.\n" -"What action should be taken?:" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Reload" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Resave" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Debugger" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" msgstr "" #: tools/editor/plugins/shader_editor_plugin.cpp @@ -4543,6 +4882,14 @@ msgid "Could not instance scene!" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "" @@ -4760,7 +5107,7 @@ msgstr "" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Speed (FPS):" -msgstr "" +msgstr "Скорост (кадри в секунда):" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" @@ -5025,11 +5372,11 @@ msgstr "" #: tools/editor/project_export.cpp msgid "Please export outside the project folder!" -msgstr "" +msgstr "Моля, изнесете извън папката на проекта!" #: tools/editor/project_export.cpp msgid "Error exporting project!" -msgstr "" +msgstr "Имаше грешка при изнасяне на проекта!" #: tools/editor/project_export.cpp msgid "Error writing the project PCK!" @@ -5073,7 +5420,7 @@ msgstr "" #: tools/editor/project_export.cpp msgid "Project Export Settings" -msgstr "" +msgstr "Настройки за изнасяне на проекта" #: tools/editor/project_export.cpp msgid "Target" @@ -5081,7 +5428,7 @@ msgstr "" #: tools/editor/project_export.cpp msgid "Export to Platform" -msgstr "" +msgstr "Изнасяне към платформа" #: tools/editor/project_export.cpp msgid "Resources" @@ -5089,23 +5436,23 @@ msgstr "" #: tools/editor/project_export.cpp msgid "Export selected resources (including dependencies)." -msgstr "" +msgstr "Изнасяне на избраните ресурси (включително зависимостите)." #: tools/editor/project_export.cpp msgid "Export all resources in the project." -msgstr "" +msgstr "Изнасяне на всички ресурси в проекта." #: tools/editor/project_export.cpp msgid "Export all files in the project directory." -msgstr "" +msgstr "Изнасяне на всички файлове в папката на проекта." #: tools/editor/project_export.cpp msgid "Export Mode:" -msgstr "" +msgstr "Режим на изнасяне:" #: tools/editor/project_export.cpp msgid "Resources to Export:" -msgstr "" +msgstr "Ресурси за изнасяне:" #: tools/editor/project_export.cpp msgid "Action" @@ -5270,7 +5617,7 @@ msgstr "" #: tools/editor/project_export.cpp msgid "Export.." -msgstr "" +msgstr "Изнасяне.." #: tools/editor/project_export.cpp msgid "Project Export" @@ -5294,7 +5641,7 @@ msgstr "" #: tools/editor/project_manager.cpp msgid "Imported Project" -msgstr "" +msgstr "Внесен проект" #: tools/editor/project_manager.cpp msgid "Invalid project path (changed anything?)." @@ -5314,7 +5661,7 @@ msgstr "" #: tools/editor/project_manager.cpp msgid "Import Existing Project" -msgstr "" +msgstr "Внасяне на съществуващ проект" #: tools/editor/project_manager.cpp msgid "Project Path (Must Exist):" @@ -5357,11 +5704,11 @@ msgid "Unnamed Project" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "" #: tools/editor/project_manager.cpp @@ -5369,6 +5716,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "" @@ -5385,6 +5738,10 @@ msgid "Scan" msgstr "" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "" @@ -5498,7 +5855,7 @@ msgstr "" #: tools/editor/project_settings.cpp msgid "Settings saved OK." -msgstr "" +msgstr "Настройките са запазени." #: tools/editor/project_settings.cpp msgid "Add Translation" @@ -5602,7 +5959,7 @@ msgstr "" #: tools/editor/project_settings.cpp msgid "Plugins" -msgstr "" +msgstr "Приставки" #: tools/editor/property_editor.cpp msgid "Preset.." @@ -5676,6 +6033,16 @@ msgstr "" msgid "Sections:" msgstr "" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Избиране на всичко" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Избиране на всичко" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "" @@ -5738,7 +6105,7 @@ msgstr "" #: tools/editor/run_settings_dialog.cpp msgid "Scene Run Settings" -msgstr "" +msgstr "Настройки за пускане на сцена" #: tools/editor/scene_tree_dock.cpp msgid "OK :(" @@ -5749,6 +6116,10 @@ msgid "No parent to instance a child at." msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "" @@ -5877,6 +6248,11 @@ msgid "Save Branch as Scene" msgstr "" #: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete (No Confirm)" +msgstr "Моля, потвърдете..." + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "" @@ -5886,6 +6262,10 @@ msgid "" "exists." msgstr "" +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5948,90 +6328,6 @@ msgstr "" msgid "Select a Node" msgstr "" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "" @@ -6126,7 +6422,7 @@ msgstr "" #: tools/editor/script_editor_debugger.cpp msgid "Errors" -msgstr "" +msgstr "Грешки" #: tools/editor/script_editor_debugger.cpp msgid "Child Process Connected" @@ -6150,7 +6446,7 @@ msgstr "" #: tools/editor/script_editor_debugger.cpp msgid "Errors:" -msgstr "" +msgstr "Грешки:" #: tools/editor/script_editor_debugger.cpp msgid "Stack Trace (if applicable):" @@ -6178,7 +6474,7 @@ msgstr "" #: tools/editor/script_editor_debugger.cpp msgid "Value" -msgstr "" +msgstr "Стойност" #: tools/editor/script_editor_debugger.cpp msgid "Monitors" @@ -6210,7 +6506,7 @@ msgstr "" #: tools/editor/script_editor_debugger.cpp msgid "Misc" -msgstr "" +msgstr "Разни" #: tools/editor/script_editor_debugger.cpp msgid "Clicked Control:" diff --git a/tools/translations/bn.po b/tools/translations/bn.po index 5ebe5c1c9e..d0827bf38f 100644 --- a/tools/translations/bn.po +++ b/tools/translations/bn.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the Godot source code. # # Abu Md. Maruf Sarker <maruf.webdev@gmail.com>, 2016. +# Tahmid Karim <tahmidk15@gmail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2016-07-10 16:42+0000\n" -"Last-Translator: Abu Md. Maruf Sarker <maruf.webdev@gmail.com>\n" +"PO-Revision-Date: 2016-08-12 06:37+0000\n" +"Last-Translator: ABU MD. MARUF SARKER <maruf.webdev@gmail.com>\n" "Language-Team: Bengali <https://hosted.weblate.org/projects/godot-engine/" "godot/bn/>\n" "Language: bn\n" @@ -18,43 +19,319 @@ msgstr "" "X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "" +msgstr "অগ্রহণযোগ্য মান convert()-এ গিয়েছে, TYPE_* ধ্রুবক ব্যবহার করুন।" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" +msgstr "বিন্যাস জানার জন্য যথেষ্ট বাইট নেই, অথবা ভুল ফরম্যাট।" #: modules/gdscript/gd_functions.cpp msgid "step argument is zero!" -msgstr "" +msgstr "ধাপ মান শূন্য!" #: modules/gdscript/gd_functions.cpp msgid "Not a script with an instance" -msgstr "" +msgstr "ইনস্ট্যান্স বিহীন স্ক্রিপ্ট" #: modules/gdscript/gd_functions.cpp msgid "Not based on a script" -msgstr "" +msgstr "স্ক্রিপ্ট নির্ভর নয়" #: modules/gdscript/gd_functions.cpp msgid "Not based on a resource file" -msgstr "" +msgstr "রিসোর্স ফাইল ভিত্তিক নয়" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "" +msgstr "ভুল dictionary ফরম্যাট (@path নেই)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" -msgstr "" +msgstr "ভুল dictionary ফরম্যাট (@path-এ স্ক্রিপ্ট লোড অসম্ভব)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "" +msgstr "ভুল dictionary ফরম্যাট (@path-এ ভুল স্ক্রিপ্ট)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "ভুল dictionary ফরম্যাট (ভুল subclasses)" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"একটি নোড কার্যকর মেমোরি ছাড়াই উৎপন্ন হয়েছে, কি করে সঠিকভাবে সরবারহ করতে হয় তা " +"অনুগ্রহ করে ডকুমেন্টেশনে পড়ুন!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"নোড ডাকা হয়েছে, কিন্তু প্রথম কার্যকর মেমোরিতে ফাংশনের কোনো অবস্থা ফেরত পাঠায়নি।" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"নোডের কার্যকর মেমোরির প্রাথমিক উপাদানে অবশ্যই ফিরতি মান নির্দিষ্ট করতে হবে! অনুগ্রহ " +"করে আপনার নোডটি মেরামত করুন।" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "নোড অনিয়মিত ক্রমের ফলাফল পাঠিয়েছে: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" +"ক্রম বিট (bit) পাওয়া গিয়েছে কিন্তু নোডটি স্ট্যাক/তাক-এ নেই, সমস্যাটি রিপোর্ট করুন!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "স্ট্যাক/তাক-এর গভীরতায় স্ট্যাক/তাক অধিপ্রবাহিত/প্লাবিত হয়েছে: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "ফাংশনগুলি:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "ফাংশনের (Function) নতুন নামকরণ করুন" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "ফাংশন (Function) অপসারণ করুন" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "সংকেত (Signal) অপসারণ করুন" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "নির্বাচিত সমূহ অপসারণ করুন" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "প্রতিলেপন/পেস্ট করুন" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." msgstr "" #: scene/2d/animated_sprite.cpp @@ -62,12 +339,16 @@ msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite to display frames." msgstr "" +"AnimatedSprite দ্বারা ফ্রেম দেখাতে SpriteFrames রিসোর্স অবশ্যই তৈরি করতে হবে " +"অথবা 'Frames' এর মান-এ নির্ধারন করে দিতে হবে।" #: scene/2d/canvas_modulate.cpp msgid "" "Only one visible CanvasModulate is allowed per scene (or set of instanced " "scenes). The first created one will work, while the rest will be ignored." msgstr "" +"প্রতি scene-এ (অথবা ইন্সট্যান্সড scene-এর সম্মেলনে) সর্বোচ্চ একটি দৃশ্যমান " +"CanvasModulate সম্ভব। সর্বপ্রথমেরটি দৃশ্যত হলেও বাকিগুলো বাতিল হয়ে যাবে।" #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -75,10 +356,13 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" +"CollisionPolygon2D শুধুমাত্র CollisionObject2D হতে সৃষ্ট নোডের সংঘর্ষের আকৃতি প্রদান " +"করে। Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, ইত্যাদিকে আকার দিতে " +"অনুগ্রহ করে তা শুধুমাত্র তাদের অংশ হিসেবে ব্যবহার করুন।" #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "" +msgstr "সংঘর্ষে ফাঁকা/শুন্য CollisionPolygon2D-এর কোনো প্রভাব নেই।" #: scene/2d/collision_shape_2d.cpp msgid "" @@ -86,80 +370,104 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" +"CollisionShape2D শুধুমাত্র CollisionObject2D হতে সৃষ্ট নোডের সংঘর্ষের আকৃতি প্রদান " +"করে। Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, ইত্যাদিকে আকার দিতে " +"অনুগ্রহ করে তা শুধুমাত্র তাদের অংশ হিসেবে ব্যবহার করুন।" #: scene/2d/collision_shape_2d.cpp msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" +"সফল্ভাবে কাজ করতে CollisionShape2D এর একটি আকৃতি প্রয়োজন। অনুগ্রহ করে তার জন্য " +"একটি আকৃতি তৈরি করুন!" #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " "property." msgstr "" +"অবশ্যই লাইটের আকৃতি সহ একটি গঠন 'texture' এর বৈশিষ্ট্যে হিসেবে প্রদান করতে হবে।" #: scene/2d/light_occluder_2d.cpp msgid "" "An occluder polygon must be set (or drawn) for this occluder to take effect." msgstr "" +"Occluder এর প্রভাব ফেলতে একটি occluder বহুভুজ নির্ধারণ করা (বা, আঁকা) আবশ্যক।" #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" -msgstr "" +msgstr "এই occluder এর জন্য occluder পলিগনটি খালি। অনুগ্রহ করে একটি পলিগন আঁকুন!" #: scene/2d/navigation_polygon.cpp msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" +"এই নোডটি সফল্ভাবে কাজ করার জন্য একটি NavigationPolygon রিসোর্স নির্ধারন বা তৈরি " +"করতে হবে। অনুগ্রহ করে একটি বৈশিষ্ট্য নির্ধারন করুন বা একটি পলিগন/বহুভুজ আঁকুন।" #: scene/2d/navigation_polygon.cpp msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" +"NavigationPolygonInstance-কে অবশ্যই Navigation2D-এর অংশ অথবা অংশের অংশ হতে " +"হবে। এটা শুধুমাত্র ন্যাভিগেশনের তথ্য প্রদান করে।" #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" +"ParallaxLayer একমাত্র ParallaxBackground এর অংশ হিসেবে নির্ধারন করলেই কাজ করে।" #: scene/2d/particles_2d.cpp msgid "Path property must point to a valid Particles2D node to work." -msgstr "" +msgstr "Path এর দিক অবশ্যই একটি কার্যকর Particles2D এর দিকে নির্দেশ করাতে হবে।" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." -msgstr "" +msgstr "PathFollow2D একমাত্র Path2D এর অংশ হিসেবে নির্ধারন করালেই কাজ করে।" #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." -msgstr "" +msgstr "Path এর দিক অবশ্যই একটি কার্যকর Node2D এর দিকে নির্দেশ করাতে হবে।" #: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp msgid "" "A SampleLibrary resource must be created or set in the 'samples' property in " "order for SamplePlayer to play sound." msgstr "" +"SamplePlayer-এ শব্দ চালাতে এর 'samples'-এ একটি SampleLibrary তৈরি বা নির্ধারন " +"করতে হবে।" #: scene/2d/sprite.cpp msgid "" "Path property must point to a valid Viewport node to work. Such Viewport " "must be set to 'render target' mode." msgstr "" +"Path এর দিক অবশ্যই একটি কার্যকর Viewport এর দিকে নির্দেশ করাতে হবে। সেই " +"Viewport অবশ্যই 'render target' মোডে নির্ধারন করতে হবে।" #: scene/2d/sprite.cpp msgid "" "The Viewport set in the path property must be set as 'render target' in " "order for this sprite to work." msgstr "" +"এই sprite টি কার্যকর করতে path প্রোপার্টিতে নির্ধারিত Viewport টি অবশ্যই 'render " +"target' এ নির্ধারিত করতে হবে।" #: scene/2d/visibility_notifier_2d.cpp msgid "" "VisibilityEnable2D works best when used with the edited scene root directly " "as parent." msgstr "" +"VisibilityEnable2D সর্বোত্তম কার্যকর হয় যখন সম্পাদিত দৃশ্য মূল দৃশ্য হিসেবে সরাসরি " +"ব্যবহৃত হয়।" + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" #: scene/3d/body_shape.cpp msgid "" @@ -167,12 +475,17 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" +"CollisionShape শুধুমাত্র CollisionObject হতে সৃষ্ট নোডের সংঘর্ষের আকৃতি প্রদান করে। " +"Area, StaticBody, RigidBody, KinematicBody, ইত্যাদিকে আকার দিতে অনুগ্রহ করে তা " +"শুধুমাত্র তাদের অংশ হিসেবে ব্যবহার করুন।" #: scene/3d/body_shape.cpp msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it!" msgstr "" +"সফল্ভাবে কাজ করতে CollisionShape এর একটি আকৃতি প্রয়োজন। অনুগ্রহ করে তার জন্য একটি " +"আকৃতি তৈরি করুন!" #: scene/3d/collision_polygon.cpp msgid "" @@ -180,232 +493,246 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" +"CollisionPolygon শুধুমাত্র CollisionObject হতে সৃষ্ট নোডের সংঘর্ষের আকৃতি প্রদান " +"করে। Area, StaticBody, RigidBody, KinematicBody, ইত্যাদিকে আকার দিতে অনুগ্রহ " +"করে তা শুধুমাত্র তাদের অংশ হিসেবে ব্যবহার করুন।" #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." -msgstr "" +msgstr "সংঘর্ষে ফাঁকা/শুন্য CollisionPolygon-এর কোনো প্রভাব নেই।" #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." msgstr "" +"এই নোডটি সফল্ভাবে কাজ করার জন্য একটি NavigationMesh রিসোর্স নির্ধারন বা তৈরি " +"করতে হবে।" #: scene/3d/navigation_mesh.cpp msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" +"NavigationMeshInstance-কে অবশ্যই Navigation-এর অংশ অথবা অংশের অংশ হতে হবে। " +"এটা শুধুমাত্র ন্যাভিগেশনের তথ্য প্রদান করে।" #: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +"প্রতি scene-এ (অথবা ইন্সট্যান্সড scene-এর সম্মেলনে) সর্বোচ্চ একটি দৃশ্যমান " +"WorldEnvironment সম্ভব।" #: scene/3d/spatial_sample_player.cpp msgid "" "A SampleLibrary resource must be created or set in the 'samples' property in " "order for SpatialSamplePlayer to play sound." msgstr "" +"SpatialSamplePlayer-এ শব্দ চালাতে এর 'samples'-এ একটি SampleLibrary তৈরি বা " +"নির্ধারন করতে হবে।" #: scene/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite3D to display frames." msgstr "" +"AnimatedSprite3D দ্বারা ফ্রেম দেখাতে SpriteFrames রিসোর্স অবশ্যই তৈরি করতে হবে " +"অথবা 'Frames' এর মান-এ নির্ধারন করে দিতে হবে।" #: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Cancel" -msgstr "" +msgstr "বাতিল" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" -msgstr "" +msgstr "সঠিক" #: scene/gui/dialogs.cpp msgid "Alert!" -msgstr "" +msgstr "সতর্কতা!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "" +msgstr "অনুগ্রহ করে নিশ্চিত করুন..." #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "" +msgstr "একই নামের ফাইল উপস্থিত, তা মুছে লিখবেন?" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "সব ফাইল পরিচিতি সম্পন্ন" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Files (*)" -msgstr "" +msgstr "সব ফাইল (*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" -msgstr "" +msgstr "খুলুন" #: scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "একটি ফাইল খুলুন" #: scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "এক বা একাধিক ফাইল খুলুন" #: scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "" +msgstr "পথ/ডিরেক্টরি খুলুন" #: scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "" +msgstr "ফাইল বা পথ/ডিরেক্টরি খুলুন" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_node.cpp #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save" -msgstr "" +msgstr "সংরক্ষন করুন" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Save a File" -msgstr "" +msgstr "ফাইল সংরক্ষন করুন" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp msgid "Create Folder" -msgstr "" +msgstr "ফোল্ডার তৈরি করুন" #: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp #: tools/editor/editor_file_dialog.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp #: tools/editor/script_create_dialog.cpp msgid "Path:" -msgstr "" +msgstr "পথ:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "পথ এবং ফাইল:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/script_editor_debugger.cpp msgid "File:" -msgstr "" +msgstr "ফাইল:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Filter:" -msgstr "" +msgstr "ফিল্টার:" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Name:" -msgstr "" +msgstr "নাম:" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp msgid "Could not create folder." -msgstr "" +msgstr "ফোল্ডার তৈরী করা সম্ভব হয়নি।" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Must use a valid extension." -msgstr "" +msgstr "একটি কার্যকর এক্সটেনশন ব্যবহার করা আবশ্যক।" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp msgid "Shift+" -msgstr "" +msgstr "Shift+" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp msgid "Alt+" -msgstr "" +msgstr "Alt+" #: scene/gui/input_action.cpp msgid "Ctrl+" -msgstr "" +msgstr "Ctrl+" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp msgid "Meta+" -msgstr "" +msgstr "Meta+" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Device" -msgstr "" +msgstr "ডিভাইস/যন্ত্র" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Button" -msgstr "" +msgstr "বাটন/বোতাম" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Left Button." -msgstr "" +msgstr "বাম বোতাম/বাটন।" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Right Button." -msgstr "" +msgstr "ডান বোতাম/বাটন।" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Middle Button." -msgstr "" +msgstr "মাঝ বোতাম/বাটন।" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Wheel Up." -msgstr "" +msgstr "মাউসের চাকা উপরের দিকে চক্কর।" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Wheel Down." -msgstr "" +msgstr "মাউসের চাকা নিচের দিকে চক্কর।" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Axis" -msgstr "" +msgstr "অক্ষ" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" -msgstr "" +msgstr "কর্তন/কাট করুন" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" -msgstr "" +msgstr "প্রতিলিপি/কপি করুন" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Paste" -msgstr "" +msgstr "প্রতিলেপন/পেস্ট করুন" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" -msgstr "" +msgstr "সবগুলি বাছাই করুন" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp #: tools/editor/plugins/animation_tree_editor_plugin.cpp #: tools/editor/plugins/rich_text_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Clear" -msgstr "" +msgstr "পরিস্কার করুন/ক্লীয়ার" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" -msgstr "" +msgstr "সাবেক অবস্থায় যান/আনডু" #: scene/gui/popup.cpp msgid "" @@ -413,6 +740,9 @@ msgid "" "functions. Making them visible for editing is fine though, but they will " "hide upon running." msgstr "" +"সাধারণত popups লুকিয়ে যাবে, যদি আপনি popup() বা popup*() এর যেকোনো ফাংশন " +"ব্যবহার না করেন। যদিও সম্পাদনের কাজে তা গ্রহনযোগ্য, কিন্তু চালনার সময় তা লুকিয়ে " +"যাবে।" #: scene/main/viewport.cpp msgid "" @@ -421,196 +751,200 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" +"এই viewport টি render target হিসেবে নির্ধারন করা নেই। আপনি যদি এর বস্তু-সামগ্রী " +"সরাসরি পর্দায় দেখাতে চান, এটিকে যেকোনো Control এর অংশভূত করুন যেনো এটি একটি " +"আকার ধারণ করতে পারে। অন্যথায়, এটিকে একটি RenderTarget করুন এবং এর অভ্যন্তরীণ " +"দৃশ্যাবলিকে (texture) দৃশ্যমান করতে কোনো নোডে হস্তান্তর করুন।" #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Error initializing FreeType." -msgstr "" +msgstr "FreeType আরম্ভে সমস্যা হয়েছে।" #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Unknown font format." -msgstr "" +msgstr "অজানা ধরনের ফন্ট।" #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Error loading font." -msgstr "" +msgstr "ফন্ট তুলতে/লোডে সমস্যা হয়েছে।" #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Invalid font size." -msgstr "" +msgstr "ফন্টের আকার অগ্র্যহনযোগ্য।" #: tools/editor/animation_editor.cpp msgid "Disabled" -msgstr "" +msgstr "অসমর্থ/অক্ষম" #: tools/editor/animation_editor.cpp msgid "All Selection" -msgstr "" +msgstr "সকল বাছাইকৃত" #: tools/editor/animation_editor.cpp msgid "Move Add Key" -msgstr "" +msgstr "সংযোগ (অ্যাড) বোতাম সরান" #: tools/editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) ট্র্যানজিশন/স্থানান্তরণ পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) ট্রান্সফর্ম/রুপান্তর পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Anim Change Value" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) মান পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) ডাক পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "" +msgstr "অ্যানিমেশনে (Anim) ট্র্যাক/পথ যোগ করুন" #: tools/editor/animation_editor.cpp msgid "Anim Duplicate Keys" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) চাবিগুলো অনুলিপি/নকল করুন" #: tools/editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) ট্র্যাক/পথ উপরের দিকে তুলুন" #: tools/editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) ট্র্যাক/পথ নিচের দিকে নিয়ে যান" #: tools/editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) ট্র্যাক/পথ অপসারণ করুন" #: tools/editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "" +msgstr "ট্র্যানজিশন/স্থানান্তরণ সেট/নির্ধারণ করুন:" #: tools/editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "" +msgstr "অ্যানিমেশন (Anim) ট্র্যাক/পথ-এর নাম পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "" +msgstr "অ্যানিমেশন (Anim) ট্র্যাক/পথ-এর প্রক্ষেপ/নিবেশ পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "অ্যানিমেশন (Anim) ট্র্যাক/পথ-এর মানের ধরন/প্রকার পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "" +msgstr "নোডের বাঁক/কার্ভ সম্পাদন করুন" #: tools/editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "" +msgstr "নির্বাচন বাঁক/কার্ভ সম্পাদন করুন" #: tools/editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) চাবিগুলো অপসারণ করুন" #: tools/editor/animation_editor.cpp #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "" +msgstr "নির্বাচিত সমূহ অনুলিপি করুন" #: tools/editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "" +msgstr "পক্ষান্তরিত (Transposed) সমূহ অনুলিপি করুন" #: tools/editor/animation_editor.cpp msgid "Remove Selection" -msgstr "" +msgstr "নির্বাচিত সমূহ অপসারণ করুন" #: tools/editor/animation_editor.cpp msgid "Continuous" -msgstr "" +msgstr "অবিচ্ছিন্ন/নিরবচ্ছিন্ন" #: tools/editor/animation_editor.cpp msgid "Discrete" -msgstr "" +msgstr "স্বতন্ত্র/পৃথক্" #: tools/editor/animation_editor.cpp msgid "Trigger" -msgstr "" +msgstr "ট্রিগার/চালনা করুন" #: tools/editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "" +msgstr "অ্যানিমেশনে (Anim) চাবি/কী যোগ করুন" #: tools/editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "" +msgstr "অ্যানিমেশনে (Anim) চাবি/কী-সমুহ সরান" #: tools/editor/animation_editor.cpp msgid "Scale Selection" -msgstr "" +msgstr "নির্বাচিত সমূহের আকার পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Scale From Cursor" -msgstr "" +msgstr "কার্সর হতে আকার পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "" +msgstr "পরবর্তী ধাপে যান" #: tools/editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "" +msgstr "পূর্ববর্তী ধাপে যান" #: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp msgid "Linear" -msgstr "" +msgstr "রৈখিক/লিনিয়ার" #: tools/editor/animation_editor.cpp #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Constant" -msgstr "" +msgstr "ধ্রুবক/কন্সট্যান্ট" #: tools/editor/animation_editor.cpp msgid "In" -msgstr "" +msgstr "অভ্যন্তরে/ইন" #: tools/editor/animation_editor.cpp msgid "Out" -msgstr "" +msgstr "বাইরে/অউট" #: tools/editor/animation_editor.cpp msgid "In-Out" -msgstr "" +msgstr "অভ্যন্তরে-বাইরে/ইন-অউট" #: tools/editor/animation_editor.cpp msgid "Out-In" -msgstr "" +msgstr "বাইরে-অভ্যন্তরে/অউট-ইন" #: tools/editor/animation_editor.cpp msgid "Transitions" -msgstr "" +msgstr "অনুবাদসমূহ" #: tools/editor/animation_editor.cpp msgid "Optimize Animation" -msgstr "" +msgstr "অ্যানিমেশন (Animation) উন্নত/নিখুঁত করুন" #: tools/editor/animation_editor.cpp msgid "Clean-Up Animation" -msgstr "" +msgstr "অ্যানিমেশন (Animation) পরিচ্ছন্ন করুন" #: tools/editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "" +msgstr "%s এর জন্য নতুন ট্র্যাক/পথ তৈরি করতে এবং চাবি প্রবেশ করাতে চান?" #: tools/editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "" +msgstr "%d এর জন্য নতুন ট্র্যাক/পথ-সমূহ তৈরি করতে এবং চাবিসমূহ প্রবেশ করাতে চান?" #: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -619,83 +953,83 @@ msgstr "" #: tools/editor/plugins/particles_editor_plugin.cpp #: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp msgid "Create" -msgstr "" +msgstr "তৈরি করুন" #: tools/editor/animation_editor.cpp msgid "Anim Create & Insert" -msgstr "" +msgstr "অ্যানিমেশন (Anim) তৈরি এবং যোগ করুন" #: tools/editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "" +msgstr "অ্যানিমেশনে (Anim) ট্র্যাক/পথ এবং চাবি যোগ করুন" #: tools/editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "" +msgstr "অ্যানিমেশনে (Anim) চাবি যোগ করুন" #: tools/editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) দৈর্ঘ্য পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) পুনরাবৃত্তি/লুপ পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "অ্যানিমেশনে (Anim) প্রতীকী মানের চাবি তৈরি করুন" #: tools/editor/animation_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "অ্যানিমেশনে (Anim) অন্তর্ভুক্ত করুন" #: tools/editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "" +msgstr "অ্যানিমেশনের (Anim) চাবিসমূহের আকার পরিবর্তন করুন" #: tools/editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "" +msgstr "অ্যানিমেশনে (Anim) ডাকার ট্র্যাক/পথ যোগ করুন" #: tools/editor/animation_editor.cpp msgid "Animation zoom." -msgstr "" +msgstr "অ্যানিমেশন (Animation) জুম (zoom) করুন।" #: tools/editor/animation_editor.cpp msgid "Length (s):" -msgstr "" +msgstr "দৈর্ঘ্য (দৈর্ঘ্যসমূহ):" #: tools/editor/animation_editor.cpp msgid "Animation length (in seconds)." -msgstr "" +msgstr "অ্যানিমেশনের (Animation) দৈর্ঘ্য (সময় সেকেন্ডে)।" #: tools/editor/animation_editor.cpp msgid "Step (s):" -msgstr "" +msgstr "ধাপ (ধাপসমূহ):" #: tools/editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." -msgstr "" +msgstr "কার্সরের স্থানে/পদক্ষেপে ভাঙ্গুন (snap) (সময় সেকেন্ডে)।" #: tools/editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "" +msgstr "অ্যানিমেশনের পুনরাবৃত্তি/লুপ সক্ষম/অক্ষম করুন।" #: tools/editor/animation_editor.cpp msgid "Add new tracks." -msgstr "" +msgstr "নতুন ট্র্যাক/পথ-সমূহ যোগ করুন।" #: tools/editor/animation_editor.cpp msgid "Move current track up." -msgstr "" +msgstr "বর্তমান ট্র্যাক/পথ উপরের দিকে তুলুন।" #: tools/editor/animation_editor.cpp msgid "Move current track down." -msgstr "" +msgstr "বর্তমান ট্র্যাক/পথ নিচের দিকে নামান।" #: tools/editor/animation_editor.cpp msgid "Remove selected track." -msgstr "" +msgstr "নির্বাচিত ট্র্যাক/পথ অপসারণ করুন।" #: tools/editor/animation_editor.cpp msgid "Track tools" @@ -726,6 +1060,10 @@ msgid "Optimize" msgstr "" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "" @@ -775,7 +1113,8 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "" @@ -829,18 +1168,6 @@ msgstr "" msgid "Call" msgstr "" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "" @@ -891,6 +1218,7 @@ msgstr "" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -932,6 +1260,20 @@ msgstr "" msgid "Skip" msgstr "" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "" @@ -1021,10 +1363,16 @@ msgid "Create New" msgstr "" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -1084,6 +1432,9 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" +"যেসব ফাইল অপসারিত হচ্ছে তারা অন্যান্য রিসোর্স ফাইলের কার্যকররুপে কাজ করার জন্য " +"দরকারি।\n" +"তবুও তাদের অপসারণ করবেন? (তাদের আর ফেরত পাবেন না/আনডু অসম্ভব)" #: tools/editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" @@ -1134,8 +1485,9 @@ msgid "Delete selected files?" msgstr "" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "" @@ -1282,7 +1634,7 @@ msgstr "" msgid "Move Favorite Down" msgstr "" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "" @@ -1295,10 +1647,6 @@ msgid "Preview:" msgstr "" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "" @@ -1336,25 +1684,13 @@ msgid "Public Methods:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "" @@ -1771,7 +2107,7 @@ msgstr "" msgid "TileSet.." msgstr "" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "" @@ -2182,6 +2518,90 @@ msgstr "" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "নতুন নাম এবং অবস্থান বাছাই করুন:" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "কোনো ফাইল নির্বাচিত হয়নি!" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -3137,10 +3557,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "" @@ -3204,8 +3620,8 @@ msgid "Paste Pose" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" -msgstr "" +msgid "Select Mode" +msgstr "মোড (Mode) বাছাই করুন" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -3224,13 +3640,11 @@ msgid "Alt+RMB: Depth list selection" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "" +msgid "Move Mode" +msgstr "মোড (Mode) সরান" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +msgid "Rotate Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3265,14 +3679,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "" @@ -3329,14 +3735,6 @@ msgid "View" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "" @@ -4034,6 +4432,10 @@ msgid "Save All" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "" @@ -4054,194 +4456,186 @@ msgid "Save Theme As" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" +msgid "Close Docs" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" +msgid "Debug" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" +#: tools/editor/script_editor_debugger.cpp +msgid "Break" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" +msgid "Keep Debugger Open" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find.." +msgid "Window" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Next" +msgid "Move Left" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" +msgid "Move Right" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." +msgid "Tutorials" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." +msgid "Open https://godotengine.org at tutorials section." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." +msgid "Classes" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Debug" +msgid "Search the class hierarchy." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" +msgid "Search the reference documentation." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" +msgid "Go to previous edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" +msgid "Go to next edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" +msgid "Create Script" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Reload" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Break" +msgid "Resave" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp -msgid "Continue" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Keep Debugger Open" +msgid "Debugger" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Window" +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Left" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Right" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Tutorials" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Open https://godotengine.org at tutorials section." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Classes" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the reference documentation." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to previous edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to next edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Create Script" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"The following files are newer on disk.\n" -"What action should be taken?:" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Reload" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Resave" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Debugger" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" msgstr "" #: tools/editor/plugins/shader_editor_plugin.cpp @@ -4505,6 +4899,14 @@ msgid "Could not instance scene!" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "" @@ -5319,11 +5721,11 @@ msgid "Unnamed Project" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "" #: tools/editor/project_manager.cpp @@ -5331,6 +5733,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "" @@ -5347,6 +5755,10 @@ msgid "Scan" msgstr "" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "" @@ -5638,6 +6050,16 @@ msgstr "" msgid "Sections:" msgstr "" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "মোড (Mode) বাছাই করুন" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "মোড (Mode) বাছাই করুন" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "" @@ -5711,6 +6133,10 @@ msgid "No parent to instance a child at." msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "" @@ -5839,6 +6265,10 @@ msgid "Save Branch as Scene" msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "অপসারণ করুন (নিশ্চয়তাকরণ নেই)" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "" @@ -5848,6 +6278,10 @@ msgid "" "exists." msgstr "" +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5910,90 +6344,6 @@ msgstr "" msgid "Select a Node" msgstr "" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "" diff --git a/tools/translations/ca.po b/tools/translations/ca.po new file mode 100644 index 0000000000..14d523b88b --- /dev/null +++ b/tools/translations/ca.po @@ -0,0 +1,6616 @@ +# LANGUAGE translation of the Godot Engine editor +# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community +# This file is distributed under the same license as the Godot source code. +# +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2016-09-01 11:46+0000\n" +"Last-Translator: Roger BR <drai_kin@hotmail.com>\n" +"Language-Team: Catalan <https://hosted.weblate.org/projects/godot-engine/" +"godot/ca/>\n" +"Language: ca\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.8\n" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "Argument de tipus invàlid per a convert(), utilitzi constants TYPE_*." + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "" +"Nombre insuficient de bytes per a descodificar els bytes, o el format és " +"invàlid." + +#: modules/gdscript/gd_functions.cpp +msgid "step argument is zero!" +msgstr "L'argument pas (step) és zero!" + +#: modules/gdscript/gd_functions.cpp +msgid "Not a script with an instance" +msgstr "Script sense instància" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a script" +msgstr "No basat en un script" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a resource file" +msgstr "No basat en un arxiu de recursos" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "Format del diccionari d'instàncies invàlid (manca @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" +"Format del diccionari d'instàncies invàlid (no es pot carregar l'script a " +"@path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "Format del diccionari d'instàncies invàlid (script invàlid a @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "Diccionari d'instàncies invàlid (subclasses invàlides)" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"Node cedit sense memòria de treball. Llegiu la documentació per cedir " +"(yield) nodes correctament!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"Node cedit, però no ha retornat cap estat de funció en la primera memòria de " +"treball." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"El valor de retorn s'ha d'assignar al primer element de la memòria de " +"treball de nodes! Repareu el node." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "El node ha retornat un seqüencia de sortida invàlida: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" +"S'ha trobat un bit de seqüencia però cap node en la pila (stack), reporteu " +"el bug!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Pila desbordada (stack overflow) amb profunditat de Pila: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Funcions:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Variables:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Senyals:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "El nom no és un identificador vàlid:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Nom usat en un altra funció/variable/senyal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Reanomena Funció" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Reanomena Variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Reanomena Senyal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Afegeix Funció" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Afegeix Variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Afegeix Senyal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Treu Funció" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Treu Variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Editant Variable:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Treu Senyal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Editant Senyal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Afegeix Node" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Afegeix Node" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Afegeix Node(s) des d'Arbre" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Afegir Captador de Propietat (Getter)" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Afegeix Col.locador de Proprietat (Setter)" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Edita" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Tipus Base:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Membres:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Nodes disponibles:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Selecciona o crea una funció per editar la corba" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Tanca" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Edita els Arguments del Senyal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Edita Variable:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Canvia" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Elimina Seleccionats" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Commuta el punt d'Interrupció" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Troba el Tipus del Node" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Camí al Node:" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "Tipus d'entrada no iterable: " + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "L'Iterador ha esdevingut invàlid" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "L'Iterador ha esdevingut invàlid: " + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "El Nom de la propietat index és invàlid." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "L'objecte de Base no és un Node!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "El camí no condueix a cap Node!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "El nom de la propietat index '%s' és invàlid en el node %s." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": Argument invàlid del tipus: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Arguments invàlids: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "Variable Get no trobada en el script: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "Variable Set no trobada en el script: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" +"El node personalitzat no té cap mètode _step(), no es pot processar la corba." + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" +"Valor de retorn de _step() invàlid. Ha de ser un nombre enter (seq out), o " +"una cadena de text (error)." + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" +"Un recurs del tipus SpriteFrames s'ha de crear or especificar en la " +"propietat \"Quadres (Frames)\" perquè AnimatedSprite pugui mostrar els " +"quadres." + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" +"Només es permet un sol CanvasModulate per escena (o conjunt d'escenes " +"instanciades). El primer funcionara, mentre que la resta seran ignorats." + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionPolygon2D només proporciona formes de col·lisió a nodes derivats de " +"CollisionObject2D. Utilitzeu-lo només per donar una forma a nodes com " +"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc." + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "Un CollisionPolygon2D buit no té cap efecte en la col·lisió." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionShape2D només proporciona formes de col·lisió nodes de derivats de " +"CollisionObject2D. Utilitzeu-lo només per donar una forma a nodes com " +"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" +"S'ha de proporcionar una forma perquè *CollisionShape2D pugui funcionar. " +"Creeu-li un recurs de forma (shape)!" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "" +"S'ha de proveir la propietat 'textura' amb una textura amb la forma de la " +"llum." + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" +"Cal establir (o dibuixar) un polígon oclusiu perquè aquest oclusor " +"(occluder) faci efecte." + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "El polígon oclusiu és buit. Dibuixeu un polígon!" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" +"Cal especificar un recurs de tipus NavigationPolygon per al correcte " +"funcionament del Node. Si us plau especifiqueu una propietat o dibuixeu un " +"polígon." + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" +"NavigationPolygonInstance ha de ser fill o nét d'un node Navigation2D. Només " +"proporciona dades de navegació." + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" +"Un node ParallaxLayer només funciona quan s'estableix com a fill d'un node " +"ParallaxBackground." + +#: scene/2d/particles_2d.cpp +msgid "Path property must point to a valid Particles2D node to work." +msgstr "" +"Cal que la propietat Camí (Path) assenyali cap a un node Particles2D vàlid." + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" +"PathFollow2D només funciona si s'estableix com a fill d'un node Path2D." + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "Cal que la propietat Camí (Path) assenyali un Node2D vàlid." + +#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SamplePlayer to play sound." +msgstr "" +"Cal crear o especificar un recurs SampleLibrary en la propietat 'samples' " +"perquè SamplePlayer pugui reproduir so." + +#: scene/2d/sprite.cpp +msgid "" +"Path property must point to a valid Viewport node to work. Such Viewport " +"must be set to 'render target' mode." +msgstr "" +"Cal que la propietat Camí (Path) assenyali un node de Vista (Viewport) " +"vàlid. Aquest ha de ser especificat en el mode \"destí de renderització" +"\" (render target)." + +#: scene/2d/sprite.cpp +msgid "" +"The Viewport set in the path property must be set as 'render target' in " +"order for this sprite to work." +msgstr "" +"L'àrea de Visualització (Viewport) especificada en la propietat \"Camí" +"\" (Path) ha d'utilitzar el mode 'destí de renderització' (render target) " +"perquè l'sprite funcioni." + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" +"VisibilityEnable2D funciona millor quan l'arrel de l'escena editada " +"s'utilitza com a pare." + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance no conté cap recurs BakedLight." + +#: scene/3d/body_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" +"CollisionShape només proporciona formes de col·lisió a nodes derivats de " +"CollisionObject. Utilitzeu-lo només per donar una forma a nodes com Area, " +"StaticBody, RigidBody, KinematicBody, etc." + +#: scene/3d/body_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" +"Cal proveir una forma perquè CollisionShape funcioni. Creeu-li un recurs de " +"forma!" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" +"CollisionPolygon només proporciona formes de col·lisió a nodes derivats de " +"CollisionObject. Utilitzeu-lo només per donar una forma a nodes com Area, " +"StaticBody, RigidBody, KinematicBody, etc." + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "Un CollisionPolygon buit no afecta les col·lisions." + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" +"Cal crear o establir un recurs de tipus NavigationMesh per al correcte " +"funcionament d'aquest node." + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" +"NavigationMeshInstance ha de ser fill o nét d'un node Navigation. Només " +"proporciona dades de navegació." + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" +"Només es permet un sol WorldEnvironment per escena ( o conjunt d'escenes " +"instanciades)." + +#: scene/3d/spatial_sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SpatialSamplePlayer to play sound." +msgstr "" +"Cal crear o establir un recurs SampleLibrary en la propietat 'samples' " +"perquè SpatialSamplePlayer pugui reproduir so." + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" +"Cal crear o establir un recurs SpriteFrames en la propietat 'Frames' perquè " +"AnimatedSprite3D dibuixi els quadres." + +#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Cancel" +msgstr "Cancel·la" + +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp +msgid "OK" +msgstr "D'acord" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "Ep!" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "Confirmeu..." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "Fitxer Existent, Sobreescriure?" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Recognized" +msgstr "Tots Reconeguts" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Files (*)" +msgstr "Tots els Fitxers (*)" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Open" +msgstr "Obre" + +#: scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "Obre un Fitxer" + +#: scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "Obre Fitxer(s)" + +#: scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "Obre un Directori" + +#: scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "Obre un Fitxer o Directori" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save" +msgstr "Desa" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Save a File" +msgstr "Desa un Fitxer" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Create Folder" +msgstr "Crea una Carpeta" + +#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/editor_file_dialog.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Path:" +msgstr "Camí:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Directories & Files:" +msgstr "Directoris i Fitxers:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "File:" +msgstr "Fitxer:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Filter:" +msgstr "Filtre:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Name:" +msgstr "Nom:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Could not create folder." +msgstr "No s'ha pogut crear la carpeta." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Must use a valid extension." +msgstr "Cal utilitzar una extensió vàlida." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "Maj +" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "Alt +" + +#: scene/gui/input_action.cpp +msgid "Ctrl+" +msgstr "Ctrl +" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Meta+" +msgstr "Meta +" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Device" +msgstr "Dispositiu" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Button" +msgstr "Botó" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Left Button." +msgstr "Botó Esquerre." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Right Button." +msgstr "Botó Dret." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Middle Button." +msgstr "Botó del Mig." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Up." +msgstr "Roda Amunt." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Down." +msgstr "Roda Avall." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Axis" +msgstr "Eix" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Cut" +msgstr "Talla" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Copy" +msgstr "Copia" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Paste" +msgstr "Enganxa" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "Select All" +msgstr "Selecciona-ho Tot" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/rich_text_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Clear" +msgstr "Neteja" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Undo" +msgstr "Desfés" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" +"Les finestres emergents s'oculten per defecte tret que s'invoqui popup() o " +"qualsevol de les funcions popup*(). És possible fer-les visibles mentre " +"s'edita, però s'ocultaran durant l'execució." + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" +"L'àrea de Visualització (Viewport) no és el Destí de Renderització (render " +"target). Per mostrar-ne el contingut, especifiqueu-la com a filla d'un " +"Control de forma per tal d'obtenir-ne la mida. Altrament, establiu-la com a " +"Destí de Renderització i assigneu la textura interna a algun node." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error initializing FreeType." +msgstr "Error inicialitzant FreeType." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Unknown font format." +msgstr "Format de lletra desconegut." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error loading font." +msgstr "Error carregant lletra." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font size." +msgstr "La mida de la lletra no és vàlida." + +#: tools/editor/animation_editor.cpp +msgid "Disabled" +msgstr "Desactivat" + +#: tools/editor/animation_editor.cpp +msgid "All Selection" +msgstr "Tota la Selecció" + +#: tools/editor/animation_editor.cpp +msgid "Move Add Key" +msgstr "Mou Afegir Clau" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transition" +msgstr "Canvia Transició" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "Canvia Transformació" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Value" +msgstr "Canvia Valor" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Change Call" +msgstr "Canvia Crida (Call)" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "Afegeix Pista" + +#: tools/editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "Duplica Claus" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "Mou Pista Amunt" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "Mou Pista Avall" + +#: tools/editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "Treu Pista" + +#: tools/editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "Posa les Transicions a:" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "Reanomena Pista" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "Canvia Interpolació de Pista" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "Canvia Valor del Mode de Pista" + +#: tools/editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "Edita Corba del Node" + +#: tools/editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "Edita Corba de Selecció" + +#: tools/editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "Esborra Claus" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "Duplica la Selecció" + +#: tools/editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "Duplica Transposats" + +#: tools/editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "Treu la Selecció" + +#: tools/editor/animation_editor.cpp +msgid "Continuous" +msgstr "Continu" + +#: tools/editor/animation_editor.cpp +msgid "Discrete" +msgstr "Discret" + +#: tools/editor/animation_editor.cpp +msgid "Trigger" +msgstr "Activador" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "Afegeix Clau" + +#: tools/editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "Mou Claus" + +#: tools/editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "Escala la Selecció" + +#: tools/editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "Escala des del Cursor" + +#: tools/editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "Vés al Pas Següent" + +#: tools/editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "Vés al Pas Previ" + +#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp +msgid "Linear" +msgstr "Lineal" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "Constant" + +#: tools/editor/animation_editor.cpp +msgid "In" +msgstr "Entrada" + +#: tools/editor/animation_editor.cpp +msgid "Out" +msgstr "Sortida" + +#: tools/editor/animation_editor.cpp +msgid "In-Out" +msgstr "Entrada-Sortida" + +#: tools/editor/animation_editor.cpp +msgid "Out-In" +msgstr "Sortida-Entrada" + +#: tools/editor/animation_editor.cpp +msgid "Transitions" +msgstr "Transicions" + +#: tools/editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "Optimitza l'Animació" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "Poleix l'Animació" + +#: tools/editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "Vol crear una NOVA pista per a %s i inserir-hi una clau?" + +#: tools/editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "Vol crear %d noves pistes i inserir-hi claus?" + +#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/particles_editor_plugin.cpp +#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp +msgid "Create" +msgstr "Crea" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "Crea i Insereix" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "Insereix Pista i Clau" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "Insereix Clau" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "Canvia durada" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "Canvia bucle" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "Crea Clau de Valor Tipat" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert" +msgstr "Insereix Animació" + +#: tools/editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "Escala Claus" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "Afegeix Pista de Crida" + +#: tools/editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "Zoom d'animació." + +#: tools/editor/animation_editor.cpp +msgid "Length (s):" +msgstr "Durada (s):" + +#: tools/editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "Durada de l'Animació (en segons)." + +#: tools/editor/animation_editor.cpp +msgid "Step (s):" +msgstr "Pas (s):" + +#: tools/editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "Pas de desplaçament del cursor (s)." + +#: tools/editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "Activa/Desactiva el bucle de l'animació." + +#: tools/editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "Afegeix noves pistes." + +#: tools/editor/animation_editor.cpp +msgid "Move current track up." +msgstr "Mou amunt la pista actual." + +#: tools/editor/animation_editor.cpp +msgid "Move current track down." +msgstr "Mou avall la pista actual." + +#: tools/editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "Treu la pista seleccionada." + +#: tools/editor/animation_editor.cpp +msgid "Track tools" +msgstr "Eines de Pista" + +#: tools/editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "Activa l'editatge individual de claus en clicar-hi." + +#: tools/editor/animation_editor.cpp +msgid "Anim. Optimizer" +msgstr "Optimitzador d'Animació" + +#: tools/editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "Error Lineal Max.:" + +#: tools/editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "Error Angular Max.:" + +#: tools/editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "Max. Angle Optimitzable:" + +#: tools/editor/animation_editor.cpp +msgid "Optimize" +msgstr "Optimitza" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" +"Selecciona un AnimationPlayer a l'Arbre de l'Escena per editar-ne l'animació." + +#: tools/editor/animation_editor.cpp +msgid "Key" +msgstr "Clau" + +#: tools/editor/animation_editor.cpp +msgid "Transition" +msgstr "Transició" + +#: tools/editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "Relació d'Escala:" + +#: tools/editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "Cridar Funcions en el Node \"Which\"?" + +#: tools/editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "Treu claus invàlides" + +#: tools/editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "Treu pistes buides o sense resoldre" + +#: tools/editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "Poleix totes les animacions" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "Poleix la/les Animació/ns (NO ES POT DESFER!)" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up" +msgstr "Poleix" + +#: tools/editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "Redimensiona Matriu" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "Canvia Tipus de la Matriu" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "Canvia Valor de la Matriu" + +#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Cerca:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Ordena:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Inverteix" + +#: tools/editor/asset_library_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Category:" +msgstr "Categoria:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Tot" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Lloc:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Suport..." + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Oficial" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Comunitat" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Provant" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Arxiu ZIP d'Actius" + +#: tools/editor/call_dialog.cpp +msgid "Method List For '%s':" +msgstr "Llista de mètodes de '%s':" + +#: tools/editor/call_dialog.cpp +msgid "Call" +msgstr "Crida" + +#: tools/editor/call_dialog.cpp +msgid "Method List:" +msgstr "Llista de mètodes:" + +#: tools/editor/call_dialog.cpp +msgid "Arguments:" +msgstr "Arguments:" + +#: tools/editor/call_dialog.cpp +msgid "Return:" +msgstr "Retorn:" + +#: tools/editor/code_editor.cpp +msgid "Go to Line" +msgstr "Vés a la Línia" + +#: tools/editor/code_editor.cpp +msgid "Line Number:" +msgstr "Línia:" + +#: tools/editor/code_editor.cpp +msgid "No Matches" +msgstr "Cap Coincidència" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d Ocurrence(s)." +msgstr "Substituïdes %d ocurrència/es." + +#: tools/editor/code_editor.cpp +msgid "Replace" +msgstr "Reemplaça" + +#: tools/editor/code_editor.cpp +msgid "Replace All" +msgstr "Reemplaça-hoTot" + +#: tools/editor/code_editor.cpp +msgid "Match Case" +msgstr "Distingeix entre majúscules i minúscules" + +#: tools/editor/code_editor.cpp +msgid "Whole Words" +msgstr "Paraules senceres" + +#: tools/editor/code_editor.cpp +msgid "Selection Only" +msgstr "Selecció Només" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Search" +msgstr "Cerca" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +msgid "Find" +msgstr "Troba" + +#: tools/editor/code_editor.cpp +msgid "Next" +msgstr "Següent" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d ocurrence(s)." +msgstr "Reemplaçades %d ocurrència/es." + +#: tools/editor/code_editor.cpp +msgid "Not found!" +msgstr "No s'ha trobat!" + +#: tools/editor/code_editor.cpp +msgid "Replace By" +msgstr "Reemplaça per" + +#: tools/editor/code_editor.cpp +msgid "Case Sensitive" +msgstr "Majúscules i minúscules" + +#: tools/editor/code_editor.cpp +msgid "Backwards" +msgstr "Enrere" + +#: tools/editor/code_editor.cpp +msgid "Prompt On Replace" +msgstr "Indica en reemplaçar" + +#: tools/editor/code_editor.cpp +msgid "Skip" +msgstr "Omet" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Apropa" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Allunya" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Reinicia el Zoom" + +#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "Línia:" + +#: tools/editor/code_editor.cpp +msgid "Col:" +msgstr "Col:" + +#: tools/editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "Cal especificar un mètode per al Node objectiu!" + +#: tools/editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "Connecta al Node:" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Add" +msgstr "Afegeix" + +#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Remove" +msgstr "Treu" + +#: tools/editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "Afegeix Argument de Crida Extra:" + +#: tools/editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "Arguments de Crida Extra:" + +#: tools/editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "Camí al Node:" + +#: tools/editor/connections_dialog.cpp +msgid "Make Function" +msgstr "Crea Funció" + +#: tools/editor/connections_dialog.cpp +msgid "Deferred" +msgstr "Diferit" + +#: tools/editor/connections_dialog.cpp +#, fuzzy +msgid "Oneshot" +msgstr "D'un cop" + +#: tools/editor/connections_dialog.cpp +msgid "Connect" +msgstr "Connecta" + +#: tools/editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "Connecta '%s' amb '%s'" + +#: tools/editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "Connectant Senyal:" + +#: tools/editor/connections_dialog.cpp +msgid "Create Subscription" +msgstr "Crea Subscripció" + +#: tools/editor/connections_dialog.cpp +msgid "Connect.." +msgstr "Connecta.." + +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "Desconnecta" + +#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp +msgid "Signals" +msgstr "Senyals" + +#: tools/editor/create_dialog.cpp +msgid "Create New" +msgstr "Crea Nou" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Matches:" +msgstr "Coincidències:" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Descripció:" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "Cerca Reemplaçant per a:" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "Dependències per a:" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" +"S'està editant l'Escena '%s'.\n" +"Els canvis s'actualitzaran recarregar." + +#: tools/editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" +"S'està usant el Recurs '%s'.\n" +"Els canvis s'actualitzaran en recarregar." + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies" +msgstr "Dependències" + +#: tools/editor/dependency_editor.cpp +msgid "Resource" +msgstr "Recurs" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp +msgid "Path" +msgstr "Camí" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "Dependències:" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "Arregla Trencats" + +#: tools/editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "Editor de Dependències" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "Cerca Recurs Reemplaçant:" + +#: tools/editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "Propietaris de:" + +#: tools/editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" +"Els fitxers eliminats son necessaris per a altres recursos.\n" +"Eliminar de totes formes? (No es pot desfer)" + +#: tools/editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Elimina fitxer seleccionats del project? (no es pot desfer)" + +#: tools/editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "Error en carregar:" + +#: tools/editor/dependency_editor.cpp +msgid "Scene failed to load due to missing dependencies:" +msgstr "No s'ha pogut carregar l'escena. Manquen dependències:" + +#: tools/editor/dependency_editor.cpp +msgid "Open Anyway" +msgstr "Obre igualment" + +#: tools/editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "Amb quina acció s'ha de procedir?" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "Arregla Dependències" + +#: tools/editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "Errors de càrrega!" + +#: tools/editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "Eliminar permanentment %d element(s)? (No es pot desfer!)" + +#: tools/editor/dependency_editor.cpp +msgid "Owns" +msgstr "Posseeix" + +#: tools/editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "Recursos Sense Propietat Explícita:" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "Navegador de Recursos Orfes" + +#: tools/editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "Esborra fitxers seleccionats?" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "Esborra" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "Nom no vàlid." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "Caràcters vàlids:" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "" +"Nom no vàlid. No pot coincidir amb noms de classe del motor ja existents." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "" +"Nom no vàlid. No pot coincidir amb noms de tipus integrats ja existents." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "" +"Nom no vàlid. No pot coincidir amb noms de constants globals ja existents." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "Camí no vàlid." + +#: tools/editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "El Fitxer no existeix." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "Fora del camí dels recursos." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "Afegeix AutoCàrrega" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "l'AutoCàrrega '%s' ja existeix!" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "Reanomena AutoCàrrega" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "Commuta les Globals d'AutoCàrrega" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "Mou AutoCàrrega" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "Treure Autocàrrega" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "Activa" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "Reorganitza AutoCàrregues" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "Nom del node:" + +#: tools/editor/editor_autoload_settings.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Name" +msgstr "Nom" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "Singleton" + +#: tools/editor/editor_autoload_settings.cpp +msgid "List:" +msgstr "Llista:" + +#: tools/editor/editor_data.cpp +msgid "Updating Scene" +msgstr "Actualitzant Escena" + +#: tools/editor/editor_data.cpp +msgid "Storing local changes.." +msgstr "Emmagatzemant canvis locals.." + +#: tools/editor/editor_data.cpp +msgid "Updating scene.." +msgstr "Actualitzant escena.." + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "Tria un Directori" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "Tria" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "Enrere" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "Endavant" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "Puja" + +#: tools/editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "Refresca" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "Commuta Fitxers Ocults" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "Commuta Favorit" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "Commuta Mode" + +#: tools/editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "Enfoca Camí" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "Mou Favorit Amunt" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "Mou Favorit Avall" + +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "Favorits:" + +#: tools/editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "Recents:" + +#: tools/editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "Previsualització:" + +#: tools/editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "Escaneja Fonts" + +#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Cerca Ajuda" + +#: tools/editor/editor_help.cpp +msgid "Class List:" +msgstr "Llista de Classes:" + +#: tools/editor/editor_help.cpp +msgid "Search Classes" +msgstr "Cerca Classes" + +#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp +msgid "Class:" +msgstr "Classe:" + +#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "Hereta:" + +#: tools/editor/editor_help.cpp +msgid "Inherited by:" +msgstr "Heretat per:" + +#: tools/editor/editor_help.cpp +msgid "Brief Description:" +msgstr "Descripció breu:" + +#: tools/editor/editor_help.cpp +msgid "Public Methods:" +msgstr "Mètodes públics:" + +#: tools/editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "Elements del Tema de la GUI:" + +#: tools/editor/editor_help.cpp +msgid "Constants:" +msgstr "Constants:" + +#: tools/editor/editor_help.cpp +msgid "Method Description:" +msgstr "Descripció del mètode:" + +#: tools/editor/editor_help.cpp +msgid "Search Text" +msgstr "Cerca Text" + +#: tools/editor/editor_import_export.cpp +msgid "Added:" +msgstr "Afegit:" + +#: tools/editor/editor_import_export.cpp +msgid "Removed:" +msgstr "Eliminat:" + +#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp +msgid "Error saving atlas:" +msgstr "Error en desar atles:" + +#: tools/editor/editor_import_export.cpp +msgid "Could not save atlas subtexture:" +msgstr "No s'ha pogut desar la subtextura de l'atles:" + +#: tools/editor/editor_import_export.cpp +msgid "Storing File:" +msgstr "Emmagatzemant Fitxer:" + +#: tools/editor/editor_import_export.cpp +msgid "Packing" +msgstr "Compressió" + +#: tools/editor/editor_import_export.cpp +msgid "Exporting for %s" +msgstr "Exportació per a %s" + +#: tools/editor/editor_import_export.cpp +msgid "Setting Up.." +msgstr "Instal·lant.." + +#: tools/editor/editor_log.cpp +msgid " Output:" +msgstr " Sortida:" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Importing" +msgstr "Re-Importació" + +#: tools/editor/editor_node.cpp +msgid "Importing:" +msgstr "Importació:" + +#: tools/editor/editor_node.cpp +msgid "Node From Scene" +msgstr "Node de l'Escena" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Error saving resource!" +msgstr "Error en desar recurs!" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Save Resource As.." +msgstr "Desar Recurs com..." + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "I see.." +msgstr "Vaja..." + +#: tools/editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error while saving." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Saving Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Analyzing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Failed to load resource." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Loading Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Params" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Paste Params" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Built-In" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open in Help" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in later in \"Project Settings\" under the " +"'application' category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Script.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Yes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close scene? (Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Please save the scene first." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Translatable Strings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Run Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Open Project Manager? \n" +"(Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "Ugh" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error loading scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Default" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s) or folder(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Fullscreen Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Next tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Inherited Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Goto Prev. Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Recent" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Filter Files.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Convert To.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Translatable Strings.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "MeshLibrary.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "TileSet.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Redo" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Run Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import assets to the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Tools" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export the project to many platforms." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Play" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause the scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stop" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Debug options" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Settings" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Install Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "About" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Alerts when an external resource has changed." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Always" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Save As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Object properties." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Password:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Version:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Start Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Fixed Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp +msgid "Time:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Please wait for scan to complete." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Current scene must be saved to re-import." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Save & Re-Import" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import Changed Resources" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: tools/editor/editor_settings.cpp +msgid "Default (Same as Editor)" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: tools/editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "No bit masks to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must be a complete resource path." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must exist." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Save path is empty!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Import BitMasks" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Target Path:" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Accept" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Bit Mask" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No source font file!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No target font resource!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"Invalid file extension.\n" +"Please use .fnt." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Can't load/process source font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Couldn't save font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Dest Resource:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "The quick brown fox jumps over the lazy dog." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Test:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Options:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Font Import" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"This file is already a Godot font file, please supply a BMFont type file " +"instead." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Failed opening as BMFont file." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font custom source." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "No meshes to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Single Mesh Import" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Source Mesh(es):" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Surface %d" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "No samples to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Import Audio Samples" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Source Sample(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Audio Sample" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "New Clip" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Animation Options" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Flags" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Bake FPS:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Optimizer" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Linear Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angular Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angle" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Clips" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Start(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "End(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Filters" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error importing scene." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import 3D Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source Scene:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Same as Target Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Shared" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Target Texture Folder:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Post-Process Script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Custom Root Node Type:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Auto" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "The Following Files are Missing:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Anyway" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import & Open" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Edited scene has not been saved, open imported scene anyway?" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Importing Scene.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Running Custom Script.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error running post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Can't import a file over itself:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't localize path: %s (already local)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Saving.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "3D Scene Animation" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Uncompressed" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossless (PNG)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossy (WebP)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress (VRAM)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Format" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Compression Quality (WebP):" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Options" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Please specify some files!" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "At least one file needed for Atlas." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Error importing:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Only one file is required for large texture." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Max Texture Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for Atlas (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cell Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Textures (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Base Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 2D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 3D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "2D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "3D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "" +"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " +"the project." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Crop empty space." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Load Source Image" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Slicing" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Inserting" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Saving" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save large texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Build Atlas For:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Loading Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't load image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Converting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cropping Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Blitting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save atlas image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save converted texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid translation source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Column" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No items to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No target path!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translations" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Couldn't import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translation" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Source CSV:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Ignore First Row" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Compress" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Add to Project (engine.cfg)" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Languages:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Translation" +msgstr "" + +#: tools/editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Node" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Invalid animation name!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Animation name already exists!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to copy!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation resource on clipboard!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to edit!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create new animation in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save As" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Target Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Rename" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations.." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters.." +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing %d Triangles:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Light Baker Setup:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing Geometry" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Fixing Lights" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Making BVH" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Light Octree" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Octree Texture" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Transfer to Lightmaps:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Allocating Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Baking Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Post-Processing Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Reset the lightmap octree baking process (start over)." +msgstr "" + +#: tools/editor/plugins/camera_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Pivot" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom (%):" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Expand to Parent" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Reset" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Set.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchor" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set a Value" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap (Pixels):" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Creating Mesh Library" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh.." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image.." +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Set Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Mesh" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Node" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Clear Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Positions:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Fill:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Surface" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: tools/editor/plugins/rich_text_editor_plugin.cpp +msgid "Parse BBCode" +msgstr "" + +#: tools/editor/plugins/sample_editor_plugin.cpp +msgid "Length:" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Open Sample File(s)" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "ERROR: Couldn't load sample!" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Add Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Rename Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Delete Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "16 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "8 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stereo" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Mono" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "File" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_editor.cpp +msgid "New" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Window" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Left" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Right" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Tutorials" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Open https://godotengine.org at tutorials section." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the class hierarchy." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Lighting" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling to %s%%." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Environment" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "No scene selected to instance!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Instance at Cursor" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Could not instance scene!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog.." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default Light" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default sRGB" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Shadeless" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Default Light Normal:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Ambient Light Color:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Up" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Down" +msgstr "" + +#: tools/editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp +msgid "Options" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Have,Many,Several,Options!" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Style" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase selection" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Find tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Error" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Edit Script Options" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Please export outside the project folder!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error exporting project!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error writing the project PCK!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "No exporter for platform '%s' yet." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Include" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Change Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name can't be empty!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Invalid character in group name!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name already exists!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Add Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Delete Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas Preview" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export Settings" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Target" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export to Platform" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export selected resources (including dependencies)." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all resources in the project." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all files in the project directory." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources to Export:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Action" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert text scenes to binary on export." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep Original" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy, WebP)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for RAM (BC/PVRTC/ETC)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert Images (*.png):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy) Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink All Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Formats:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Groups" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Groups:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Disk" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress RAM" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Lossy Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink By:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Preview Atlas" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Filter:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Select None" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Samples" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sample Conversion Mode: (.wav files):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress (RAM - IMA-ADPCM)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sampling Rate Limit (Hz):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trim" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trailing Silence:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Text" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compiled" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Encryption Key (256-bits as hex):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Project PCK" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export.." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Preset:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, the path must exist!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must not exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Couldn't create engine.cfg in project path." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path (Must Exist):" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "That's a BINGO!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Key " +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Axis" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Invalid action (anything goes but '/' or ':')." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Press a Key.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Left Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Right Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Middle Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Up Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Down Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 6" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 7" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 8" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 9" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Axis Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Toggle Persisting" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Error saving settings." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Settings saved OK." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Remapped Path" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Project Settings (engine.cfg)" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +msgid "Property:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Del" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Copy To Platform.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Input Map" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Device:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Localization" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resources:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Locale" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "AutoLoad" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Plugins" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Preset.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "File.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Dir.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Load" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Couldn't load image" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "On" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Set" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Properties:" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Global" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Sections:" +msgstr "" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Afegeix Col.locador de Proprietat (Setter)" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Mètodes públics:" + +#: tools/editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Create New Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Open Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Save Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Resource Tools" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Make Local" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "OK :(" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Ok" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save New Scene As.." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Makes Sense!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Groups" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Connections" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Script" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "" +"This item cannot be made visible because the parent is hidden. Unhide the " +"parent first." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Editable Children" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Load As Placeholder" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Discard Instancing" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear!" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid parent class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid chars:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Parent class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid path!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Could not create script in filesystem." +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "File exists" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Built-In Script" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Create Node Script" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Warning" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Function:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Variable" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Inspector" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Scene Tree:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Object Properties: " +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: tools/editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" + +#~ msgid "" +#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but " +#~ "unsequenced ports were specified." +#~ msgstr "" +#~ "El node personalitzat no té _get_output_port_unsequenced(idx,wmem), però " +#~ "s'han especificat ports sense seqüenciar." diff --git a/tools/translations/cs.po b/tools/translations/cs.po index c3b0532000..bbe2142bcb 100644 --- a/tools/translations/cs.po +++ b/tools/translations/cs.po @@ -2,20 +2,29 @@ # Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community # This file is distributed under the same license as the Godot source code. # -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# Jan 'spl!te' Kondelík <j.kondelik@centrum.cz>, 2016. +# Luděk Novotný <gladosicek@gmail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2016-08-11 15:01+0000\n" +"Last-Translator: Luděk Novotný <gladosicek@gmail.com>\n" +"Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/" +"cs/>\n" "Language: cs\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -25,30 +34,307 @@ msgstr "" #: modules/gdscript/gd_functions.cpp msgid "Not a script with an instance" -msgstr "" +msgstr "Skript nemá instanci" #: modules/gdscript/gd_functions.cpp msgid "Not based on a script" -msgstr "" +msgstr "Není založeno na skriptu" #: modules/gdscript/gd_functions.cpp msgid "Not based on a resource file" -msgstr "" +msgstr "Není založeno na zdrojovém souboru" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "" +msgstr "Neplatná instance slovníkového formátu (chybí @path)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" -msgstr "" +msgstr "Neplatná instance slovníkového formátu (nemohu nahrát skript na @path)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "" +msgstr "Neplatná instance slovníkového formátu (nemohu nahrát skript na @path)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "Neplatná instance slovníku (neplatné podtřídy)" + +#: modules/visual_script/visual_script.cpp +#, fuzzy +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"Uzel zavolal yield bez pracovní paměti. Přečtěte si prosím v dokumentaci, " +"jak správně používat yield!" + +#: modules/visual_script/visual_script.cpp +#, fuzzy +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "Uzel zavolal yield, ale nevrátil stav funkce v první pracovní paměti." + +#: modules/visual_script/visual_script.cpp +#, fuzzy +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"Návratová hodnota musí být přiřazena prvnímu prvku uzlu pracovní paměti. " +"Opravte prosím váš uzel." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "Uzel vrátil neplatnou posloupnost výstupu: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "Nalezen bit posloupnosti ale ne uzel v zásobníku. Nahlaste chybu!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Přetečení zásobníku s hloubkou: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Funkce:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Proměnné:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Signály:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "Jméno není platný identifikátor:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Jméno už je použito jinou funkcí/proměnnou/signálem:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Přejmenovat funkci" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Přejmenovat proměnnou" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Přejmenovat signál" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Přidat funkci" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Přidat proměnnou" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Přidat signál" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Odstranit funkci" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Odstranit proměnnou" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Úprava proměnné:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Odstranit signál" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Úprava signálu:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Přidat uzel" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Přidat uzel" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Přidat uzel (uzly) ze stromu" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Přidat vlastnost getter" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Přidat vlastnost setter" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Upravit" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Základní typ:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Členové:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Dostupné uzly:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Pro úpravu grafu vyber nebo vytvoř funkci" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Zavřít" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Upravit argumenty signálu:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Upravit proměnnou:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Změnit" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Smazat vybraný" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Přepnout breakpoint" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Vyhledat typ uzlu" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Cesta k uzlu:" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "Neplatné jméno vlastnosti." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "Základní objekt není Node!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "Cesta nevede k uzlu!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "Neplatné jméno vlastnosti '%s' v uzlu %s." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": Neplatný argument typu: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Neplatné argumenty: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "Proměnná pro získání nebyla ve skriptu nalezena: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "Proměnná pro nastavení nebyla ve skriptu nalezena: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "Vlastní uzel nemá metodu _step(), takže nelze postupovat grafem." + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." msgstr "" #: scene/2d/animated_sprite.cpp @@ -69,10 +355,14 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" +"CollisionPolygon2D slouží pouze jako kontejner tvarů objektu " +"CollissionObject2D a od něj odvozených uzlů. Použijte ho pouze jako potomka " +"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D a dalších, pro určení " +"jejich tvaru." #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "" +msgstr "Prázdný CollisionPolygon2D nemá žádný efekt na kolizích." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -80,6 +370,10 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" +"CollisionPolygon2D slouží pouze jako kontejner tvarů objektu " +"CollissionObject2D a od něj odvozených uzlů. Použijte ho pouze jako potomka " +"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D a dalších, pro určení " +"jejich tvaru." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -91,12 +385,13 @@ msgstr "" msgid "" "A texture with the shape of the light must be supplied to the 'texture' " "property." -msgstr "" +msgstr "Textura světla musí být nastavena vlastností 'texture'." #: scene/2d/light_occluder_2d.cpp msgid "" "An occluder polygon must be set (or drawn) for this occluder to take effect." msgstr "" +"Polygon stínítka musí být nastaven (nebo namalován), aby stínítko fungovalo." #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" @@ -107,47 +402,61 @@ msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" +"Aby mohl tento uzel fungovat, musí mít vytvořen nebo nastaven zdroj " +"NavigationPolygon. Nastavte prosím vlastnost nebo nakreslete mnohoúhelník." #: scene/2d/navigation_polygon.cpp msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" +"NavigationPolygonInstance musí být dítětem nebo vnoučetem uzlu Navigation2D. " +"Poskytuje pouze data pro navigaci." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" +"Uzel ParallaxLayer funguje pouze když je dítětem uzlu ParallaxBackground." #: scene/2d/particles_2d.cpp msgid "Path property must point to a valid Particles2D node to work." msgstr "" +"Aby ParticleAttractor2D fungoval, musí vlastnost path ukazovat na platný " +"uzel Particles2D." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." -msgstr "" +msgstr "PathFollow2D funguje pouze když je dítětem uzlu Path2D." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." msgstr "" +"Pro zajištění funkčnosti musí vlastnost path ukazovat na platný uzel Node2D." #: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp msgid "" "A SampleLibrary resource must be created or set in the 'samples' property in " "order for SamplePlayer to play sound." msgstr "" +"Zdroj SampleLibrary musí být vytvořen nebo nastaven jako vlastnost " +"'samples', aby mohl SamplePlayer přehrát zvuk." #: scene/2d/sprite.cpp msgid "" "Path property must point to a valid Viewport node to work. Such Viewport " "must be set to 'render target' mode." msgstr "" +"Pro zajištění funkčností musí vlastnost path ukazovat na platný uzel " +"Viewport. Takový Viewport musí být nastaven do módu 'render target'." #: scene/2d/sprite.cpp msgid "" "The Viewport set in the path property must be set as 'render target' in " "order for this sprite to work." msgstr "" +"Aby tento sprite mohl fungovat, Viewport nastavený ve vlastnosti path musí " +"být nastaven do módu 'render target'." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -155,18 +464,27 @@ msgid "" "as parent." msgstr "" +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance neobsahuje zdroj BakedLight." + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" +"CollisionShape pouze poskytuje tvar kolize uzlům odvozeným z " +"CollisionObject. Použijte ho jen jako dítě uzlů Area, StaticBody, RigidBody " +"a KinematicBody, abyste jim dali tvar." #: scene/3d/body_shape.cpp msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it!" msgstr "" +"Aby CollisionShape mohl fungovat, musí mu být poskytnut tvar. Vytvořte mu " +"prosím zdroj tvar!" #: scene/3d/collision_polygon.cpp msgid "" @@ -174,153 +492,167 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" +"CollisionPolygon pouze poskytuje tvar kolize uzlům odvozeným z " +"CollisionObject. Použijte ho jen jako dítě uzlů Area, StaticBody, RigidBody " +"a KinematicBody, abyste jim dali tvar." #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." -msgstr "" +msgstr "Prázdný CollisionPolygon nemá na kolize žádný efekt." #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." msgstr "" +"Aby tento uzel mohl fungovat, musí mít nastaven nebo vytvořen zdroj " +"NavigationMesh." #: scene/3d/navigation_mesh.cpp msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" +"NavigationMeshInstance musí být dítětem nebo vnoučetem uzlu Navigation. " +"Poskytuje pouze data pro navigaci." #: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +"Na každou scénu (nebo skupinu instancovaných scén) je povolen pouze jeden " +"WorldEnvironment." #: scene/3d/spatial_sample_player.cpp msgid "" "A SampleLibrary resource must be created or set in the 'samples' property in " "order for SpatialSamplePlayer to play sound." msgstr "" +"Zdroj SampleLibrary musí být vytvořen nebo nastaven jako vlastnost " +"'samples', aby mohl SpatialSamplePlayer přehrát zvuk." #: scene/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite3D to display frames." msgstr "" +"Zdroj SpriteFrames musí být vytvořen nebo nastaven ve vlastnosti 'Frames', " +"aby mohl AnimatedSprite3D zobrazit rámečky." #: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Cancel" -msgstr "" +msgstr "Zrušit" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" -msgstr "" +msgstr "OK" #: scene/gui/dialogs.cpp msgid "Alert!" -msgstr "" +msgstr "Pozor!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "" +msgstr "Potvrďte prosím..." #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "" +msgstr "Soubor už existuje. Přepsat?" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "Všechny rozpoznatelné" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Files (*)" -msgstr "" +msgstr "Všechny soubory (*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" -msgstr "" +msgstr "Otevřít" #: scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "Otevřít soubor" #: scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "Otevřít soubor(y)" #: scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "" +msgstr "Otevřít složku" #: scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "" +msgstr "Otevřít soubor nebo složku" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_node.cpp #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save" -msgstr "" +msgstr "Uložit" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Save a File" -msgstr "" +msgstr "Uložit soubor" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp msgid "Create Folder" -msgstr "" +msgstr "Vytvořit složku" #: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp #: tools/editor/editor_file_dialog.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp #: tools/editor/script_create_dialog.cpp msgid "Path:" -msgstr "" +msgstr "Cesta:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "Složky a soubory:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/script_editor_debugger.cpp msgid "File:" -msgstr "" +msgstr "Soubor:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Filter:" -msgstr "" +msgstr "Filtr:" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Name:" -msgstr "" +msgstr "Jméno:" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp msgid "Could not create folder." -msgstr "" +msgstr "Nelze vytvořit složku." #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Must use a valid extension." -msgstr "" +msgstr "Je nutné použít platnou příponu." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp msgid "Shift+" -msgstr "" +msgstr "Shift+" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp msgid "Alt+" -msgstr "" +msgstr "Alt+" #: scene/gui/input_action.cpp msgid "Ctrl+" -msgstr "" +msgstr "Ctrl+" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp @@ -329,77 +661,77 @@ msgstr "" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Device" -msgstr "" +msgstr "Zařízení" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Button" -msgstr "" +msgstr "Tlačítko" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Left Button." -msgstr "" +msgstr "Levé tlačítko." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Right Button." -msgstr "" +msgstr "Pravé tlačítko." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Middle Button." -msgstr "" +msgstr "Prostřední tlačítko." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Wheel Up." -msgstr "" +msgstr "Kolečko nahoru." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Wheel Down." -msgstr "" +msgstr "Kolečko dolů." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Axis" -msgstr "" +msgstr "Osa" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" -msgstr "" +msgstr "Vyjmout" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" -msgstr "" +msgstr "Kopírovat" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Paste" -msgstr "" +msgstr "Vložit" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" -msgstr "" +msgstr "Vybrat vše" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp #: tools/editor/plugins/animation_tree_editor_plugin.cpp #: tools/editor/plugins/rich_text_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Clear" -msgstr "" +msgstr "Vyčistit" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" -msgstr "" +msgstr "Zpět" #: scene/gui/popup.cpp msgid "" @@ -407,6 +739,9 @@ msgid "" "functions. Making them visible for editing is fine though, but they will " "hide upon running." msgstr "" +"Popupy budou standardně skryty, dokud nezavoláte popup() nebo některou z " +"popup*() funkcí. I když je jejich zviditelnění pro úpravu v pořádku, za běhu " +"budou skryty." #: scene/main/viewport.cpp msgid "" @@ -415,34 +750,38 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" +"Tento viewport není nastaven jako render target. Pokud chcete jeho obsah " +"zobrazit přímo na obrazovku, musíte ho nastavit jako dítě uzlu Control, aby " +"mohl získat velikost. Jinak ho nastavte jako render target a přiřaďte jeho " +"vnitřní texturu nějakému uzlu k zobrazení." #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Error initializing FreeType." -msgstr "" +msgstr "Chyba při inicializaci FreeType." #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Unknown font format." -msgstr "" +msgstr "Neznámý formát fontu." #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Error loading font." -msgstr "" +msgstr "Chyba nahrávání fontu." #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Invalid font size." -msgstr "" +msgstr "Neplatná velikost fontu." #: tools/editor/animation_editor.cpp msgid "Disabled" -msgstr "" +msgstr "Vypnuto" #: tools/editor/animation_editor.cpp msgid "All Selection" -msgstr "" +msgstr "Všechny vybrané" #: tools/editor/animation_editor.cpp msgid "Move Add Key" @@ -450,72 +789,72 @@ msgstr "" #: tools/editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "" +msgstr "Animace: změna přechodu" #: tools/editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "" +msgstr "Animace: změna transformace" #: tools/editor/animation_editor.cpp msgid "Anim Change Value" -msgstr "" +msgstr "Animace: změna hodnoty" #: tools/editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "" +msgstr "Animace: změna volání" #: tools/editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "" +msgstr "Animace: přidat stopu" #: tools/editor/animation_editor.cpp msgid "Anim Duplicate Keys" -msgstr "" +msgstr "Animace: duplikovat klíče" #: tools/editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "" +msgstr "Posun stopy animace nahoru" #: tools/editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "" +msgstr "Posun stopy animace dolů" #: tools/editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "" +msgstr "Odstranit stopu animace" #: tools/editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "" +msgstr "Změna přechodů na:" #: tools/editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "" +msgstr "Animace: přejmenování stopy" #: tools/editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "" +msgstr "Animace: změna interpolace stopy" #: tools/editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "Animace: změna typu hodnot" #: tools/editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "" +msgstr "Úprava křivky uzlu" #: tools/editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "" +msgstr "Úprava vybraných křivek" #: tools/editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "" +msgstr "Animace: smazat klíče" #: tools/editor/animation_editor.cpp #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "" +msgstr "Duplikovat výběr" #: tools/editor/animation_editor.cpp msgid "Duplicate Transposed" @@ -523,88 +862,88 @@ msgstr "" #: tools/editor/animation_editor.cpp msgid "Remove Selection" -msgstr "" +msgstr "Odstranit výběr" #: tools/editor/animation_editor.cpp msgid "Continuous" -msgstr "" +msgstr "Spojité" #: tools/editor/animation_editor.cpp msgid "Discrete" -msgstr "" +msgstr "Diskrétní" #: tools/editor/animation_editor.cpp msgid "Trigger" -msgstr "" +msgstr "Spoušť" #: tools/editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "" +msgstr "Animace: přidat klíč" #: tools/editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "" +msgstr "Animace: přesunout klíče" #: tools/editor/animation_editor.cpp msgid "Scale Selection" -msgstr "" +msgstr "Změnit měřítko výběru" #: tools/editor/animation_editor.cpp msgid "Scale From Cursor" -msgstr "" +msgstr "Změnit měřítko od kurzoru" #: tools/editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "" +msgstr "Jít k dalšímu kroku" #: tools/editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "" +msgstr "Jít k předchozímu kroku" #: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp msgid "Linear" -msgstr "" +msgstr "Lineární" #: tools/editor/animation_editor.cpp #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Constant" -msgstr "" +msgstr "Konstantní" #: tools/editor/animation_editor.cpp msgid "In" -msgstr "" +msgstr "In" #: tools/editor/animation_editor.cpp msgid "Out" -msgstr "" +msgstr "Out" #: tools/editor/animation_editor.cpp msgid "In-Out" -msgstr "" +msgstr "In-Out" #: tools/editor/animation_editor.cpp msgid "Out-In" -msgstr "" +msgstr "Out-In" #: tools/editor/animation_editor.cpp msgid "Transitions" -msgstr "" +msgstr "Přechody" #: tools/editor/animation_editor.cpp msgid "Optimize Animation" -msgstr "" +msgstr "Optimalizovat animaci" #: tools/editor/animation_editor.cpp msgid "Clean-Up Animation" -msgstr "" +msgstr "Pročistit animaci" #: tools/editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "" +msgstr "Vytvořit NOVOU stopu pro %s a vložit klíč?" #: tools/editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "" +msgstr "Vytvořit %d NOVÝCH stop a vložit klíče?" #: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -613,27 +952,27 @@ msgstr "" #: tools/editor/plugins/particles_editor_plugin.cpp #: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp msgid "Create" -msgstr "" +msgstr "Vytvořit" #: tools/editor/animation_editor.cpp msgid "Anim Create & Insert" -msgstr "" +msgstr "Animace: Vytvořit a vložit" #: tools/editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "" +msgstr "Animace: Vložit stopu a klíč" #: tools/editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "" +msgstr "Animace: vložit klíč" #: tools/editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "" +msgstr "Změnit délku animace" #: tools/editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "" +msgstr "Změnit opakování animace" #: tools/editor/animation_editor.cpp msgid "Anim Create Typed Value Key" @@ -641,91 +980,95 @@ msgstr "" #: tools/editor/animation_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "Animace: vložit" #: tools/editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "" +msgstr "Animace: změnit měřítko klíčů" #: tools/editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "" +msgstr "Animace: přidat stopu volání" #: tools/editor/animation_editor.cpp msgid "Animation zoom." -msgstr "" +msgstr "Přiblížení animace." #: tools/editor/animation_editor.cpp msgid "Length (s):" -msgstr "" +msgstr "Délka (s):" #: tools/editor/animation_editor.cpp msgid "Animation length (in seconds)." -msgstr "" +msgstr "Délka animace (v sekundách)." #: tools/editor/animation_editor.cpp msgid "Step (s):" -msgstr "" +msgstr "Krok (s):" #: tools/editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." -msgstr "" +msgstr "Krokování kurzoru (v sekundách)." #: tools/editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "" +msgstr "Zapnout/vypnout opakování animace." #: tools/editor/animation_editor.cpp msgid "Add new tracks." -msgstr "" +msgstr "Přidat nové stopy." #: tools/editor/animation_editor.cpp msgid "Move current track up." -msgstr "" +msgstr "Posunout aktuální stopu nahoru." #: tools/editor/animation_editor.cpp msgid "Move current track down." -msgstr "" +msgstr "Posunout aktuální stopu dolů." #: tools/editor/animation_editor.cpp msgid "Remove selected track." -msgstr "" +msgstr "Odstranit vybranou stopu." #: tools/editor/animation_editor.cpp msgid "Track tools" -msgstr "" +msgstr "Nástroje stopy" #: tools/editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "" +msgstr "Kliknutím na klíče zapnete jejich individuální úpravu." #: tools/editor/animation_editor.cpp msgid "Anim. Optimizer" -msgstr "" +msgstr "Optimalizátor animace" #: tools/editor/animation_editor.cpp msgid "Max. Linear Error:" -msgstr "" +msgstr "Maximální lineární chyba:" #: tools/editor/animation_editor.cpp msgid "Max. Angular Error:" -msgstr "" +msgstr "Maximální úhlová chyba:" #: tools/editor/animation_editor.cpp msgid "Max Optimizable Angle:" -msgstr "" +msgstr "Maximální optimalizovatelný úhel:" #: tools/editor/animation_editor.cpp msgid "Optimize" -msgstr "" +msgstr "Optimalizuj" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "Pro úpravu animací vyberte ze stromu scény uzel AnimationPlayer." #: tools/editor/animation_editor.cpp msgid "Key" -msgstr "" +msgstr "Klíč" #: tools/editor/animation_editor.cpp msgid "Transition" -msgstr "" +msgstr "Přechod" #: tools/editor/animation_editor.cpp msgid "Scale Ratio:" @@ -733,11 +1076,11 @@ msgstr "" #: tools/editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "" +msgstr "Ze kterého uzlu volej funkce?" #: tools/editor/animation_editor.cpp msgid "Remove invalid keys" -msgstr "" +msgstr "Odstranit neplatné klíče" #: tools/editor/animation_editor.cpp msgid "Remove unresolved and empty tracks" @@ -745,170 +1088,160 @@ msgstr "" #: tools/editor/animation_editor.cpp msgid "Clean-up all animations" -msgstr "" +msgstr "Pročistit všechny animace" #: tools/editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "" +msgstr "Pročistit animaci (NELZE VZÍT ZPĚT!)" #: tools/editor/animation_editor.cpp msgid "Clean-Up" -msgstr "" +msgstr "Pročistit" #: tools/editor/array_property_edit.cpp msgid "Resize Array" -msgstr "" +msgstr "Změnit velikost pole" #: tools/editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "" +msgstr "Změnit typ hodnot pole" #: tools/editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "" +msgstr "Změnit hodnotu pole" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" -msgstr "" +msgstr "Hledat:" #: tools/editor/asset_library_editor_plugin.cpp msgid "Sort:" -msgstr "" +msgstr "Řadit:" #: tools/editor/asset_library_editor_plugin.cpp msgid "Reverse" -msgstr "" +msgstr "Naopak" #: tools/editor/asset_library_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Category:" -msgstr "" +msgstr "Kategorie:" #: tools/editor/asset_library_editor_plugin.cpp msgid "All" -msgstr "" +msgstr "Všechny" #: tools/editor/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "" +msgstr "Web:" #: tools/editor/asset_library_editor_plugin.cpp msgid "Support.." -msgstr "" +msgstr "Podpora.." #: tools/editor/asset_library_editor_plugin.cpp msgid "Official" -msgstr "" +msgstr "Oficiální" #: tools/editor/asset_library_editor_plugin.cpp msgid "Community" -msgstr "" +msgstr "Z komunity" #: tools/editor/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "" +msgstr "Testované" #: tools/editor/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "" +msgstr "ZIP soubor asetů" #: tools/editor/call_dialog.cpp msgid "Method List For '%s':" -msgstr "" +msgstr "Seznam metod '%s':" #: tools/editor/call_dialog.cpp msgid "Call" -msgstr "" - -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "" +msgstr "Volat" #: tools/editor/call_dialog.cpp msgid "Method List:" -msgstr "" +msgstr "Seznam metod:" #: tools/editor/call_dialog.cpp msgid "Arguments:" -msgstr "" +msgstr "Argumenty:" #: tools/editor/call_dialog.cpp msgid "Return:" -msgstr "" +msgstr "Vrátit:" #: tools/editor/code_editor.cpp msgid "Go to Line" -msgstr "" +msgstr "Běž na řádek" #: tools/editor/code_editor.cpp msgid "Line Number:" -msgstr "" +msgstr "Číslo řádku:" #: tools/editor/code_editor.cpp msgid "No Matches" -msgstr "" +msgstr "Žádné shody" #: tools/editor/code_editor.cpp msgid "Replaced %d Ocurrence(s)." -msgstr "" +msgstr "Nahrazeno %d výskytů." #: tools/editor/code_editor.cpp msgid "Replace" -msgstr "" +msgstr "Nahradit" #: tools/editor/code_editor.cpp msgid "Replace All" -msgstr "" +msgstr "Nahradit všechny" #: tools/editor/code_editor.cpp msgid "Match Case" -msgstr "" +msgstr "Rozlišovat malá/velká" #: tools/editor/code_editor.cpp msgid "Whole Words" -msgstr "" +msgstr "Celá slova" #: tools/editor/code_editor.cpp msgid "Selection Only" -msgstr "" +msgstr "Pouze výběr" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" -msgstr "" +msgstr "Hledat" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp msgid "Find" -msgstr "" +msgstr "Najít" #: tools/editor/code_editor.cpp msgid "Next" -msgstr "" +msgstr "Další" #: tools/editor/code_editor.cpp msgid "Replaced %d ocurrence(s)." -msgstr "" +msgstr "Nahrazeno %d výskytů." #: tools/editor/code_editor.cpp msgid "Not found!" -msgstr "" +msgstr "Nenalezeno!" #: tools/editor/code_editor.cpp msgid "Replace By" -msgstr "" +msgstr "Nahradit" #: tools/editor/code_editor.cpp msgid "Case Sensitive" @@ -920,27 +1253,41 @@ msgstr "" #: tools/editor/code_editor.cpp msgid "Prompt On Replace" -msgstr "" +msgstr "Potvrzovat nahrazení" #: tools/editor/code_editor.cpp msgid "Skip" -msgstr "" +msgstr "Přeskočit" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Přiblížit" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Oddálit" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Obnovit původní přiblížení" #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" -msgstr "" +msgstr "Řádek:" #: tools/editor/code_editor.cpp msgid "Col:" -msgstr "" +msgstr "Sloupec:" #: tools/editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "" +msgstr "Je nutné zadat metodu v cílovém uzlu!" #: tools/editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "" +msgstr "Připojit k uzlu:" #: tools/editor/connections_dialog.cpp #: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp @@ -948,129 +1295,139 @@ msgstr "" #: tools/editor/plugins/theme_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Add" -msgstr "" +msgstr "Přidat" #: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp #: tools/editor/plugins/animation_tree_editor_plugin.cpp #: tools/editor/plugins/theme_editor_plugin.cpp #: tools/editor/project_manager.cpp msgid "Remove" -msgstr "" +msgstr "Odebrat" #: tools/editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "" +msgstr "Přidat další argument volání:" #: tools/editor/connections_dialog.cpp msgid "Extra Call Arguments:" -msgstr "" +msgstr "Další argumenty volání:" #: tools/editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "" +msgstr "Cesta k uzlu:" #: tools/editor/connections_dialog.cpp msgid "Make Function" -msgstr "" +msgstr "Vytvořit funkci" #: tools/editor/connections_dialog.cpp msgid "Deferred" -msgstr "" +msgstr "Odloženě" #: tools/editor/connections_dialog.cpp msgid "Oneshot" -msgstr "" +msgstr "Jednorázově" #: tools/editor/connections_dialog.cpp msgid "Connect" -msgstr "" +msgstr "Připojit" #: tools/editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "" +msgstr "Připojit '%s' k '%s'" #: tools/editor/connections_dialog.cpp msgid "Connecting Signal:" -msgstr "" +msgstr "Připojuji signál:" #: tools/editor/connections_dialog.cpp msgid "Create Subscription" -msgstr "" +msgstr "Vytvořit odběr" #: tools/editor/connections_dialog.cpp msgid "Connect.." -msgstr "" +msgstr "Připojit.." #: tools/editor/connections_dialog.cpp #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Disconnect" -msgstr "" +msgstr "Odpojit" #: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp msgid "Signals" -msgstr "" +msgstr "Signály" #: tools/editor/create_dialog.cpp msgid "Create New" -msgstr "" +msgstr "Vytvořit nový" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" +msgstr "Shody:" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" msgstr "" #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "" +msgstr "Hledat náhradu za:" #: tools/editor/dependency_editor.cpp msgid "Dependencies For:" -msgstr "" +msgstr "Závislosti na:" #: tools/editor/dependency_editor.cpp msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" +"Scéna '%s' se právě upravuje.\n" +"Změny se projeví po opětovném načtení." #: tools/editor/dependency_editor.cpp msgid "" "Resource '%s' is in use.\n" "Changes will take effect when reloaded." msgstr "" +"Zdroj '%s' se právě používá.\n" +"Změny se projeví po opětovném načtení." #: tools/editor/dependency_editor.cpp msgid "Dependencies" -msgstr "" +msgstr "Závislosti" #: tools/editor/dependency_editor.cpp msgid "Resource" -msgstr "" +msgstr "Zdroj" #: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp #: tools/editor/project_manager.cpp tools/editor/project_settings.cpp msgid "Path" -msgstr "" +msgstr "Cesta" #: tools/editor/dependency_editor.cpp msgid "Dependencies:" -msgstr "" +msgstr "Závislosti:" #: tools/editor/dependency_editor.cpp msgid "Fix Broken" -msgstr "" +msgstr "Opravit nefunkční" #: tools/editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "" +msgstr "Editor závislostí" #: tools/editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "" +msgstr "Hledat náhradní zdroj:" #: tools/editor/dependency_editor.cpp msgid "Owners Of:" -msgstr "" +msgstr "Vlastníci:" #: tools/editor/dependency_editor.cpp msgid "" @@ -1078,42 +1435,44 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" +"Soubory ke smazání potřebují jiné zdroje ke své činnosti.\n" +"Přesto je chcete smazat? (nelze vrátit zpět)" #: tools/editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" -msgstr "" +msgstr "Odebrat vybrané soubory z projektu? (nelze vrátit zpět)" #: tools/editor/dependency_editor.cpp msgid "Error loading:" -msgstr "" +msgstr "Chyba při načítání:" #: tools/editor/dependency_editor.cpp msgid "Scene failed to load due to missing dependencies:" -msgstr "" +msgstr "Scénu se nepodařilo načíst kvůli chybějícím závislostem:" #: tools/editor/dependency_editor.cpp msgid "Open Anyway" -msgstr "" +msgstr "Přesto otevřít" #: tools/editor/dependency_editor.cpp msgid "Which action should be taken?" -msgstr "" +msgstr "Jaká akce by se měla provést?" #: tools/editor/dependency_editor.cpp msgid "Fix Dependencies" -msgstr "" +msgstr "Opravit závislosti" #: tools/editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "" +msgstr "Chyby při načítání!" #: tools/editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "" +msgstr "Permanentně smazat %d položek? (nelze vrátit zpět!)" #: tools/editor/dependency_editor.cpp msgid "Owns" -msgstr "" +msgstr "Vlastní" #: tools/editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" @@ -1121,61 +1480,64 @@ msgstr "" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp msgid "Orphan Resource Explorer" -msgstr "" +msgstr "Průzkumník sirotků zdrojů" #: tools/editor/dependency_editor.cpp msgid "Delete selected files?" -msgstr "" +msgstr "Odstranit vybrané soubory?" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" -msgstr "" +msgstr "Odstranit" #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "" +msgstr "Neplatný název." #: tools/editor/editor_autoload_settings.cpp msgid "Valid characters:" -msgstr "" +msgstr "Platné znaky:" #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." -msgstr "" +msgstr "Neplatný název. Nesmí kolidovat s existující názvem třídy enginu." #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing buit-in type name." msgstr "" +"Neplatný název. Nesmí kolidovat s existujícím jménem zabudovaného typu." #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing global constant name." msgstr "" +"Neplatný název. Nesmí kolidovat s existujícím názvem globální konstanty." #: tools/editor/editor_autoload_settings.cpp msgid "Invalid Path." -msgstr "" +msgstr "Neplatná cesta." #: tools/editor/editor_autoload_settings.cpp msgid "File does not exist." -msgstr "" +msgstr "Soubor neexistuje." #: tools/editor/editor_autoload_settings.cpp msgid "Not in resource path." -msgstr "" +msgstr "Není v cestě ke zdroji." #: tools/editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "" +msgstr "Přidat AutoLoad" #: tools/editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" -msgstr "" +msgstr "Autoload '%s' už existuje!" #: tools/editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "" +msgstr "Přejmenovat AutoLoad" #: tools/editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" @@ -1276,7 +1638,7 @@ msgstr "" msgid "Move Favorite Down" msgstr "" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "" @@ -1289,10 +1651,6 @@ msgid "Preview:" msgstr "" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "" @@ -1330,25 +1688,13 @@ msgid "Public Methods:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "" @@ -1765,7 +2111,7 @@ msgstr "" msgid "TileSet.." msgstr "" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "" @@ -2176,6 +2522,90 @@ msgstr "" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -3131,10 +3561,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "" @@ -3198,8 +3624,9 @@ msgid "Paste Pose" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" -msgstr "" +#, fuzzy +msgid "Select Mode" +msgstr "Vybrat vše" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -3218,13 +3645,11 @@ msgid "Alt+RMB: Depth list selection" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" +msgid "Move Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +msgid "Rotate Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3259,14 +3684,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "" @@ -3323,14 +3740,6 @@ msgid "View" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "" @@ -4028,6 +4437,10 @@ msgid "Save All" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "" @@ -4048,194 +4461,186 @@ msgid "Save Theme As" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" +msgid "Close Docs" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" +msgid "Debug" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" +#: tools/editor/script_editor_debugger.cpp +msgid "Break" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" +msgid "Keep Debugger Open" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find.." +msgid "Window" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Next" +msgid "Move Left" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" +msgid "Move Right" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." +msgid "Tutorials" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." +msgid "Open https://godotengine.org at tutorials section." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." +msgid "Classes" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Debug" +msgid "Search the class hierarchy." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" +msgid "Search the reference documentation." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" +msgid "Go to previous edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" +msgid "Go to next edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" +msgid "Create Script" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Reload" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Break" +msgid "Resave" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp -msgid "Continue" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Keep Debugger Open" +msgid "Debugger" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Window" +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Left" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Right" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Tutorials" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Open https://godotengine.org at tutorials section." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Classes" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the reference documentation." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to previous edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to next edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Create Script" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"The following files are newer on disk.\n" -"What action should be taken?:" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Reload" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Resave" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Debugger" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" msgstr "" #: tools/editor/plugins/shader_editor_plugin.cpp @@ -4499,6 +4904,14 @@ msgid "Could not instance scene!" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "" @@ -5313,11 +5726,11 @@ msgid "Unnamed Project" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "" #: tools/editor/project_manager.cpp @@ -5325,6 +5738,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "" @@ -5341,6 +5760,10 @@ msgid "Scan" msgstr "" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "" @@ -5632,6 +6055,16 @@ msgstr "" msgid "Sections:" msgstr "" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Přidat vlastnost setter" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Vybrat vše" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "" @@ -5705,6 +6138,10 @@ msgid "No parent to instance a child at." msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "" @@ -5833,6 +6270,11 @@ msgid "Save Branch as Scene" msgstr "" #: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete (No Confirm)" +msgstr "Potvrďte prosím..." + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "" @@ -5842,6 +6284,10 @@ msgid "" "exists." msgstr "" +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5904,90 +6350,6 @@ msgstr "" msgid "Select a Node" msgstr "" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "" diff --git a/tools/translations/da.po b/tools/translations/da.po new file mode 100644 index 0000000000..640babcf07 --- /dev/null +++ b/tools/translations/da.po @@ -0,0 +1,6596 @@ +# Danish translation of the Godot Engine editor +# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community +# This file is distributed under the same license as the Godot source code. +# +# David Lamhauge <davidlamhauge@gmail.com>, 2016. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2016-08-27 07:06+0000\n" +"Last-Translator: David Lamhauge <davidlamhauge@gmail.com>\n" +"Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/" +"godot/da/>\n" +"Language: da\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.8-dev\n" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "Ugyldigt type argument til convert(), brug TYPE_* konstanter." + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "Ikke nok bytes til afkodning af bytes, eller ugyldigt format." + +#: modules/gdscript/gd_functions.cpp +msgid "step argument is zero!" +msgstr "trin argument er nul!" + +#: modules/gdscript/gd_functions.cpp +msgid "Not a script with an instance" +msgstr "Ikke et script med en instans" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a script" +msgstr "Ikke baseret på et script" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a resource file" +msgstr "Ikke baseret på en ressource fil" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "Ugyldig instans ordbogs format (mangler @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "Ugyldig instans ordbogs format (kan ikke indlæse script ved @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "Ugyldig forekomst ordbog format (ugyldigt script på @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "Ugyldig forekomst ordbog (ugyldige underklasser)" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"En node yielded uden arbejdshukommelse, læs venligst dokumenterne for at se " +"hvordan man yielder rigtigt!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"Node givet, men returnerede ikke en funktion tilstand i den første " +"arbejdshukommelse." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"Returværdien skal tildeles første element af nodens arbejdshukommelse! Fix " +"din node venligst." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "Node returnerede en ugyldig sekvens output: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "Fundet sekvens bit men ikke noden i stakken, reporter bug!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Stakoverløb med stak dybde: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Funktioner:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Variable:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Signaler:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "Navnet er ikke et gyldigt id:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Navnet allerede bruges af en anden func/var/signal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Omdøb Funktion" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Omdøbe variablen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Omdøb Signal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Tilføj Funktion" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Tilføj variabel" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Tilføj Signal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Fjern Funktion" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Fjern Variabel" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Redigerer Variabel:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Fjern Signal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Redigerer Signal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Tilføj Node" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Tilføj Node" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Tilføj Node(r) fra Tree" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Tilføj Getter Egenskab" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Tilføj Setter Egenskab" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Rediger" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Basis Type:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Medlemmer:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Tilgængelige Noder:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Vælg eller Opret en funktion til at redigere graf" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Luk" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Rediger Signal argumenter:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Rediger Variabel:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Skift" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Slet Valgte" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Skift/Toggle Breakpoint" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Find Node Type" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Sti til Node:" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "Input type ikke iterabel: " + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "Iterator blev ugyldig" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "Iterator blev ugyldig: " + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "Ugyldigt index egenskabsnavn." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "Base-objekt er ikke en Node!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "Stien fører ikke til Node!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "Ugyldigt indeks egenskabsnavn '%s' i noden %s." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": Ugyldigt argument af typen: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Ugyldige argumenter: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "VariableGet blev ikke fundet i scriptet: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "VariableSet blev ikke fundet i scriptet: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" +"Brugerdefinerede node har ingen _step() metode, kan ikke behandle graf." + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" +"Ugyldig retur værdi fra _step(), skal være heltal (seq ud), eller en streng " +"(fejl)." + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" +"En SpriteFrames ressource skal oprettes eller angives i egenskaben 'Frames' " +"for at AnimatedSprite kan vise frames." + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" +"Kun et synligt CanvasModulate er tilladt pr. scene (eller et sæt af " +"instanserede scener). Den første vil blive brugt, mens resten vil blive " +"ignoreret." + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionPolygon2D tjener kun til at give en kollisionsfigur til et " +"CollisionObject2D afledte node. Du skal kun bruge det som et barn af Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. til at give dem en form." + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "En tom CollisionPolygon2D har ingen effekt på kollision." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionShape2D tjener kun til at give en kollision figur til en " +"CollisionObject2D afledte node. Du skal kun bruge det som et barn af Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. til at give dem en form." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" +"En figur skal gives CollisionShape2D for at det fungerer. Opret venligst en " +"figur ressource for den!" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "En tekstur med formen på lyset skal gives til egenskaben 'teksture'." + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" +"En occluder polygon skal angives (eller tegnes) for at denne occluder træder " +"i kraft." + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "Occluder polygon for denne occluder er tom. Tegn venligst en polygon!" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" +"En NavigationPolygon ressource skal sættes eller laves for at denne node kan " +"virke. Sæt venligst en egenskab eller tegn en polygon." + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" +"NavigationPolygonInstance skal være et barn eller barnebarn til en " +"Navigation2D node. Det giver kun navigationsdata." + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" +"ParallaxLayer node virker kun, når den angives som barn af en " +"ParallaxBackground node." + +#: scene/2d/particles_2d.cpp +msgid "Path property must point to a valid Particles2D node to work." +msgstr "Egenskaben Path skal pege på en gyldig Particles2D node for at virke." + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" +"PathFollow2D virker kun, når den angives som et barn af en Path2D node." + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "Egenskaben Path skal pege på en gyldig Node2D node for at virke." + +#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SamplePlayer to play sound." +msgstr "" +"En SampleLibrary ressource skal oprettes eller angives i egenskaben " +"'samples' for at SamplePlayer kan afspille lyd." + +#: scene/2d/sprite.cpp +msgid "" +"Path property must point to a valid Viewport node to work. Such Viewport " +"must be set to 'render target' mode." +msgstr "" +"Egenskaben Path skal pege på en gyldig Viewport node for at virke. Sådan en " +"Viewport skal indstilles til 'render target' tilstand." + +#: scene/2d/sprite.cpp +msgid "" +"The Viewport set in the path property must be set as 'render target' in " +"order for this sprite to work." +msgstr "" +"Viewport angivet i egenskaben path skal indstilles som 'render target' for " +"at denne sprite kan virke." + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" +"VisibilityEnable2D fungerer bedst, når det bruges med den redigerede " +"scenerod direkte som parent." + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance indeholder ikke en BakedLight ressource." + +#: scene/3d/body_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" +"CollisionShape tjener kun til at give en kollision figur til en " +"CollisionObject afledte node. Du skal kun bruge det som et barn af Area, " +"StaticBody, RigidBody, KinematicBody, etc. til at give dem en form." + +#: scene/3d/body_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" +"En figur skal gives for at CollisionShape fungerer. Opret en figur ressource " +"til det!" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" +"CollisionPolygon tjener kun til at give en kollision figur til en " +"CollisionObject afledte node. Du skal kun bruge det som et barn af Area, " +"StaticBody, RigidBody, KinematicBody, etc. til at give dem en form." + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "En tom CollisionPolygon har ingen effekt på kollision." + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" +"En NavigationMesh ressource skal laves eller oprettes for at denne node kan " +"fungere." + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" +"NavigationMeshInstance skal være et barn eller barnebarn til en Navigation " +"node. Det giver kun navigationsdata." + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" +"Kun én WorldEnvironment er tilladt pr. scene (eller et sæt af instanserede " +"scener)." + +#: scene/3d/spatial_sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SpatialSamplePlayer to play sound." +msgstr "" +"En SampleLibrary ressource skal oprettes eller angives i egenskaben " +"'samples' for at SpatialSamplePlayer kan afspille lyd." + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" +"En SpriteFrames ressource skal oprettes eller angivets i egenskaben 'Frames' " +"for at AnimatedSprite3D kan vise frames." + +#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Cancel" +msgstr "Annuller" + +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp +msgid "OK" +msgstr "Ok" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "Advarsel!" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "Bekræft venligst..." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "Filen findes, overskrives?" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Recognized" +msgstr "Alle Genkendte" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Files (*)" +msgstr "Alle filer (*)" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Open" +msgstr "Åben" + +#: scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "Åben en Fil" + +#: scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "Åben fil(er)" + +#: scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "Åbn en mappe" + +#: scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "Åbne en fil eller mappe" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save" +msgstr "Gem" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Save a File" +msgstr "Gem en fil" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Create Folder" +msgstr "Opret mappe" + +#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/editor_file_dialog.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Path:" +msgstr "Sti:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Directories & Files:" +msgstr "Mapper & filer:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "File:" +msgstr "Fil:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Filter:" +msgstr "Filter:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Name:" +msgstr "Navn:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Could not create folder." +msgstr "Kunne ikke oprette mappe." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Must use a valid extension." +msgstr "Skal bruge en gyldig udvidelse." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "Shift+" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "Alt +" + +#: scene/gui/input_action.cpp +msgid "Ctrl+" +msgstr "CTRL +" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Meta+" +msgstr "Meta +" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Device" +msgstr "Enhed" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Button" +msgstr "Knap" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Left Button." +msgstr "Venstre knap." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Right Button." +msgstr "Højre knap." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Middle Button." +msgstr "Midterste knap." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Up." +msgstr "Hjulet op." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Down." +msgstr "Hjulet ned." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Axis" +msgstr "Akse" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Cut" +msgstr "Cut" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Copy" +msgstr "Kopier" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Paste" +msgstr "Indsæt" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "Select All" +msgstr "Vælg alle" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/rich_text_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Clear" +msgstr "Clear" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Undo" +msgstr "Fortryd" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" +"Popups er skjulte som standard, medmindre du kalder popup() eller nogen af " +"popup*() funktionerne. At gøre dem synlige for redigering er fint, men de " +"bliver skjult under afvikling." + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" +"Denne viewport er ikke angivet som render target. Hvis du har tænkt dig for " +"at vise dens indhold direkte til skærmen, gør det til et barn af Control, så " +"den kan opnå en størrelse. Ellers gør den til en RenderTarget og tildel dens " +"indre textur til en node så den kan vises." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error initializing FreeType." +msgstr "Fejl under initialisering af FreeType." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Unknown font format." +msgstr "Ukendt skrifttypeformat." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error loading font." +msgstr "Error loading skrifttype." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font size." +msgstr "Ugyldig skriftstørrelse." + +#: tools/editor/animation_editor.cpp +msgid "Disabled" +msgstr "Deaktiveret" + +#: tools/editor/animation_editor.cpp +msgid "All Selection" +msgstr "All selection" + +#: tools/editor/animation_editor.cpp +msgid "Move Add Key" +msgstr "Flyt Add Key" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transition" +msgstr "Anim Skift Overgang" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "Anim Skift transformering" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Value" +msgstr "Anim Skift værdi" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Call" +msgstr "Anim Skift Call" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "Anim tilføj spor" + +#: tools/editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "Anim Dubliker Keys" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "Flyt Anim spor op" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "Flyt Anim spor ned" + +#: tools/editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "Fjern Anim spor" + +#: tools/editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "Sæt overgange til:" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "Anim spor Omdøb" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "Anim spor Skift Interpolation" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "Anim spor Skift værdi Mode" + +#: tools/editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "Redigere Node kurve" + +#: tools/editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "Rediger udvalg kurve" + +#: tools/editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "Anim slet Keys" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "Dubler valg" + +#: tools/editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "Duplicate transposed" + +#: tools/editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "Fjern markering" + +#: tools/editor/animation_editor.cpp +msgid "Continuous" +msgstr "Kontinuerlig" + +#: tools/editor/animation_editor.cpp +msgid "Discrete" +msgstr "Diskret" + +#: tools/editor/animation_editor.cpp +msgid "Trigger" +msgstr "Udløser" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "Anim Tilføj Key" + +#: tools/editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "Anim Flyt Keys" + +#: tools/editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "Skalering Valg" + +#: tools/editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "Skaler fra Cursor" + +#: tools/editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "Goto næste skridt" + +#: tools/editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "Goto forrige trin" + +#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp +msgid "Linear" +msgstr "Lineær" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "Konstant" + +#: tools/editor/animation_editor.cpp +msgid "In" +msgstr "I" + +#: tools/editor/animation_editor.cpp +msgid "Out" +msgstr "Ud" + +#: tools/editor/animation_editor.cpp +msgid "In-Out" +msgstr "Ind-Ud" + +#: tools/editor/animation_editor.cpp +msgid "Out-In" +msgstr "Out-in" + +#: tools/editor/animation_editor.cpp +msgid "Transitions" +msgstr "Overgange" + +#: tools/editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "Optimer Animation" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "Clean-up Animation" + +#: tools/editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "Oprette nye spor til %s og indsætte key?" + +#: tools/editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "Oprette %d nye numre og indsætte nøgler?" + +#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/particles_editor_plugin.cpp +#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp +msgid "Create" +msgstr "Opret" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "Anim opret & indsæt" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "Anim Indsæt spor & key" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "Anim Indsæt key" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "Ændre Anim Len" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "Ændre Anim løkke" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "Anim opret indtastet Value key" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert" +msgstr "Anim Indsæt" + +#: tools/editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "Anim Skaler keys" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "Anim tilføj Call Track" + +#: tools/editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "Animation Zoom." + +#: tools/editor/animation_editor.cpp +msgid "Length (s):" +msgstr "Længde (s):" + +#: tools/editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "Animation Længde (i sekunder)." + +#: tools/editor/animation_editor.cpp +msgid "Step (s):" +msgstr "Trin (s):" + +#: tools/editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "Cursor trin snap (i sekunder)." + +#: tools/editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "Aktiver/Deaktiver løkker i animation." + +#: tools/editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "Tilføje nye tracks." + +#: tools/editor/animation_editor.cpp +msgid "Move current track up." +msgstr "Flyt aktuelle spor op." + +#: tools/editor/animation_editor.cpp +msgid "Move current track down." +msgstr "Flyt aktuelle spor ned." + +#: tools/editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "Fjern markerede spor." + +#: tools/editor/animation_editor.cpp +msgid "Track tools" +msgstr "Spor værktøjer" + +#: tools/editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "Aktivere redigering af individuelle keys ved at klikke på dem." + +#: tools/editor/animation_editor.cpp +msgid "Anim. Optimizer" +msgstr "Anim. optimizer" + +#: tools/editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "Max. Lineær fejl:" + +#: tools/editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "Max. Azimutal fejl:" + +#: tools/editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "Max optimerbar vinkel:" + +#: tools/editor/animation_editor.cpp +msgid "Optimize" +msgstr "Optimer" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "Vælg en AnimationPlayer fra Scene Tree for at redigere animationer." + +#: tools/editor/animation_editor.cpp +msgid "Key" +msgstr "Key/Nøgle" + +#: tools/editor/animation_editor.cpp +msgid "Transition" +msgstr "Overgang" + +#: tools/editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "Skala forholdet:" + +#: tools/editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "Kald funktioner i hvilken Node?" + +#: tools/editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "Fjerne ugyldige keys" + +#: tools/editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "Fjerne uløste og tomme spor" + +#: tools/editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "Clean-up alle animationer" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "Clean-Up Animation(-er) (ingen FORTRYD!)" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up" +msgstr "Clean-up" + +#: tools/editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "Ændre størrelsen på Array" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "Skift Array værditype" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "Ændre Array-værdi" + +#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Søgning:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Sorter:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Omvendt" + +#: tools/editor/asset_library_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Category:" +msgstr "Kategori:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Alle" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Websted:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Støtte..." + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Officiel" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Fællesskabet" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Tester" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Assets zipfil" + +#: tools/editor/call_dialog.cpp +msgid "Method List For '%s':" +msgstr "Metode liste For '%s':" + +#: tools/editor/call_dialog.cpp +msgid "Call" +msgstr "Kald" + +#: tools/editor/call_dialog.cpp +msgid "Method List:" +msgstr "Metode liste:" + +#: tools/editor/call_dialog.cpp +msgid "Arguments:" +msgstr "Argumenter:" + +#: tools/editor/call_dialog.cpp +msgid "Return:" +msgstr "Tilbage:" + +#: tools/editor/code_editor.cpp +msgid "Go to Line" +msgstr "Gå til linje" + +#: tools/editor/code_editor.cpp +msgid "Line Number:" +msgstr "Linjenummer:" + +#: tools/editor/code_editor.cpp +msgid "No Matches" +msgstr "Ingen Match" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d Ocurrence(s)." +msgstr "Erstattede %d tilfælde." + +#: tools/editor/code_editor.cpp +msgid "Replace" +msgstr "Erstat" + +#: tools/editor/code_editor.cpp +msgid "Replace All" +msgstr "Erstat alle" + +#: tools/editor/code_editor.cpp +msgid "Match Case" +msgstr "Match stor/lille" + +#: tools/editor/code_editor.cpp +msgid "Whole Words" +msgstr "Hele ord" + +#: tools/editor/code_editor.cpp +msgid "Selection Only" +msgstr "Kun Valgte" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Search" +msgstr "Søg" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +msgid "Find" +msgstr "Find" + +#: tools/editor/code_editor.cpp +msgid "Next" +msgstr "Næste" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d ocurrence(s)." +msgstr "Erstattede %d tilfælde." + +#: tools/editor/code_editor.cpp +msgid "Not found!" +msgstr "Ikke fundet!" + +#: tools/editor/code_editor.cpp +msgid "Replace By" +msgstr "Erstattes af" + +#: tools/editor/code_editor.cpp +msgid "Case Sensitive" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Backwards" +msgstr "Baglæns" + +#: tools/editor/code_editor.cpp +msgid "Prompt On Replace" +msgstr "Spørg ved Erstat" + +#: tools/editor/code_editor.cpp +msgid "Skip" +msgstr "Spring over" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Zoom ind" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Zoom ud" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Nulstil Zoom" + +#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "Linje:" + +#: tools/editor/code_editor.cpp +msgid "Col:" +msgstr "Kol:" + +#: tools/editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "Metode i target Node skal angives!" + +#: tools/editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "Opret forbindelse til Node:" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Add" +msgstr "Tilføj" + +#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Remove" +msgstr "Fjern" + +#: tools/editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "Tilføje ekstra Call Argument:" + +#: tools/editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "Ekstra call argumenter:" + +#: tools/editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "Sti til Node:" + +#: tools/editor/connections_dialog.cpp +msgid "Make Function" +msgstr "Lav funktion" + +#: tools/editor/connections_dialog.cpp +msgid "Deferred" +msgstr "Udskudt" + +#: tools/editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "OneShot" + +#: tools/editor/connections_dialog.cpp +msgid "Connect" +msgstr "Tilslut" + +#: tools/editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "Tilslut '%s' til '%s'" + +#: tools/editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "Forbindelses signal:" + +#: tools/editor/connections_dialog.cpp +msgid "Create Subscription" +msgstr "Opret abonnement" + +#: tools/editor/connections_dialog.cpp +msgid "Connect.." +msgstr "Forbind..." + +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "Afbryd" + +#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp +msgid "Signals" +msgstr "Signaler" + +#: tools/editor/create_dialog.cpp +msgid "Create New" +msgstr "Opret en ny" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Matches:" +msgstr "Matches:" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "Søg erstatning For:" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "Afhængigheder For:" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" +"Scene '%s' er i øjeblikket ved at blive redigeret.\n" +"Ændringer træder ikke i kraft, medmindre reloaded." + +#: tools/editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" +"Ressource '%s' er i brug.\n" +"Ændringer træder i kraft når genindlæses." + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies" +msgstr "Afhængigheder" + +#: tools/editor/dependency_editor.cpp +msgid "Resource" +msgstr "Ressource" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp +msgid "Path" +msgstr "Sti" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "Afhængigheder:" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "Fix brudt" + +#: tools/editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "Afhængigheds Editor" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Scene failed to load due to missing dependencies:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Open Anyway" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Owns" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Name" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "List:" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating Scene" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Storing local changes.." +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating scene.." +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "" + +#: tools/editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Class List:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Search Classes" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp +msgid "Class:" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Inherited by:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Brief Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Public Methods:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Constants:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Method Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Search Text" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Added:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Removed:" +msgstr "" + +#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp +msgid "Error saving atlas:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Could not save atlas subtexture:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Storing File:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Packing" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Exporting for %s" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Setting Up.." +msgstr "" + +#: tools/editor/editor_log.cpp +msgid " Output:" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Importing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Importing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Node From Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Error saving resource!" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Save Resource As.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "I see.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error while saving." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Saving Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Analyzing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Failed to load resource." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Loading Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Params" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Paste Params" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Built-In" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open in Help" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in later in \"Project Settings\" under the " +"'application' category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Script.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Yes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close scene? (Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Please save the scene first." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Translatable Strings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Run Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Open Project Manager? \n" +"(Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "Ugh" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error loading scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Default" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s) or folder(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Fullscreen Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Next tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Inherited Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Goto Prev. Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Recent" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Filter Files.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Convert To.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Translatable Strings.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "MeshLibrary.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "TileSet.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Redo" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Run Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import assets to the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Tools" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export the project to many platforms." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Play" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause the scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stop" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Debug options" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Settings" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Install Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "About" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Alerts when an external resource has changed." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Always" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Save As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Object properties." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Password:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Version:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Start Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Fixed Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp +msgid "Time:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Please wait for scan to complete." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Current scene must be saved to re-import." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Save & Re-Import" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import Changed Resources" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: tools/editor/editor_settings.cpp +msgid "Default (Same as Editor)" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: tools/editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "No bit masks to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must be a complete resource path." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must exist." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Save path is empty!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Import BitMasks" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Target Path:" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Accept" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Bit Mask" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No source font file!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No target font resource!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"Invalid file extension.\n" +"Please use .fnt." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Can't load/process source font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Couldn't save font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Dest Resource:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "The quick brown fox jumps over the lazy dog." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Test:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Options:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Font Import" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"This file is already a Godot font file, please supply a BMFont type file " +"instead." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Failed opening as BMFont file." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font custom source." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "No meshes to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Single Mesh Import" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Source Mesh(es):" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Surface %d" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "No samples to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Import Audio Samples" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Source Sample(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Audio Sample" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "New Clip" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Animation Options" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Flags" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Bake FPS:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Optimizer" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Linear Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angular Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angle" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Clips" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Start(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "End(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Filters" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error importing scene." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import 3D Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source Scene:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Same as Target Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Shared" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Target Texture Folder:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Post-Process Script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Custom Root Node Type:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Auto" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "The Following Files are Missing:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Anyway" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import & Open" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Edited scene has not been saved, open imported scene anyway?" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Importing Scene.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Running Custom Script.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error running post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Can't import a file over itself:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't localize path: %s (already local)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Saving.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "3D Scene Animation" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Uncompressed" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossless (PNG)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossy (WebP)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress (VRAM)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Format" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Compression Quality (WebP):" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Options" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Please specify some files!" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "At least one file needed for Atlas." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Error importing:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Only one file is required for large texture." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Max Texture Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for Atlas (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cell Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Textures (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Base Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 2D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 3D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "2D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "3D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "" +"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " +"the project." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Crop empty space." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Load Source Image" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Slicing" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Inserting" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Saving" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save large texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Build Atlas For:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Loading Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't load image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Converting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cropping Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Blitting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save atlas image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save converted texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid translation source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Column" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No items to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No target path!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translations" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Couldn't import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translation" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Source CSV:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Ignore First Row" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Compress" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Add to Project (engine.cfg)" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Languages:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Translation" +msgstr "" + +#: tools/editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Node" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Invalid animation name!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Animation name already exists!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to copy!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation resource on clipboard!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to edit!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create new animation in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save As" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Target Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Rename" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations.." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters.." +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing %d Triangles:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Light Baker Setup:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing Geometry" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Fixing Lights" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Making BVH" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Light Octree" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Octree Texture" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Transfer to Lightmaps:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Allocating Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Baking Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Post-Processing Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Reset the lightmap octree baking process (start over)." +msgstr "" + +#: tools/editor/plugins/camera_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Pivot" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom (%):" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Expand to Parent" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Reset" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Set.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchor" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set a Value" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap (Pixels):" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Creating Mesh Library" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh.." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image.." +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Set Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Mesh" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Node" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Clear Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Positions:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Fill:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Surface" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: tools/editor/plugins/rich_text_editor_plugin.cpp +msgid "Parse BBCode" +msgstr "" + +#: tools/editor/plugins/sample_editor_plugin.cpp +msgid "Length:" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Open Sample File(s)" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "ERROR: Couldn't load sample!" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Add Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Rename Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Delete Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "16 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "8 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stereo" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Mono" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "File" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_editor.cpp +msgid "New" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Window" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Left" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Right" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Tutorials" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Open https://godotengine.org at tutorials section." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the class hierarchy." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Lighting" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling to %s%%." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Environment" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "No scene selected to instance!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Instance at Cursor" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Could not instance scene!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog.." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default Light" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default sRGB" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Shadeless" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Default Light Normal:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Ambient Light Color:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Up" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Down" +msgstr "" + +#: tools/editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp +msgid "Options" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Have,Many,Several,Options!" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Style" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase selection" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Find tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Error" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Edit Script Options" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Please export outside the project folder!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error exporting project!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error writing the project PCK!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "No exporter for platform '%s' yet." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Include" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Change Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name can't be empty!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Invalid character in group name!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name already exists!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Add Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Delete Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas Preview" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export Settings" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Target" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export to Platform" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export selected resources (including dependencies)." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all resources in the project." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all files in the project directory." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources to Export:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Action" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert text scenes to binary on export." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep Original" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy, WebP)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for RAM (BC/PVRTC/ETC)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert Images (*.png):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy) Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink All Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Formats:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Groups" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Groups:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Disk" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress RAM" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Lossy Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink By:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Preview Atlas" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Filter:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Select None" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Samples" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sample Conversion Mode: (.wav files):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress (RAM - IMA-ADPCM)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sampling Rate Limit (Hz):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trim" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trailing Silence:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Text" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compiled" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Encryption Key (256-bits as hex):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Project PCK" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export.." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Preset:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, the path must exist!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must not exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Couldn't create engine.cfg in project path." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path (Must Exist):" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "That's a BINGO!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Key " +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Axis" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Invalid action (anything goes but '/' or ':')." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Press a Key.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Left Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Right Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Middle Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Up Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Down Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 6" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 7" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 8" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 9" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Axis Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Toggle Persisting" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Error saving settings." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Settings saved OK." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Remapped Path" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Project Settings (engine.cfg)" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +msgid "Property:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Del" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Copy To Platform.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Input Map" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Device:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Localization" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resources:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Locale" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "AutoLoad" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Plugins" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Preset.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "File.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Dir.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Load" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Couldn't load image" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "On" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Set" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Properties:" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Global" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Sections:" +msgstr "" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Tilføj Setter Egenskab" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Vælg alle" + +#: tools/editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Create New Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Open Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Save Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Resource Tools" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Make Local" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "OK :(" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Ok" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save New Scene As.." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Makes Sense!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Groups" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Connections" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Script" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "" +"This item cannot be made visible because the parent is hidden. Unhide the " +"parent first." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Editable Children" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Load As Placeholder" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Discard Instancing" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear!" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid parent class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid chars:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Parent class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid path!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Could not create script in filesystem." +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "File exists" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Built-In Script" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Create Node Script" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Warning" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Function:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Variable" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Inspector" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Scene Tree:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Object Properties: " +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: tools/editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" + +#~ msgid "" +#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but " +#~ "unsequenced ports were specified." +#~ msgstr "" +#~ "Brugerdefineret node har ingen _get_output_port_unsequenced(idx,wmem), " +#~ "men unsequenced porte blev angivet." diff --git a/tools/translations/de.po b/tools/translations/de.po index 60c3919a97..4b1fb9d166 100644 --- a/tools/translations/de.po +++ b/tools/translations/de.po @@ -2,15 +2,18 @@ # Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community # This file is distributed under the same license as the Godot source code. # +# Alexander Mahr <alex.mahr@gmail.com>, 2016. # Andreas Esau <andreasesau@gmail.com>, 2016. # Andreas Haas <liu.gam3@gmail.com>, 2016. # Andreas Hirschauer <andreas@hirschauer-it.de>, 2016. # Christian Fisch <christian.fiesel@gmail.com>, 2016. # danjo <atze@libra.uberspace.de>, 2016. # hyperglow <greensoma@web.de>, 2016. +# Jan Groß <jan@grossit.de>, 2016. # Oliver Ruehl <oliver@ruehldesign.co>, 2016. # Paul-Vincent Roll <paviro@me.com>, 2016. # Peter Friedland <peter_friedland@gmx.de>, 2016. +# So Wieso <sowieso@dukun.de>, 2016. # Timo Schwarzer <account@timoschwarzer.com>, 2016. # viernullvier <hannes.breul+github@gmail.com>, 2016. # @@ -18,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2016-07-01 21:03+0000\n" -"Last-Translator: Christian Fisch <christian.fiesel@gmail.com>\n" +"PO-Revision-Date: 2016-08-31 15:37+0000\n" +"Last-Translator: So Wieso <sowieso@dukun.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -27,55 +30,345 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.7-dev\n" +"X-Generator: Weblate 2.8\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" +"Ungültiger Parametertyp in convert()-Aufruf, TYPE_*-Konstanten benötigt." #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" +"Nicht genügend Bytes zum dekodieren des Byte-Strings, oder ungültiges Format." #: modules/gdscript/gd_functions.cpp msgid "step argument is zero!" -msgstr "" +msgstr "Schrittargument ist null!" #: modules/gdscript/gd_functions.cpp msgid "Not a script with an instance" -msgstr "" +msgstr "Skript hat keine Instanz" #: modules/gdscript/gd_functions.cpp msgid "Not based on a script" -msgstr "" +msgstr "Nicht auf einem Skript basierend" #: modules/gdscript/gd_functions.cpp -#, fuzzy msgid "Not based on a resource file" -msgstr "Keine Ziel Font Ressource!" +msgstr "Nicht auf einer Resourcendatei basierend" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "" +msgstr "Ungültiges Instanzverzeichnisformat (@path fehlt)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "" +"Ungültiges Instanzverzeichnisformat (Skript in @path kann nicht geladen " +"werden)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "" +msgstr "Ungültiges Instanzverzeichnisformat (ungültiges Skript in @path)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "Ungültiges Instanzverzeichnisformat (ungültige Unterklasse)" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"Ein Node wurde übergeben ohne nötigen Speicher bereitzustellen, korrektes " +"Vorgehen wird in der Dokumentation beschrieben (Stichwort ‚yield‘)!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"Node wurde übergeben, gab aber keinen Funktionszustand am Anfang des Node-" +"Speichers zurück." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"Zurückgegebener Wert muss dem ersten Element im Node-Speicher zugewiesen " +"sein! Bitte entsprechendes Node anpassen." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "Node gab ungültige Sequenzausgabe zurück: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" msgstr "" +"Sequenzbit gefunden aber kein entsprechendes Node auf dem Stack, bitte " +"melden Sie den Bug!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Stack-Overflow mit Stack-Tiefe: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Funktionen:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Variablen:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Signale:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "Name ist kein gültiger Bezeichner:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Name wird schon von anderer Funktion, Variablen oder Signal verwendet:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Funktion umbenennen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Variable umbenennen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Signal umbenennen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Funktion hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Variable hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Signal hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Funktion entfernen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Variable entfernen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "bearbeite Variable:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Signal entfernen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "bearbeite Signal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Node hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Node hier anhängen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Node(s) aus Szenenbaum hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Getter-Eigenschaft hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Setter-Eigenschaft hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Bearbeiten" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Basistyp:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Mitglieder:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Verfügbare Nodes:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" +"Zum bearbeiten des Graphen muss eine Funktion ausgewählt oder erstellt weden" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Schließen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Signalparameter bearbeiten:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Variable bearbeiten:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Ändern" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Ausgewähltes löschen" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Haltepunkt umschalten" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Finde Node-Typ" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "Pose kopieren" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "Erzeuge Node" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Pose einfügen" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "Eingabetyp nicht iterierbar: " + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "Iterator wurde ungültig" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "Iterator wurde ungültig: " + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "Ungültiger Name der Index-Eigenschaft." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "Basis-Objekt ist kein Node!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "Pfad führt nicht zu einem Node!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "Ungültiger Indexeigenschaftsname ‚%s‘ in Node %s." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": Ungültiger Parameter vom Typ: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Ungültige Parameter: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "VariableGet nicht im Skript gefunden: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "VariableSet nicht im Skript gefunden: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" +"Eigens erstelltes Node hat keine _step()-Methode, Graph kann nicht " +"verarbeitet werden." + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" +"Ungültiger Rückgabewert von _step(), muss Integer (für Sequenzausgabe) oder " +"String (für Fehler) sein." #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite to display frames." msgstr "" -"Eine SpriteFrames Ressource muss in der 'Frames' Variable erstellt oder " +"Eine SpriteFrames-Ressource muss in der ‚Frames‘-Eigenschaft erstellt oder " "gesetzt werden, damit AnimatedSprite Einzelbilder darstellen kann." #: scene/2d/canvas_modulate.cpp @@ -83,9 +376,9 @@ msgid "" "Only one visible CanvasModulate is allowed per scene (or set of instanced " "scenes). The first created one will work, while the rest will be ignored." msgstr "" -"Nur ein sichtbares CanvasModulate ist pro Szene (oder ein Satz von " -"instanzierten Szenen) erlaubt. Das zuerst erstellte wird funktionieren, " -"während der Rest ignoriert wird." +"Nur ein sichtbares CanvasModulate-Node ist pro Szene (oder einem Satz von " +"instantiierten Szenen) erlaubt. Der zuerst erstellte wird verwendet, der " +"Rest wird ignoriert." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -93,10 +386,10 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionPolygon2D dient nur dazu, einem CollisionObject2D abgeleiteten " -"Knoten eine Form bereitzustellen. Bitte verwenden Sie es nur als Unterobjekt " -"von Area2D, StaticBody2D, RigidBody2D, KinematicBody2D usw. um ihnen eine " -"Form zu geben." +"CollisionPolygon2D liefert nur eine Kollisionsform für ein von " +"CollisionObject2D abgeleitetes Node. Es kann nur als Unterobjekt von Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D usw. eingehängt werden um diesen " +"eine Form zu geben." #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." @@ -108,9 +401,10 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D definiert eine Kollisionsmaske für von CollisionObject2D " -"abgeleitete Nodes. Benutze es mit Area2D, StaticBody2D, RigidBody2D, " -"KinematicBody2D usw. um eine Form zu definieren." +"CollisionShape2D liefert nur eine Kollisionsform für ein von " +"CollisionObject2D abgeleitetes Node. Es kann nur als Unterobjekt von Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D usw. eingehängt werden um diesen " +"eine Form zu geben." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -125,7 +419,7 @@ msgid "" "A texture with the shape of the light must be supplied to the 'texture' " "property." msgstr "" -"Eine Textur mit der Form des Lichtkegels muss in der Eigenschaft 'texture' " +"Eine Textur mit der Form des Lichtkegels muss in der ‚Texture‘-Eigenschaft " "angegeben werden." #: scene/2d/light_occluder_2d.cpp @@ -138,16 +432,15 @@ msgstr "" #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" msgstr "" -"Das Occluder Polygon für diesen Occlluder ist leer. Bitte zeichne ein " -"Polygon!" +"Das Occluder-Polygon für diesen Occluder ist leer. Bitte zeichne ein Polygon!" #: scene/2d/navigation_polygon.cpp msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" -"Eine NavigationPolygon Ressource muss für diesen Node gesetzt oder erstellt " -"werden, damit er funktioniert. Bitte setze eine Variable oder zeichne ein " +"Eine NavigationPolygon-Ressource muss für dieses Node erstellt oder ihm " +"zugewiesen. Bitte trage die entsprechende Eigenschaft ein oder zeichne ein " "Polygon." #: scene/2d/navigation_polygon.cpp @@ -155,30 +448,31 @@ msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" -"NavigationPolygonInstance muss ein Unterobjekt erster oder zweiter Ordnung " -"unterhalb einer Navigation2D Node sein. Es liefert nur Navigationsdaten." +"Eine NavigationPolygon-Instanz muss ein Unterobjekt erster oder zweiter " +"Ordnung unterhalb eines Navigation2D-Node sein. Sie liefert nur " +"Navigationsdaten." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"Die ParallaxLayer Node funktioniert nur als Unterobjekt einer " -"ParallaxBackground Node." +"Das ParallaxLayer-Node lässt sich nur als Unterobjekt eines " +"ParallaxBackground-Node verwenden." #: scene/2d/particles_2d.cpp msgid "Path property must point to a valid Particles2D node to work." -msgstr "Die Pfad-Variable muss auf einen gültigen Particles2D Node verweisen." +msgstr "Die Pfad-Eigenschaft muss auf ein gültiges Particles2D-Node verweisen." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" -"PathFollow2D funktioniert nur, wenn sie als Unterobjekt eines Path2D Nodes " +"PathFollow2D funktioniert nur, wenn es als Unterobjekt eines Path2D-Nodes " "gesetzt wird." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." msgstr "" -"Die Pfad-Variable muss auf einen gültigen Node2D Node zeigen um zu " +"Die Pfad-Eigenschaft muss auf ein gültiges Node2D-Node zeigen um zu " "funktionieren." #: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp @@ -186,8 +480,8 @@ msgid "" "A SampleLibrary resource must be created or set in the 'samples' property in " "order for SamplePlayer to play sound." msgstr "" -"Eine SampleLibrary Ressource muss in der 'samples' Variable erzeugt oder " -"definiert werden, damit SamplePlayer einen Sound abspielen kann." +"Eine SampleLibrary-Ressource muss unter der Eigenschaft ‚Samples‘ erzeugt " +"oder ausgewählt werden, damit SamplePlayer Ton abspielen kann." #: scene/2d/sprite.cpp msgid "" @@ -202,8 +496,8 @@ msgid "" "The Viewport set in the path property must be set as 'render target' in " "order for this sprite to work." msgstr "" -"Der Viewport der in der Pfad-Variable gesetzt wurde, muss als 'render " -"target' definiert werden, damit das Sprite funktioniert." +"Der Viewport, der in der Pfad-Eigenschaft gesetzt wurde, muss als ‚Render " +"Target‘ definiert sein, damit das Sprite funktioniert." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -211,7 +505,11 @@ msgid "" "as parent." msgstr "" "VisibilityEnable2D funktioniert am besten, wenn es ein Unterobjekt erster " -"Ordnung der bearbeiteten Hauptszene ist." +"Ordnung der bearbeiteten Szene ist." + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance enthält keine BakedLight-Ressource." #: scene/3d/body_shape.cpp msgid "" @@ -219,10 +517,9 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" -"CollisionShape dient nur dazu einer dem CollisionObject abgeleiteten Node " -"eine Kollisionsform bereitzustellen. Bitte nutze es nur als ein Unterobjekt " -"von Area, StaticBody, RigidBody, KinematicBody usw. um diesem eine Form zu " -"geben." +"CollisionShape liefert nur eine Kollisionsform für ein von CollisionObject " +"abgeleitetes Node. Es kann nur als Unterobjekt von Area, StaticBody, " +"RigidBody, KinematicBody usw. eingehängt werden um diesen eine Form zu geben." #: scene/3d/body_shape.cpp msgid "" @@ -238,10 +535,9 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" -"CollisionPolygon liefert nur eine Kollisionsform für eine vom " -"CollisionObject abgeleiteten Node. Bitte nutze es nur als eine Unterobjekt " -"von Area, StaticBody, RigidBody, KinematicBody, usw. um diesen eine Form zu " -"geben." +"CollisionPolygon liefert nur eine Kollisionsform für ein von CollisionObject " +"abgeleitetes Node. Es kann nur als Unterobjekt von Area, StaticBody, " +"RigidBody, KinematicBody usw. eingehängt werden um diesen eine Form zu geben." #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." @@ -258,36 +554,37 @@ msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" -"NavigationMeshinstance muss ein Unterobjekt oder Unterunterobjekt von einem " -"Navigations Node sein. Es liefert nur Navigationsdaten." +"Eine NavigationMesh-Instanz muss ein Unterobjekt erster oder höherer Ordnung " +"eines Navigation-Nodes sein. Es liefert nur Navigationsdaten." #: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" -"Nur ein WorldEnvironment pro Szene oder (instanzierter Szene) ist erlaubt." +"Pro Szene (oder einem Satz von instanzierten Szenen) ist nur ein einziges " +"WorldEnvironment erlaubt." #: scene/3d/spatial_sample_player.cpp msgid "" "A SampleLibrary resource must be created or set in the 'samples' property in " "order for SpatialSamplePlayer to play sound." msgstr "" -"Eine SampleLibrary Ressource muss in der 'samples' Eigenschaft erzeugt oder " -"definiert werden damit SpatialSamplePlayer einen Sound abspielen kann." +"Eine SampleLibrary-Ressource muss unter der ‚Samples‘-Eigenschaft erzeugt " +"oder ausgewählt werden, damit SpatialSamplePlayer Ton abspielen kann." #: scene/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite3D to display frames." msgstr "" -"Eine SpriteFrames Ressource muss in der Eigenschaft 'Frames' erzeugt oder " -"definiert werden, damit AnimatedSprite3D Frames anzeigen kann." +"Eine SpriteFrames-Ressource muss in der ‚Frames‘-Eigenschaft erzeugt oder " +"definiert werden, damit AnimatedSprite3D Einzelbilder anzeigen kann." #: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Cancel" msgstr "Abbrechen" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "OK" @@ -305,7 +602,7 @@ msgstr "Datei existiert bereits. Überschreiben?" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Recognized" -msgstr "Alle bekannten Dateien" +msgstr "Alle bekannte Dateitypen" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Files (*)" @@ -313,8 +610,9 @@ msgstr "Alle Dateien (*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "Öffnen" @@ -388,7 +686,7 @@ msgstr "Eine gültige Datei-Endung muss verwendet werden." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp msgid "Shift+" -msgstr "Shift+" +msgstr "Umschalt+" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp @@ -397,7 +695,7 @@ msgstr "Alt+" #: scene/gui/input_action.cpp msgid "Ctrl+" -msgstr "Ctrl+" +msgstr "Strg+" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp @@ -418,7 +716,7 @@ msgstr "Linke Taste." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Right Button." -msgstr "Rechte Schaltfläche." +msgstr "Rechte Taste." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Middle Button." @@ -437,13 +735,13 @@ msgid "Axis" msgstr "Achse" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "Ausschneiden" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -451,7 +749,7 @@ msgstr "Kopieren" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -459,7 +757,7 @@ msgid "Paste" msgstr "Einfügen" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -473,7 +771,7 @@ msgid "Clear" msgstr "Löschen" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "Rückgängig machen" @@ -496,11 +794,11 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"Dieser Viewport ist nicht als Render-Target gesetzt. Wenn Sie vor haben " -"seinen Inhalt direkt auf dem Bildschirm anzuzeigen, machen Sie es zu einem " -"Kind eines Control-Nodes, damit es eine Größe erben kann. Ansonsten setzen " -"Sie es als Render-Target und weisen Sie der internen Textur einen Knoten zum " -"Anzeigen zu." +"Dieser Viewport ist nicht als Render-Ziel eingestellt. Soll sein Inhalt " +"direkt auf dem Bildschirm angezeigt werden, muss er als Unterobjekt eines " +"Controls eingehängt werden um dessen Größe zu erben. Andernfalls sollte die " +"Eigenschaft ‚Render Target‘ des Viewports aktiviert und seine Textur " +"irgendeinem Node zum Anzeigen zugewiesen werden." #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp @@ -588,11 +886,11 @@ msgstr "Anim Spur ändere Wert Modus" #: tools/editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "Node Kurve editieren" +msgstr "Node Kurve bearbeiten" #: tools/editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "Selektions-Kurve editieren" +msgstr "Selektions-Kurve bearbeiten" #: tools/editor/animation_editor.cpp msgid "Anim Delete Keys" @@ -605,12 +903,11 @@ msgstr "Auswahl duplizieren" #: tools/editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "" +msgstr "Transponiert duplizieren" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Remove Selection" -msgstr "Auswahl einrahmen" +msgstr "Auswahl entfernen" #: tools/editor/animation_editor.cpp msgid "Continuous" @@ -630,15 +927,15 @@ msgstr "Anim Schlüsselszene hinzufügen" #: tools/editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "Animation Bewegungstasten" +msgstr "Schlüsselbilder bewegen" #: tools/editor/animation_editor.cpp msgid "Scale Selection" -msgstr "Skalierung Auswahl" +msgstr "Auswahl skalieren" #: tools/editor/animation_editor.cpp msgid "Scale From Cursor" -msgstr "Skalierung vom Cursor" +msgstr "Vom Cursor skalieren" #: tools/editor/animation_editor.cpp msgid "Goto Next Step" @@ -687,11 +984,11 @@ msgstr "Animation aufräumen" #: tools/editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "Erstelle einen NEUEN Track für %s und füge einen Key ein?" +msgstr "Erstelle eine NEUE Spur für %s und füge ein Schlüsselbild hinzu?" #: tools/editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "Erstelle %d NEUE Tracks und füge Keys ein?" +msgstr "Erstelle %d NEUE Spuren und füge Schlüsselbilder hinzu?" #: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -708,11 +1005,11 @@ msgstr "Animation Erstellen & Einfügen" #: tools/editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "Animation Track & Key Einfügen" +msgstr "Spur & Schlüsselbild einfügen" #: tools/editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "Animation Key Einfügen" +msgstr "Schlüsselbild einfügen" #: tools/editor/animation_editor.cpp msgid "Change Anim Len" @@ -732,11 +1029,11 @@ msgstr "Anim einfügen" #: tools/editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "Animation Skaliere Keys" +msgstr "Skaliere Schlüsselbilder" #: tools/editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "Animation Call Track Einfügen" +msgstr "Aufruf-Spur zu Animation hinzufügen" #: tools/editor/animation_editor.cpp msgid "Animation zoom." @@ -784,8 +1081,7 @@ msgstr "Spur-Werkzeuge" #: tools/editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "" -"Aktiviere das editieren von individuellen Keys in dem auf sie geclickt wird." +msgstr "Aktiviere individuelle Schlüsselbildbearbeitung durch Anklicken." #: tools/editor/animation_editor.cpp msgid "Anim. Optimizer" @@ -808,6 +1104,11 @@ msgid "Optimize" msgstr "Optimieren" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" +"Wähle einen AnimationPlayer aus dem Szenenbaum um Animationen zu bearbeiten." + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "Schlüsselbild" @@ -845,19 +1146,20 @@ msgstr "Aufräumen" #: tools/editor/array_property_edit.cpp msgid "Resize Array" -msgstr "Größe des Feldes ändern" +msgstr "Größe des Arrays ändern" #: tools/editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "Ändere Array Wert Typ" +msgstr "Wertetyp des Arrays ändern" #: tools/editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "Ändere Array Wert" +msgstr "Array-Wert ändern" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "Suche:" @@ -893,15 +1195,15 @@ msgstr "Offiziell" #: tools/editor/asset_library_editor_plugin.cpp msgid "Community" -msgstr "Community" +msgstr "Gemeinschaft" #: tools/editor/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "Testen" +msgstr "Testphase" #: tools/editor/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "ZIP Datei der Projektdaten" +msgstr "Projektdaten als ZIP-Datei" #: tools/editor/call_dialog.cpp msgid "Method List For '%s':" @@ -911,18 +1213,6 @@ msgstr "Methodenliste für '%s':" msgid "Call" msgstr "Aufruf" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "Schließen" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "Methodenliste:" @@ -949,7 +1239,7 @@ msgstr "Keine Übereinstimmungen" #: tools/editor/code_editor.cpp msgid "Replaced %d Ocurrence(s)." -msgstr "%d mal wurde das Vorkommen ersetzt." +msgstr "Suchbegriff wurde %d mal ersetzt." #: tools/editor/code_editor.cpp msgid "Replace" @@ -973,6 +1263,7 @@ msgstr "Nur Auswahl" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -988,7 +1279,7 @@ msgstr "Nächste" #: tools/editor/code_editor.cpp msgid "Replaced %d ocurrence(s)." -msgstr "%d mal wurde das Vorkommen ersetzt." +msgstr "Suchbegriff wurde %d mal ersetzt." #: tools/editor/code_editor.cpp msgid "Not found!" @@ -1014,6 +1305,20 @@ msgstr "Aufforderung beim Ersetzen" msgid "Skip" msgstr "Überspringen" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Vergrößern" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Verkleinern" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Vergrößerung zurücksetzen" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "Zeile:" @@ -1027,9 +1332,8 @@ msgid "Method in target Node must be specified!" msgstr "Methode in Ziel-Node muss angegeben werden!" #: tools/editor/connections_dialog.cpp -#, fuzzy msgid "Connect To Node:" -msgstr "Verbinde Zu Node:" +msgstr "Verbinde mit Node:" #: tools/editor/connections_dialog.cpp #: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp @@ -1048,25 +1352,23 @@ msgstr "Entfernen" #: tools/editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "" +msgstr "Zusätzlichen Aufrufparameter hinzufügen:" #: tools/editor/connections_dialog.cpp -#, fuzzy msgid "Extra Call Arguments:" -msgstr "Argumente:" +msgstr "zusätzliche Aufrufparameter:" #: tools/editor/connections_dialog.cpp -#, fuzzy msgid "Path to Node:" -msgstr "Pfad Zu Node:" +msgstr "Pfad zu Node:" #: tools/editor/connections_dialog.cpp msgid "Make Function" -msgstr "Erstelle Funktion" +msgstr "Funktion erstellen" #: tools/editor/connections_dialog.cpp msgid "Deferred" -msgstr "Ausgesetzt" +msgstr "Verzögert" #: tools/editor/connections_dialog.cpp msgid "Oneshot" @@ -1081,9 +1383,8 @@ msgid "Connect '%s' to '%s'" msgstr "Verbinde '%s' zu '%s'" #: tools/editor/connections_dialog.cpp -#, fuzzy msgid "Connecting Signal:" -msgstr "Verbindungen:" +msgstr "Verbinde Signal:" #: tools/editor/connections_dialog.cpp msgid "Create Subscription" @@ -1107,10 +1408,16 @@ msgid "Create New" msgstr "Neu erstellen" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "Treffer:" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Beschreibung:" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Suche Ersatz für:" @@ -1133,7 +1440,7 @@ msgid "" "Changes will take effect when reloaded." msgstr "" "Ressource '%s' wird momentan benutzt.\n" -"Änderungen werden erst nach neu laden aktiv." +"Änderungen werden erst dann aktiv, nachdem neu geladen wurde." #: tools/editor/dependency_editor.cpp msgid "Dependencies" @@ -1154,15 +1461,15 @@ msgstr "Abhängigkeiten:" #: tools/editor/dependency_editor.cpp msgid "Fix Broken" -msgstr "Repariere Nichtfunktionierende" +msgstr "Defekte reparieren" #: tools/editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "Abhängigkeiten-Editor" +msgstr "Abhängigkeiteneditor" #: tools/editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "Suche Ersetzbare Ressource:" +msgstr "Ersatz-Ressource suchen:" #: tools/editor/dependency_editor.cpp msgid "Owners Of:" @@ -1212,23 +1519,24 @@ msgstr "Entferne %d Datei(en) dauerhaft? (Nicht Wiederherstellbar)" #: tools/editor/dependency_editor.cpp msgid "Owns" -msgstr "Gehört zu" +msgstr "Besitzt" #: tools/editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "Ressource Ohne Direkte Zugehörigkeit:" +msgstr "Ressource ohne direkte Zugehörigkeit:" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp msgid "Orphan Resource Explorer" -msgstr "Ressourcen Explorer Für Verwaiste Dateien" +msgstr "Ressourcenauflistung verwaister Dateien" #: tools/editor/dependency_editor.cpp msgid "Delete selected files?" -msgstr "Ausgewählten Dateien löschen?" +msgstr "Ausgewählte Dateien löschen?" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "Löschen" @@ -1238,38 +1546,41 @@ msgstr "Ungültiger Name." #: tools/editor/editor_autoload_settings.cpp msgid "Valid characters:" -msgstr "" +msgstr "Gültige Zeichen:" #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." msgstr "" +"Ungültiger Name. Darf nicht mit existierenden Klassennamen der Engine " +"übereinstimmen." #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing buit-in type name." msgstr "" +"Ungültiger Name. Darf nicht mit existierenden eingebauten Typnamen " +"übereinstimmen." #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing global constant name." msgstr "" +"Ungültiger Name. Darf nicht mit Namen existierender globaler Konstanten " +"übereinstimmen." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid Path." -msgstr "Ungültiger Pfad!" +msgstr "Ungültiger Pfad." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "File does not exist." -msgstr "Datei existiert" +msgstr "Datei existiert nicht." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." -msgstr "Keine Ziel Font Ressource!" +msgstr "Nicht im Ressourcen-Pfad." #: tools/editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "" +msgstr "Autoload hinzufügen" #: tools/editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" @@ -1277,19 +1588,19 @@ msgstr "Autoload '%s' existiert bereits!" #: tools/editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "" +msgstr "Autoload umbenennen" #: tools/editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "" +msgstr "Autoload-Globals umschalten" #: tools/editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "" +msgstr "Autoload verschieben" #: tools/editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "" +msgstr "Autoload entfernen" #: tools/editor/editor_autoload_settings.cpp msgid "Enable" @@ -1297,11 +1608,11 @@ msgstr "Aktivieren" #: tools/editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "" +msgstr "Autoloads neu anordnen" #: tools/editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "" +msgstr "Node-Name:" #: tools/editor/editor_autoload_settings.cpp #: tools/editor/io_plugins/editor_scene_import_plugin.cpp @@ -1312,11 +1623,11 @@ msgstr "Name" #: tools/editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "" +msgstr "Singleton" #: tools/editor/editor_autoload_settings.cpp msgid "List:" -msgstr "" +msgstr "Liste:" #: tools/editor/editor_data.cpp msgid "Updating Scene" @@ -1340,50 +1651,45 @@ msgstr "Wählen" #: tools/editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "" +msgstr "Zurück" #: tools/editor/editor_file_dialog.cpp msgid "Go Forward" -msgstr "" +msgstr "Vor" #: tools/editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "" +msgstr "Hoch" #: tools/editor/editor_file_dialog.cpp msgid "Refresh" -msgstr "" +msgstr "Aktualisieren" #: tools/editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "" +msgstr "Versteckte Dateien ein- und ausblenden" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Favorite" -msgstr "Favoriten:" +msgstr "Favoriten ein- und ausblenden" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Mode" -msgstr "Autoplay Umschalten" +msgstr "Modus umschalten" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Focus Path" -msgstr "Pfad kopieren" +msgstr "Zu Pfad springen" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" -msgstr "Favoriten:" +msgstr "Favorit nach oben schieben" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" -msgstr "Favoriten:" +msgstr "Favorit nach unten schieben" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "Favoriten:" @@ -1396,16 +1702,12 @@ msgid "Preview:" msgstr "Vorschau:" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "Unterordner kann nicht geöffnet werden:" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" -msgstr "Scanne Quellen" +msgstr "Lese Quellen" #: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "" +msgstr "Hilfe durchsuchen" #: tools/editor/editor_help.cpp msgid "Class List:" @@ -1434,28 +1736,16 @@ msgstr "Kurze Beschreibung:" #: tools/editor/editor_help.cpp msgid "Public Methods:" -msgstr "Public Methoden:" - -#: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "Mitglieder:" +msgstr "Öffentliche Methoden:" #: tools/editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "GUI Theme Einträge:" - -#: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "Signale:" +msgstr "GUI-Theme-Elemente:" #: tools/editor/editor_help.cpp msgid "Constants:" msgstr "Konstanten:" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Beschreibung:" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "Methoden Beschreibung:" @@ -1502,7 +1792,7 @@ msgstr " Ausgabe:" #: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp msgid "Re-Importing" -msgstr "Re-Import" +msgstr "Importiere erneut" #: tools/editor/editor_node.cpp msgid "Importing:" @@ -1530,7 +1820,7 @@ msgstr "Verstehe..." #: tools/editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "Kann Datei zum schreiben nicht öffnen:" +msgstr "Datei kann nicht zum schreiben geöffnet werden:" #: tools/editor/editor_node.cpp msgid "Requested file format unknown:" @@ -1556,8 +1846,8 @@ msgstr "Erzeuge Miniaturansicht" msgid "" "Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." msgstr "" -"Szene konnte nicht gespeichert werden. Wahrscheinliche Abhängigkeiten " -"(Instanzen) sind nicht erfüllt." +"Szene konnte nicht gespeichert werden. Wahrscheinlich werden Abhängigkeiten " +"(Instanzen) nicht erfüllt." #: tools/editor/editor_node.cpp msgid "Failed to load resource." @@ -1565,7 +1855,7 @@ msgstr "Laden der Ressource gescheitert." #: tools/editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "MeshLibrary zum vereinen konnte nicht geladen werden!" +msgstr "MeshLibrary konnte nicht zum vereinen geladen werden!" #: tools/editor/editor_node.cpp msgid "Error saving MeshLibrary!" @@ -1573,7 +1863,7 @@ msgstr "Fehler beim speichern der MeshLibrary!" #: tools/editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "TileSet zum vereinen kann nicht geladen werden!" +msgstr "TileSet konnte nicht zum vereinen geladen werden!" #: tools/editor/editor_node.cpp msgid "Error saving TileSet!" @@ -1581,11 +1871,11 @@ msgstr "Fehler beim speichern des TileSet!" #: tools/editor/editor_node.cpp msgid "Can't open export templates zip." -msgstr "\"Export Templates Zip\" kann nicht geöffnet werden." +msgstr "Exportvorlagen-ZIP-Datei konnte nicht geöffnet werden." #: tools/editor/editor_node.cpp msgid "Loading Export Templates" -msgstr "Lade Export Templates" +msgstr "Lade Exportvorlagen" #: tools/editor/editor_node.cpp msgid "Error trying to save layout!" @@ -1593,7 +1883,7 @@ msgstr "Fehler beim speichern des Layouts!" #: tools/editor/editor_node.cpp msgid "Default editor layout overridden." -msgstr "Standard Editor Layout überschrieben." +msgstr "Standard-Editorlayout überschrieben." #: tools/editor/editor_node.cpp msgid "Layout name not found!" @@ -1601,24 +1891,24 @@ msgstr "Layout Name nicht gefunden!" #: tools/editor/editor_node.cpp msgid "Restored default layout to base settings." -msgstr "Layout zu Standard Einstellungen zurückgesetzt." +msgstr "Layout wurde auf die Standardeinstellungen zurückgesetzt." #: tools/editor/editor_node.cpp msgid "Copy Params" -msgstr "Parameter Kopieren" +msgstr "Parameter kopieren" #: tools/editor/editor_node.cpp msgid "Paste Params" -msgstr "Parameter Einfügen" +msgstr "Parameter einfügen" #: tools/editor/editor_node.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" -msgstr "Ressource Einfügen" +msgstr "Ressource einfügen" #: tools/editor/editor_node.cpp msgid "Copy Resource" -msgstr "Ressource Kopieren" +msgstr "Ressource kopieren" #: tools/editor/editor_node.cpp msgid "Make Built-In" @@ -1637,40 +1927,39 @@ msgid "There is no defined scene to run." msgstr "Es ist keine zu startende Szene definiert." #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select one?\n" "You can change it later in later in \"Project Settings\" under the " "'application' category." msgstr "" "Es ist keine Hauptszene definiert worden.\n" -"Wähle eine in den \"Projekt Einstellungen\" in der 'Applikation' Kategorie." +"Wähle eine in den Projekteinstellungen unter der Kategorie „Anwendung“." #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "Selected scene '%s' does not exist, select a valid one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"Es ist keine Hauptszene definiert worden.\n" -"Wähle eine in den \"Projekt Einstellungen\" in der 'Applikation' Kategorie." +"Die ausgewählte Szene ‚%s‘ existiert nicht.\n" +"Wähle eine gültige Szene in den Projekteinstellungen unter der Kategorie " +"„Anwendung“." #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "Selected scene '%s' is not a scene file, select a valid one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"Es ist keine Hauptszene definiert worden.\n" -"Wähle eine in den \"Projekt Einstellungen\" in der 'Applikation' Kategorie." +"Die ausgewählte Szene ‚%s‘ ist keine gültige Datei für eine Szene.\n" +"Wähle eine gültige Szene in den Projekteinstellungen unter der Kategorie " +"„Anwendung“." #: tools/editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." msgstr "" "Die aktuelle Szene wurde noch nicht gespeichert, bitte speichere sie vor dem " -"starten." +"Starten." #: tools/editor/editor_node.cpp msgid "Could not start subprocess!" @@ -1678,19 +1967,19 @@ msgstr "Unterprozess konnte nicht gestartet werden!" #: tools/editor/editor_node.cpp msgid "Open Scene" -msgstr "Szene Öffnen" +msgstr "Szene öffnen" #: tools/editor/editor_node.cpp msgid "Open Base Scene" -msgstr "Basis Szene Öffnen" +msgstr "Basisszene öffnen" #: tools/editor/editor_node.cpp msgid "Quick Open Scene.." -msgstr "Schnelles Szenen Öffnen.." +msgstr "Schnell Szenen öffnen.." #: tools/editor/editor_node.cpp msgid "Quick Open Script.." -msgstr "Schnelles Script Öffnen.." +msgstr "Schnell Skripte öffnen.." #: tools/editor/editor_node.cpp msgid "Yes" @@ -1702,11 +1991,11 @@ msgstr "Szene schließen? (Nicht gespeicherte Änderungen gehen verloren)" #: tools/editor/editor_node.cpp msgid "Save Scene As.." -msgstr "Szene Speichern Als.." +msgstr "Szene speichern als.." #: tools/editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "Diese Szene wurde nie gespeichert. Speichern vor dem starten?" +msgstr "Diese Szene wurde nie gespeichert. Speichern vorm Starten?" #: tools/editor/editor_node.cpp msgid "Please save the scene first." @@ -1714,15 +2003,15 @@ msgstr "Bitte speichere die Szene zuerst." #: tools/editor/editor_node.cpp msgid "Save Translatable Strings" -msgstr "Speichere Übersetzbare Zeichen" +msgstr "Speichere übersetzbare Zeichenketten" #: tools/editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "Mesh Library exportieren" +msgstr "MeshLibrary exportieren" #: tools/editor/editor_node.cpp msgid "Export Tile Set" -msgstr "Tile Set Exportieren" +msgstr "Tileset exportieren" #: tools/editor/editor_node.cpp msgid "Quit" @@ -1739,7 +2028,7 @@ msgstr "Die aktuelle Szene ist nicht gespeichert. Trotzdem öffnen?" #: tools/editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" -"Szene kann nicht neu geladen werden wenn sie vorher nicht gespeichert wurde." +"Szene kann nicht neu geladen werden, wenn sie vorher nicht gespeichert wurde." #: tools/editor/editor_node.cpp msgid "Revert" @@ -1752,33 +2041,32 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Quick Run Scene.." -msgstr "Szene Schnell Starten.." +msgstr "Schnell Szene starten.." #: tools/editor/editor_node.cpp msgid "" "Open Project Manager? \n" "(Unsaved changes will be lost)" msgstr "" -"Projektmanager Öffnen?\n" -"(Nichtgespeicherte Änderungen gehen verloren)" +"Projektverwaltung öffnen?\n" +"(Nicht gespeicherte Änderungen gehen verloren)" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" -msgstr "Hauptszene" +msgstr "Wähle eine Hauptszene" #: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp msgid "Ugh" -msgstr "Ugh" +msgstr "Ähm" #: tools/editor/editor_node.cpp msgid "" "Error loading scene, it must be inside the project path. Use 'Import' to " "open the scene, then save it inside the project path." msgstr "" -"Fehler beim laden der Szene, sie muss innerhalb des Projekt Pfades liegen. " -"Nutze 'Import' um die Szene zu öffnen, dann speichere sie innherhalb des " -"Projekt Pfades." +"Fehler beim Laden der Szene. Sie muss innerhalb des Projektpfads liegen. Zum " +"Beheben kann ‚Import→Szene‘ verwendet werden um sie zu öffnen. Danach sollte " +"die Szene innerhalb des Projektpfades gespeichert werden." #: tools/editor/editor_node.cpp msgid "Error loading scene." @@ -1786,15 +2074,15 @@ msgstr "Fehler beim laden der Szene." #: tools/editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "Szene '%s' hat ungelöste Abhängigkeiten:" +msgstr "Szene '%s' hat defekte Abhängigkeiten:" #: tools/editor/editor_node.cpp msgid "Save Layout" -msgstr "Layout Speichern" +msgstr "Layout speichern" #: tools/editor/editor_node.cpp msgid "Delete Layout" -msgstr "Layout Löschen" +msgstr "Layout löschen" #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Default" @@ -1802,7 +2090,7 @@ msgstr "Standard" #: tools/editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "Wechsle Szenen Tab" +msgstr "Szenentab wechseln" #: tools/editor/editor_node.cpp msgid "%d more file(s)" @@ -1823,20 +2111,19 @@ msgstr "Gehe zu vorher geöffneter Szene." #: tools/editor/editor_node.cpp msgid "Fullscreen Mode" -msgstr "" +msgstr "Vollbildmodus" #: tools/editor/editor_node.cpp msgid "Distraction Free Mode" -msgstr "" +msgstr "Ablenkungsfreier Modus" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Next tab" -msgstr "Nächste" +msgstr "Nächster Tab" #: tools/editor/editor_node.cpp msgid "Previous tab" -msgstr "" +msgstr "Vorheriger Tab" #: tools/editor/editor_node.cpp msgid "Operations with scene files." @@ -1848,44 +2135,43 @@ msgstr "Neue Szene" #: tools/editor/editor_node.cpp msgid "New Inherited Scene.." -msgstr "Neue vererbte Szene.." +msgstr "Neue gererbte Szene.." #: tools/editor/editor_node.cpp msgid "Open Scene.." -msgstr "Szene Öffnen.." +msgstr "Szene öffnen.." #: tools/editor/editor_node.cpp msgid "Save Scene" -msgstr "Szene Speichern" +msgstr "Szene speichern" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Save all Scenes" -msgstr "Szene Speichern" +msgstr "Alle Szenen speichern" #: tools/editor/editor_node.cpp msgid "Close Scene" -msgstr "Szene Schliessen" +msgstr "Szene schließen" #: tools/editor/editor_node.cpp msgid "Close Goto Prev. Scene" -msgstr "Schließen Zu Vorh. Szene Gehen" +msgstr "Schließen und zur letzten Szene wechseln" #: tools/editor/editor_node.cpp msgid "Open Recent" -msgstr "Zuletzt benutzte Scenen" +msgstr "Zuletzt benutzte Szenen" #: tools/editor/editor_node.cpp msgid "Quick Filter Files.." -msgstr "Schnelle Filter Dateien.." +msgstr "Schnell Dateien filtern.." #: tools/editor/editor_node.cpp msgid "Convert To.." -msgstr "Umwandeln Zu.." +msgstr "Umwandeln zu.." #: tools/editor/editor_node.cpp msgid "Translatable Strings.." -msgstr "Übersetzbare Zeichen.." +msgstr "Übersetzbare Textbausteine.." #: tools/editor/editor_node.cpp msgid "MeshLibrary.." @@ -1895,30 +2181,30 @@ msgstr "MeshLibrary.." msgid "TileSet.." msgstr "TileSet.." -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "Wiederherstellen" #: tools/editor/editor_node.cpp msgid "Run Script" -msgstr "Script Starten" +msgstr "Skript ausführen" #: tools/editor/editor_node.cpp msgid "Project Settings" -msgstr "Projekt Einstellungen" +msgstr "Projekteinstellungen" #: tools/editor/editor_node.cpp msgid "Revert Scene" -msgstr "Szene Zurücksetzen" +msgstr "Szene zurücksetzen" #: tools/editor/editor_node.cpp msgid "Quit to Project List" -msgstr "Verlasse zu Projekt Liste" +msgstr "Verlasse zur Projektverwaltung" #: tools/editor/editor_node.cpp msgid "Import assets to the project." -msgstr "Importiere Assets zum Projekt." +msgstr "Importiere Medieninhalte ins Projekt." #: tools/editor/editor_node.cpp #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp @@ -1934,7 +2220,7 @@ msgstr "Import" #: tools/editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." -msgstr "Verschiedene Projekte oder Szenenweite Werkzeuge." +msgstr "Sonstiges Projekt oder szenenübergreifende Werkzeuge." #: tools/editor/editor_node.cpp msgid "Tools" @@ -1942,7 +2228,7 @@ msgstr "Werkzeuge" #: tools/editor/editor_node.cpp msgid "Export the project to many platforms." -msgstr "Exportiere Projekt für viele Platformen." +msgstr "Exportiere das Projekt für viele Plattformen." #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Export" @@ -1959,7 +2245,7 @@ msgstr "Abspielen" #: tools/editor/editor_node.cpp msgid "Pause the scene" -msgstr "Pausiere die Szene" +msgstr "Szene pausieren" #: tools/editor/editor_node.cpp msgid "Pause Scene" @@ -1967,7 +2253,7 @@ msgstr "Szene pausieren" #: tools/editor/editor_node.cpp msgid "Stop the scene." -msgstr "Stoppe die Szene." +msgstr "Szene stoppen." #: tools/editor/editor_node.cpp #: tools/editor/plugins/sample_library_editor_plugin.cpp @@ -1976,7 +2262,7 @@ msgstr "Stop" #: tools/editor/editor_node.cpp msgid "Play the edited scene." -msgstr "Spiele die editierte Szene." +msgstr "Spiele die bearbeitete Szene." #: tools/editor/editor_node.cpp msgid "Play Scene" @@ -1987,17 +2273,16 @@ msgid "Play custom scene" msgstr "Spiele angepasste Szene" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play Custom Scene" msgstr "Spiele angepasste Szene" #: tools/editor/editor_node.cpp msgid "Debug options" -msgstr "Debug Optionen" +msgstr "Fehlerbehebungsoptionen" #: tools/editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "Mit Remote Debug starten" +msgstr "Mit Fern-Fehlerbehebung starten" #: tools/editor/editor_node.cpp msgid "" @@ -2005,11 +2290,11 @@ msgid "" "connect to the IP of this computer in order to be debugged." msgstr "" "Beim Exportieren oder Starten wird das Programm versuchen, sich mit der IP-" -"Adresse dieses Computers zu verbinden, um debugged werden zu können." +"Adresse dieses Computers zu verbinden, um Fehler beheben zu können." #: tools/editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "Small Deploy mit Netzwerkdateisystem" +msgstr "Kleine Programmdatei über ein Netzwerkdateisystem" #: tools/editor/editor_node.cpp msgid "" @@ -2053,7 +2338,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "Synchronisiere Szene Änderungen" +msgstr "Szenenänderungen synchronisieren" #: tools/editor/editor_node.cpp msgid "" @@ -2064,12 +2349,12 @@ msgid "" msgstr "" "Wenn diese Option gewählt ist, werden jegliche Änderungen der Szene im " "Editor im laufenden Spiel dargestellt.\n" -"Wenn dies über die Remote Funktion genutzt wird ist es effizienter mit dem " -"Netzwerk Dateisystem." +"Sollte dies beim Abspielen auf externen Geräten genutzt werden, ist es am " +"effizientesten das Netzwerk-Dateisystem zu nutzen." #: tools/editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "Synchronisiere Script Änderungen" +msgstr "Skriptänderungen synchronisieren" #: tools/editor/editor_node.cpp msgid "" @@ -2078,10 +2363,10 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"Wenn diese Option gewählt ist, wird jeglich gespeichertes Script während des " -"laufenden Spiels neu geladen.\n" -"Wenn dies über die Remote Funktion genutzt wird ist es effizienter mit dem " -"Netzwerk Dateisystem." +"Wenn diese Option gewählt ist, werden erneut gespeicherte Skripte während " +"des laufenden Spiels neu geladen.\n" +"Sollte dies beim Abspielen auf externen Geräten genutzt werden, ist es am " +"effizientesten das Netzwerk-Dateisystem zu nutzen." #: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp msgid "Settings" @@ -2089,15 +2374,15 @@ msgstr "Einstellungen" #: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp msgid "Editor Settings" -msgstr "Editor-Einstellungen" +msgstr "Editoreinstellungen" #: tools/editor/editor_node.cpp msgid "Editor Layout" -msgstr "Editor Layout" +msgstr "Editorlayout" #: tools/editor/editor_node.cpp msgid "Install Export Templates" -msgstr "Export Templates installieren" +msgstr "Exportvorlagen installieren" #: tools/editor/editor_node.cpp msgid "About" @@ -2105,11 +2390,11 @@ msgstr "Über" #: tools/editor/editor_node.cpp msgid "Alerts when an external resource has changed." -msgstr "Schlägt Alarm falls sich eine externe Ressource verändert hat." +msgstr "Signalisiert, wenn sich eine externe Ressource verändert hat." #: tools/editor/editor_node.cpp msgid "Spins when the editor window repaints!" -msgstr "Rotiert wenn das Editor Fenster neu gezeichnet wird!" +msgstr "Dreht sich, wenn das Editorfenster neu gezeichnet wird!" #: tools/editor/editor_node.cpp msgid "Update Always" @@ -2125,15 +2410,15 @@ msgstr "Inspektor" #: tools/editor/editor_node.cpp msgid "Create a new resource in memory and edit it." -msgstr "Erstelle eine neue Ressource im Speicher und editiere sie." +msgstr "Erstelle eine neue Ressource im Speicher und bearbeite sie." #: tools/editor/editor_node.cpp msgid "Load an existing resource from disk and edit it." -msgstr "Lade eine bestehende Ressource von der Festplatte und editiere sie." +msgstr "Lade eine bestehende Ressource von der Festplatte und bearbeite sie." #: tools/editor/editor_node.cpp msgid "Save the currently edited resource." -msgstr "Speichere die so eben editierte Ressource." +msgstr "Speichere die so eben bearbeitete Ressource." #: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp msgid "Save As.." @@ -2141,19 +2426,19 @@ msgstr "Speichern als.." #: tools/editor/editor_node.cpp msgid "Go to the previous edited object in history." -msgstr "Gehe zum vorherigen editierten Objekt im Verlauf." +msgstr "Gehe zum vorherigen bearbeiteten Objekt im Verlauf." #: tools/editor/editor_node.cpp msgid "Go to the next edited object in history." -msgstr "Gehe zum nächsten editierten Objekt im Verlauf." +msgstr "Gehe zum nächsten bearbeiteten Objekt im Verlauf." #: tools/editor/editor_node.cpp msgid "History of recently edited objects." -msgstr "Verlauf der zuletzt editierten Objekte." +msgstr "Verlauf der zuletzt bearbeiteten Objekte." #: tools/editor/editor_node.cpp msgid "Object properties." -msgstr "Objekt Eigenschaften." +msgstr "Objekteigenschaften." #: tools/editor/editor_node.cpp msgid "FileSystem" @@ -2165,7 +2450,7 @@ msgstr "Ausgabe" #: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp msgid "Re-Import" -msgstr "Re-Import" +msgstr "Neuimport" #: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp msgid "Update" @@ -2173,7 +2458,7 @@ msgstr "Update" #: tools/editor/editor_node.cpp msgid "Thanks from the Godot community!" -msgstr "Ein Dank von der Godot Community!" +msgstr "Danke von der Godot-Gemeinschaft!" #: tools/editor/editor_node.cpp msgid "Thanks!" @@ -2181,7 +2466,7 @@ msgstr "Danke!" #: tools/editor/editor_node.cpp msgid "Import Templates From ZIP File" -msgstr "Importiere Templates Aus ZIP Datei" +msgstr "Vorlagen aus ZIP-Datei importieren" #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Export Project" @@ -2189,11 +2474,11 @@ msgstr "Projekt exportieren" #: tools/editor/editor_node.cpp msgid "Export Library" -msgstr "Export Bibliothek" +msgstr "Bibliothek exportieren" #: tools/editor/editor_node.cpp msgid "Merge With Existing" -msgstr "Vereine Mit Existierenden" +msgstr "Mit existierendem vereinen" #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Password:" @@ -2201,15 +2486,15 @@ msgstr "Passwort:" #: tools/editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "Script Öffnen & Starten" +msgstr "Skript öffnen und ausführen" #: tools/editor/editor_node.cpp msgid "Load Errors" -msgstr "Lade Fehler" +msgstr "Ladefehler" #: tools/editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "Installierte Plugins:" +msgstr "Installierte Erweiterungen:" #: tools/editor/editor_plugin_settings.cpp msgid "Version:" @@ -2225,15 +2510,15 @@ msgstr "Status:" #: tools/editor/editor_profiler.cpp msgid "Stop Profiling" -msgstr "Profiling Stoppen" +msgstr "Laufzeitanalyse beenden" #: tools/editor/editor_profiler.cpp msgid "Start Profiling" -msgstr "Profiling Starten" +msgstr "Laufzeitanalyse starten" #: tools/editor/editor_profiler.cpp msgid "Measure:" -msgstr "Maße:" +msgstr "Messung:" #: tools/editor/editor_profiler.cpp msgid "Frame Time (sec)" @@ -2241,7 +2526,7 @@ msgstr "Bild Zeit (Sek)" #: tools/editor/editor_profiler.cpp msgid "Average Time (sec)" -msgstr "Durchschnitts Zeit (Sek)" +msgstr "Durchschnittszeit (Sek)" #: tools/editor/editor_profiler.cpp msgid "Frame %" @@ -2269,7 +2554,7 @@ msgstr "Bild #:" #: tools/editor/editor_reimport_dialog.cpp msgid "Please wait for scan to complete." -msgstr "Bitte warten bis der Scan abgeschlossen ist." +msgstr "Bitte warten bis Operation abgeschlossen ist." #: tools/editor/editor_reimport_dialog.cpp msgid "Current scene must be saved to re-import." @@ -2277,19 +2562,19 @@ msgstr "Aktuelle Szene muss gespeichert sein um sie erneut zu importieren." #: tools/editor/editor_reimport_dialog.cpp msgid "Save & Re-Import" -msgstr "Speichern & erneut importieren" +msgstr "Speichern & neu importieren" #: tools/editor/editor_reimport_dialog.cpp msgid "Re-Import Changed Resources" -msgstr "Veränderte Ressourcen Neu Importieren" +msgstr "Veränderte Ressourcen neu importieren" #: tools/editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "Schreibe die Logik in die _run() Methode." +msgstr "Spiellogik sollte mit der _run()-Methode beginnen." #: tools/editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "Es besteht eine editierte Szene bereits." +msgstr "Es besteht bereits eine bearbeitete Szene." #: tools/editor/editor_run_script.cpp msgid "Couldn't instance script:" @@ -2309,7 +2594,7 @@ msgstr "Hast du die '_run' Methode vergessen?" #: tools/editor/editor_settings.cpp msgid "Default (Same as Editor)" -msgstr "Standard (Dasselbe wie der Editor)" +msgstr "Standard (wie Editor)" #: tools/editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -2317,65 +2602,149 @@ msgstr "Selektiere Node(s) für den Import" #: tools/editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "Szenen Pfad:" +msgstr "Szenenpfad:" #: tools/editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "Importiere Aus Einem Node:" +msgstr "Aus Node importieren:" #: tools/editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" -"fil_type_cache.cch kann nicht mit Schreibzugriff geöffnet werden, file type " -"cache wird nicht gespeichert!" +"Die Datei 'file_type_cache.cch' konnte nicht zum schreiben geöffnet werden. " +"Der Dateityp-Cache wird nicht gespeichert!" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "Quell- und Zieldatei sind gleich, ignoriere Anweisung." + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "Quell- und Zielpfad sind gleich, ignoriere Anweisung." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "Verzeichnisse lassen sich nicht in sich selbst verschieben." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "Kann mit ‚..‘ nicht arbeiten" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "Wähle neuen Namen und Ort für:" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "Keine Dateien ausgewählt!" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "Instanz" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "Abhängigkeiten bearbeiten.." + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "Zeige Besitzer.." + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "Pfad kopieren" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "Umbenennen oder Verschieben.." + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "Verschiebe zu.." + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "Info" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "Zeige im Dateimanager" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "Neuimport.." + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "Vorheriges Verzeichnis" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "Nächstes Verzeichnis" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "Dateisystem erneut einlesen" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "Favoriten-Verzeichnisstatus umschalten" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "Instantiiere gewählte Szene(n) als Unterobjekt des ausgewählten Nodes." + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "Verschieben" #: tools/editor/groups_editor.cpp msgid "Add to Group" -msgstr "Füge Gruppe hinzu" +msgstr "Zu Gruppe hinzufügen" #: tools/editor/groups_editor.cpp msgid "Remove from Group" -msgstr "Entferne aus Gruppe" +msgstr "Aus Gruppe entfernen" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp msgid "No bit masks to import!" -msgstr "Keine Bit Masken zu importieren!" +msgstr "Keine Bitmasken zu importieren!" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_sample_import_plugin.cpp #: tools/editor/io_plugins/editor_scene_import_plugin.cpp #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Target path is empty." -msgstr "Ziel Pfad ist leer." +msgstr "Zielpfad ist leer." #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_sample_import_plugin.cpp #: tools/editor/io_plugins/editor_scene_import_plugin.cpp #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Target path must be a complete resource path." -msgstr "Ziel Pfad muss ein kompletter Ressourcen Pfad sein." +msgstr "Zielpfad muss ein kompletter Ressourcenpfad sein." #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_sample_import_plugin.cpp #: tools/editor/io_plugins/editor_scene_import_plugin.cpp #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Target path must exist." -msgstr "Ziel Pfad muss existieren." +msgstr "Zielpfad muss existieren." #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp #: tools/editor/io_plugins/editor_sample_import_plugin.cpp msgid "Save path is empty!" -msgstr "Speicher Pfad ist leer!" +msgstr "Speicherpfad ist leer!" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp msgid "Import BitMasks" -msgstr "Importiere BitMasks" +msgstr "BitMasks importieren" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Source Texture(s):" -msgstr "Quell Textur(en):" +msgstr "Quelltextur(en):" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp @@ -2384,7 +2753,7 @@ msgstr "Quell Textur(en):" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Target Path:" -msgstr "Ziel Pfad:" +msgstr "Zielpfad:" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp @@ -2397,41 +2766,43 @@ msgstr "Akzeptieren" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp msgid "Bit Mask" -msgstr "Bit Maske" +msgstr "Bitmaske" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "No source font file!" -msgstr "Kein Quell Font gefunden!" +msgstr "Keine Quellschriftart-Datei gefunden!" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "No target font resource!" -msgstr "Keine Ziel Font Ressource!" +msgstr "Keine Zielschriftart-Ressource!" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "" "Invalid file extension.\n" "Please use .fnt." msgstr "" +"Ungültige Dateiendung.\n" +"Nutze .fnt als Dateiendung." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Can't load/process source font." -msgstr "Quell Font kann nicht geladen/verarbeitet werden." +msgstr "Quellschriftart kann nicht geladen/verarbeitet werden." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Couldn't save font." -msgstr "Font konnte nicht gespeichert werden." +msgstr "Schriftart konnte nicht gespeichert werden." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Source Font:" -msgstr "Quell Font:" +msgstr "Quellschriftart:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Source Font Size:" -msgstr "Quell Font Größe:" +msgstr "Quellschriftgröße:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Dest Resource:" -msgstr "Ziel Ressource:" +msgstr "Ziel-Ressource:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "The quick brown fox jumps over the lazy dog." @@ -2450,28 +2821,28 @@ msgstr "Optionen:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Font Import" -msgstr "Font Import" +msgstr "Schriftart importieren" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "" "This file is already a Godot font file, please supply a BMFont type file " "instead." msgstr "" -"Diese Datei ist bereits eine Godot Font Datei, bitte gib eine BMFont Datei " -"anstelle an." +"Diese Datei ist bereits eine Godot Schriftart. Bitte stattdessen eine Datei " +"im BMFont-Format angeben." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Failed opening as BMFont file." -msgstr "Öffnen der BMFont Datei fehlgeschlagen." +msgstr "Öffnen der BMFont-Datei fehlgeschlagen." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Invalid font custom source." -msgstr "Unzulässige eigene Font Ressource." +msgstr "Eigene Schriftart-Quelle ist ungültig." #: tools/editor/io_plugins/editor_font_import_plugin.cpp #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Font" -msgstr "Schrift" +msgstr "Schriftart" #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp msgid "No meshes to import!" @@ -2479,7 +2850,7 @@ msgstr "Keine Meshes zu importieren!" #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp msgid "Single Mesh Import" -msgstr "Einzel Mesh Import" +msgstr "Einzelnes Mesh importieren" #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp msgid "Source Mesh(es):" @@ -2496,11 +2867,11 @@ msgstr "Oberfläche %d" #: tools/editor/io_plugins/editor_sample_import_plugin.cpp msgid "No samples to import!" -msgstr "Keine Beispiele zu importieren!" +msgstr "Keine Samples zu importieren!" #: tools/editor/io_plugins/editor_sample_import_plugin.cpp msgid "Import Audio Samples" -msgstr "Audio Samples Importieren" +msgstr "Audio-Samples importieren" #: tools/editor/io_plugins/editor_sample_import_plugin.cpp msgid "Source Sample(s):" @@ -2508,7 +2879,7 @@ msgstr "Quell Sample(s):" #: tools/editor/io_plugins/editor_sample_import_plugin.cpp msgid "Audio Sample" -msgstr "Audio Sample" +msgstr "Audio-Sample" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "New Clip" @@ -2516,7 +2887,7 @@ msgstr "Neuer Clip" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Animation Options" -msgstr "Animations Einstellungen" +msgstr "Animationseinstellungen" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Flags" @@ -2524,28 +2895,27 @@ msgstr "Flags" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Bake FPS:" -msgstr "FPS Backen:" +msgstr "FPS fixieren:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Optimizer" -msgstr "Optimierer" +msgstr "Optimierung" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Max Linear Error" -msgstr "Lineare Fehlergrenze" +msgstr "Obere lineare Fehlergrenze" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Max Angular Error" -msgstr "Angulare Fehlergrenze" +msgstr "Obere Winkelfehlergrenze" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Max Angle" msgstr "Maximaler Winkel" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy msgid "Clips" -msgstr "Begrenzungen" +msgstr "Ausschnitte" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Start(s)" @@ -2566,7 +2936,7 @@ msgstr "Filter" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Source path is empty." -msgstr "Quell Pfad ist leer." +msgstr "Quellpfad ist leer." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script." @@ -2574,7 +2944,7 @@ msgstr "Post-Import Skript konnte nicht geladen werden." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import." -msgstr "Fehlerhaftes Skript für Post-Import." +msgstr "Ungültiges / Fehlerhaftes Skript für Post-Import." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error importing scene." @@ -2582,11 +2952,11 @@ msgstr "Fehler beim importieren der Szene." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import 3D Scene" -msgstr "3D Szene Importieren" +msgstr "3D-Szene importieren" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Source Scene:" -msgstr "Quell Szene:" +msgstr "Quellszene:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Same as Target Scene" @@ -2598,7 +2968,7 @@ msgstr "Geteilt" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Target Texture Folder:" -msgstr "Ziel Texturen Ordner:" +msgstr "Ziel-Texturenordner:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Post-Process Script:" @@ -2627,29 +2997,28 @@ msgstr "Importieren & Öffnen" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Edited scene has not been saved, open imported scene anyway?" msgstr "" -"Editierte Szene wurde nicht gespeichert, trotzdem importierte Szene öffnen?" +"Bearbeitete Szene wurde nicht gespeichert, trotzdem importierte Szene öffnen?" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" -msgstr "Szene Importieren" +msgstr "Szene importieren" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." -msgstr "Szene Wird Importiert.." +msgstr "Szene wird importiert.." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." -msgstr "Angepasstes Skript Wird Ausgeführt.." +msgstr "Angepasstes Skript wird ausgeführt.." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "Post-Import Skript konnte nicht geladen werden:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy msgid "Invalid/broken script for post-import (check console):" -msgstr "Fehlerhaftes Skript für Post-Import:" +msgstr "Ungültiges oder fehlerhaftes Skript für Post-Import (siehe Konsole):" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" @@ -2657,11 +3026,11 @@ msgstr "Fehler beim ausführen des Post-Import Skripts:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import Image:" -msgstr "Bild Importieren:" +msgstr "Bild importieren:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Can't import a file over itself:" -msgstr "Es kann keine Datei in sich selbst importiert werden:" +msgstr "Datei kann nicht in sich selbst importiert werden:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't localize path: %s (already local)" @@ -2673,7 +3042,7 @@ msgstr "Speichere.." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "3D Scene Animation" -msgstr "3D Szenen Animation" +msgstr "3D-Szenenanimation" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Uncompressed" @@ -2681,11 +3050,11 @@ msgstr "Unkomprimiert" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Compress Lossless (PNG)" -msgstr "Verlustfrei Komprimieren (PNG)" +msgstr "Verlustfrei komprimieren (PNG)" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Compress Lossy (WebP)" -msgstr "Verlustbehaftet Komprimieren (WebP)" +msgstr "Verlustbehaftet komprimieren (WebP)" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Compress (VRAM)" @@ -2693,15 +3062,15 @@ msgstr "Komprimieren (VRAM)" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Texture Format" -msgstr "Textur-Format" +msgstr "Texturformat" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Texture Compression Quality (WebP):" -msgstr "Textur Kompressions-Qualität (WebP):" +msgstr "Texturkompressionsqualität (WebP):" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Texture Options" -msgstr "Textur Einstellungen" +msgstr "Textureinstellungen" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Please specify some files!" @@ -2709,7 +3078,7 @@ msgstr "Bitte gib einige Dateien an!" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "At least one file needed for Atlas." -msgstr "Es wird zumindest eine Datei für den Atlas gebraucht." +msgstr "Es wird zumindest eine Datei für den Atlas benötigt." #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Error importing:" @@ -2721,15 +3090,15 @@ msgstr "Es ist nur eine Datei für eine große Textur erforderlich." #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Max Texture Size:" -msgstr "Maximale Textur Größe:" +msgstr "Maximale Texturgröße:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures for Atlas (2D)" -msgstr "Importiere Texturen für Atlas (2D)" +msgstr "Texturen für Atlas (2D) importieren" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Cell Size:" -msgstr "Zell-Größe:" +msgstr "Zellgröße:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Large Texture" @@ -2737,31 +3106,31 @@ msgstr "Große Textur" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Large Textures (2D)" -msgstr "Importiere Große Texturen (2D)" +msgstr "Große Texturen (2D) importieren" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Source Texture" -msgstr "Quell-Textur" +msgstr "Quelltextur" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Base Atlas Texture" -msgstr "Basis Atlas-Textur" +msgstr "Basis-Atlastextur" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Source Texture(s)" -msgstr "Quell-Textur(en)" +msgstr "Quelltextur(en)" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures for 2D" -msgstr "Importiere Texturen für 2D" +msgstr "Texturen für 2D importieren" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures for 3D" -msgstr "Importiere Texturen für 3D" +msgstr "Texturen für 3D importieren" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures" -msgstr "Texturen Importieren" +msgstr "Texturen importieren" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "2D Texture" @@ -2773,7 +3142,7 @@ msgstr "3D-Textur" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Atlas Texture" -msgstr "Atlas-Textur" +msgstr "Atlastextur" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "" @@ -2785,7 +3154,7 @@ msgstr "" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Crop empty space." -msgstr "Beschneide leere Bereiche." +msgstr "Leere Bereiche beschneiden." #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Texture" @@ -2793,11 +3162,11 @@ msgstr "Textur" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Large Texture" -msgstr "Große Textur Importieren" +msgstr "Große Textur importieren" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Load Source Image" -msgstr "Quell-Bild Laden" +msgstr "Quellbild laden" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Slicing" @@ -2817,7 +3186,7 @@ msgstr "Große Textur konnte nicht gespeichert werden:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Build Atlas For:" -msgstr "Baue Atlas Für:" +msgstr "Erstelle Atlas für:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Loading Image:" @@ -2837,7 +3206,7 @@ msgstr "Bilder werden beschnitten" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Blitting Images" -msgstr "" +msgstr "Blitting Bilder" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Couldn't save atlas image:" @@ -2853,7 +3222,7 @@ msgstr "Fehlerhafte Quelle!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Invalid translation source!" -msgstr "Fehlerhafte Übersetzungs-Quelle!" +msgstr "Fehlerhafte Übersetzungsquelle!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Column" @@ -2866,15 +3235,15 @@ msgstr "Sprache" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "No items to import!" -msgstr "Keine Inhalte zu importieren!" +msgstr "Keine Elemente zu importieren!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "No target path!" -msgstr "Kein Ziel-Pfad!" +msgstr "Kein Zielpfad!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Import Translations" -msgstr "Übersetzungen Importieren" +msgstr "Übersetzungen importieren" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Couldn't import!" @@ -2882,7 +3251,7 @@ msgstr "Konnte nicht importiert werden!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Import Translation" -msgstr "Übersetzung Importieren" +msgstr "Übersetzung importieren" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Source CSV:" @@ -2890,7 +3259,7 @@ msgstr "Quell-CSV:" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Ignore First Row" -msgstr "Ignoriere Erste Zeile" +msgstr "Erste Zeile ignorieren" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Compress" @@ -2902,7 +3271,7 @@ msgstr "Zu Projekt hinzufügen (engine.cfg)" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Import Languages:" -msgstr "Sprachen Importieren:" +msgstr "Sprachen importieren:" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Translation" @@ -2910,7 +3279,7 @@ msgstr "Übersetzung" #: tools/editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "MultiNode Setzen" +msgstr "MultiNode setzen" #: tools/editor/node_dock.cpp msgid "Node" @@ -2922,15 +3291,15 @@ msgstr "Gruppen" #: tools/editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "Selektiere ein Node um Signale und Gruppen zu editieren." +msgstr "Wähle ein Node um Signale und Gruppen zu bearbeiten." #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" -msgstr "Autoplay Umschalten" +msgstr "Automatisches Abspielen umschalten" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "Neuer Animations-Name:" +msgstr "Neuer Animationsname:" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" @@ -2938,46 +3307,47 @@ msgstr "Neue Animation" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "Ändere Animations-Name:" +msgstr "Animationsname ändern:" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Remove Animation" -msgstr "Animation Entfernen" +msgstr "Animation entfernen" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Invalid animation name!" -msgstr "FEHLER: Fehlerhafter Animations-Name!" +msgstr "FEHLER: ungültiger Animationsname!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "Fehler: Animations-Name existiert bereits!" +msgstr "FEHLER: Animationsname existiert bereits!" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Rename Animation" -msgstr "Animation Umbenennen" +msgstr "Animation umbenennen" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Animation" -msgstr "Animation Hinzufügen" +msgstr "Animation hinzufügen" #: tools/editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Blend Next Changed" -msgstr "Überblende Nächsten Geänderten" +msgstr "Überblende nächste Bearbeitung" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "Blend-Zeit Ändern" +msgstr "Überblendungszeit ändern" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" -msgstr "Animation Laden" +msgstr "Animation laden" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Duplicate Animation" -msgstr "Animation Duplizieren" +msgstr "Animation duplizieren" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to copy!" @@ -2993,11 +3363,11 @@ msgstr "Eingefügte Animation" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Paste Animation" -msgstr "Animation Einfügen" +msgstr "Animation einfügen" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to edit!" -msgstr "FEHLER: Keine Animation zum editieren!" +msgstr "FEHLER: Keine Animation zum bearbeiten!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3005,7 +3375,7 @@ msgstr "Spiele ausgewählte Animation rückwärts von aktueller Position. (A)" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "Spiele ausgewählte Animation rückwärts vom Ende. (Shift+A)" +msgstr "Spiele ausgewählte Animation rückwärts vom Ende. (Umschalt+A)" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" @@ -3013,7 +3383,7 @@ msgstr "Stoppe Animations-Wiedergabe. (S)" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "Spiele ausgewählte Animation vom Start. (Shift+D)" +msgstr "Spiele ausgewählte Animation vom Start. (Umschalt+D)" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" @@ -3025,16 +3395,15 @@ msgstr "Position der Animation (in Sekunden)." #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "" +msgstr "Animationsablauf für dieses Node global skalieren." #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Create new animation in player." msgstr "Neue Animation im Player erstellen." #: tools/editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Load animation from disk." -msgstr "Eine Animation von der Festplatte laden." +msgstr "Animation von der Festplatte laden." #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Load an animation from disk." @@ -3045,9 +3414,8 @@ msgid "Save the current animation" msgstr "Aktuelle Animation speichern" #: tools/editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Save As" -msgstr "Speichern als.." +msgstr "Speichern als" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3055,11 +3423,11 @@ msgstr "Liste der Animationen im Player anzeigen." #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "Beim Laden automatisch abpielen" +msgstr "Beim Laden automatisch abspielen" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Target Blend Times" -msgstr "" +msgstr "Ziel-Übergangszeiten bearbeiten" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -3075,7 +3443,7 @@ msgstr "Neue Animation erstellen" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" -msgstr "Name der Animation:" +msgstr "Animationsname:" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp @@ -3087,7 +3455,7 @@ msgstr "Fehler!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "" +msgstr "Übergangszeiten:" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" @@ -3095,7 +3463,7 @@ msgstr "Nächste (Automatische Warteschlange):" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" -msgstr "" +msgstr "Übergangszeiten kreuzender Animationen" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3121,7 +3489,7 @@ msgstr "Ausblenden (s):" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend" -msgstr "" +msgstr "Blenden" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix" @@ -3150,15 +3518,15 @@ msgstr "Menge:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend:" -msgstr "" +msgstr "Blende:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 0:" -msgstr "" +msgstr "Blende 0:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 1:" -msgstr "" +msgstr "Blende 1:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "X-Fade Time (s):" @@ -3173,12 +3541,14 @@ msgid "Add Input" msgstr "Eingang hinzufügen" #: tools/editor/plugins/animation_tree_editor_plugin.cpp +#, fuzzy msgid "Clear Auto-Advance" -msgstr "" +msgstr "Stoppe automatisches Durchschalten" #: tools/editor/plugins/animation_tree_editor_plugin.cpp +#, fuzzy msgid "Set Auto-Advance" -msgstr "" +msgstr "Setze automatisches Durchschalten" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Delete Input" @@ -3198,39 +3568,39 @@ msgstr "Animationsbaum ist ungültig." #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation Node" -msgstr "Animationsknoten" +msgstr "Animations-Node" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "OneShot Node" -msgstr "" +msgstr "Einfach-Aufruf-Node" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix Node" -msgstr "Mixknoten" +msgstr "Misch-Node" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend2 Node" -msgstr "" +msgstr "Blende2-Node" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend3 Node" -msgstr "" +msgstr "Blende3-Node" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend4 Node" -msgstr "" +msgstr "Blende4-Node" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "" +msgstr "Zeitskalier-Node" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "" +msgstr "Zeitsuch-Node" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "" +msgstr "Übergangs-Node" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Import Animations.." @@ -3238,7 +3608,7 @@ msgstr "Animationen importieren.." #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "" +msgstr "Nodefilter bearbeiten" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Filters.." @@ -3246,7 +3616,7 @@ msgstr "Filter.." #: tools/editor/plugins/baked_light_baker.cpp msgid "Parsing %d Triangles:" -msgstr "Parse %d Dreiecke:" +msgstr "Analysiere %d Dreiecke:" #: tools/editor/plugins/baked_light_baker.cpp msgid "Triangle #" @@ -3254,15 +3624,15 @@ msgstr "Dreieck #" #: tools/editor/plugins/baked_light_baker.cpp msgid "Light Baker Setup:" -msgstr "" +msgstr "Light-Baker einrichten:" #: tools/editor/plugins/baked_light_baker.cpp msgid "Parsing Geometry" -msgstr "Parse Geometrie" +msgstr "Analysiere Geometrie" #: tools/editor/plugins/baked_light_baker.cpp msgid "Fixing Lights" -msgstr "Behebe Lampen" +msgstr "Fixiere Lampen" #: tools/editor/plugins/baked_light_baker.cpp msgid "Making BVH" @@ -3270,39 +3640,35 @@ msgstr "Erstelle BVH" #: tools/editor/plugins/baked_light_baker.cpp msgid "Creating Light Octree" -msgstr "" +msgstr "erstelle Licht-Octree" #: tools/editor/plugins/baked_light_baker.cpp msgid "Creating Octree Texture" -msgstr "" +msgstr "Erstelle Octree-Textur" #: tools/editor/plugins/baked_light_baker.cpp msgid "Transfer to Lightmaps:" -msgstr "" +msgstr "übertrage zu Lightmaps:" #: tools/editor/plugins/baked_light_baker.cpp msgid "Allocating Texture #" -msgstr "" +msgstr "Zuweisen von Textur #" #: tools/editor/plugins/baked_light_baker.cpp msgid "Baking Triangle #" -msgstr "" +msgstr "Baking von Dreieck #" #: tools/editor/plugins/baked_light_baker.cpp msgid "Post-Processing Texture #" msgstr "Nachbearbeiten von Textur #" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" -msgstr "" +msgstr "Bake!" #: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Reset the lightmap octree baking process (start over)." -msgstr "" +msgstr "Lightmap-Octree-Backing-Prozess zurücksetzen (neu starten)." #: tools/editor/plugins/camera_editor_plugin.cpp #: tools/editor/plugins/sample_library_editor_plugin.cpp @@ -3316,7 +3682,7 @@ msgstr "Einrasten konfigurieren" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset:" -msgstr "Gitterverschiebung:" +msgstr "Gitterversatz:" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/polygon_2d_editor_plugin.cpp @@ -3325,7 +3691,7 @@ msgstr "Gitterabstand:" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "Rotationsverschiebung:" +msgstr "Rotationsversatz:" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" @@ -3336,17 +3702,16 @@ msgid "Move Pivot" msgstr "Mittelpunkt bewegen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move Action" -msgstr "Bewegungsaktion" +msgstr "Aktion verschieben" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit IK Chain" -msgstr "" +msgstr "IK-Kette bearbeiten" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit CanvasItem" -msgstr "" +msgstr "CanvasItem bearbeiten" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" @@ -3358,39 +3723,37 @@ msgstr "Vergrößerung (%):" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" -msgstr "" +msgstr "Pose einfügen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" -msgstr "Auswahlmodus (Q)" +msgid "Select Mode" +msgstr "Auswahlmodus" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" -msgstr "" +msgstr "Ziehen = Rotieren" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" -msgstr "" +msgstr "Alt+Ziehen = Verschieben" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" -"Drücken Sie 'V', um den Mittelpunkt zu ändern, 'Shift+V', um den Mittelpunkt " -"(während der Bewegung) zu verschieben." +"‚V‘ drücken um Angelpunkt auf Mausposition zu setzen, ‚Umschalt+V‘ drücken " +"um das Objekt ohne seinen Angelpunkt zu verschieben." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "" +msgstr "Alt+Rechtsklick: Listenauswahl nach Tiefe" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "Bewegungsmodus (W)" +msgid "Move Mode" +msgstr "Bewegungsmodus" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" -msgstr "Rotationsmodus (E)" +msgid "Rotate Mode" +msgstr "Rotationsmodus" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3404,11 +3767,11 @@ msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "Klicken Sie, um den Rotationsmittelpunkt des Objekts zu ändern." +msgstr "Klicken um Angelpunkt des Objekts zu ändern." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "" +msgstr "Schwenkmodus" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." @@ -3421,21 +3784,11 @@ msgstr "Das ausgewählte Objekt entsperren (kann bewegt werden)." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." -msgstr "" -"Versichert, dass die untergeordnete Knoten des Objektes nicht auswählbar " -"sind." +msgstr "Verhindert das Auswählen von Unterobjekten dieses Nodes." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "Stellt die Eigenschaft des Objektes wieder her, ausgewählt zu werden." - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "Bearbeiten" +msgstr "Macht Unterobjekte dieses Objekts wieder auswählbar." #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3449,11 +3802,11 @@ msgstr "Raster anzeigen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "Einrasten für Rotation aktivieren" +msgstr "Rotationsraster benutzen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" -msgstr "Relatives Einrasten aktivieren" +msgstr "Relatives Einrasten benutzen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3462,11 +3815,11 @@ msgstr "Einrasten konfigurieren.." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "Einrasten an Pixeln aktivieren" +msgstr "Pixelraster benutzen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Expand to Parent" -msgstr "Auf übergeordneten Knoten ausdehnen" +msgstr "Auf übergeordnetes Node ausdehnen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Skeleton.." @@ -3482,11 +3835,11 @@ msgstr "Knochen entfernen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" -msgstr "" +msgstr "IK-Kette erzeugen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear IK Chain" -msgstr "" +msgstr "IK-Kette zurücksetzen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3494,20 +3847,12 @@ msgid "View" msgstr "Ansicht" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "Vergrößern" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "Verkleinern" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "Vergrößerung zurücksetzen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Set.." -msgstr "" +msgstr "Vergrößerung setzen.." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3522,9 +3867,8 @@ msgid "Anchor" msgstr "Anker" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Keys" -msgstr "Schlüsselbild einfügen" +msgstr "Schlüsselbilder einfügen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" @@ -3532,15 +3876,15 @@ msgstr "Schlüsselbild einfügen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "Schlüsselbild einfügen (existierender Track)" +msgstr "Schlüsselbild einfügen (in existierende Spuren)" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" -msgstr "" +msgstr "Pose kopieren" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Pose" -msgstr "" +msgstr "Pose zurücksetzen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Set a Value" @@ -3579,7 +3923,7 @@ msgstr "Polygon bearbeiten (Punkt entfernen)" #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create a new polygon from scratch." -msgstr "Polygon neu von vorne erstellen." +msgstr "Polygon von Grund auf neu erstellen." #: tools/editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" @@ -3587,7 +3931,7 @@ msgstr "Polygon3D erstellen" #: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" -msgstr "" +msgstr "Wähle Griff" #: tools/editor/plugins/color_ramp_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -3600,7 +3944,7 @@ msgstr "Farbverlauf anpassen" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Creating Mesh Library" -msgstr "" +msgstr "Erzeuge MeshLibrary" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Thumbnail.." @@ -3608,7 +3952,7 @@ msgstr "Vorschau.." #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" -msgstr "%d entfernen?" +msgstr "Element %d entfernen?" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp #: tools/editor/plugins/theme_editor_plugin.cpp @@ -3626,7 +3970,7 @@ msgstr "Aus Szene importieren" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Update from Scene" -msgstr "Aus Szene aktialisieren" +msgstr "Aus Szene aktualisieren" #: tools/editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" @@ -3642,7 +3986,7 @@ msgstr "Auflistungseditor" #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" -msgstr "" +msgstr "Occluder-Polygon erzeugen" #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp @@ -3666,23 +4010,23 @@ msgstr "RMT: Punkt entfernen." #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "" +msgstr "Mesh ist leer!" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "" +msgstr "Statischen Trimesh-Körper erzeugen" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Convex Body" -msgstr "" +msgstr "Statischen Konvex-Körper erzeugen" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "Dies funktioniert nicht am Hauptknoten der Szene!" +msgstr "Das geht nicht an der Wurzel der Szene!" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Shape" -msgstr "" +msgstr "Trimesh-Form erzeugen" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Shape" @@ -3690,119 +4034,123 @@ msgstr "Konvexe Form erstellen" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "" +msgstr "Navigations-Mesh erzeugen" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "" +msgstr "Mesh-Instanz fehlt ein Mesh!" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" -msgstr "" +msgstr "Mesh hat keine Oberfläche von der Umrisse erzeugt werden könnten!" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" -msgstr "" +msgstr "Konnte keinen Umriss erzeugen!" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline" -msgstr "" +msgstr "Umriss erzeugen" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" -msgstr "" +msgstr "Statischen Trimesh-Körper erzeugen" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Static Body" -msgstr "" +msgstr "Statischen Konvex-Körper erzeugen" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" -msgstr "" +msgstr "Trimesh Kollisionselement erzeugen" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Collision Sibling" -msgstr "" +msgstr "Konvexes Kollisionselement erzeugen" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh.." -msgstr "" +msgstr "Umriss-Mesh erzeugen.." #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" -msgstr "" +msgstr "Erzeuge Umriss-Mesh" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" -msgstr "" +msgstr "Umrissgröße:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." msgstr "" +"Keine Mesh-Quelle angegeben (und kein MultiMesh-Eintrag im Node gesetzt)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." -msgstr "" +msgstr "Keine Mesh-Quelle angegeben (und MultiMesh enthält kein Mesh)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." -msgstr "" +msgstr "Mesh-Quelle ist ungültig (ungültiger Pfad)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "" +msgstr "Mesh-Quelle ist ungültig (keine Mesh-Instanz)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "" +msgstr "Mesh-Quelle ist ungültig (enthält keine Mesh-Ressource)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "" +msgstr "Keine Quelle für Oberfläche angegeben." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "" +msgstr "Oberflächen-Quelle ist ungültig (ungültiger Pfad)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "" +msgstr "Quelle für Oberfläche ist ungültig (keine Geometrie)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "" +msgstr "Quelle für Oberfläche ist ungültig (keine Faces)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Parent has no solid faces to populate." -msgstr "" +msgstr "Elternelement hat keine soliden Faces zu besetzen." #: tools/editor/plugins/multimesh_editor_plugin.cpp +#, fuzzy msgid "Couldn't map area." -msgstr "" +msgstr "Gebiet konnte nicht abgebildet werden." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "" +msgstr "Quell-Mesh auswählen:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "" +msgstr "Ziel-Oberfläche auswählen:" #: tools/editor/plugins/multimesh_editor_plugin.cpp +#, fuzzy msgid "Populate Surface" -msgstr "" +msgstr "Oberfläche besetzen" #: tools/editor/plugins/multimesh_editor_plugin.cpp +#, fuzzy msgid "Populate MultiMesh" -msgstr "" +msgstr "MultiMesh besetzen" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" -msgstr "" +msgstr "Ziel-Oberfläche:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" -msgstr "" +msgstr "Quell-Mesh:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" @@ -3818,7 +4166,7 @@ msgstr "Z-Achse" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" -msgstr "" +msgstr "Aufwärts-Achse des Meshs:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" @@ -3833,16 +4181,17 @@ msgid "Random Scale:" msgstr "Zufällige Skalieren:" #: tools/editor/plugins/multimesh_editor_plugin.cpp +#, fuzzy msgid "Populate" -msgstr "" +msgstr "Besetzen" #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" -msgstr "" +msgstr "Erzeuge Navigationspolygon" #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Remove Poly And Point" -msgstr "" +msgstr "Polygon und Punkt entfernen" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" @@ -3854,19 +4203,19 @@ msgstr "Keine Pixel mit einer Transzparenz > 128 im Bild.." #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Set Emission Mask" -msgstr "" +msgstr "Emissionsmaske setzen" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" -msgstr "" +msgstr "Emissionsmaske leeren" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" -msgstr "" +msgstr "Emissionsmaske laden" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" -msgstr "" +msgstr "Anzahl generierter Punkte:" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." @@ -3886,31 +4235,32 @@ msgstr "Keine Flächen!" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" -msgstr "" +msgstr "Erzeuge AABB" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter From Mesh" -msgstr "" +msgstr "Erzeuge Emittent aus Mesh" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter From Node" -msgstr "" +msgstr "Erzeuge Emittent aus Node" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Clear Emitter" -msgstr "" +msgstr "Leere Emittent" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" -msgstr "" +msgstr "Erzeuge Emittent" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Emission Positions:" -msgstr "" +msgstr "Emissionsorte:" #: tools/editor/plugins/particles_editor_plugin.cpp +#, fuzzy msgid "Emission Fill:" -msgstr "" +msgstr "Emissionsausschüttung" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Surface" @@ -3935,11 +4285,11 @@ msgstr "Punkt auf Kurve verschieben" #: tools/editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "" +msgstr "Eingangsgriff auf Kurve verschieben" #: tools/editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "" +msgstr "Ausgangsgriff auf Kurve verschieben" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp @@ -4011,15 +4361,15 @@ msgstr "Pfadpunkt entfernen" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" -msgstr "" +msgstr "Erzeuge UV-Map" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "" +msgstr "Transformiere UV-Map" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "" +msgstr "Polygon2D-UV-Editor" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Point" @@ -4051,15 +4401,15 @@ msgstr "Polygon skalieren" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" -msgstr "" +msgstr "Polygon→UV" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV->Polygon" -msgstr "" +msgstr "UV→Polygon" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" -msgstr "" +msgstr "Leere UV-Map" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -4080,69 +4430,69 @@ msgstr "FEHLER: Ressource konnte nicht geladen werden!" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" -msgstr "" +msgstr "Ressource hinzufügen" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp msgid "Rename Resource" -msgstr "" +msgstr "Ressource umbenennen" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Resource" -msgstr "" +msgstr "Ressource löschen" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" -msgstr "" +msgstr "Zwischenablage für Ressourcen ist leer!" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" -msgstr "" +msgstr "Ressource laden" #: tools/editor/plugins/rich_text_editor_plugin.cpp msgid "Parse BBCode" -msgstr "" +msgstr "BBCode parsen" #: tools/editor/plugins/sample_editor_plugin.cpp msgid "Length:" -msgstr "" +msgstr "Länge:" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Open Sample File(s)" -msgstr "" +msgstr "Audiodatei(en) öffnen" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "ERROR: Couldn't load sample!" -msgstr "" +msgstr "Fehler: Konnte Audio nicht laden!" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Add Sample" -msgstr "" +msgstr "Sample hinzufügen" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Rename Sample" -msgstr "" +msgstr "Sample umbenennen" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Delete Sample" -msgstr "" +msgstr "Sample löschen" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "16 Bits" -msgstr "" +msgstr "16 Bit" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "8 Bits" -msgstr "" +msgstr "8 Bit" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Stereo" -msgstr "" +msgstr "Stereo" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Mono" -msgstr "" +msgstr "Mono" #: tools/editor/plugins/sample_library_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp @@ -4151,40 +4501,39 @@ msgstr "Format" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Pitch" -msgstr "" +msgstr "Tonhöhe" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" -msgstr "" +msgstr "Fehler beim Speichern des Motivs" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Error saving" -msgstr "" +msgstr "Fehler beim Speichern" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Error importing theme" -msgstr "" +msgstr "Fehler beim importieren des Motivs" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Error importing" -msgstr "" +msgstr "Fehler beim Importieren" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Import Theme" -msgstr "" +msgstr "Motiv importieren" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save Theme As.." -msgstr "" +msgstr "Motiv speichern als.." #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next script" -msgstr "Nächste" +msgstr "Nächstes Skript" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Previous script" -msgstr "" +msgstr "Vorheriges Skript" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/project_export.cpp @@ -4198,128 +4547,61 @@ msgstr "Neu" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "" +msgstr "Alle speichern" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "Zaghaftes Skript-Neuladen" #: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" -msgstr "" +msgstr "Zurück im Verlauf" #: tools/editor/plugins/script_editor_plugin.cpp msgid "History Next" -msgstr "" +msgstr "Vorwärts im Verlauf" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "" +msgstr "Motiv neu laden" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "" +msgstr "Motiv speichern" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save Theme As" -msgstr "" +msgstr "Motiv speichern als" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" -msgstr "" +msgid "Close Docs" +msgstr "Dokumentation schließen" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find.." -msgstr "" +msgstr "Finde.." #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find Next" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." -msgstr "" +msgstr "Finde Nächstes" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Debug" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" -msgstr "" +msgstr "Debuggen" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp msgid "Step Over" -msgstr "" +msgstr "Überspringen" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp msgid "Step Into" -msgstr "" +msgstr "Hineinspringen" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp @@ -4333,73 +4615,67 @@ msgstr "Fortfahren" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "" +msgstr "Debugger offen halten" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Window" -msgstr "" +msgstr "Fenster" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Move Left" -msgstr "" +msgstr "nach links" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Move Right" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" -msgstr "" +msgstr "nach rechts" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Tutorials" -msgstr "" +msgstr "Anleitungen" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Open https://godotengine.org at tutorials section." -msgstr "" +msgstr "Öffnet https://godotengine.org im Abschnitt ‚Tutorials‘." #: tools/editor/plugins/script_editor_plugin.cpp msgid "Classes" -msgstr "" +msgstr "Klassen" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Search the class hierarchy." -msgstr "" +msgstr "Durchsuche die Klassenhierarchie." #: tools/editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." -msgstr "" +msgstr "Durchsuche die Referenzdokumentation." #: tools/editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." -msgstr "" +msgstr "Springe zum zuvor bearbeiteten Dokument." #: tools/editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "" +msgstr "Springe zum nächsten bearbeiteten Dokument." #: tools/editor/plugins/script_editor_plugin.cpp msgid "Create Script" -msgstr "" +msgstr "Erstelle Skript" #: tools/editor/plugins/script_editor_plugin.cpp msgid "" "The following files are newer on disk.\n" "What action should be taken?:" msgstr "" +"Die folgenden Dateien wurden im Dateisystem verändert.\n" +"Wie soll weiter vorgegangen werden?:" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Reload" -msgstr "" +msgstr "Neu laden" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Resave" -msgstr "" +msgstr "Erneut speichern" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp @@ -4410,316 +4686,393 @@ msgstr "Debugger" msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" +"Eingebettete Skripte können nur bearbeitet werden wenn die entsprechende " +"Szene geladen ist" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "Schiebe hoch" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "Schiebe herunter" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "Nach links einrücken" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "Nach rechts einrücken" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "Kommentar umschalten" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Klone herunter" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "Symbol vervollständigen" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "kürze Leerraum am Zeilenende" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "Automatische Einrückung" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "Lösche alle Haltepunkte" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "Springe zum nächsten Haltepunkt" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "Springe zum vorigen Haltepunkt" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "Finde Vorheriges" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "Ersetzen.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "Springe zu Funktion.." + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "Springe zu Zeile.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "Kontexthilfe" #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Vertex" -msgstr "" +msgstr "Vertex" #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Fragment" -msgstr "" +msgstr "Fragment" #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Lighting" -msgstr "" +msgstr "Belichtung" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Constant" -msgstr "" +msgstr "Ändere skalare Konstante" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Constant" -msgstr "" +msgstr "Ändere Vektorkonstante" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Constant" -msgstr "" +msgstr "Ändere RGB-Konstante" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Operator" -msgstr "" +msgstr "Ändere skalaren Operator" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Operator" -msgstr "" +msgstr "Ändere Vektoroperator" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Scalar Operator" -msgstr "" +msgstr "Ändere Vektor-Skalar-Operator" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Operator" -msgstr "" +msgstr "Ändere RGB-Operator" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Toggle Rot Only" -msgstr "" +msgstr "schalte exklusive Rotation um" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Function" -msgstr "" +msgstr "Ändere skalare Funktion" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Function" -msgstr "" +msgstr "Ändere Vektorfunktion" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Uniform" -msgstr "" +msgstr "Ändere Skalar-Uniform" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Uniform" -msgstr "" +msgstr "Ändere Vektor-Uniform" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Uniform" -msgstr "" +msgstr "Ändere RGB-Uniform" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Default Value" -msgstr "" +msgstr "Ändere Standardwert" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change XForm Uniform" -msgstr "" +msgstr "Ändere XForm-Uniform" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Texture Uniform" -msgstr "" +msgstr "Ändere Textur-Uniform" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Cubemap Uniform" -msgstr "" +msgstr "Ändere Cubemap-Uniform" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Comment" -msgstr "" +msgstr "Ändere Kommentar" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Color Ramp" -msgstr "" +msgstr "Hinzufügen/Entfernen zum Farbgradienten" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Curve Map" -msgstr "" +msgstr "Hinzfügen/Entfernen zum Curve-Map" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Modify Curve Map" -msgstr "" +msgstr "Verändere Curve-Map" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Input Name" -msgstr "" +msgstr "Ändere Eingabename" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Connect Graph Nodes" -msgstr "" +msgstr "Verbinde Graph-Nodes" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Disconnect Graph Nodes" -msgstr "" +msgstr "Trenne Graph-Nodes" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Remove Shader Graph Node" -msgstr "" +msgstr "Entferne Shader-Graph-Node" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Move Shader Graph Node" -msgstr "" +msgstr "Verschiebe Shader-Graph-Node" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Duplicate Graph Node(s)" -msgstr "" +msgstr "Dupliziere Graph-Node(s)" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Delete Shader Graph Node(s)" -msgstr "" +msgstr "Entferne Shade-Graph-Node(s)" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Cyclic Connection Link" -msgstr "" +msgstr "Fehler: Zyklische Verbindung" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Missing Input Connections" -msgstr "" +msgstr "Fehler: Fehlende Eingangsverbindung" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Add Shader Graph Node" -msgstr "" +msgstr "Shader-Graph-Node hinzufügen" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" -msgstr "" +msgstr "Orthogonal" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Perspective" -msgstr "" +msgstr "Perspektive" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." -msgstr "" +msgstr "Transformation abgebrochen." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." -msgstr "" +msgstr "X-Achsen-Transformation." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Y-Axis Transform." -msgstr "" +msgstr "Y-Achsen-Transformation." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Z-Axis Transform." -msgstr "" +msgstr "Z-Achsen-Transformation." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "" +msgstr "Zeige Flächentransformation." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scaling to %s%%." -msgstr "" +msgstr "Skaliere auf %s%%." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." -msgstr "" +msgstr "Rotiere %s Grad." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View." -msgstr "" +msgstr "Sicht von unten." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Bottom" -msgstr "" +msgstr "Unten" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Top View." -msgstr "" +msgstr "Sicht von oben." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Top" -msgstr "" +msgstr "Oben" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "" +msgstr "Sicht von hinten." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Rear" -msgstr "" +msgstr "Hinten" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "" +msgstr "Sicht von Vorne." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Front" -msgstr "" +msgstr "Vorne" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Left View." -msgstr "" +msgstr "Sicht von links." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Left" -msgstr "" +msgstr "Links" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "" +msgstr "Sicht von Rechts." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Right" -msgstr "" +msgstr "Rechts" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." -msgstr "" +msgstr "Schlüsselbildeinfügen ist deaktiviert (kein Schlüsselbild eingefügt)." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." -msgstr "" +msgstr "Animationsschlüsselbild eingefügt." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Align with view" -msgstr "" +msgstr "Auf Sicht ausrichten" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Environment" -msgstr "" +msgstr "Umgebung" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" -msgstr "" +msgstr "Audiosenke" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Gizmos" -msgstr "" +msgstr "Gizmos" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" -msgstr "" +msgstr "Transformationsdialog" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "No scene selected to instance!" -msgstr "" +msgstr "Keine Szene für Instanz ausgewählt!" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Instance at Cursor" -msgstr "" +msgstr "Instanz am Mauszeiger" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Could not instance scene!" -msgstr "" +msgstr "Konnte Szene nicht instantiieren!" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "Bewegungsmodus (W)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "Rotationsmodus (E)" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" -msgstr "" +msgstr "Skalierungsmodus (R)" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" -msgstr "" +msgstr "Sicht von unten" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top View" -msgstr "Ansicht" +msgstr "Sicht von oben" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear View" -msgstr "Ansicht" +msgstr "Sicht von hinten" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Front View" -msgstr "" +msgstr "Sicht von Vorne" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left View" -msgstr "Ansicht" +msgstr "Sicht von links" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Right View" -msgstr "" +msgstr "Sicht von rechts" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "" +msgstr "Wechsle zwischen perspektivischer und orthogonaler Sicht" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Insert Animation Key" -msgstr "Animation Einfügen" +msgstr "Animations-Schlüsselbild einfügen" #: tools/editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Focus Selection" -msgstr "Skalierung Auswahl" +msgstr "zur Auswahl springen" #: tools/editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Align Selection With View" -msgstr "Alle auswählen" +msgstr "Auswahl auf Ansicht ausrichten" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform" @@ -4727,242 +5080,235 @@ msgstr "Transformation" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "" +msgstr "Lokale Koordinaten" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog.." -msgstr "" +msgstr "Transformationsdialog.." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Default Light" -msgstr "" +msgstr "Nutze Standardlicht" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Default sRGB" -msgstr "" +msgstr "Nutze Standard-sRGB" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "" +msgstr "Eine Ansicht" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" -msgstr "" +msgstr "Zwei Ansichten" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "" +msgstr "Zwei Ansichten (alternativ)" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" -msgstr "" +msgstr "Drei Ansichten" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "" +msgstr "Drei Ansichten (alternativ)" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" -msgstr "" +msgstr "Vier Ansichten" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "" +msgstr "Normale Ansicht" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" -msgstr "" +msgstr "Wireframe-Ansicht" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "" +msgstr "Overdraw-Ansicht" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Display Shadeless" -msgstr "" +msgstr "Shadeless-Ansicht" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" -msgstr "" +msgstr "Zeige Ursprung" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "View Grid" -msgstr "" +msgstr "Zeige Gitter" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" -msgstr "" +msgstr "Einrasteinstellungen" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Translate Snap:" -msgstr "" +msgstr "Einrasten verschieben:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Snap (deg.):" -msgstr "" +msgstr "Einrasten rotieren (Grad):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Snap (%):" -msgstr "" +msgstr "Einrasten skalieren (%):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" -msgstr "" +msgstr "Einstellungen für Ansichten" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Default Light Normal:" -msgstr "" +msgstr "Standardlichtnormale:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Ambient Light Color:" -msgstr "" +msgstr "Umgebungslichtfarbe:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Perspective FOV (deg.):" -msgstr "" +msgstr "Perspektivisches FOV (Grad):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "" +msgstr "Z-Anzeige nah:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "" +msgstr "Z-Anzeige fern:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" -msgstr "" +msgstr "Transformationsänderung" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Translate:" -msgstr "" +msgstr "Translation:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" -msgstr "" +msgstr "Rotation (Grad):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale (ratio):" -msgstr "" +msgstr "Skalierung (Verhältnis):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" -msgstr "" +msgstr "Typ der Transformation" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Pre" -msgstr "" +msgstr "Vorher" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Post" -msgstr "" +msgstr "Nachher" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" -msgstr "" +msgstr "Fehler: Konnte Frame-Ressource nicht laden!" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" -msgstr "" +msgstr "Frame hinzufügen" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" -msgstr "" +msgstr "Zwischenablage der Ressourcen ist leer oder enthält keine Textur!" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" -msgstr "" +msgstr "Frame einfügen" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Empty" -msgstr "" +msgstr "Empty einfügen" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "" +msgstr "Bearbeite Animationsschleife" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" -msgstr "" +msgstr "Ändere FPS-Wert der Animation" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" -msgstr "" +msgstr "(leer)" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations" -msgstr "" +msgstr "Animationen" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Speed (FPS):" -msgstr "" +msgstr "Geschwindigkeit (FPS):" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" -msgstr "" +msgstr "Animationsframes" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" -msgstr "" +msgstr "Empty einfügen (davor)" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (After)" -msgstr "" +msgstr "Empty einfügen (danach)" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Up" -msgstr "" +msgstr "Hoch" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Down" -msgstr "" +msgstr "Herunter" #: tools/editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" -msgstr "" +msgstr "StyleBox-Vorschau:" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Snap Mode:" -msgstr "Export-Modus:" +msgstr "Einrastmodus:" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "<None>" -msgstr "" +msgstr "<Nichts>" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Pixel Snap" -msgstr "Einrasten an Pixeln aktivieren" +msgstr "Pixel-Einrasten" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Grid Snap" -msgstr "Gitterabstand:" +msgstr "Gitter-Einrasten" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "Auto Slice" -msgstr "" +msgstr "Autoschnitt" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Offset:" -msgstr "Gitterverschiebung:" +msgstr "Versatz:" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Step:" -msgstr "Schritte (s):" +msgstr "Schritt:" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Separation:" -msgstr "Version:" +msgstr "Trennung:" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Texture Region" -msgstr "Texturbegrenzungseditor" +msgstr "Texturbereich" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region Editor" @@ -4970,65 +5316,64 @@ msgstr "Texturbegrenzungseditor" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" -msgstr "" +msgstr "Kann Motiv nicht speichern in Datei:" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Add All Items" -msgstr "" +msgstr "Alle Elemente hinzufügen" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Add All" -msgstr "" +msgstr "Alle hinzufügen" #: tools/editor/plugins/theme_editor_plugin.cpp #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Item" -msgstr "" +msgstr "Entferne Element" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" -msgstr "" +msgstr "Füge Klassen-Element hinzu" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" -msgstr "" +msgstr "Entferne Klassen-Element" #: tools/editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Create Empty Template" -msgstr "Lade Export Templates" +msgstr "Leeres Template erstellen" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Editor Template" -msgstr "" +msgstr "Leeres Editor-Template erstellen" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" -msgstr "" +msgstr "Kontrollkasten Radio1" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio2" -msgstr "" +msgstr "Kontrollkasten Radio2" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Item" -msgstr "" +msgstr "Element" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Check Item" -msgstr "" +msgstr "Überprüfe Element" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" -msgstr "" +msgstr "Überprüftes Element" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Has" -msgstr "" +msgstr "Enthält" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Many" -msgstr "" +msgstr "Viele" #: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp msgid "Options" @@ -5036,19 +5381,19 @@ msgstr "Optionen" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Have,Many,Several,Options!" -msgstr "" +msgstr "Enthalten,Viele,Einige,Optionen!" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" -msgstr "" +msgstr "Tab 1" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Tab 2" -msgstr "" +msgstr "Tab 2" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Tab 3" -msgstr "" +msgstr "Tab 3" #: tools/editor/plugins/theme_editor_plugin.cpp #: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp @@ -5058,108 +5403,104 @@ msgstr "Typ:" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" -msgstr "" +msgstr "Datentyp:" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Icon" -msgstr "" +msgstr "Symbol" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Style" -msgstr "" +msgstr "Stil" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Color" -msgstr "" +msgstr "Farbe" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" -msgstr "" +msgstr "Zeichne TileMap" #: tools/editor/plugins/tile_map_editor_plugin.cpp #: tools/editor/scene_tree_dock.cpp msgid "Duplicate" -msgstr "" +msgstr "Duplizieren" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" -msgstr "" +msgstr "Lösche TileMap" #: tools/editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase selection" -msgstr "Auswahl einrahmen" +msgstr "Lösche Auswahl" #: tools/editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find tile" -msgstr "Finde" +msgstr "Finde Kachel" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" -msgstr "" +msgstr "Transponieren" #: tools/editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Mirror X" -msgstr "Fehler" +msgstr "X-Koordinaten spiegeln" #: tools/editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Mirror Y" -msgstr "Fehler" +msgstr "Y-Koordinaten spiegeln" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket" -msgstr "" +msgstr "Eimer" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "" +msgstr "Wähle Kachel" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Select" -msgstr "" +msgstr "Auswählen" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 0 degrees" -msgstr "" +msgstr "Drehe auf 0 Grad" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 90 degrees" -msgstr "" +msgstr "Drehe auf 90 Grad" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 180 degrees" -msgstr "" +msgstr "Drehe auf 180 Grad" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 270 degrees" -msgstr "" +msgstr "Drehe auf 270 Grad" #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Could not find tile:" -msgstr "" +msgstr "Konnte Kachel nicht finden:" #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Item name or ID:" -msgstr "" +msgstr "Elementname oder ID:" #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" -msgstr "" +msgstr "Von Szene erstellen?" #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" -msgstr "" +msgstr "Aus Szene vereinen?" #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" -msgstr "" +msgstr "Von Szene erstellen" #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "" +msgstr "Aus Szene vereinen" #: tools/editor/plugins/tile_set_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp @@ -5180,47 +5521,47 @@ msgstr "Fehler beim Exportieren des Projekts!" #: tools/editor/project_export.cpp msgid "Error writing the project PCK!" -msgstr "" +msgstr "Fehler beim Schreiben des Projekt-PCK!" #: tools/editor/project_export.cpp msgid "No exporter for platform '%s' yet." -msgstr "" +msgstr "Kein Exporter für Plattform ‚%s‘ verfügbar." #: tools/editor/project_export.cpp msgid "Include" -msgstr "" +msgstr "Einbeziehen" #: tools/editor/project_export.cpp msgid "Change Image Group" -msgstr "" +msgstr "Ändere Bildergruppe" #: tools/editor/project_export.cpp msgid "Group name can't be empty!" -msgstr "" +msgstr "Gruppenname muss vorhanden sein!" #: tools/editor/project_export.cpp msgid "Invalid character in group name!" -msgstr "" +msgstr "Ungültiges Zeichen in Gruppenname!" #: tools/editor/project_export.cpp msgid "Group name already exists!" -msgstr "" +msgstr "Gruppenname existiert bereits!" #: tools/editor/project_export.cpp msgid "Add Image Group" -msgstr "" +msgstr "Füge Bildergruppe hinzu" #: tools/editor/project_export.cpp msgid "Delete Image Group" -msgstr "" +msgstr "Lösche Bildergruppe" #: tools/editor/project_export.cpp msgid "Atlas Preview" -msgstr "" +msgstr "Atlas-Vorschau" #: tools/editor/project_export.cpp msgid "Project Export Settings" -msgstr "" +msgstr "Projektexporteinstellungen" #: tools/editor/project_export.cpp msgid "Target" @@ -5228,7 +5569,7 @@ msgstr "Ziel" #: tools/editor/project_export.cpp msgid "Export to Platform" -msgstr "" +msgstr "Export zu Plattform" #: tools/editor/project_export.cpp msgid "Resources" @@ -5236,15 +5577,15 @@ msgstr "Ressourcen" #: tools/editor/project_export.cpp msgid "Export selected resources (including dependencies)." -msgstr "" +msgstr "Exportiere ausgewählte Ressourcen (inklusive Abhängigkeiten)." #: tools/editor/project_export.cpp msgid "Export all resources in the project." -msgstr "" +msgstr "Exportiere alle Ressourcen des Projekts." #: tools/editor/project_export.cpp msgid "Export all files in the project directory." -msgstr "" +msgstr "Exportiere alle Dateien im Projektverzeichnis." #: tools/editor/project_export.cpp msgid "Export Mode:" @@ -5262,14 +5603,18 @@ msgstr "Aktion" msgid "" "Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):" msgstr "" +"Filter um Nicht-Ressourcendateien zu exportieren (durch Kommata getrennt, z." +"B.: *.json, *.txt):" #: tools/editor/project_export.cpp msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):" msgstr "" +"Filter um vom Export auszuschließen (durch Kommata getrennt, z.B.: *.json, *." +"txt):" #: tools/editor/project_export.cpp msgid "Convert text scenes to binary on export." -msgstr "" +msgstr "Konvertiere Textszenen in Binärformat beim Exportieren." #: tools/editor/project_export.cpp msgid "Images" @@ -5281,19 +5626,20 @@ msgstr "Original behalten" #: tools/editor/project_export.cpp msgid "Compress for Disk (Lossy, WebP)" -msgstr "" +msgstr "Komprimiere für Festplattenspeicher (verlustbehaftet, WebP)" #: tools/editor/project_export.cpp msgid "Compress for RAM (BC/PVRTC/ETC)" -msgstr "" +msgstr "Komprimiere für Arbeitsspeicher (BC/PVRTC/ETC)" #: tools/editor/project_export.cpp msgid "Convert Images (*.png):" -msgstr "" +msgstr "Konvertiere Bilder (*.png):" #: tools/editor/project_export.cpp msgid "Compress for Disk (Lossy) Quality:" msgstr "" +"Qualitätseinstellungen für Kompression (verlustbehaftet, auf Festplatte):" #: tools/editor/project_export.cpp msgid "Shrink All Images:" @@ -5313,35 +5659,35 @@ msgstr "Gruppen:" #: tools/editor/project_export.cpp msgid "Compress Disk" -msgstr "" +msgstr "Komprimiere für Festplatte" #: tools/editor/project_export.cpp msgid "Compress RAM" -msgstr "" +msgstr "Komprimiere für Arbeitsspeicher" #: tools/editor/project_export.cpp msgid "Compress Mode:" -msgstr "" +msgstr "Kompressionsmodus:" #: tools/editor/project_export.cpp msgid "Lossy Quality:" -msgstr "Verlustbehaftete-Qualität:" +msgstr "Verlustbehaftete Qualität:" #: tools/editor/project_export.cpp msgid "Atlas:" -msgstr "" +msgstr "Atlas:" #: tools/editor/project_export.cpp msgid "Shrink By:" -msgstr "" +msgstr "Verkleinern nach:" #: tools/editor/project_export.cpp msgid "Preview Atlas" -msgstr "" +msgstr "Zeige Atlas-Vorschau" #: tools/editor/project_export.cpp msgid "Image Filter:" -msgstr "" +msgstr "Bildfilter:" #: tools/editor/project_export.cpp msgid "Images:" @@ -5349,40 +5695,39 @@ msgstr "Bilder:" #: tools/editor/project_export.cpp msgid "Select None" -msgstr "" +msgstr "Nichts auswählen" #: tools/editor/project_export.cpp msgid "Group" msgstr "Gruppe" #: tools/editor/project_export.cpp -#, fuzzy msgid "Samples" msgstr "Samples" #: tools/editor/project_export.cpp msgid "Sample Conversion Mode: (.wav files):" -msgstr "" +msgstr "Audio-Umwandlungs-Modus: (.wav-Dateien):" #: tools/editor/project_export.cpp msgid "Keep" -msgstr "" +msgstr "Behalten" #: tools/editor/project_export.cpp msgid "Compress (RAM - IMA-ADPCM)" -msgstr "" +msgstr "Komprimieren (RAM - IMA-ADPCM)" #: tools/editor/project_export.cpp msgid "Sampling Rate Limit (Hz):" -msgstr "" +msgstr "Grenze der Abtastrate (Hz):" #: tools/editor/project_export.cpp msgid "Trim" -msgstr "" +msgstr "Zuschneiden" #: tools/editor/project_export.cpp msgid "Trailing Silence:" -msgstr "" +msgstr "Auslaufende Stille:" #: tools/editor/project_export.cpp msgid "Script" @@ -5390,7 +5735,7 @@ msgstr "Skript" #: tools/editor/project_export.cpp msgid "Script Export Mode:" -msgstr "" +msgstr "Skript-Exportmodus:" #: tools/editor/project_export.cpp msgid "Text" @@ -5402,19 +5747,19 @@ msgstr "Kompiliert" #: tools/editor/project_export.cpp msgid "Encrypted (Provide Key Below)" -msgstr "" +msgstr "Verschlüsselt (Schlüssel unten angeben)" #: tools/editor/project_export.cpp msgid "Script Encryption Key (256-bits as hex):" -msgstr "" +msgstr "Skript-Schlüssel (256 Bit hexadezimal):" #: tools/editor/project_export.cpp msgid "Export PCK/Zip" -msgstr "" +msgstr "Exportiere PCK/Zip" #: tools/editor/project_export.cpp msgid "Export Project PCK" -msgstr "" +msgstr "Exportiere Projekt-PCK" #: tools/editor/project_export.cpp msgid "Export.." @@ -5430,90 +5775,87 @@ msgstr "Exportvorlage:" #: tools/editor/project_manager.cpp msgid "Invalid project path, the path must exist!" -msgstr "" +msgstr "Ungültiger Projektpfad, der Pfad muss existieren!" #: tools/editor/project_manager.cpp msgid "Invalid project path, engine.cfg must not exist." -msgstr "" +msgstr "Ungültiger Projektpfad, engine.cfg darf nicht existieren." #: tools/editor/project_manager.cpp msgid "Invalid project path, engine.cfg must exist." -msgstr "" +msgstr "Ungültiger Projektpfad, engine.cfg muss existieren." #: tools/editor/project_manager.cpp msgid "Imported Project" -msgstr "" +msgstr "Importiertes Projekt" #: tools/editor/project_manager.cpp msgid "Invalid project path (changed anything?)." -msgstr "" +msgstr "Ungültiger Projektpfad (etwas geändert?)." #: tools/editor/project_manager.cpp msgid "Couldn't create engine.cfg in project path." -msgstr "" +msgstr "Konnte engine.cfg in Projektpfad nicht erzeugen." #: tools/editor/project_manager.cpp -#, fuzzy msgid "The following files failed extraction from package:" -msgstr "Die folgenden Dateien fehlen:" +msgstr "Die folgenden Dateien ließen sich nicht aus dem Paket extrahieren:" #: tools/editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "Paket erfolgreich installiert!" #: tools/editor/project_manager.cpp msgid "Import Existing Project" -msgstr "" +msgstr "Existierendes Projekt importieren" #: tools/editor/project_manager.cpp msgid "Project Path (Must Exist):" -msgstr "" +msgstr "Projektpfad (muss existieren):" #: tools/editor/project_manager.cpp msgid "Project Name:" -msgstr "" +msgstr "Projektname:" #: tools/editor/project_manager.cpp msgid "Create New Project" -msgstr "" +msgstr "Erstelle neues Projekt" #: tools/editor/project_manager.cpp msgid "Project Path:" -msgstr "" +msgstr "Projektpfad:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install Project:" -msgstr "Unbenanntes Projekt" +msgstr "Installiere Projekt:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install" -msgstr "Instanz:" +msgstr "Installieren" #: tools/editor/project_manager.cpp msgid "Browse" -msgstr "" +msgstr "Durchstöbern" #: tools/editor/project_manager.cpp msgid "New Game Project" -msgstr "" +msgstr "Neues Spiel" #: tools/editor/project_manager.cpp msgid "That's a BINGO!" -msgstr "" +msgstr "Aber klar :-) !" #: tools/editor/project_manager.cpp msgid "Unnamed Project" msgstr "Unbenanntes Projekt" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" -msgstr "Wollen Sie wirklich mehr als ein Projekt öffnen?" +msgid "Are you sure to open more than one project?" +msgstr "Sollen wirklich mehrere Projekte geöffnet werden?" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" -msgstr "Wollen Sie wirklich mehr als ein Projekt ausführen?" +msgid "Are you sure to run more than one project?" +msgstr "Sollen wirklich mehrere Projekte ausgeführt werden?" #: tools/editor/project_manager.cpp msgid "Remove project from the list? (Folder contents will not be modified)" @@ -5522,8 +5864,14 @@ msgstr "" "nicht geändert)" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "Sollen wirklich %s Ordner nach Godot-Projekten durchsucht werden?" + +#: tools/editor/project_manager.cpp msgid "Project Manager" -msgstr "Projektmanager" +msgstr "Projektverwaltung" #: tools/editor/project_manager.cpp msgid "Project List" @@ -5538,6 +5886,10 @@ msgid "Scan" msgstr "Scannen" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "Wähle zu durchsuchenden Ordner" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "Neues Projekt" @@ -5547,7 +5899,7 @@ msgstr "Verlassen" #: tools/editor/project_settings.cpp msgid "Key " -msgstr "" +msgstr "Taste " #: tools/editor/project_settings.cpp msgid "Joy Button" @@ -5555,31 +5907,31 @@ msgstr "Joysticktaste" #: tools/editor/project_settings.cpp msgid "Joy Axis" -msgstr "" +msgstr "Joystickachse" #: tools/editor/project_settings.cpp msgid "Mouse Button" -msgstr "Maus-Taste" +msgstr "Maustaste" #: tools/editor/project_settings.cpp msgid "Invalid action (anything goes but '/' or ':')." -msgstr "" +msgstr "Ungültiger Name für Aktion (alle Zeichen außer ‚/‘ und ‚:‘ möglich)." #: tools/editor/project_settings.cpp msgid "Action '%s' already exists!" -msgstr "Aktion '%s' existiert bereits!" +msgstr "Aktion ‚%s‘ existiert bereits!" #: tools/editor/project_settings.cpp msgid "Rename Input Action Event" -msgstr "" +msgstr "Eingabeaktionsereignis umbenennen" #: tools/editor/project_settings.cpp msgid "Add Input Action Event" -msgstr "" +msgstr "Eingabeaktionsereignis hinzufügen" #: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp msgid "Control+" -msgstr "" +msgstr "Steuerung+" #: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp msgid "Press a Key.." @@ -5587,7 +5939,7 @@ msgstr "Drücke eine Taste.." #: tools/editor/project_settings.cpp msgid "Mouse Button Index:" -msgstr "" +msgstr "Maustasten-Index:" #: tools/editor/project_settings.cpp msgid "Left Button" @@ -5603,11 +5955,11 @@ msgstr "Mittlere Taste" #: tools/editor/project_settings.cpp msgid "Wheel Up Button" -msgstr "" +msgstr "Mausrad hoch" #: tools/editor/project_settings.cpp msgid "Wheel Down Button" -msgstr "" +msgstr "Mausrad herunter" #: tools/editor/project_settings.cpp msgid "Button 6" @@ -5627,23 +5979,24 @@ msgstr "Taste 9" #: tools/editor/project_settings.cpp msgid "Joystick Axis Index:" -msgstr "" +msgstr "Joystickachsen-Index:" #: tools/editor/project_settings.cpp msgid "Joystick Button Index:" -msgstr "" +msgstr "Joysticktasten-Index:" #: tools/editor/project_settings.cpp msgid "Add Input Action" -msgstr "" +msgstr "Füge Eingabeaktion hinzu" #: tools/editor/project_settings.cpp msgid "Erase Input Action Event" -msgstr "" +msgstr "Lösche Eingabeaktionsereignis" #: tools/editor/project_settings.cpp +#, fuzzy msgid "Toggle Persisting" -msgstr "" +msgstr "Dauerhaft umschalten" #: tools/editor/project_settings.cpp msgid "Error saving settings." @@ -5659,27 +6012,27 @@ msgstr "Übersetzung hinzufügen" #: tools/editor/project_settings.cpp msgid "Remove Translation" -msgstr "" +msgstr "Übersetzung entfernen" #: tools/editor/project_settings.cpp msgid "Add Remapped Path" -msgstr "" +msgstr "Remap-Pfad hinzufügen" #: tools/editor/project_settings.cpp msgid "Resource Remap Add Remap" -msgstr "" +msgstr "Ressourcen-Remap hinzufügen" #: tools/editor/project_settings.cpp msgid "Change Resource Remap Language" -msgstr "" +msgstr "Ändere Zielsprache des Ressourcen-Remaps" #: tools/editor/project_settings.cpp msgid "Remove Resource Remap" -msgstr "" +msgstr "Ressourcen-Remap entfernen" #: tools/editor/project_settings.cpp msgid "Remove Resource Remap Option" -msgstr "" +msgstr "Ressourcen-Remap-Option entfernen" #: tools/editor/project_settings.cpp msgid "Project Settings (engine.cfg)" @@ -5695,15 +6048,15 @@ msgstr "Eigenschaft:" #: tools/editor/project_settings.cpp msgid "Del" -msgstr "" +msgstr "Entfernen" #: tools/editor/project_settings.cpp msgid "Copy To Platform.." -msgstr "" +msgstr "Kopiere zu Plattform.." #: tools/editor/project_settings.cpp msgid "Input Map" -msgstr "" +msgstr "Eingabe Zuordnung" #: tools/editor/project_settings.cpp msgid "Action:" @@ -5715,7 +6068,7 @@ msgstr "Gerät:" #: tools/editor/project_settings.cpp msgid "Index:" -msgstr "" +msgstr "Index:" #: tools/editor/project_settings.cpp msgid "Localization" @@ -5735,7 +6088,7 @@ msgstr "Hinzufügen.." #: tools/editor/project_settings.cpp msgid "Remaps" -msgstr "" +msgstr "Remaps" #: tools/editor/project_settings.cpp msgid "Resources:" @@ -5743,15 +6096,15 @@ msgstr "Ressourcen:" #: tools/editor/project_settings.cpp msgid "Remaps by Locale:" -msgstr "" +msgstr "Remaps nach Lokalisierung:" #: tools/editor/project_settings.cpp msgid "Locale" -msgstr "" +msgstr "Lokalisierung" #: tools/editor/project_settings.cpp msgid "AutoLoad" -msgstr "" +msgstr "Autoload" #: tools/editor/project_settings.cpp msgid "Plugins" @@ -5759,15 +6112,17 @@ msgstr "Erweiterungen" #: tools/editor/property_editor.cpp msgid "Preset.." -msgstr "" +msgstr "Voreinstellungen.." #: tools/editor/property_editor.cpp +#, fuzzy msgid "Ease In" -msgstr "" +msgstr "Einfahren" #: tools/editor/property_editor.cpp +#, fuzzy msgid "Ease Out" -msgstr "" +msgstr "Ausfahren" #: tools/editor/property_editor.cpp msgid "Zero" @@ -5775,19 +6130,19 @@ msgstr "Null" #: tools/editor/property_editor.cpp msgid "Easing In-Out" -msgstr "" +msgstr "Glätten Ein-Aus" #: tools/editor/property_editor.cpp msgid "Easing Out-In" -msgstr "" +msgstr "Glätten Aus-Ein" #: tools/editor/property_editor.cpp msgid "File.." -msgstr "" +msgstr "Datei.." #: tools/editor/property_editor.cpp msgid "Dir.." -msgstr "" +msgstr "Verzeichnis.." #: tools/editor/property_editor.cpp msgid "Load" @@ -5795,67 +6150,79 @@ msgstr "Lade" #: tools/editor/property_editor.cpp msgid "Assign" -msgstr "" +msgstr "Zuweisen" #: tools/editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "" +msgstr "Fehler beim Laden der Datei: Keine Ressource!" #: tools/editor/property_editor.cpp msgid "Couldn't load image" -msgstr "" +msgstr "Konnte Bild nicht laden" #: tools/editor/property_editor.cpp msgid "Bit %d, val %d." -msgstr "" +msgstr "Bit %d, Wert %d." #: tools/editor/property_editor.cpp msgid "On" msgstr "An" #: tools/editor/property_editor.cpp +#, fuzzy msgid "Set" -msgstr "" +msgstr "Setzen" #: tools/editor/property_editor.cpp msgid "Properties:" -msgstr "" +msgstr "Eigenschaften:" #: tools/editor/property_editor.cpp msgid "Global" -msgstr "" +msgstr "Global" #: tools/editor/property_editor.cpp msgid "Sections:" -msgstr "" +msgstr "Abschnitte:" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Punkte auswählen" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Auswahlmodus" #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" -msgstr "" +msgstr "Konnte PVRTC-Werkzeug nicht ausführen:" #: tools/editor/pvrtc_compress.cpp msgid "Can't load back converted image using PVRTC tool:" msgstr "" +"Konnte PVRTC-Werkzeug nicht benutzen um konvertiertes Bild zurück zu laden:" #: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "" +msgstr "Node umhängen" #: tools/editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "" +msgstr "Ort umhängen (neue Eltern auswählen):" #: tools/editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "" +msgstr "Behalte globale Transformation" #: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp msgid "Reparent" -msgstr "" +msgstr "Umhängen" #: tools/editor/resources_dock.cpp msgid "Create New Resource" -msgstr "" +msgstr "Erstelle neue Ressource" #: tools/editor/resources_dock.cpp msgid "Open Resource" @@ -5867,19 +6234,19 @@ msgstr "Ressource speichern" #: tools/editor/resources_dock.cpp msgid "Resource Tools" -msgstr "" +msgstr "Ressourcenwerkzeuge" #: tools/editor/resources_dock.cpp msgid "Make Local" -msgstr "" +msgstr "Lokal machen" #: tools/editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "" +msgstr "Ausführungsmodus:" #: tools/editor/run_settings_dialog.cpp msgid "Current Scene" -msgstr "" +msgstr "Aktuelle Szene" #: tools/editor/run_settings_dialog.cpp msgid "Main Scene" @@ -5891,167 +6258,190 @@ msgstr "Hauptszenen Parameter:" #: tools/editor/run_settings_dialog.cpp msgid "Scene Run Settings" -msgstr "" +msgstr "Szenenausführungseinstellungen" #: tools/editor/scene_tree_dock.cpp msgid "OK :(" -msgstr "" +msgstr "Verstehe" #: tools/editor/scene_tree_dock.cpp msgid "No parent to instance a child at." +msgstr "Kein Node unter dem Unterobjekt instantiiert werden könnte vorhanden." + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." msgstr "" +"Kein Eltern-Node unter dem Szenen instantiiert werden könnten vorhanden." #: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "" +msgstr "Fehler beim Laden der Szene von %s" #: tools/editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" -msgstr "" +msgstr "Fehler beim Instanziieren von %s" #: tools/editor/scene_tree_dock.cpp msgid "Ok" -msgstr "" +msgstr "Ok" #: tools/editor/scene_tree_dock.cpp msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" +"Kann Szene %s nicht instanziieren da die aktuelle Szene in einer ihrer Nodes " +"existiert." #: tools/editor/scene_tree_dock.cpp msgid "Instance Scene(s)" -msgstr "" +msgstr "Instanz-Szene(n)" #: tools/editor/scene_tree_dock.cpp +#, fuzzy msgid "This operation can't be done on the tree root." msgstr "" +"Diese Aktion kann nicht auf der Wurzel des Szenenbaums ausgeführt werden." #: tools/editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "" +msgstr "Bewege Node innerhalb des Eltern-Nodes" #: tools/editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "" +msgstr "Bewege Nodes innerhalb des Eltern-Nodes" #: tools/editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "" +msgstr "Dupliziere Node(s)" #: tools/editor/scene_tree_dock.cpp msgid "Delete Node(s)?" -msgstr "" +msgstr "Lösche Node(s)?" #: tools/editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "" +msgstr "Diese Aktion kann nicht ohne eine Szene ausgeführt werden." #: tools/editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." -msgstr "" +msgstr "Diese Aktion benötigt ein einzelnes ausgewähltes Node." #: tools/editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "" +msgstr "Diese Aktion kann nicht auf instantiierten Szenen ausgeführt werden." #: tools/editor/scene_tree_dock.cpp msgid "Save New Scene As.." -msgstr "" +msgstr "Speichere neue Szene als.." #: tools/editor/scene_tree_dock.cpp msgid "Makes Sense!" -msgstr "" +msgstr "Verstehe!" #: tools/editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "" +msgstr "Kann nicht an Nodes von fremden Szenen arbeiten!" #: tools/editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "" +msgstr "Kann nicht an Nodes von denen die aktuelle Szene erbt arbeiten!" #: tools/editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "" +msgstr "Entferne Node(s)" #: tools/editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "" +msgstr "Erzeuge Node" #: tools/editor/scene_tree_dock.cpp msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" +"Konnte neue Szene nicht speichern. Wahrscheinlich konnten (Instanz-) " +"Abhängigkeiten nicht erfüllt werden." #: tools/editor/scene_tree_dock.cpp msgid "Error saving scene." -msgstr "" +msgstr "Fehler beim Speichern der Szene." #: tools/editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "" +msgstr "Fehler beim Duplizieren der Szene zum Speichern." #: tools/editor/scene_tree_dock.cpp msgid "Edit Groups" -msgstr "" +msgstr "Gruppen bearbeiten" #: tools/editor/scene_tree_dock.cpp msgid "Edit Connections" -msgstr "" +msgstr "Verbindungen bearbeiten" #: tools/editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "" +msgstr "Node(s) löschen" #: tools/editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "" +msgstr "Node hier anhängen" #: tools/editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "" +msgstr "Szene hier instantiieren" #: tools/editor/scene_tree_dock.cpp msgid "Change Type" -msgstr "" +msgstr "Typ ändern" #: tools/editor/scene_tree_dock.cpp msgid "Add Script" -msgstr "" +msgstr "Skript hinzufügen" #: tools/editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "" +msgstr "Aus Szene zusammenführen" #: tools/editor/scene_tree_dock.cpp msgid "Save Branch as Scene" -msgstr "" +msgstr "Speichere Verzweigung als Szene" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "Löschen (keine Bestätigung)" #: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" -msgstr "" +msgstr "Hinzufügen/Erstellen eines neuen Nodes" #: tools/editor/scene_tree_dock.cpp msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" +"Instantiiere eine Szenendatei als Node. Erzeugt eine geerbte Szene falls " +"keine Root-Node existiert." + +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "Erzeuge ein neues Skript für das ausgewählte Node." #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " "parent first." msgstr "" +"Diese Element kann nicht sichtbar gemacht werden solange das Elternelement " +"versteckt ist. Elternelement zuerst sichtbar machen." #: tools/editor/scene_tree_editor.cpp msgid "Toggle Spatial Visible" -msgstr "" +msgstr "Spatial-Sichtbarkeit umschalten" #: tools/editor/scene_tree_editor.cpp msgid "Toggle CanvasItem Visible" -msgstr "" +msgstr "CanvasItem-Sichtbarkeit umschalten" #: tools/editor/scene_tree_editor.cpp msgid "Instance:" @@ -6060,26 +6450,27 @@ msgstr "Instanz:" #: tools/editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" msgstr "" +"Ungültiger Name für ein Node, die folgenden Zeichen sind nicht gestattet:" #: tools/editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "" +msgstr "Node umbenennen" #: tools/editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "" +msgstr "Szenenbaum (Nodes):" #: tools/editor/scene_tree_editor.cpp msgid "Editable Children" -msgstr "" +msgstr "bearbeitbare Unterobjekte" #: tools/editor/scene_tree_editor.cpp msgid "Load As Placeholder" -msgstr "" +msgstr "Als Platzhalter laden" #: tools/editor/scene_tree_editor.cpp msgid "Discard Instancing" -msgstr "" +msgstr "Instantiierung verwerfen" #: tools/editor/scene_tree_editor.cpp msgid "Open in Editor" @@ -6087,115 +6478,31 @@ msgstr "Im Editor öffnen" #: tools/editor/scene_tree_editor.cpp msgid "Clear Inheritance" -msgstr "" +msgstr "Leere Vererbung" #: tools/editor/scene_tree_editor.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "" +msgstr "Vererbung wirklich leeren? (Lässt sich nicht rückgängig machen!)" #: tools/editor/scene_tree_editor.cpp msgid "Clear!" -msgstr "" +msgstr "Leeren!" #: tools/editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "Bearbeiten Abhängigkeiten.." - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "Pfad kopieren" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "Info" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "Zeige im Dateimanager" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "Re-Import.." - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "Nächstes Verzeichnis" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" +msgstr "Wähle ein Node" #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" -msgstr "" +msgstr "Ungültiger Name für Elternklasse" #: tools/editor/script_create_dialog.cpp msgid "Valid chars:" -msgstr "" +msgstr "Gültige Zeichen:" #: tools/editor/script_create_dialog.cpp msgid "Invalid class name" -msgstr "" +msgstr "Ungültiger Klassenname" #: tools/editor/script_create_dialog.cpp msgid "Valid name" @@ -6255,11 +6562,11 @@ msgstr "Built-In-Skript" #: tools/editor/script_create_dialog.cpp msgid "Create Node Script" -msgstr "" +msgstr "Erstelle Node-Skript" #: tools/editor/script_editor_debugger.cpp msgid "Bytes:" -msgstr "" +msgstr "Bytes:" #: tools/editor/script_editor_debugger.cpp msgid "Warning" @@ -6271,7 +6578,7 @@ msgstr "Fehler:" #: tools/editor/script_editor_debugger.cpp msgid "Source:" -msgstr "" +msgstr "Quelle:" #: tools/editor/script_editor_debugger.cpp msgid "Function:" @@ -6283,19 +6590,19 @@ msgstr "Fehler" #: tools/editor/script_editor_debugger.cpp msgid "Child Process Connected" -msgstr "" +msgstr "Unterprozess verbunden" #: tools/editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" -msgstr "" +msgstr "Vorherige Instanz untersuchen" #: tools/editor/script_editor_debugger.cpp msgid "Inspect Next Instance" -msgstr "" +msgstr "Nächste Instanz untersuchen" #: tools/editor/script_editor_debugger.cpp msgid "Stack Frames" -msgstr "" +msgstr "Stack Frames" #: tools/editor/script_editor_debugger.cpp msgid "Variable" @@ -6307,27 +6614,29 @@ msgstr "Fehler:" #: tools/editor/script_editor_debugger.cpp msgid "Stack Trace (if applicable):" -msgstr "" +msgstr "Stack Trace (falls geeignet):" #: tools/editor/script_editor_debugger.cpp +#, fuzzy msgid "Remote Inspector" -msgstr "" +msgstr "Ferninspektor" #: tools/editor/script_editor_debugger.cpp msgid "Live Scene Tree:" -msgstr "" +msgstr "Echtzeit Szenenbaum:" #: tools/editor/script_editor_debugger.cpp +#, fuzzy msgid "Remote Object Properties: " -msgstr "" +msgstr "Eigenschaften entfernter Objekte: " #: tools/editor/script_editor_debugger.cpp msgid "Profiler" -msgstr "" +msgstr "Profiler" #: tools/editor/script_editor_debugger.cpp msgid "Monitor" -msgstr "" +msgstr "Monitor" #: tools/editor/script_editor_debugger.cpp msgid "Value" @@ -6335,23 +6644,23 @@ msgstr "Wert" #: tools/editor/script_editor_debugger.cpp msgid "Monitors" -msgstr "" +msgstr "Monitore" #: tools/editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" -msgstr "" +msgstr "Auflistung der Grafikspeichernutzung nach Ressource:" #: tools/editor/script_editor_debugger.cpp msgid "Total:" -msgstr "" +msgstr "Insgesamt:" #: tools/editor/script_editor_debugger.cpp msgid "Video Mem" -msgstr "" +msgstr "Grafikspeicher" #: tools/editor/script_editor_debugger.cpp msgid "Resource Path" -msgstr "" +msgstr "Ressourcenpfad" #: tools/editor/script_editor_debugger.cpp msgid "Type" @@ -6359,67 +6668,82 @@ msgstr "Art" #: tools/editor/script_editor_debugger.cpp msgid "Usage" -msgstr "" +msgstr "Nutzung" #: tools/editor/script_editor_debugger.cpp msgid "Misc" -msgstr "" +msgstr "Verschiedenes" #: tools/editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "" +msgstr "Angeklicktes Control-Node:" #: tools/editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "" +msgstr "Typ des angeklickten Control-Nodes:" #: tools/editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "" +msgstr "Wurzel der Echtzeitbearbeitung:" #: tools/editor/script_editor_debugger.cpp msgid "Set From Tree" -msgstr "" +msgstr "Nach Szenenbaum einstellen" #: tools/editor/settings_config_dialog.cpp msgid "Shortcuts" -msgstr "" +msgstr "Tastenkürzel" #: tools/editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" -msgstr "" +msgstr "Ändere Lichtradius" #: tools/editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" -msgstr "" +msgstr "Ändere FOV der Kamera" #: tools/editor/spatial_editor_gizmos.cpp msgid "Change Camera Size" -msgstr "" +msgstr "Ändere Kameragröße" #: tools/editor/spatial_editor_gizmos.cpp msgid "Change Sphere Shape Radius" -msgstr "" +msgstr "Ändere Radius der Kugelform" #: tools/editor/spatial_editor_gizmos.cpp +#, fuzzy msgid "Change Box Shape Extents" -msgstr "" +msgstr "Ändere Ausmessungen der Kastenform" #: tools/editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Radius" -msgstr "" +msgstr "Ändere Radius der Kapselform" #: tools/editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Height" -msgstr "" +msgstr "Ändere Höhe der Kapselform" #: tools/editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" -msgstr "" +msgstr "Ändere Länge der Strahlenform" #: tools/editor/spatial_editor_gizmos.cpp +#, fuzzy msgid "Change Notifier Extents" -msgstr "" +msgstr "Ändere Ausmaße des Benachrichtigers" + +#~ msgid "" +#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but " +#~ "unsequenced ports were specified." +#~ msgstr "" +#~ "Eigens erstelltes Node hat keine Methode _get_output_port_unsequenced(idx," +#~ "wmem), jedoch wurden unsequenzierte Ports angegeben." + +#~ msgid "Cannot go into subdir:" +#~ msgstr "Unterordner kann nicht geöffnet werden:" + +#~ msgid "Help" +#~ msgstr "Hilfe" #~ msgid "Imported Resources" #~ msgstr "Importierte Ressourcen" diff --git a/tools/translations/de_CH.po b/tools/translations/de_CH.po index 5524736388..bc64a20805 100644 --- a/tools/translations/de_CH.po +++ b/tools/translations/de_CH.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2016-06-30 13:47+0000\n" +"PO-Revision-Date: 2016-07-17 23:44+0000\n" "Last-Translator: Christian Fisch <christian.fiesel@gmail.com>\n" "Language-Team: Swiss High German <https://hosted.weblate.org/projects/godot-" "engine/godot/de_CH/>\n" @@ -15,13 +15,15 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.7-dev\n" +"X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -57,6 +59,284 @@ msgstr "" msgid "Invalid instance dictionary (invalid subclasses)" msgstr "" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Signal" +msgstr "Script hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Variable" +msgstr "Ungültige Bilder löschen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Signal" +msgstr "Ungültige Bilder löschen" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Node" +msgstr "Node" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Node" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Node(s) From Tree" +msgstr "Node von Szene" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Base Type:" +msgstr "Typ ändern" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Available Nodes:" +msgstr "TimeScale-Node" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Change" +msgstr "Typ ändern" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "Node erstellen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Node erstellen" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -184,6 +464,10 @@ msgstr "" "VisibilityEnable2D funktioniert am besten, wenn es ein Unterobjekt erster " "Ordnung der bearbeiteten Hauptszene ist." +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -242,7 +526,7 @@ msgstr "" msgid "Cancel" msgstr "Abbrechen" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "Okay" @@ -268,8 +552,9 @@ msgstr "Alle Dateien (*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "Öffnen" @@ -392,13 +677,13 @@ msgid "Axis" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -406,7 +691,7 @@ msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -414,7 +699,7 @@ msgid "Paste" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -428,7 +713,7 @@ msgid "Clear" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "" @@ -753,6 +1038,10 @@ msgid "Optimize" msgstr "" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "Bild" @@ -802,7 +1091,8 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "" @@ -856,18 +1146,6 @@ msgstr "" msgid "Call" msgstr "" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "" @@ -918,6 +1196,7 @@ msgstr "" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -959,6 +1238,20 @@ msgstr "" msgid "Skip" msgstr "" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "" @@ -1049,10 +1342,16 @@ msgid "Create New" msgstr "" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -1162,8 +1461,9 @@ msgid "Delete selected files?" msgstr "" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "" @@ -1310,7 +1610,7 @@ msgstr "" msgid "Move Favorite Down" msgstr "" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "" @@ -1323,10 +1623,6 @@ msgid "Preview:" msgstr "" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "" @@ -1364,25 +1660,13 @@ msgid "Public Methods:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "" @@ -1800,7 +2084,7 @@ msgstr "" msgid "TileSet.." msgstr "" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "" @@ -1811,7 +2095,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Project Settings" -msgstr "" +msgstr "Projekteinstellungen" #: tools/editor/editor_node.cpp msgid "Revert Scene" @@ -1819,11 +2103,11 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Quit to Project List" -msgstr "" +msgstr "Zurück zur Projektliste" #: tools/editor/editor_node.cpp msgid "Import assets to the project." -msgstr "" +msgstr "Assets zum Projekt importieren." #: tools/editor/editor_node.cpp #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp @@ -1839,7 +2123,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." -msgstr "" +msgstr "Verschiedene Projekte oder Szenenweite Werkzeuge." #: tools/editor/editor_node.cpp msgid "Tools" @@ -1847,7 +2131,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Export the project to many platforms." -msgstr "" +msgstr "Exportiere das Projekt für viele Plattformen." #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Export" @@ -2073,7 +2357,7 @@ msgstr "" #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Export Project" -msgstr "" +msgstr "Projekt exportieren" #: tools/editor/editor_node.cpp msgid "Export Library" @@ -2215,6 +2499,90 @@ msgstr "Importiere von folgendem Node:" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2780,7 +3148,7 @@ msgstr "" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Add to Project (engine.cfg)" -msgstr "" +msgstr "Zum Projekt hinzufügen (engine.cfg)" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Import Languages:" @@ -3179,10 +3547,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "" @@ -3246,7 +3610,7 @@ msgid "Paste Pose" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" +msgid "Select Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3266,14 +3630,14 @@ msgid "Alt+RMB: Depth list selection" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "" +#, fuzzy +msgid "Move Mode" +msgstr "Bild bewegen/einfügen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" -msgstr "" +#, fuzzy +msgid "Rotate Mode" +msgstr "Node erstellen" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3307,14 +3671,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "" @@ -3371,14 +3727,6 @@ msgid "View" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "" @@ -4079,6 +4427,10 @@ msgid "Save All" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "" @@ -4099,194 +4451,186 @@ msgid "Save Theme As" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" +msgid "Close Docs" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" +msgid "Debug" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" +#: tools/editor/script_editor_debugger.cpp +msgid "Break" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" +msgid "Keep Debugger Open" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find.." +msgid "Window" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Next" +msgid "Move Left" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" +msgid "Move Right" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." +msgid "Tutorials" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." +msgid "Open https://godotengine.org at tutorials section." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." +msgid "Classes" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Debug" +msgid "Search the class hierarchy." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" +msgid "Search the reference documentation." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" +msgid "Go to previous edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" +msgid "Go to next edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" +msgid "Create Script" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Reload" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Break" +msgid "Resave" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp -msgid "Continue" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Keep Debugger Open" +msgid "Debugger" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Window" +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Left" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Right" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Tutorials" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Open https://godotengine.org at tutorials section." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Classes" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the reference documentation." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to previous edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to next edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Create Script" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"The following files are newer on disk.\n" -"What action should be taken?:" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Reload" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Resave" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Debugger" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" msgstr "" #: tools/editor/plugins/shader_editor_plugin.cpp @@ -4550,6 +4894,14 @@ msgid "Could not instance scene!" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "" @@ -5033,15 +5385,15 @@ msgstr "" #: tools/editor/project_export.cpp msgid "Please export outside the project folder!" -msgstr "" +msgstr "Bitte ausserhalb des Projekt Verzeichnis exportieren!" #: tools/editor/project_export.cpp msgid "Error exporting project!" -msgstr "" +msgstr "Fehler beim Exportieren des Projekts!" #: tools/editor/project_export.cpp msgid "Error writing the project PCK!" -msgstr "" +msgstr "Fehler beim Schreiben des Projekts PCK!" #: tools/editor/project_export.cpp msgid "No exporter for platform '%s' yet." @@ -5081,7 +5433,7 @@ msgstr "" #: tools/editor/project_export.cpp msgid "Project Export Settings" -msgstr "" +msgstr "Projektexport Einstellungen" #: tools/editor/project_export.cpp msgid "Target" @@ -5100,12 +5452,13 @@ msgid "Export selected resources (including dependencies)." msgstr "" #: tools/editor/project_export.cpp +#, fuzzy msgid "Export all resources in the project." -msgstr "" +msgstr "Exportiere alle Resources des Projekts." #: tools/editor/project_export.cpp msgid "Export all files in the project directory." -msgstr "" +msgstr "Exportiere alle Dateien in das Projektverzeichnis." #: tools/editor/project_export.cpp msgid "Export Mode:" @@ -5274,7 +5627,7 @@ msgstr "" #: tools/editor/project_export.cpp msgid "Export Project PCK" -msgstr "" +msgstr "Exportiere das Projekt PCK" #: tools/editor/project_export.cpp msgid "Export.." @@ -5282,7 +5635,7 @@ msgstr "" #: tools/editor/project_export.cpp msgid "Project Export" -msgstr "" +msgstr "Projekt exportieren" #: tools/editor/project_export.cpp msgid "Export Preset:" @@ -5290,27 +5643,27 @@ msgstr "" #: tools/editor/project_manager.cpp msgid "Invalid project path, the path must exist!" -msgstr "" +msgstr "Ungültiger Projektpfad, Pfad existiert nicht!" #: tools/editor/project_manager.cpp msgid "Invalid project path, engine.cfg must not exist." -msgstr "" +msgstr "Ungültiger Projektpfad, engine.cfg vorhanden!" #: tools/editor/project_manager.cpp msgid "Invalid project path, engine.cfg must exist." -msgstr "" +msgstr "Ungültiger Projektpfad, engine.cfg nicht vorhanden!" #: tools/editor/project_manager.cpp msgid "Imported Project" -msgstr "" +msgstr "Importierte Projekte" #: tools/editor/project_manager.cpp msgid "Invalid project path (changed anything?)." -msgstr "" +msgstr "Ungültiger Projektpfad, (wurde was geändert?)!" #: tools/editor/project_manager.cpp msgid "Couldn't create engine.cfg in project path." -msgstr "" +msgstr "Die engine.cfg kann im Projektverzeichnis nicht erstellt werden." #: tools/editor/project_manager.cpp msgid "The following files failed extraction from package:" @@ -5322,19 +5675,19 @@ msgstr "" #: tools/editor/project_manager.cpp msgid "Import Existing Project" -msgstr "" +msgstr "Existierendes Projekt importieren" #: tools/editor/project_manager.cpp msgid "Project Path (Must Exist):" -msgstr "" +msgstr "Projektpfad (muss existieren):" #: tools/editor/project_manager.cpp msgid "Project Name:" -msgstr "" +msgstr "Projektname:" #: tools/editor/project_manager.cpp msgid "Create New Project" -msgstr "" +msgstr "Neues Projekt erstellen" #: tools/editor/project_manager.cpp msgid "Project Path:" @@ -5365,11 +5718,11 @@ msgid "Unnamed Project" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "" #: tools/editor/project_manager.cpp @@ -5377,6 +5730,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "" @@ -5393,6 +5752,10 @@ msgid "Scan" msgstr "" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "" @@ -5684,6 +6047,14 @@ msgstr "" msgid "Sections:" msgstr "" +#: tools/editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: tools/editor/property_selector.cpp +msgid "Select Method" +msgstr "" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "" @@ -5757,6 +6128,10 @@ msgid "No parent to instance a child at." msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "" @@ -5886,6 +6261,11 @@ msgid "Save Branch as Scene" msgstr "" #: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete (No Confirm)" +msgstr "Bitte bestätigen..." + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "" @@ -5895,6 +6275,10 @@ msgid "" "exists." msgstr "" +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5957,90 +6341,6 @@ msgstr "" msgid "Select a Node" msgstr "" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "" diff --git a/tools/translations/es.po b/tools/translations/es.po index ce2f8c1673..f428d54d8b 100644 --- a/tools/translations/es.po +++ b/tools/translations/es.po @@ -2,35 +2,45 @@ # Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community # This file is distributed under the same license as the Godot source code. # +# Carlos López <genetita@gmail.com>, 2016. +# Ismael Ferreras Morezuelas <swyterzone+mame@gmail.com>, 2016. # Lisandro Lorea <lisandrolorea@gmail.com>, 2016. +# Roger BR <drai_kin@hotmail.com>, 2016. # Sebastian Silva <sebastian@fuentelibre.org>, 2016. +# Swyter <swyterzone@gmail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2016-07-14 01:33-0500\n" -"Last-Translator: Sebastian Silva <sebastian@fuentelibre.org>\n" -"Language-Team: SomosAzucar.Org\n" +"PO-Revision-Date: 2016-09-01 11:47+0000\n" +"Last-Translator: Roger BR <drai_kin@hotmail.com>\n" +"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" +"godot/es/>\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Virtaal 0.7.1\n" +"X-Generator: Weblate 2.8\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "Argumento de tipo inválido para convert(), use constantes TYPE_*." +msgstr "" +"El argumento para convert() no es correcto, prueba utilizando constantes " +"TYPE_*." #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" -"No hay suficientes bytes para decodificar bytes, o el formato es inválido." +"O no hay suficientes bytes para decodificar bytes o el formato no es " +"correcto." #: modules/gdscript/gd_functions.cpp msgid "step argument is zero!" -msgstr "el argumento step es cero!" +msgstr "¡El argumento «step» es cero!" #: modules/gdscript/gd_functions.cpp msgid "Not a script with an instance" @@ -46,29 +56,314 @@ msgstr "No está basado en un archivo de recursos" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "Formato de diccionario de instancias inválido (@path faltante)" +msgstr "El formato de diccionario de instancias no es correcto (falta @path)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "" -"Formato de diccionario de instancias inválido (no se puede cargar el script " -"en @path)" +"El formato de diccionario de instancias no es correcto (no se puede cargar " +"el script en @path)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" msgstr "" -"Formato de diccionario de instancias inválido (script inválido en @path)" +"El formato de diccionario de instancias no es correcto (script incorrecto en " +"@path)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" -msgstr "Diccionario de instancias inválido (subclases inválidas)" +msgstr "El diccionario de instancias no es correcto (subclases erróneas)" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"¡Un nodo ejecutó un «yield» sin memoria de trabajo. Prueba leyendo la " +"documentación sobre cómo utilizar yield!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"Un nodo ejecutó un «yield» pero no devolvió un estado de función en la " +"memoria de trabajo original." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"El valor de retorno debe asignarse al primer elemento de la memoria de " +"trabajo de nodos. Prueba arreglando el nodo." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "El nodo devolvió una secuencia de salida incorrecta: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" +"¡Se encontró un bit de secuencia pero no el nodo en la pila, informa del " +"problema!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Desbordamiento de pila en el nivel: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Funciones:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Variables:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Señales:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "El nombre no es un identificador válido:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Otra función/variable/señal ya utiliza este nombre:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Renombrar función" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Renombrar variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Renombrar señal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Añadir función" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Añadir variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Añadir señal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Quitar función" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Quitar variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Editando variable:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Quitar señal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Editando señal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Añadir nodo" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Añadir nodo hijo" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Añadir nodo/s desde árbol" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Añadir propiedad «Getter»" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Añadir propiedad «Setter»" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Editar" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Tipo base:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Miembros:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Nodos disponibles:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Selecciona o crea una función para editar el grafo" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Cerrar" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Editar argumentos de señal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Editar variable:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Cambiar" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Quitar seleccionados" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Des/activar «breakpoint»" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Buscar por tipo de nodo" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "Copiar pose" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "Crear nodo" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Pegar pose" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "El tipo de entrada no es iterable: " + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "El iterador ya no es correcto" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "El iterador ya no es correcto: " + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "El nombre de la propiedad índice no es correcto." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "¡El objeto base no es un nodo!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "¡La ruta no apunta a un nodo!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "El nombre de la propiedad índice en el nodo %s no es correcto." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": Argumento incorrecto de tipo: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Argumentos incorrectos: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "VariableGet no encontrado en el script: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "VariableSet no encontrado en el script: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" +"El nodo personalizado no tiene ningún método _step(), no se puede procesar " +"el grafo." + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" +"El valor devuelto por _step() no es correcto, debe ser un entero (seq out), " +"o string/cadena (error)." #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite to display frames." msgstr "" -"Un recurso SpriteFrames debe ser creado o definido en la propiedad 'Frames' " +"Un recurso SpriteFrames debe ser creado o seteado en la propiedad 'Frames' " "para que AnimatedSprite pueda mostrar frames." #: scene/2d/canvas_modulate.cpp @@ -123,8 +418,8 @@ msgstr "" msgid "" "An occluder polygon must be set (or drawn) for this occluder to take effect." msgstr "" -"Se debe definir(o dibujar) un polígono oclusor para que este oclusor tenga " -"efecto." +"Se debe establecer (o dibujar) un polígono oclusor para que la oclusión " +"tenga efecto." #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" @@ -135,8 +430,8 @@ msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" -"Se debe crear o definir un recurso NavigationPolygon para que este nodo " -"funcione. Por favor creá una propiedad o dibujá un polígono." +"Se debe crear o establecer un recurso NavigationPolygon para que este nodo " +"funcione. Prueba estableciendo una propiedad o dibuja un polígono." #: scene/2d/navigation_polygon.cpp msgid "" @@ -150,7 +445,7 @@ msgstr "" msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"ParallaxLayer node solo funciona cuando esta definido como hijo de un nodo " +"ParallaxLayer node solo funciona cuando esta seteado como hijo de un nodo " "ParallaxBackground." #: scene/2d/particles_2d.cpp @@ -161,7 +456,7 @@ msgstr "" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" -"PathFollow2D solo funciona cuando está definido como hijo de un nodo Path2D." +"PathFollow2D solo funciona cuando está seteado como hijo de un nodo Path2D." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -172,8 +467,8 @@ msgid "" "A SampleLibrary resource must be created or set in the 'samples' property in " "order for SamplePlayer to play sound." msgstr "" -"Un recurso SampleLibrary debe ser creado o definido en la propiedad " -"'samples' de modo que SamplePlayer pueda reproducir sonido." +"Tienes que crear o establecer un recurso de tipo SampleLibrary con la " +"propiedad 'samples' para que SamplePlayer pueda reproducir el sonido." #: scene/2d/sprite.cpp msgid "" @@ -181,15 +476,15 @@ msgid "" "must be set to 'render target' mode." msgstr "" "La propiedad Path debe apuntar a un nodo Viewport válido para funcionar. " -"Dicho Viewport debe estar configurado a modo 'render target'." +"Dicho Viewport debe ser seteado a modo 'render target'." #: scene/2d/sprite.cpp msgid "" "The Viewport set in the path property must be set as 'render target' in " "order for this sprite to work." msgstr "" -"El Viewport definido en la propiedad path debe estar configurado como " -"'render target' para que este sprite funcione." +"El Viewport seteado en la propiedad path debe ser seteado como 'render " +"target' para que este sprite funcione." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -199,6 +494,10 @@ msgstr "" "VisibilityEnable2D funciona mejor cuando se usa con la raíz de escena " "editada directamente como padre." +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance no contiene un recurso BakedLight." + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -234,7 +533,7 @@ msgstr "Un CollisionPolygon vacio no tiene ningún efecto en la colisión." #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." msgstr "" -"Se debe crear o definir un recurso NavigationMesh para que este nodo " +"Se debe crear o establecer un recurso NavigationMesh para que este nodo " "funcione." #: scene/3d/navigation_mesh.cpp @@ -242,8 +541,8 @@ msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" -"NavigationMeshInstance debe ser un hijo o nieto de un nodo Navigation. Solo " -"provee datos de navegación." +"NavigationMeshInstance debe ser un hijo o nieto de un nodo Navigation. Ya " +"que sólo proporciona los datos de navegación." #: scene/3d/scenario_fx.cpp msgid "" @@ -257,8 +556,8 @@ msgid "" "A SampleLibrary resource must be created or set in the 'samples' property in " "order for SpatialSamplePlayer to play sound." msgstr "" -"Un recurso SampleLibrary debe ser creado o definido en la propiedad " -"'samples' de modo que SpatialSamplePlayer puede reproducir sonido." +"Tienes que crear o establecer un recurso de tipo SampleLibrary con la " +"propiedad «samples» para que SpatialSamplePlayer pueda reproducir el sonido." #: scene/3d/sprite_3d.cpp msgid "" @@ -272,52 +571,53 @@ msgstr "" msgid "Cancel" msgstr "Cancelar" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" -msgstr "OK" +msgstr "Aceptar" #: scene/gui/dialogs.cpp msgid "Alert!" -msgstr "Alerta!" +msgstr "¡Advertencia!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "Confirma, por favor..." +msgstr "Confirmar decisión..." #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "El Archivo Existe, Sobreescribir?" +msgstr "El archivo ya existe, ¿quieres sobreescribirlo?" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Recognized" -msgstr "Todas Reconocidas" +msgstr "Reconocidos" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Files (*)" -msgstr "Todos los Archivos (*)" +msgstr "Todos los archivos (*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "Abrir" #: scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "Abrir un Archivo" +msgstr "Abrir un archivo" #: scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "Abrir Archivo(s)" +msgstr "Abrir archivo/s" #: scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "Abrir un Directorio" +msgstr "Abrir una carpeta" #: scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "Abrir un Archivo o Directorio" +msgstr "Abrir un archivo o carpeta" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_node.cpp @@ -328,12 +628,12 @@ msgstr "Guardar" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Save a File" -msgstr "Guardar un Archivo" +msgstr "Guardar un archivo" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp msgid "Create Folder" -msgstr "Crear Carpeta" +msgstr "Crear carpeta" #: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp #: tools/editor/editor_file_dialog.cpp @@ -344,7 +644,7 @@ msgstr "Ruta:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Directories & Files:" -msgstr "Directorios y Archivos:" +msgstr "Carpetas y archivos:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/script_editor_debugger.cpp @@ -373,7 +673,7 @@ msgstr "Debe ser una extensión válida." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp msgid "Shift+" -msgstr "Shift+" +msgstr "Mayús+" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp @@ -399,36 +699,36 @@ msgstr "Botón" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Left Button." -msgstr "Botón Izquierdo." +msgstr "Botón izquierdo." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Right Button." -msgstr "Botón Derecho." +msgstr "Botón derecho." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Middle Button." -msgstr "Botón del Medio." +msgstr "Botón central." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Wheel Up." -msgstr "Rueda Arriba." +msgstr "Rueda hacia arriba." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Wheel Down." -msgstr "Rueda Abajo." +msgstr "Rueda hacia abajo." #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Axis" msgstr "Eje" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "Cortar" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -436,7 +736,7 @@ msgstr "Copiar" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -444,21 +744,21 @@ msgid "Paste" msgstr "Pegar" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" -msgstr "Seleccionar Todo" +msgstr "Seleccionar todo" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp #: tools/editor/plugins/animation_tree_editor_plugin.cpp #: tools/editor/plugins/rich_text_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Clear" -msgstr "Limpiar" +msgstr "Borrar todo" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "Deshacer" @@ -480,15 +780,15 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"Este viewport no está configurado como render target. Si tenés intención de " -"que muestre contenidos directo a la pantalla, hacelo un hijo de un Control " -"para que pueda obtener un tamaño. Alternativamente, hacelo un RenderTarget y " +"Este viewport no está seteado como render target. Si tenés intención de que " +"muestre contenidos directo a la pantalla, hacelo un hijo de un Control para " +"que pueda obtener un tamaño. Alternativamente, hacelo un RenderTarget y " "asigná su textura interna a algún otro nodo para mostrar." #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Error initializing FreeType." -msgstr "Error inicializando FreeType." +msgstr "Error al arrancar FreeType." #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp @@ -498,12 +798,12 @@ msgstr "Formato de tipografía desconocido." #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Error loading font." -msgstr "Error cargando tipografía." +msgstr "Error al cargar la tipografía." #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Invalid font size." -msgstr "Tamaño de tipografía inválido." +msgstr "Tamaño de tipografía incorrecto." #: tools/editor/animation_editor.cpp msgid "Disabled" @@ -511,93 +811,92 @@ msgstr "Desactivado" #: tools/editor/animation_editor.cpp msgid "All Selection" -msgstr "Toda la Selección" +msgstr "Toda la selección" #: tools/editor/animation_editor.cpp msgid "Move Add Key" -msgstr "Mover Agregar Clave" +msgstr "Mover o añadir clave" #: tools/editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Cambiar Transición de Anim" +msgstr "Cambiar transición de animación" #: tools/editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "Cambiar Transform de Anim" +msgstr "Cambiar transformación de animación" #: tools/editor/animation_editor.cpp msgid "Anim Change Value" -msgstr "Cambiar Valor de Anim" +msgstr "Cambiar valor de animación" #: tools/editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "Cambiar Call de Anim" +msgstr "Cambiar llamada de animación" #: tools/editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "Agregar Track de Anim" +msgstr "Añadir pista de animación" #: tools/editor/animation_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Duplicar Claves de Anim" +msgstr "Duplicar claves de animación" #: tools/editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "Subir Track de Anim" +msgstr "Subir pista de animación" #: tools/editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "Bajar Track de Anim" +msgstr "Bajar pista de animación" #: tools/editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "Quitar Track de Anim" +msgstr "Quitar pista de animación" #: tools/editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "Definir Transiciones a:" +msgstr "Establecer transiciones en:" #: tools/editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "Renombrar Track de Anim" +msgstr "Renombrar pista de animación" #: tools/editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "Cambiar Interpolación de Track de Anim" +msgstr "Cambiar interpolación de pista de animación" #: tools/editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "Cambiar Modo de Valor de Track de Anim" +msgstr "Cambiar modo de valor de pista de animación" #: tools/editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "Editar Nodo Curva" +msgstr "Editar nodo de curva" #: tools/editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "Editar Curva de Selección" +msgstr "Editar curva de selección" #: tools/editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "Borrar Claves de Anim" +msgstr "Borrar claves de animación" #: tools/editor/animation_editor.cpp #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "Duplicar Selección" +msgstr "Duplicar selección" #: tools/editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "Duplicar Transpuesto" +msgstr "Duplicar transpuesto" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Remove Selection" -msgstr "Encuadrar Selección" +msgstr "Quitar selección" #: tools/editor/animation_editor.cpp msgid "Continuous" -msgstr "Contínuo" +msgstr "Continuo" #: tools/editor/animation_editor.cpp msgid "Discrete" @@ -609,27 +908,27 @@ msgstr "Trigger" #: tools/editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "Agregar Clave de Anim" +msgstr "Añadir clave de animación" #: tools/editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "Mover Claves de Anim" +msgstr "Mover claves de animación" #: tools/editor/animation_editor.cpp msgid "Scale Selection" -msgstr "Escalar Selección" +msgstr "Escalar selección" #: tools/editor/animation_editor.cpp msgid "Scale From Cursor" -msgstr "Escalar Desde Cursor" +msgstr "Escalar desde cursor" #: tools/editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "Ir a Paso Próximo" +msgstr "Ir al siguiente paso" #: tools/editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "Ir a Paso Previo" +msgstr "Ir al paso anterior" #: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp msgid "Linear" @@ -642,19 +941,19 @@ msgstr "Constante" #: tools/editor/animation_editor.cpp msgid "In" -msgstr "In" +msgstr "Entrada" #: tools/editor/animation_editor.cpp msgid "Out" -msgstr "Out" +msgstr "Salida" #: tools/editor/animation_editor.cpp msgid "In-Out" -msgstr "In-Out" +msgstr "Entrada-salida" #: tools/editor/animation_editor.cpp msgid "Out-In" -msgstr "Out-In" +msgstr "Salida-entrada" #: tools/editor/animation_editor.cpp msgid "Transitions" @@ -662,19 +961,19 @@ msgstr "Transiciones" #: tools/editor/animation_editor.cpp msgid "Optimize Animation" -msgstr "Optimizar Animación" +msgstr "Optimizar animación" #: tools/editor/animation_editor.cpp msgid "Clean-Up Animation" -msgstr "Hacer Clean-Up de Animación" +msgstr "Limpiar animación" #: tools/editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "Crear NUEVO track para %s e insertar clave?" +msgstr "¿Quieres crear una NUEVA pista para %s e insertar clave?" #: tools/editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "Crear %d NUEVOS tracks e insertar claves?" +msgstr "¿Quieres crear %d NUEVOS pistas e insertar claves?" #: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -687,39 +986,40 @@ msgstr "Crear" #: tools/editor/animation_editor.cpp msgid "Anim Create & Insert" -msgstr "Crear e Insertar Anim" +msgstr "Crear e insertar animación" #: tools/editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "Insertar Track y Clave de Anim" +msgstr "Insertar pista y clave de animación" #: tools/editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "Insertar Clave de Anim" +msgstr "Insertar clave de animación" #: tools/editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "Cambiar Largo de Anim" +msgstr "Cambiar duración de animación" #: tools/editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "Cambiar Loop de Anim" +msgstr "Cambiar repeticiones de animación" #: tools/editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "Crear Clave de Valor Tipado para Anim" +msgstr "Crear clave de valor de tipo para animación" #: tools/editor/animation_editor.cpp msgid "Anim Insert" -msgstr "Insertar Anim" +msgstr "Insertar animación" #: tools/editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "Escalar Keys de Anim" +msgstr "Escalar claves de animación" #: tools/editor/animation_editor.cpp +#, fuzzy msgid "Anim Add Call Track" -msgstr "Agregar Call Track para Anim" +msgstr "Añadir «call track» de animación" #: tools/editor/animation_editor.cpp msgid "Animation zoom." @@ -727,11 +1027,11 @@ msgstr "Zoom de animación." #: tools/editor/animation_editor.cpp msgid "Length (s):" -msgstr "Largo (s):" +msgstr "Duración (seg.):" #: tools/editor/animation_editor.cpp msgid "Animation length (in seconds)." -msgstr "Largo de Animación (en segundos)." +msgstr "Duración de animación (en segundos)." #: tools/editor/animation_editor.cpp msgid "Step (s):" @@ -743,53 +1043,59 @@ msgstr "Snap de cursor por pasos (en segundos)." #: tools/editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "Activar/Desactivar loopeo en la animación." +msgstr "Repetir o no la animación." #: tools/editor/animation_editor.cpp msgid "Add new tracks." -msgstr "Agregar nuevos tracks." +msgstr "Añadir nuevas pistas." #: tools/editor/animation_editor.cpp msgid "Move current track up." -msgstr "Subir el track actual." +msgstr "Subir la pista actual." #: tools/editor/animation_editor.cpp msgid "Move current track down." -msgstr "Bajar el track actual." +msgstr "Bajar la pista actual." #: tools/editor/animation_editor.cpp msgid "Remove selected track." -msgstr "Quitar el track seleccionado." +msgstr "Quitar el pista seleccionada." #: tools/editor/animation_editor.cpp msgid "Track tools" -msgstr "Herramientas de tracks" +msgstr "Herramientas de pistas" #: tools/editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "Activar la edición de claves individuales al cliquearlas." +msgstr "Editar claves individuales al hacer clic." #: tools/editor/animation_editor.cpp msgid "Anim. Optimizer" -msgstr "Optimizador de Anim." +msgstr "Optimizar animación" #: tools/editor/animation_editor.cpp msgid "Max. Linear Error:" -msgstr "Error Lineal Max.:" +msgstr "Máximo error lineal:" #: tools/editor/animation_editor.cpp msgid "Max. Angular Error:" -msgstr "Error Angular Max.:" +msgstr "Máximo error angular:" #: tools/editor/animation_editor.cpp msgid "Max Optimizable Angle:" -msgstr "Angulo Optimizable Max.:" +msgstr "Máximo ángulo optimizable:" #: tools/editor/animation_editor.cpp msgid "Optimize" msgstr "Optimizar" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" +"Selecciona un AnimationPlayer desde el árbol de escenas para editar " +"animaciones." + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "Clave" @@ -799,47 +1105,48 @@ msgstr "Transición" #: tools/editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "Ratio de Escala:" +msgstr "Relación de escalado:" #: tools/editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "Llamar Funciones en Cual Nodo?" +msgstr "¿En qué nodo quieres llamar funciones?" #: tools/editor/animation_editor.cpp msgid "Remove invalid keys" -msgstr "Quitar claves inválidas" +msgstr "Quitar claves incorrectas" #: tools/editor/animation_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "Quitar tracks vacios y sin resolver" +msgstr "Quitar pistas vacías y sin resolver" #: tools/editor/animation_editor.cpp msgid "Clean-up all animations" -msgstr "Hacer clean-up de todas las animaciones" +msgstr "Limpiar todas las animaciones" #: tools/editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "Hacer Clean-Up de Animación(es) (IMPOSIBLE DESHACER!)" +msgstr "Limpiar todas las animaciones (IRREVERSIBLE)" #: tools/editor/animation_editor.cpp msgid "Clean-Up" -msgstr "Clean-Up" +msgstr "Limpiar" #: tools/editor/array_property_edit.cpp msgid "Resize Array" -msgstr "Redimencionar Array" +msgstr "Redimensionar «array»" #: tools/editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "Cambiar Tipo de Valor del Array" +msgstr "Cambiar tipo de valor del «array»" #: tools/editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "Cambiar Valor del Array" +msgstr "Cambiar valor del «array»" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "Buscar:" @@ -867,7 +1174,7 @@ msgstr "Sitio:" #: tools/editor/asset_library_editor_plugin.cpp msgid "Support.." -msgstr "Soporte.." +msgstr "Ayuda..." #: tools/editor/asset_library_editor_plugin.cpp msgid "Official" @@ -879,35 +1186,23 @@ msgstr "Comunidad" #: tools/editor/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "Testeo" +msgstr "Prueba" #: tools/editor/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "Archivo ZIP de Assets" +msgstr "Archivo ZIP de elementos" #: tools/editor/call_dialog.cpp msgid "Method List For '%s':" -msgstr "Lista de Métodos Para '%s':" +msgstr "Lista de métodos Para '%s':" #: tools/editor/call_dialog.cpp msgid "Call" -msgstr "Llamar" - -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "Cerrar" +msgstr "Llamada" #: tools/editor/call_dialog.cpp msgid "Method List:" -msgstr "Lista de Métodos:" +msgstr "Lista de métodos:" #: tools/editor/call_dialog.cpp msgid "Arguments:" @@ -915,23 +1210,23 @@ msgstr "Argumentos:" #: tools/editor/call_dialog.cpp msgid "Return:" -msgstr "Retornar:" +msgstr "Devuelve:" #: tools/editor/code_editor.cpp msgid "Go to Line" -msgstr "Ir a Línea" +msgstr "Ir a línea" #: tools/editor/code_editor.cpp msgid "Line Number:" -msgstr "Numero de Línea:" +msgstr "Número de línea:" #: tools/editor/code_editor.cpp msgid "No Matches" -msgstr "Sin Coincidencias" +msgstr "Sin soincidencias" #: tools/editor/code_editor.cpp msgid "Replaced %d Ocurrence(s)." -msgstr "%d Ocurrencia(s) Reemplazada(s)." +msgstr "%d ocurrencias reemplazadas." #: tools/editor/code_editor.cpp msgid "Replace" @@ -939,22 +1234,23 @@ msgstr "Reemplazar" #: tools/editor/code_editor.cpp msgid "Replace All" -msgstr "Reemplazar Todo" +msgstr "Reemplazar todo" #: tools/editor/code_editor.cpp msgid "Match Case" -msgstr "Coincidir Mayúsculas/Minúsculas" +msgstr "Coincidir mayús/minúsculas" #: tools/editor/code_editor.cpp msgid "Whole Words" -msgstr "Palabras Completas" +msgstr "Palabras completas" #: tools/editor/code_editor.cpp msgid "Selection Only" -msgstr "Solo Selección" +msgstr "Sólo selección" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -962,7 +1258,7 @@ msgstr "Buscar" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp msgid "Find" -msgstr "Encontrar" +msgstr "Búsqueda" #: tools/editor/code_editor.cpp msgid "Next" @@ -970,47 +1266,61 @@ msgstr "Siguiente" #: tools/editor/code_editor.cpp msgid "Replaced %d ocurrence(s)." -msgstr "%d Ocurrencia(s) Reemplazadas." +msgstr "%d ocurrencias reemplazadas." #: tools/editor/code_editor.cpp msgid "Not found!" -msgstr "No se encontró!" +msgstr "¡No se ha encontrado!" #: tools/editor/code_editor.cpp msgid "Replace By" -msgstr "Reemplazar Por" +msgstr "Reemplazar por" #: tools/editor/code_editor.cpp msgid "Case Sensitive" -msgstr "Respetar Mayúsculas/Minúsculas" +msgstr "Respetar mayús/minúsculas" #: tools/editor/code_editor.cpp msgid "Backwards" -msgstr "Hacia Atrás" +msgstr "Hacia atrás" #: tools/editor/code_editor.cpp msgid "Prompt On Replace" -msgstr "Preguntar Antes de Reemplazar" +msgstr "Preguntar antes de reemplazar" #: tools/editor/code_editor.cpp msgid "Skip" -msgstr "Saltear" +msgstr "Saltar" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Acercar" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Alejar" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Restablecer zoom" #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" -msgstr "Linea:" +msgstr "Línea:" #: tools/editor/code_editor.cpp msgid "Col:" -msgstr "Col:" +msgstr "Columna:" #: tools/editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "El método en el Nodo objetivo debe ser especificado!" +msgstr "¡Debes establecer un método en el nodo seleccionado!" #: tools/editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "Conectar a Nodo:" +msgstr "Conectar a nodo:" #: tools/editor/connections_dialog.cpp #: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp @@ -1018,7 +1328,7 @@ msgstr "Conectar a Nodo:" #: tools/editor/plugins/theme_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Add" -msgstr "Agregar" +msgstr "Añadir" #: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp #: tools/editor/plugins/animation_tree_editor_plugin.cpp @@ -1028,20 +1338,21 @@ msgid "Remove" msgstr "Quitar" #: tools/editor/connections_dialog.cpp +#, fuzzy msgid "Add Extra Call Argument:" -msgstr "Agregar Argumento de Llamada Extra:" +msgstr "Añadir argumento de llamada extra:" #: tools/editor/connections_dialog.cpp msgid "Extra Call Arguments:" -msgstr "Argumentos de Llamada Extras:" +msgstr "Argumentos de llamada extras:" #: tools/editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "Ruta al Nodo:" +msgstr "Ruta al nodo:" #: tools/editor/connections_dialog.cpp msgid "Make Function" -msgstr "Crear Función" +msgstr "Crear runción" #: tools/editor/connections_dialog.cpp msgid "Deferred" @@ -1049,7 +1360,7 @@ msgstr "Diferido" #: tools/editor/connections_dialog.cpp msgid "Oneshot" -msgstr "Oneshot" +msgstr "Una vez" #: tools/editor/connections_dialog.cpp msgid "Connect" @@ -1057,19 +1368,19 @@ msgstr "Conectar" #: tools/editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "Conectar '%s' a '%s'" +msgstr "Conectar «%s» a «%s»" #: tools/editor/connections_dialog.cpp msgid "Connecting Signal:" -msgstr "Conectando Señal:" +msgstr "Conectando señal:" #: tools/editor/connections_dialog.cpp msgid "Create Subscription" -msgstr "Crear Subscripción" +msgstr "Crear suscripción" #: tools/editor/connections_dialog.cpp msgid "Connect.." -msgstr "Conectar.." +msgstr "Conectar..." #: tools/editor/connections_dialog.cpp #: tools/editor/plugins/animation_tree_editor_plugin.cpp @@ -1082,34 +1393,42 @@ msgstr "Señales" #: tools/editor/create_dialog.cpp msgid "Create New" -msgstr "Crear Nuevo" +msgstr "Crear nuevo" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "Coincidencias:" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Descripción:" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "Buscar Reemplazo Para:" +msgstr "Buscar reemplazo para:" #: tools/editor/dependency_editor.cpp msgid "Dependencies For:" -msgstr "Dependencias Para:" +msgstr "Dependencias para:" #: tools/editor/dependency_editor.cpp msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" -"La Escena '%s' esta siendo editada actualmente.\n" -"Los cambios no tendrán efecto hasta recargarlo." +"Estás editando la escena «%s».\n" +"Por lo que los cambios no tendrán efecto hasta que recargues." #: tools/editor/dependency_editor.cpp msgid "" "Resource '%s' is in use.\n" "Changes will take effect when reloaded." -msgstr "El recurso '%s' está en uso. Los cambios tendrán efecto al recargarlo." +msgstr "" +"Se está usando el recurso «%s».\n" +"Por lo que los cambios no tendrán efecto hasta que recargues." #: tools/editor/dependency_editor.cpp msgid "Dependencies" @@ -1130,19 +1449,19 @@ msgstr "Dependencias:" #: tools/editor/dependency_editor.cpp msgid "Fix Broken" -msgstr "Arreglar Rota(s)" +msgstr "Arreglar rota(s)" #: tools/editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "Editor de Dependencias" +msgstr "Editor de dependencias" #: tools/editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "Buscar Reemplazo de Recurso:" +msgstr "Buscar reemplazo de recurso:" #: tools/editor/dependency_editor.cpp msgid "Owners Of:" -msgstr "Dueños De:" +msgstr "Dueños de:" #: tools/editor/dependency_editor.cpp msgid "" @@ -1150,143 +1469,140 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" -"Los archivos que se están removiendo son requeridos por otros recursos para " +"Otros recursos necesitan los archivos que estás intentando quitar para " "funcionar.\n" -"Quitarlos de todos modos? (imposible deshacer)" +"¿Seguro que quieres quitarlos? (No puedes deshacerlo)" #: tools/editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" -msgstr "Quitar los archivos seleccionados del proyecto? (imposible deshacer)" +msgstr "" +"¿Quieres quitar los archivos seleccionados del proyecto? (No puedes " +"deshacerlo)" #: tools/editor/dependency_editor.cpp msgid "Error loading:" -msgstr "Error cargando:" +msgstr "Error al cargar:" #: tools/editor/dependency_editor.cpp msgid "Scene failed to load due to missing dependencies:" -msgstr "" -"La escena falló al cargar debido a las siguientes dependencias faltantes:" +msgstr "La escena no se pudo cargar porque faltan las siguientes dependencias:" #: tools/editor/dependency_editor.cpp msgid "Open Anyway" -msgstr "Abrir de Todos Modos" +msgstr "Abrir de todos modos" #: tools/editor/dependency_editor.cpp msgid "Which action should be taken?" -msgstr "Que Acción Se Debería Tomar?" +msgstr "¿Qué es lo que quieres hacer?" #: tools/editor/dependency_editor.cpp msgid "Fix Dependencies" -msgstr "Arreglar Dependencias" +msgstr "Arreglar dependencias" #: tools/editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "Errores al cargar!" +msgstr "¡Hubo errores al cargar!" #: tools/editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "Eliminar permanentemente %d item(s)? (Imposible deshacer!)" +msgstr "¿Quieres eliminar permanentemente %d elementos? (Irreversible)" #: tools/editor/dependency_editor.cpp msgid "Owns" -msgstr "Es Dueño De" +msgstr "Es dueño de" #: tools/editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "Recursos Sin Propietario Explícito:" +msgstr "Recursos sin propietario explícito:" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp msgid "Orphan Resource Explorer" -msgstr "Explorador de Recursos Huérfanos" +msgstr "Explorador de recursos huérfanos" #: tools/editor/dependency_editor.cpp msgid "Delete selected files?" -msgstr "Eliminar archivos seleccionados?" +msgstr "¿Quieres eliminar los archivos seleccionados?" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "Eliminar" #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "Nombre inválido." +msgstr "El nombre no es correcto." #: tools/editor/editor_autoload_settings.cpp msgid "Valid characters:" -msgstr "Caracteres válidos:" +msgstr "Letras válidas:" #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." msgstr "" -"Nombre inválido. No debe colisionar con un nombre existente de clases del " -"engine." +"El nombre no es correcto. No puede coincidir con un nombre de clase que ya " +"existe en el motor gráfico." #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing buit-in type name." msgstr "" -"Nombre inválido. No debe colisionar con un nombre existente de un tipo built-" -"in." +"El nombre no es correcto. No puede coincidir con un nombre de tipo " +"predeterminado que ya existe en el motor gráfico." #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing global constant name." msgstr "" -"Nombre inválido. No debe colisionar con un nombre de constante global " -"existente." +"El nombre no es correcto. No puede coincidir con un nombre de constante " +"global que ya existe en el motor gráfico." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid Path." -msgstr "Ruta inválida!" +msgstr "Ruta incorrecta." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "File does not exist." -msgstr "El archivo existe" +msgstr "El archivo existe." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." -msgstr "Ruta de Recursos" +msgstr "No está en la ruta de recursos." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Add AutoLoad" -msgstr "Agregar Autoload" +msgstr "Añadir «AutoLoad»" #: tools/editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" -msgstr "Autocargar '%s' ya existe!" +msgstr "¡El Autoload «%s» ya existe!" #: tools/editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "Renombrar Autoload" +msgstr "Renombrar «Autoload»" #: tools/editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "Act/Desact. AutoLoad Globals" +msgstr "Des/activar globales de «Autoload»" #: tools/editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "Mover Autoload" +msgstr "Mover «Autoload»" #: tools/editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "Quitar Autoload" +msgstr "Quitar «Autoload»" #: tools/editor/editor_autoload_settings.cpp msgid "Enable" msgstr "Activar" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rearrange Autoloads" -msgstr "Renombrar Autoload" +msgstr "Reordenar «Autoloads»" #: tools/editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "Nombre de Nodo:" +msgstr "Nombre del nodo:" #: tools/editor/editor_autoload_settings.cpp #: tools/editor/io_plugins/editor_scene_import_plugin.cpp @@ -1297,7 +1613,7 @@ msgstr "Nombre" #: tools/editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "Singleton" +msgstr "«Singleton»" #: tools/editor/editor_autoload_settings.cpp msgid "List:" @@ -1305,7 +1621,7 @@ msgstr "Lista:" #: tools/editor/editor_data.cpp msgid "Updating Scene" -msgstr "Actualizando Escena" +msgstr "Actualizando escena" #: tools/editor/editor_data.cpp msgid "Storing local changes.." @@ -1317,7 +1633,7 @@ msgstr "Actualizando escena.." #: tools/editor/editor_dir_dialog.cpp msgid "Choose a Directory" -msgstr "Elige un Directorio" +msgstr "Elige una carpeta" #: tools/editor/editor_dir_dialog.cpp msgid "Choose" @@ -1337,35 +1653,33 @@ msgstr "Subir" #: tools/editor/editor_file_dialog.cpp msgid "Refresh" -msgstr "Refrescar" +msgstr "Recargar" #: tools/editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "Act/Desact. Archivos Ocultos" +msgstr "Ver/ocultar archivos ocultos" #: tools/editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "Act/Desact. Favorito" +msgstr "Añadir/quitar favorito" #: tools/editor/editor_file_dialog.cpp msgid "Toggle Mode" -msgstr "Act/Desact. Modo" +msgstr "Cambiar modo" #: tools/editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "Foco en Ruta" +msgstr "Seleccionar ruta" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" -msgstr "Mover Favorito Hacia Arriba" +msgstr "Subir favorito" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" -msgstr "Mover Favorito Hacia Abajo" +msgstr "Bajar favorito" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "Favoritos:" @@ -1375,27 +1689,23 @@ msgstr "Recientes:" #: tools/editor/editor_file_dialog.cpp msgid "Preview:" -msgstr "Vista Previa:" - -#: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "No se puede acceder al subdir:" +msgstr "Vista previa:" #: tools/editor/editor_file_system.cpp msgid "ScanSources" -msgstr "EscanearFuentes" +msgstr "AnalizandoFuentes" #: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "Ayuda de Búsqueda" +msgstr "Ayuda de búsqueda" #: tools/editor/editor_help.cpp msgid "Class List:" -msgstr "Lista de Clases:" +msgstr "Lista de clases:" #: tools/editor/editor_help.cpp msgid "Search Classes" -msgstr "Buscar Clases" +msgstr "Buscar clases" #: tools/editor/editor_help.cpp tools/editor/property_editor.cpp msgid "Class:" @@ -1412,47 +1722,35 @@ msgstr "Heredada por:" #: tools/editor/editor_help.cpp msgid "Brief Description:" -msgstr "Descripción Breve:" +msgstr "Descripción breve:" #: tools/editor/editor_help.cpp msgid "Public Methods:" -msgstr "Métodos Públicos:" - -#: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "Miembros:" +msgstr "Métodos públicos:" #: tools/editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "Items de Tema de la GUI:" - -#: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "Señales:" +msgstr "Elementos de tema de interfaz:" #: tools/editor/editor_help.cpp msgid "Constants:" msgstr "Constantes:" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Descripción:" - #: tools/editor/editor_help.cpp msgid "Method Description:" -msgstr "Descripción de Métodos:" +msgstr "Descripción de métodos:" #: tools/editor/editor_help.cpp msgid "Search Text" -msgstr "Texto de Búsqueda" +msgstr "Texto de búsqueda" #: tools/editor/editor_import_export.cpp msgid "Added:" -msgstr "Agregado:" +msgstr "Añadido:" #: tools/editor/editor_import_export.cpp msgid "Removed:" -msgstr "Removido:" +msgstr "Eliminado:" #: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp msgid "Error saving atlas:" @@ -1460,11 +1758,11 @@ msgstr "Error al guardar atlas:" #: tools/editor/editor_import_export.cpp msgid "Could not save atlas subtexture:" -msgstr "No se pudo guardar la subtextura de altas:" +msgstr "No se pudo guardar la subtextura del altas:" #: tools/editor/editor_import_export.cpp msgid "Storing File:" -msgstr "Almacenando Archivo:" +msgstr "Almacén de archivo:" #: tools/editor/editor_import_export.cpp msgid "Packing" @@ -1476,7 +1774,7 @@ msgstr "Exportando para %s" #: tools/editor/editor_import_export.cpp msgid "Setting Up.." -msgstr "Configurando.." +msgstr "Configurando..." #: tools/editor/editor_log.cpp msgid " Output:" @@ -1492,23 +1790,23 @@ msgstr "Importando:" #: tools/editor/editor_node.cpp msgid "Node From Scene" -msgstr "Nodo desde Escena" +msgstr "Nodo desde escena" #: tools/editor/editor_node.cpp #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/resources_dock.cpp msgid "Error saving resource!" -msgstr "Error al guardar el recurso!" +msgstr "¡Hubo un error al guardar el recurso!" #: tools/editor/editor_node.cpp #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/resources_dock.cpp msgid "Save Resource As.." -msgstr "Guardar Recurso Como.." +msgstr "Guardar recurso como.." #: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp msgid "I see.." -msgstr "Ya Veo.." +msgstr "Muy bien..." #: tools/editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1516,15 +1814,15 @@ msgstr "No se puede abrir el archivo para escribir:" #: tools/editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "Formato requerido de archivo desconocido:" +msgstr "Formato de archivo desconocido:" #: tools/editor/editor_node.cpp msgid "Error while saving." -msgstr "Error al grabar." +msgstr "Error al guardar." #: tools/editor/editor_node.cpp msgid "Saving Scene" -msgstr "Guardar Escena" +msgstr "Guardar escena" #: tools/editor/editor_node.cpp msgid "Analyzing" @@ -1532,87 +1830,87 @@ msgstr "Analizando" #: tools/editor/editor_node.cpp msgid "Creating Thumbnail" -msgstr "Creando Miniatura" +msgstr "Creando miniatura" #: tools/editor/editor_node.cpp msgid "" "Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." msgstr "" -"No se pudo guardar la escena. Probablemente no se hayan podido satisfacer " -"dependencias (instancias)." +"No se pudo guardar la escena. Es posible que no se hayan podido satisfacer " +"las dependencias (instancias)." #: tools/editor/editor_node.cpp msgid "Failed to load resource." -msgstr "Fallo al cargar recurso." +msgstr "Hubo un problema al cargar el recurso." #: tools/editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "No se puede cargar MeshLibrary para fusionar!" +msgstr "¡No se puede cargar MeshLibrary para poder unir los datos!" #: tools/editor/editor_node.cpp msgid "Error saving MeshLibrary!" -msgstr "Error guardando MeshLibrary!" +msgstr "¡Error al guardar la MeshLibrary!" #: tools/editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "No se puede cargar TileSet para fusio!" +msgstr "¡No se puede cargar TileSet para poder unir los datos!" #: tools/editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "Error guardando TileSet!" +msgstr "¡Error al guardar el TileSet!" #: tools/editor/editor_node.cpp msgid "Can't open export templates zip." -msgstr "No se puede abir el zip de templates de exportación." +msgstr "No se puede abir el zip de plantillas de exportación." #: tools/editor/editor_node.cpp msgid "Loading Export Templates" -msgstr "Cargando Templates de Exportación" +msgstr "Cargando plantillas de exportación" #: tools/editor/editor_node.cpp msgid "Error trying to save layout!" -msgstr "Error al tratar de guardar el layout!" +msgstr "¡Hubo un problema al intentar guardar los ajustes!" #: tools/editor/editor_node.cpp msgid "Default editor layout overridden." -msgstr "Layout por defecto del editor sobreescrito." +msgstr "Se han sobrescrito los ajustes predeterminados del editor." #: tools/editor/editor_node.cpp msgid "Layout name not found!" -msgstr "Nombre de layout no encontrado!" +msgstr "¡No se encuentra el nombre del ajuste!" #: tools/editor/editor_node.cpp msgid "Restored default layout to base settings." -msgstr "Se restauró el layout por defecto a sus seteos base." +msgstr "Se han restaurado los ajustes predeterminados." #: tools/editor/editor_node.cpp msgid "Copy Params" -msgstr "Copiar Params" +msgstr "Copiar parámetros" #: tools/editor/editor_node.cpp msgid "Paste Params" -msgstr "Pegar Parametros" +msgstr "Pegar parámetros" #: tools/editor/editor_node.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" -msgstr "Pegar Recurso" +msgstr "Pegar recurso" #: tools/editor/editor_node.cpp msgid "Copy Resource" -msgstr "Copiar Recurso" +msgstr "Copiar recurso" #: tools/editor/editor_node.cpp msgid "Make Built-In" -msgstr "Crear Built-In" +msgstr "Hacerlo integrado" #: tools/editor/editor_node.cpp msgid "Make Sub-Resources Unique" -msgstr "Crear Sub-Recurso Unico" +msgstr "Crear subrecurso único" #: tools/editor/editor_node.cpp msgid "Open in Help" -msgstr "Abrir en la Ayuda" +msgstr "Abrir en la ayuda" #: tools/editor/editor_node.cpp msgid "There is no defined scene to run." @@ -1624,9 +1922,9 @@ msgid "" "You can change it later in later in \"Project Settings\" under the " "'application' category." msgstr "" -"No se ha definido ninguna escena principal, ¿elegir una?\n" -"Es posible cambiarla más tarde en \"Ajustes del Proyecto\" bajo la categoria " -"'aplicacion'." +"No se ha definido ninguna escena principal, ¿quieres elegir alguna?\n" +"Es posible cambiarla más tarde en «Ajustes del proyecto» bajo la categoría " +"«aplicación»." #: tools/editor/editor_node.cpp msgid "" @@ -1656,51 +1954,52 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Could not start subprocess!" -msgstr "No se pudo comenzar el subproceso!" +msgstr "¡No se pudo comenzar el subproceso!" #: tools/editor/editor_node.cpp msgid "Open Scene" -msgstr "Abrir Escena" +msgstr "Abrir escena" #: tools/editor/editor_node.cpp msgid "Open Base Scene" -msgstr "Abrir Escena Base" +msgstr "Abrir escena base" #: tools/editor/editor_node.cpp msgid "Quick Open Scene.." -msgstr "Abrir Escena Rapido.." +msgstr "Abrir escena rápido.." #: tools/editor/editor_node.cpp msgid "Quick Open Script.." -msgstr "Abrir Script Rapido.." +msgstr "Abrir script rápido.." #: tools/editor/editor_node.cpp msgid "Yes" -msgstr "Si" +msgstr "Sí" #: tools/editor/editor_node.cpp msgid "Close scene? (Unsaved changes will be lost)" -msgstr "Cerrar escena? (Los cambios sin guardar se perderán)" +msgstr "¿Quieres cerrar la escena? (Los cambios sin guardar se perderán)" #: tools/editor/editor_node.cpp msgid "Save Scene As.." -msgstr "Guardar Escena Como.." +msgstr "Guardar escena como.." #: tools/editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "Esta escena nunca ha sido guardada. Guardar antes de ejecutar?" +msgstr "" +"Esta escena nunca se ha guardado. ¿Quieres guardarla antes de ejecutarla?" #: tools/editor/editor_node.cpp msgid "Please save the scene first." -msgstr "Por favor guardá la escena primero." +msgstr "Prueba guardando la escena primero." #: tools/editor/editor_node.cpp msgid "Save Translatable Strings" -msgstr "Guardar Strings Traducibles" +msgstr "Guardar cadenas traducibles" #: tools/editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "Exportar Librería de Meshes" +msgstr "Exportar biblioteca de modelos" #: tools/editor/editor_node.cpp msgid "Export Tile Set" @@ -1712,11 +2011,11 @@ msgstr "Salir" #: tools/editor/editor_node.cpp msgid "Exit the editor?" -msgstr "Salir del editor?" +msgstr "¿Quieres salir del editor?" #: tools/editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "Escena actual sin guardar. Abrir de todos modos?" +msgstr "La escena actual no se ha guardado. ¿Quieres abrirla de todos modos?" #: tools/editor/editor_node.cpp msgid "Can't reload a scene that was never saved." @@ -1728,67 +2027,68 @@ msgstr "Revertir" #: tools/editor/editor_node.cpp msgid "This action cannot be undone. Revert anyway?" -msgstr "Esta acción no se puede deshacer. Revertir de todos modos?" +msgstr "Esta acción es irreversible. ¿Quieres revertirla de todos modos?" #: tools/editor/editor_node.cpp msgid "Quick Run Scene.." -msgstr "Ejecutar Escena Rapido.." +msgstr "Ejecutar escena rápido.." #: tools/editor/editor_node.cpp msgid "" "Open Project Manager? \n" "(Unsaved changes will be lost)" -msgstr "Abrir el Gestor de Proyectos? (Los cambios sin guardar se perderán)" +msgstr "" +"¿Quieres abrir el el administrador de proyectos?\n" +"(Los cambios sin guardar se perderán)" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" -msgstr "Elegí una Escena Principal" +msgstr "Elige una escena principal" #: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp msgid "Ugh" -msgstr "Ugh" +msgstr "Vaya" #: tools/editor/editor_node.cpp msgid "" "Error loading scene, it must be inside the project path. Use 'Import' to " "open the scene, then save it inside the project path." msgstr "" -"Error al cargar la escena, debe estar dentro de la ruta del proyecto. Usa " -"'Importar' para abrir la escena, luego guardala dentro de la ruta del " -"proyecto." +"Hubo un error al cargar la escena, debe estar dentro de la ruta del " +"proyecto. Utiliza «Importar» para abrir la escena, luego guárdala dentro de " +"la ruta del proyecto." #: tools/editor/editor_node.cpp msgid "Error loading scene." -msgstr "Error al cargar la escena." +msgstr "Hubo un error al cargar la escena." #: tools/editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "La escena '%s' tiene dependencias rotas:" +msgstr "La escena «%s» tiene dependencias rotas:" #: tools/editor/editor_node.cpp msgid "Save Layout" -msgstr "Guardar Layout" +msgstr "Guardar ajustes" #: tools/editor/editor_node.cpp msgid "Delete Layout" -msgstr "Eliminar Layout" +msgstr "Borrar ajustes" #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Default" -msgstr "Por Defecto" +msgstr "Predeterminado" #: tools/editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "Cambiar Pestaña de Escena" +msgstr "Cambiar pestaña de escena" #: tools/editor/editor_node.cpp msgid "%d more file(s)" -msgstr "%d archivo(s) más" +msgstr "%d archivos más" #: tools/editor/editor_node.cpp msgid "%d more file(s) or folder(s)" -msgstr "%d archivo(s) o carpeta(s) más" +msgstr "%d archivos o carpetas más" #: tools/editor/editor_node.cpp #: tools/editor/io_plugins/editor_scene_import_plugin.cpp @@ -1801,11 +2101,11 @@ msgstr "Ir a la escena abierta previamente." #: tools/editor/editor_node.cpp msgid "Fullscreen Mode" -msgstr "Modo Pantalla Completa" +msgstr "Modo pantalla completa" #: tools/editor/editor_node.cpp msgid "Distraction Free Mode" -msgstr "Modo Sin Distracciones" +msgstr "Modo sin distracciones" #: tools/editor/editor_node.cpp msgid "Next tab" @@ -1821,81 +2121,80 @@ msgstr "Operaciones con archivos de escena." #: tools/editor/editor_node.cpp msgid "New Scene" -msgstr "Nueva Escena" +msgstr "Nueva escena" #: tools/editor/editor_node.cpp msgid "New Inherited Scene.." -msgstr "Nueva Escena Heredada.." +msgstr "Nueva escena heredada.." #: tools/editor/editor_node.cpp msgid "Open Scene.." -msgstr "Abrir Escena.." +msgstr "Abrir escena.." #: tools/editor/editor_node.cpp msgid "Save Scene" -msgstr "Guardar Escena" +msgstr "Guardar escena" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Save all Scenes" -msgstr "Guardar Escena" +msgstr "Guardar todas las escenas" #: tools/editor/editor_node.cpp msgid "Close Scene" -msgstr "Cerrar Escena" +msgstr "Cerrar escena" #: tools/editor/editor_node.cpp msgid "Close Goto Prev. Scene" -msgstr "Cerrar e Ir a Escena Prev." +msgstr "Cerrar e ir a escena anterior" #: tools/editor/editor_node.cpp msgid "Open Recent" -msgstr "Abrir Reciente" +msgstr "Abrir reciente" #: tools/editor/editor_node.cpp msgid "Quick Filter Files.." -msgstr "Filtrado Rapido de Archivos.." +msgstr "Filtrado rápido de archivos..." #: tools/editor/editor_node.cpp msgid "Convert To.." -msgstr "Convertir A.." +msgstr "Convertir a..." #: tools/editor/editor_node.cpp msgid "Translatable Strings.." -msgstr "Strings Traducibles.." +msgstr "Cadenas traducibles..." #: tools/editor/editor_node.cpp msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgstr "MeshLibrary..." #: tools/editor/editor_node.cpp msgid "TileSet.." msgstr "TileSet.." -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "Rehacer" #: tools/editor/editor_node.cpp msgid "Run Script" -msgstr "Ejecutar Script" +msgstr "Ejecutar script" #: tools/editor/editor_node.cpp msgid "Project Settings" -msgstr "Configuración de Proyecto" +msgstr "Ajustes del proyecto" #: tools/editor/editor_node.cpp msgid "Revert Scene" -msgstr "Revertir Escena" +msgstr "Revertir escena" #: tools/editor/editor_node.cpp msgid "Quit to Project List" -msgstr "Salir a Listado de Proyecto" +msgstr "Salir al listado del proyecto" #: tools/editor/editor_node.cpp msgid "Import assets to the project." -msgstr "Importar assets al proyecto." +msgstr "Importar elementos al proyecto." #: tools/editor/editor_node.cpp #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp @@ -1911,7 +2210,7 @@ msgstr "Importar" #: tools/editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." -msgstr "Herramientas misceláneas a nivel proyecto o escena." +msgstr "Herramientas varias o de escenas." #: tools/editor/editor_node.cpp msgid "Tools" @@ -1919,7 +2218,7 @@ msgstr "Herramientas" #: tools/editor/editor_node.cpp msgid "Export the project to many platforms." -msgstr "Exportar el proyecto a munchas plataformas." +msgstr "Exportar el proyecto a varias plataformas." #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Export" @@ -1927,7 +2226,7 @@ msgstr "Exportar" #: tools/editor/editor_node.cpp msgid "Play the project." -msgstr "Reproducir el proyecto." +msgstr "Inicia el proyecto para poder jugarlo." #: tools/editor/editor_node.cpp #: tools/editor/plugins/sample_library_editor_plugin.cpp @@ -1940,11 +2239,11 @@ msgstr "Pausar la escena" #: tools/editor/editor_node.cpp msgid "Pause Scene" -msgstr "Pausar la Escena" +msgstr "Pausar la escena" #: tools/editor/editor_node.cpp msgid "Stop the scene." -msgstr "Parar la escena." +msgstr "Detener la escena." #: tools/editor/editor_node.cpp #: tools/editor/plugins/sample_library_editor_plugin.cpp @@ -1957,14 +2256,13 @@ msgstr "Reproducir la escena editada." #: tools/editor/editor_node.cpp msgid "Play Scene" -msgstr "Reproducir Escena" +msgstr "Reproducir escena" #: tools/editor/editor_node.cpp msgid "Play custom scene" msgstr "Reproducir escena personalizada" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play Custom Scene" msgstr "Reproducir escena personalizada" @@ -1974,19 +2272,19 @@ msgstr "Opciones de depuración" #: tools/editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "Transferir con Depuración Remota" +msgstr "Exportar con depuración remota" #: tools/editor/editor_node.cpp msgid "" "When exporting or deploying, the resulting executable will attempt to " "connect to the IP of this computer in order to be debugged." msgstr "" -"Al exportar o hacer deploy, el ejecutable resultante tratara de contectarse " -"a la IP de esta computadora de manera de ser depurado." +"Al exportar o publicarlo, el ejecutable tratará de conectarse a la IP de " +"este equipo para iniciar la depuración." #: tools/editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "Depoy Pequeño con Network FS" +msgstr "Exportación mini con recursos en red" #: tools/editor/editor_node.cpp msgid "" @@ -1997,16 +2295,15 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" -"Cuando esta opción está activa, exportar o hacer deploy producirá un " +"Cuando esta opción está activa, al exportar o publicar se producirá un " "ejecutable mínimo.\n" -"El sistema de archivos sera proveido desde el proyecto por el editor sobre " -"la red.\n" -"En Android, deploy usará el cable USB para mejor performance. Esta opción " -"acelera el testeo para juegos con footprint grande." +"El sistema de archivos del proyecto se pasará desde el editor por la red.\n" +"En Android, publicar utilizará el cable USB para un mejor rendimiento. Esta " +"opción acelera los ciclos de prueba de juegos grandes." #: tools/editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "Collision Shapes Visibles" +msgstr "Ver formas de colisión" #: tools/editor/editor_node.cpp msgid "" @@ -2018,19 +2315,19 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Visible Navigation" -msgstr "Navegación Visible" +msgstr "Navegación visible" #: tools/editor/editor_node.cpp msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" -"Los meshes de navegación y los polígonos seran visibles durante la ejecución " -"del juego si esta opción queda activada." +"Si activas esta opción podrás ver los modelos y polígonos de navegación " +"durante la ejecución del juego." #: tools/editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "Sincronizar Cambios de Escena" +msgstr "Sincronizar cambios de escena" #: tools/editor/editor_node.cpp msgid "" @@ -2046,7 +2343,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "Actualizar Cambios en Scripts" +msgstr "Actualizar cambios en scripts" #: tools/editor/editor_node.cpp msgid "" @@ -2062,19 +2359,19 @@ msgstr "" #: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp msgid "Settings" -msgstr "Configuración" +msgstr "Ajustes" #: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp msgid "Editor Settings" -msgstr "Configuración del Editor" +msgstr "Ajustes del editor" #: tools/editor/editor_node.cpp msgid "Editor Layout" -msgstr "Layout del Editor" +msgstr "Ajustes de diseño del editor" #: tools/editor/editor_node.cpp msgid "Install Export Templates" -msgstr "Instalar Templates de Exportación" +msgstr "Instalar plantillas de exportación" #: tools/editor/editor_node.cpp msgid "About" @@ -2090,11 +2387,11 @@ msgstr "Gira cuando la ventana del editor repinta!" #: tools/editor/editor_node.cpp msgid "Update Always" -msgstr "Siempre Actualizar" +msgstr "Actualizar siempre" #: tools/editor/editor_node.cpp msgid "Update Changes" -msgstr "Actualizar Cambios" +msgstr "Actualizar cambios" #: tools/editor/editor_node.cpp msgid "Inspector" @@ -2114,11 +2411,11 @@ msgstr "Guardar el recurso editado actualmente." #: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp msgid "Save As.." -msgstr "Guardar Como.." +msgstr "Guardar como..." #: tools/editor/editor_node.cpp msgid "Go to the previous edited object in history." -msgstr "Ir al anterior objeto editado en el historial." +msgstr "Ir al objeto editado previo en el historial." #: tools/editor/editor_node.cpp msgid "Go to the next edited object in history." @@ -2134,7 +2431,7 @@ msgstr "Propiedades del objeto." #: tools/editor/editor_node.cpp msgid "FileSystem" -msgstr "FileSystem" +msgstr "SistDeArchivos" #: tools/editor/editor_node.cpp msgid "Output" @@ -2150,27 +2447,27 @@ msgstr "Actualizar" #: tools/editor/editor_node.cpp msgid "Thanks from the Godot community!" -msgstr "Gracias de parte de la comunidad Godot!" +msgstr "¡Muchas gracias de parte de la comunidad de Godot!" #: tools/editor/editor_node.cpp msgid "Thanks!" -msgstr "Gracias!" +msgstr "¡Gracias!" #: tools/editor/editor_node.cpp msgid "Import Templates From ZIP File" -msgstr "Importar Templates Desde Archivo ZIP" +msgstr "Importar plantillas desde un archivo ZIP" #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Export Project" -msgstr "Exportar Proyecto" +msgstr "Exportar proyecto" #: tools/editor/editor_node.cpp msgid "Export Library" -msgstr "Exportar Libreria" +msgstr "Exportar biblioteca" #: tools/editor/editor_node.cpp msgid "Merge With Existing" -msgstr "Fusionar Con Existentes" +msgstr "Unir con existentes" #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Password:" @@ -2178,19 +2475,19 @@ msgstr "Contraseña:" #: tools/editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "Abrir y Correr un Script" +msgstr "Abrir y ejecutar un script" #: tools/editor/editor_node.cpp msgid "Load Errors" -msgstr "Cargar Errores" +msgstr "Errores de carga" #: tools/editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "Plugins Instalados:" +msgstr "Plugins instalados:" #: tools/editor/editor_plugin_settings.cpp msgid "Version:" -msgstr "Version:" +msgstr "Versión:" #: tools/editor/editor_plugin_settings.cpp msgid "Author:" @@ -2214,19 +2511,19 @@ msgstr "Medida:" #: tools/editor/editor_profiler.cpp msgid "Frame Time (sec)" -msgstr "Duracion de Frame (seg)" +msgstr "Duracion de cuadro (seg)" #: tools/editor/editor_profiler.cpp msgid "Average Time (sec)" -msgstr "Tiempo Promedio (seg)" +msgstr "Tiempo promedio (seg)" #: tools/editor/editor_profiler.cpp msgid "Frame %" -msgstr "Frame %" +msgstr "% de cuadro" #: tools/editor/editor_profiler.cpp msgid "Fixed Frame %" -msgstr "Fixed Frame %" +msgstr "% de cuadro fijo" #: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp msgid "Time:" @@ -2242,11 +2539,11 @@ msgstr "Propio" #: tools/editor/editor_profiler.cpp msgid "Frame #:" -msgstr "Frame #:" +msgstr "Nº de cuadro:" #: tools/editor/editor_reimport_dialog.cpp msgid "Please wait for scan to complete." -msgstr "Por favor aguarda a que el scan termine." +msgstr "Espera a que termine el análisis." #: tools/editor/editor_reimport_dialog.cpp msgid "Current scene must be saved to re-import." @@ -2254,15 +2551,15 @@ msgstr "La escena actual debe ser guardada para reimportar." #: tools/editor/editor_reimport_dialog.cpp msgid "Save & Re-Import" -msgstr "Guardar y Reimportar" +msgstr "Guardar y reimportar" #: tools/editor/editor_reimport_dialog.cpp msgid "Re-Import Changed Resources" -msgstr "Reimportar Recursos Cambiados" +msgstr "Reimportar recursos cambiados" #: tools/editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "Escribir tu lógica en el método _run()." +msgstr "Escribe tu lógica en el método _run()." #: tools/editor/editor_run_script.cpp msgid "There is an edited scene already." @@ -2286,19 +2583,19 @@ msgstr "Te olvidaste del método '_run'?" #: tools/editor/editor_settings.cpp msgid "Default (Same as Editor)" -msgstr "Por Defecto (Igual que el Editor)" +msgstr "Predeterminado (Igual que el editor)" #: tools/editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "Seleccionar Nodo(s) para Importar" +msgstr "Selecciona nodos a importar" #: tools/editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "Ruta a la Escena:" +msgstr "Ruta a la escena:" #: tools/editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "Importar Desde Nodo:" +msgstr "Importar desde nodo:" #: tools/editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2306,17 +2603,104 @@ msgstr "" "No se puede abrir file_type_cache.cch para escribir, no se guardará el cache " "de tipos de archivo!" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" +"Los archivos de origen y destino son iguales, no se realizará ninguna acción." + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" +"Las rutas de origen y destino son iguales, no se realizará ninguna acción." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "No se pueden mover carpetas dentro de si mismas." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "No se puede operar en '..'" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "Elige un nombre nuevo y ubicación para:" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "¡No has seleccionado ningún archivo!" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "Instanciar" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "Editar dependencias.." + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "Ver dueños.." + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "Copiar ruta" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "Renombrar o mover.." + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "Mover a.." + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "Info" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "Mostrar en el navegador de archivos" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "Reimportando.." + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "Carpeta anterior" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "Carpeta siguiente" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "Reanalizar sistema de archivos" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "Act/Desact. estado de carpeta como Favorito" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" +"Instanciar la(s) escena(s) seleccionadas como hijas del nodo seleccionado." + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "Mover" + #: tools/editor/groups_editor.cpp msgid "Add to Group" -msgstr "Agregar al Grupo" +msgstr "Añadir al grupo" #: tools/editor/groups_editor.cpp msgid "Remove from Group" -msgstr "Quitar del Grupo" +msgstr "Quitar del grupo" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp msgid "No bit masks to import!" -msgstr "Sin máscaras de bits para importar!" +msgstr "¡Sin máscaras de bits para importar!" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_sample_import_plugin.cpp @@ -2352,7 +2736,7 @@ msgstr "Importar BitMasks" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Source Texture(s):" -msgstr "Textura(s) de Origen:" +msgstr "Texturas de origen:" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp @@ -2361,7 +2745,7 @@ msgstr "Textura(s) de Origen:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Target Path:" -msgstr "Ruta de Destino:" +msgstr "Ruta de destino:" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp @@ -2374,27 +2758,27 @@ msgstr "Aceptar" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp msgid "Bit Mask" -msgstr "Máscara de Bits" +msgstr "Máscara de bits" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "No source font file!" -msgstr "Sin archivo de tipografías de origen!" +msgstr "¡No se ha elegido ningún archivo de tipografías!" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "No target font resource!" -msgstr "Sin recurso de tipografías de destino!" +msgstr "¡No se ha elegido ningún recurso de tipografías!" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "" "Invalid file extension.\n" "Please use .fnt." msgstr "" -"Extension de archivo inválida.\n" -"Usá .fnt, por favor." +"La extensión del archivo no es correcta.\n" +"Prueba con la extensión .fnt." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Can't load/process source font." -msgstr "No se puede cargar/procesar la tipografía de origen." +msgstr "No se puede cargar/procesar la tipografía elegida." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Couldn't save font." @@ -2402,15 +2786,15 @@ msgstr "No se pudo guardar la tipografía." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Source Font:" -msgstr "Tipografía de Origen:" +msgstr "Tipografía elegida:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Source Font Size:" -msgstr "Tamaño de la Tipografía de Origen:" +msgstr "Tamaño de la tipografía elegida:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Dest Resource:" -msgstr "Recurso de Dest:" +msgstr "Recurso de destino:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "The quick brown fox jumps over the lazy dog." @@ -2429,15 +2813,15 @@ msgstr "Opciones:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Font Import" -msgstr "Importar Tipografías" +msgstr "Importar tipografías" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "" "This file is already a Godot font file, please supply a BMFont type file " "instead." msgstr "" -"Este archivo ya es un archivo de tipografías de Godot, por favor suministrar " -"un archivo tipo BMFont." +"Este archivo ya es un archivo de tipografías de Godot, tienes que utilizar " +"un archivo de tipo BMFont." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Failed opening as BMFont file." @@ -2445,7 +2829,7 @@ msgstr "Error al abrir como archivo BMFont." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Invalid font custom source." -msgstr "Origen personalizado de tipografía inválido." +msgstr "El origen personalizado de tipografía no es correcto." #: tools/editor/io_plugins/editor_font_import_plugin.cpp #: tools/editor/plugins/theme_editor_plugin.cpp @@ -2454,20 +2838,20 @@ msgstr "Tipografía" #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp msgid "No meshes to import!" -msgstr "Sin meshes para importar!" +msgstr "¡No hay ningún modelo que se pueda importar!" #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp msgid "Single Mesh Import" -msgstr "Importar Mesh Individual" +msgstr "Importar modelo individual" #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp msgid "Source Mesh(es):" -msgstr "Importar Mesh(es) de Origen:" +msgstr "Modelo/s elegidos:" #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "Mesh" +msgstr "Modelos 3D" #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp msgid "Surface %d" @@ -2475,11 +2859,11 @@ msgstr "Superficie %d" #: tools/editor/io_plugins/editor_sample_import_plugin.cpp msgid "No samples to import!" -msgstr "Sin muestras que importar!" +msgstr "¡No hay ningún sonido a importar!" #: tools/editor/io_plugins/editor_sample_import_plugin.cpp msgid "Import Audio Samples" -msgstr "Importar Muestras de Audio" +msgstr "Importar archivo de sonido" #: tools/editor/io_plugins/editor_sample_import_plugin.cpp msgid "Source Sample(s):" @@ -2487,11 +2871,11 @@ msgstr "Muestra(s) de Origen:" #: tools/editor/io_plugins/editor_sample_import_plugin.cpp msgid "Audio Sample" -msgstr "Muestra de Audio" +msgstr "Archivo de sonido" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "New Clip" -msgstr "Nuevo Clip" +msgstr "Nuevo clip" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Animation Options" @@ -2499,7 +2883,7 @@ msgstr "Opciones de Animación" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Flags" -msgstr "Flags" +msgstr "Identificadores" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Bake FPS:" @@ -2511,15 +2895,15 @@ msgstr "Optimizar" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Max Linear Error" -msgstr "Error Lineal Máximo" +msgstr "Error lineal máximo" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Max Angular Error" -msgstr "Error Angular Máximo" +msgstr "Error angular máximo" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Max Angle" -msgstr "Angulo Máximo" +msgstr "Ángulo máximo" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Clips" @@ -2527,16 +2911,16 @@ msgstr "Clips" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Start(s)" -msgstr "Comienzo(s)" +msgstr "Inicios" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "End(s)" -msgstr "Fin(es)" +msgstr "Finales" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" -msgstr "Loop" +msgstr "Repetir" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Filters" @@ -2552,7 +2936,7 @@ msgstr "No se pudo cargar el script post-importación." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import." -msgstr "Script post-importación inválido o roto." +msgstr "El script de postimportación no es correcto o está roto." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error importing scene." @@ -2560,15 +2944,15 @@ msgstr "Error al importar escena." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import 3D Scene" -msgstr "Importar Escena 3D" +msgstr "Importar escena 3D" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Source Scene:" -msgstr "Escena de Origen:" +msgstr "Escena de origen:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Same as Target Scene" -msgstr "Igual que Escena de Destino" +msgstr "Igual que escena de destino" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Shared" @@ -2576,11 +2960,11 @@ msgstr "Compartido" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Target Texture Folder:" -msgstr "Carpeta de Textura de Destino:" +msgstr "Carpeta de texturas elegida:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Post-Process Script:" -msgstr "Script de Postprocesado:" +msgstr "Script de posprocesado:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Custom Root Node Type:" @@ -2592,50 +2976,51 @@ msgstr "Auto" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "The Following Files are Missing:" -msgstr "Los Siguientes Archivos estan Faltando:" +msgstr "Faltan los siguientes archivos:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import Anyway" -msgstr "Importar de Todos Modos" +msgstr "Importar de todos modos" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import & Open" -msgstr "Importar y Abrir" +msgstr "Importar y abrir" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Edited scene has not been saved, open imported scene anyway?" msgstr "" -"La escena editada no ha sido guardada, abrir la escena importada de todos " -"modos?" +"La escena editada no se ha guardado, ¿Quieres abrir la escena importada de " +"todos modos?" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" -msgstr "Importar Escena" +msgstr "Importar escena" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." -msgstr "Importando Escena.." +msgstr "Importando escena.." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." -msgstr "Ejecutando Script Personalizado.." +msgstr "Ejecutando script personalizado.." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" -msgstr "No se pudo cargar el script post importación:" +msgstr "No se pudo cargar el script posimportación:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" -msgstr "Script para post importación inválido/roto (revisá la consola):" +msgstr "" +"El script de posimportación no es correcto o está roto. (revisa la consola):" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" -msgstr "Error ejecutando el script de post-importacion:" +msgstr "Error ejecutando el script de posimportacion:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import Image:" -msgstr "Importar Imagen:" +msgstr "Importar imagen:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Can't import a file over itself:" @@ -2643,7 +3028,7 @@ msgstr "No se puede importar un archivo sobre si mismo:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't localize path: %s (already local)" -msgstr "No se pudo localizar la ruta: %s (ya es local)" +msgstr "No se pudo encontrar la ruta: %s (ya es local)" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." @@ -2651,19 +3036,19 @@ msgstr "Guardando.." #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "3D Scene Animation" -msgstr "Animacion de Escena 3D" +msgstr "Animación de escena 3D" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Uncompressed" -msgstr "Sin Comprimir" +msgstr "Sin comprimir" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Compress Lossless (PNG)" -msgstr "Compresión Sin Pérdidas (PNG)" +msgstr "Compresión sin pérdidas (PNG)" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Compress Lossy (WebP)" -msgstr "Compresión con Pérdidas (WebP)" +msgstr "Compresión con pérdidas (WebP)" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Compress (VRAM)" @@ -2671,27 +3056,27 @@ msgstr "Comprimir (VRAM)" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Texture Format" -msgstr "Formato de Textura" +msgstr "Formato de textura" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Texture Compression Quality (WebP):" -msgstr "Calidad de Compresión de Textura (WebP):" +msgstr "Calidad de compresión de textura (WebP):" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Texture Options" -msgstr "Opciones de Textura" +msgstr "Opciones de textura" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Please specify some files!" -msgstr "Por favor especificá algunos archivos!" +msgstr "¡Selecciona algunos archivos!" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "At least one file needed for Atlas." -msgstr "Se necesita al menos un archivo para el Atlas." +msgstr "Se necesita al menos un archivo para el atlas." #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Error importing:" -msgstr "Error al importar:" +msgstr "Hubo un error al importar:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Only one file is required for large texture." @@ -2699,47 +3084,47 @@ msgstr "Solo se requiere un archivo para textura grande." #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Max Texture Size:" -msgstr "Tamaño Max. de Textura:" +msgstr "Tamaño máximo de textura:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures for Atlas (2D)" -msgstr "Importar Texturas para Atlas (2D)" +msgstr "Importar texturas para atlas (2D)" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Cell Size:" -msgstr "Tamaño de Celda:" +msgstr "Tamaño de celda:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Large Texture" -msgstr "Textura Grande" +msgstr "Textura grande" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Large Textures (2D)" -msgstr "Importar Texturas Grandes (2D)" +msgstr "Importar texturas grandes (2D)" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Source Texture" -msgstr "Textura de Origen" +msgstr "Textura de origen" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Base Atlas Texture" -msgstr "Textura Base de Atlas" +msgstr "Textura base de atlas" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Source Texture(s)" -msgstr "Textura(s) de Origen" +msgstr "Texturas de origen" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures for 2D" -msgstr "Importar Texturas para 2D" +msgstr "Importar texturas para 2D" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures for 3D" -msgstr "Importar Texturas para 3D" +msgstr "Importar texturas para 3D" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures" -msgstr "Importar Texturas" +msgstr "Importar texturas" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "2D Texture" @@ -2751,19 +3136,19 @@ msgstr "Textura 3D" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Atlas Texture" -msgstr "Textura de Atlas" +msgstr "Textura de atlas" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "" "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " "the project." msgstr "" -"AVISO: Importar texturas 2D no es obligatorio. Simplemente copiá los " -"archivos png/jpg al proyecto." +"AVISO: No es necesario importar texturas 2D. Limítate a copia los archivos " +"png/jpg al proyecto." #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Crop empty space." -msgstr "Cropear espacio vacio." +msgstr "Recortar espacio vacío." #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Texture" @@ -2771,15 +3156,15 @@ msgstr "Textura" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Large Texture" -msgstr "Importar Textura Grande" +msgstr "Importar textura grande" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Load Source Image" -msgstr "Cargar Imagen de Origen" +msgstr "Cargar imagen de origen" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Slicing" -msgstr "Rebanar" +msgstr "Troceando" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Inserting" @@ -2795,11 +3180,11 @@ msgstr "No se pudo guardar la textura grande:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Build Atlas For:" -msgstr "Construir Atlar Para:" +msgstr "Construir atlas para:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Loading Image:" -msgstr "Cargando Imagen:" +msgstr "Cargando imagen:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Couldn't load image:" @@ -2807,15 +3192,15 @@ msgstr "No se pudo cargar la imagen:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Converting Images" -msgstr "Convirtiendo Imágenes" +msgstr "Convirtiendo imágenes" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Cropping Images" -msgstr "Cropeando Imágenes" +msgstr "Recortando imágenes" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Blitting Images" -msgstr "Haciendo Blitting de Imágenes" +msgstr "Copiando datos de imágenes" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Couldn't save atlas image:" @@ -2827,11 +3212,11 @@ msgstr "No se pudo guardar la textura convertida:" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Invalid source!" -msgstr "Fuente inválida!" +msgstr "¡Origen incorrecto!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Invalid translation source!" -msgstr "Fuente de traducción inválida!" +msgstr "¡Origen de traducción incorrecto!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Column" @@ -2840,7 +3225,7 @@ msgstr "Columna" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp #: tools/editor/script_create_dialog.cpp msgid "Language" -msgstr "Lenguaje" +msgstr "Idioma" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "No items to import!" @@ -2848,23 +3233,23 @@ msgstr "Sin elementos para importar!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "No target path!" -msgstr "Sin ruta de destino!" +msgstr "¡El objetivo no tiene ruta!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Import Translations" -msgstr "Importar Traducciones" +msgstr "Importar traducciones" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Couldn't import!" -msgstr "No se pudo importar!" +msgstr "¡No se pudo importar!" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Import Translation" -msgstr "Importar Traducción" +msgstr "Importar traducción" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Source CSV:" -msgstr "CSV de Origen:" +msgstr "CSV de origen:" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Ignore First Row" @@ -2876,11 +3261,11 @@ msgstr "Comprimir" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Add to Project (engine.cfg)" -msgstr "Agregar al Proyecto (engine.cfg)" +msgstr "Añadir al proyecto (engine.cfg)" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Import Languages:" -msgstr "Importar Lenguajes:" +msgstr "Importar idiomas:" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Translation" @@ -2888,7 +3273,7 @@ msgstr "Traducción" #: tools/editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "Definir MultiNodo" +msgstr "Establecer multinodo" #: tools/editor/node_dock.cpp msgid "Node" @@ -2900,92 +3285,92 @@ msgstr "Grupos" #: tools/editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "Seleccionar un Nodo para editar Señales y Grupos." +msgstr "Selecciona un nodo para editar señales y grupos." #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" -msgstr "Activar/Desact. Autoplay" +msgstr "Des/activar reproducción automática" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "Nombre de Animación Nueva:" +msgstr "Nombre de animación nueva:" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" -msgstr "Nueva Animación" +msgstr "Nueva animación" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "Cambiar Nombre de Animación:" +msgstr "Cambiar nombre de animación:" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Remove Animation" -msgstr "Quitar Animación" +msgstr "Quitar animación" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Invalid animation name!" -msgstr "ERROR: Nombre de animación inválido!" +msgstr "ERROR: ¡El nombre de animación no es correcto!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "ERROR: El nombre de animación ya existe!" +msgstr "ERROR: ¡El nombre de animación ya existe!" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Rename Animation" -msgstr "Renombrar Animación" +msgstr "Renombrar animación" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Animation" -msgstr "Agregar Animación" +msgstr "Añadir animación" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" -msgstr "Blendear Próximo Cambiado" +msgstr "Mezclar el siguiente cambio" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "Cambiar Tiempo de Blend" +msgstr "Cambiar tiempo de mezcla" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" -msgstr "Cargar Animación" +msgstr "Cargar animación" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Duplicate Animation" -msgstr "Duplicar Animación" +msgstr "Duplicar animación" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to copy!" -msgstr "ERROR: No hay animaciones para copiar!" +msgstr "ERROR: ¡No hay animaciones para copiar!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation resource on clipboard!" -msgstr "ERROR: No hay recursos de animación en el portapapeles!" +msgstr "ERROR: ¡No hay recursos de animación en el portapapeles!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" -msgstr "Animación Pegada" +msgstr "Animación pegada" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Paste Animation" -msgstr "Pegar Animación" +msgstr "Pegar animación" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to edit!" -msgstr "ERROR: No hay aniación que editar!" +msgstr "ERROR: ¡No hay animación que editar!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" msgstr "" -"Reproducir hacia atras la animación seleccionada desde la posicion actual (A)" +"Reproducir hacia atrás la animación seleccionada desde la posición actual (A)" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" msgstr "" -"Reproducir hacia atrás la animación seleccionada desde el final. (Shift+A)" +"Reproducir hacia atrás la animación seleccionada desde el final. (Mayús + A)" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" @@ -2993,7 +3378,7 @@ msgstr "Detener la reproducción de la animación. (S)" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "Reproducir animación seleccinada desde el principio. (Shift + D)" +msgstr "Reproducir animación seleccionada desde el principio. (Mayús + D)" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" @@ -3025,15 +3410,15 @@ msgstr "Guardar la animación actual" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Save As" -msgstr "Guardar Como" +msgstr "Guardar como" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." -msgstr "Diaplay list de animaciones en el reproductor." +msgstr "Lista de animaciones en el reproductor." #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "Autoreproducir al Cargar" +msgstr "Autoreproducir al cargar" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Target Blend Times" @@ -3041,15 +3426,15 @@ msgstr "Editar Blend Times Objetivo" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" -msgstr "Herramientas de Animación" +msgstr "Herramientas de animación" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Copy Animation" -msgstr "Copiar Animación" +msgstr "Copiar animación" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" -msgstr "Crear Nueva Animación" +msgstr "Crear animación nueva" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" @@ -3061,15 +3446,15 @@ msgstr "Nombre de Animación:" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp msgid "Error!" -msgstr "Error!" +msgstr "¡Error!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "Blend Times:" +msgstr "Tiempos de mezcla:" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" -msgstr "Siguiente (Auto Queue):" +msgstr "Siguiente (Auto enfilar):" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" @@ -3091,23 +3476,23 @@ msgstr "Escala:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Fade In (s):" -msgstr "Fade In (s):" +msgstr "Aparición (s):" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Fade Out (s):" -msgstr "Fade Out (s):" +msgstr "Desaparición (s):" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend" -msgstr "Blend" +msgstr "Mezclar" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix" -msgstr "Mix" +msgstr "Mezclar" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Auto Restart:" -msgstr "Auto Reiniciar:" +msgstr "Autoreiniciar:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Restart (s):" @@ -3115,11 +3500,11 @@ msgstr "Reiniciar (s):" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Random Restart (s):" -msgstr "Reiniciar al Azar (s):" +msgstr "Reiniciar al azar (s):" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Start!" -msgstr "Iniciar!" +msgstr "¡Iniciar!" #: tools/editor/plugins/animation_tree_editor_plugin.cpp #: tools/editor/plugins/multimesh_editor_plugin.cpp @@ -3148,19 +3533,19 @@ msgstr "Actual:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Add Input" -msgstr "Agregar Entrada" +msgstr "Añadir entrada" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Clear Auto-Advance" -msgstr "Limpiar Auto Avanzar" +msgstr "Borrar autoavanzar" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "Activa Auto-Avanzar" +msgstr "Establecer autoavanzar" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Delete Input" -msgstr "Eliminar Entrada" +msgstr "Eliminar entrada" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Rename" @@ -3168,23 +3553,23 @@ msgstr "Renombrar" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." -msgstr "El árbol de animación es válido." +msgstr "El árbol de animación es correcto." #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is invalid." -msgstr "El árbol de animación es inválido." +msgstr "El árbol de animación no es correcto." #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation Node" -msgstr "Nodo de Animación" +msgstr "Nodo de animación" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "OneShot Node" -msgstr "Nodo OneShot" +msgstr "Nodo UnaVez" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix Node" -msgstr "Nodo Mix" +msgstr "Nodo Mezcla" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend2 Node" @@ -3208,15 +3593,15 @@ msgstr "Nodo TimeSeek" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "Nodo Transición" +msgstr "Nodo de transición" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Import Animations.." -msgstr "Importar Animaciones.." +msgstr "Importar animaciones.." #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "Editar Filtros de Nodo" +msgstr "Editar filtros de nodo" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Filters.." @@ -3224,11 +3609,11 @@ msgstr "Filtros.." #: tools/editor/plugins/baked_light_baker.cpp msgid "Parsing %d Triangles:" -msgstr "Parseando %d Triángulos:" +msgstr "Leyendo %d triángulos:" #: tools/editor/plugins/baked_light_baker.cpp msgid "Triangle #" -msgstr "Triangulo #" +msgstr "Nº de triángulos" #: tools/editor/plugins/baked_light_baker.cpp msgid "Light Baker Setup:" @@ -3236,11 +3621,11 @@ msgstr "Configuración de Baker de Luces:" #: tools/editor/plugins/baked_light_baker.cpp msgid "Parsing Geometry" -msgstr "Parseando Geometría" +msgstr "Leyendo geometría" #: tools/editor/plugins/baked_light_baker.cpp msgid "Fixing Lights" -msgstr "Fijando/Corrigiendo Luces" +msgstr "Procesando luces" #: tools/editor/plugins/baked_light_baker.cpp msgid "Making BVH" @@ -3248,46 +3633,42 @@ msgstr "Creando BVH" #: tools/editor/plugins/baked_light_baker.cpp msgid "Creating Light Octree" -msgstr "Creando Octree de Luces" +msgstr "Creando octree de luces" #: tools/editor/plugins/baked_light_baker.cpp msgid "Creating Octree Texture" -msgstr "Creando Octree de Texturas" +msgstr "Creando octree de texturas" #: tools/editor/plugins/baked_light_baker.cpp msgid "Transfer to Lightmaps:" -msgstr "Transferencia a Lightmaps:" +msgstr "Transfiriendo a «lightmaps»:" #: tools/editor/plugins/baked_light_baker.cpp msgid "Allocating Texture #" -msgstr "Asignando Textura #" +msgstr "Asignando nº de textura" #: tools/editor/plugins/baked_light_baker.cpp msgid "Baking Triangle #" -msgstr "Haciendo Bake de Triangulo #" +msgstr "Quemando nº de triángulo" #: tools/editor/plugins/baked_light_baker.cpp msgid "Post-Processing Texture #" -msgstr "Postprocesando Textura #" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "BakedLightInstance no contiene un recurso BakedLight." +msgstr "Posprocesando nº de textura" #: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" -msgstr "Hacer Bake!" +msgstr "¡Quemar!" #: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Reset the lightmap octree baking process (start over)." msgstr "" -"Reestablecer el proceso de bake del octree de mapa de luces (empezar de " +"Restablece el proceso de «bake» del «octree» del «lightmap» (empezar de " "nuevo)." #: tools/editor/plugins/camera_editor_plugin.cpp #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" -msgstr "Vista Previa" +msgstr "Vista previa" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" @@ -3296,28 +3677,28 @@ msgstr "Configurar Snap" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset:" -msgstr "Offset de Grilla:" +msgstr "Desplazamiento de rejilla:" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Step:" -msgstr "Setp de Grilla:" +msgstr "Pasos de rejilla:" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "Offset de Rotación:" +msgstr "Desplazamiento de rotación:" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "Step de Rotación:" +msgstr "Cantidad de rotaciones:" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Pivot" -msgstr "Mover Pivote" +msgstr "Mover pivote" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Action" -msgstr "Mover Acción" +msgstr "Mover acción" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit IK Chain" @@ -3329,7 +3710,7 @@ msgstr "Editar CanvasItem" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" -msgstr "Cambiar Anchors" +msgstr "Cambiar anclas" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom (%):" @@ -3337,11 +3718,11 @@ msgstr "Zoom (%):" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" -msgstr "Pegar Pose" +msgstr "Pegar pose" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" -msgstr "Seleccionar Modo (Q)" +msgid "Select Mode" +msgstr "Modo de selección" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -3362,14 +3743,12 @@ msgid "Alt+RMB: Depth list selection" msgstr "Alt+Click Der.: Selección en depth list" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "Modo Mover (W)" +msgid "Move Mode" +msgstr "Modo movimiento" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" -msgstr "Modo Rotar (E)" +msgid "Rotate Mode" +msgstr "Modo rotación" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3386,15 +3765,15 @@ msgstr "Click para cambiar el pivote de rotación de un objeto." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "Modo Paneo" +msgstr "Modo desplazamiento lateral" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "Inmovilizar Objeto." +msgstr "Inmovilizar el objeto." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "Desinmovilizar Objeto." +msgstr "Liberar el objeto." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." @@ -3405,14 +3784,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "Restaurar la habilidad de seleccionar los hijos de un objeto." #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "Editar" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "Usar Snap" @@ -3420,7 +3791,7 @@ msgstr "Usar Snap" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Show Grid" -msgstr "Mostrar la Grilla" +msgstr "Mostrar rejilla" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -3441,7 +3812,7 @@ msgstr "Usar Pixel Snap" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Expand to Parent" -msgstr "Expandir al Padre" +msgstr "Expandir al padre" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Skeleton.." @@ -3449,19 +3820,19 @@ msgstr "Esqueleto.." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" -msgstr "Crear Huesos" +msgstr "Crear huesos" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Bones" -msgstr "Reestablecer Huesos" +msgstr "Reestablecer huesos" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" -msgstr "Crear Cadena IK" +msgstr "Crear cadena IK" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear IK Chain" -msgstr "Reestrablecer Cadena IK" +msgstr "Reestrablecer cadena IK" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3469,57 +3840,48 @@ msgid "View" msgstr "Ver" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "Zoom In" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "Zoom Out" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" -msgstr "Resetear Zoom" +msgstr "Restablecer zoom" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Set.." -msgstr "Establecer Zoom.." +msgstr "Ajustar zoom..." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "Centrar Selección" +msgstr "Centrar selección" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "Encuadrar Selección" +msgstr "Encuadrar selección" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchor" -msgstr "Anchor" +msgstr "Ancla" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Keys" -msgstr "Insertar Clave" +msgstr "Insertar claves" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "Insertar Clave" +msgstr "Insertar clave" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "Insetar Clave (Tracks Existentes)" +msgstr "Insertar clave (pistas existentes)" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" -msgstr "Copiar Pose" +msgstr "Copiar pose" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Pose" -msgstr "Reestablecer Pose" +msgstr "Restablecer pose" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Set a Value" -msgstr "Definir un Valor" +msgstr "Establecer valor" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap (Pixels):" @@ -3530,7 +3892,7 @@ msgstr "Snap (Pixeles):" #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Poly" -msgstr "Crear Polígono" +msgstr "Crear polígono" #: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp #: tools/editor/plugins/collision_polygon_editor_plugin.cpp @@ -3539,7 +3901,7 @@ msgstr "Crear Polígono" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Edit Poly" -msgstr "Editar Polígono" +msgstr "Editar polígono" #: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp #: tools/editor/plugins/collision_polygon_editor_plugin.cpp @@ -3548,13 +3910,13 @@ msgstr "Editar Polígono" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Edit Poly (Remove Point)" -msgstr "Editar Polígono (Remover Punto)" +msgstr "Editar polígono (quitar punto)" #: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create a new polygon from scratch." -msgstr "Crear un nuevo polígono de cero." +msgstr "Crea un nuevo polígono desde cero." #: tools/editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" @@ -3562,20 +3924,21 @@ msgstr "Crear Poly3D" #: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" -msgstr "Definir Handle" +msgstr "Establecer handle" #: tools/editor/plugins/color_ramp_editor_plugin.cpp +#, fuzzy msgid "Add/Remove Color Ramp Point" -msgstr "Agregar/Quitar Punto de Rampa de Color" +msgstr "Añadir/quitar punto de rampa de color" #: tools/editor/plugins/color_ramp_editor_plugin.cpp #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Modify Color Ramp" -msgstr "Modificar Rampa de Color" +msgstr "Modificar rampa de color" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Creating Mesh Library" -msgstr "Crear Librería de Meshes" +msgstr "Crear biblioteca de modelos 3D" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Thumbnail.." @@ -3583,41 +3946,41 @@ msgstr "Miniatura.." #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" -msgstr "Remover item %d?" +msgstr "¿Quieres borrar el elemento %d?" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp #: tools/editor/plugins/theme_editor_plugin.cpp #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Add Item" -msgstr "Agregar Item" +msgstr "Añadir elemento" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove Selected Item" -msgstr "Remover Item Seleccionado" +msgstr "Borrar elemento seleccionado" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import from Scene" -msgstr "Importar desde Escena" +msgstr "Importar desde escena" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Update from Scene" -msgstr "Actualizar desde Escena" +msgstr "Actualizar desde escena" #: tools/editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" -msgstr "Item %d" +msgstr "Elemento %d" #: tools/editor/plugins/item_list_editor_plugin.cpp msgid "Items" -msgstr "Items" +msgstr "Elementos" #: tools/editor/plugins/item_list_editor_plugin.cpp msgid "Item List Editor" -msgstr "Editor de Lista de Items" +msgstr "Editor de lista de elementos" #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" -msgstr "Crear Polígono Oclusor" +msgstr "Crear polígono oclusor" #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp @@ -3627,110 +3990,113 @@ msgstr "Editar polígono existente:" #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." -msgstr "Click. Izq: Mover Punto." +msgstr "Clic izquierdo: Mover punto." #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." -msgstr "Ctrl+Click Izq.: Partir Segmento en Dos." +msgstr "Ctrl + clic izquierdo: Partir segmento en dos." #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." -msgstr "Click Der.: Borrar Punto." +msgstr "Clic derecho: Borrar punto." #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "El Mesh esta vacío!" +msgstr "¡El modelo está vacío!" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "Crear Trimesh Body Estático" +msgstr "Crear colisión estática triangular" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Convex Body" -msgstr "Crear Body Convexo Estático" +msgstr "Crear colisión estática convexa" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "Esto no funciona en una escena raiz!" +msgstr "¡No puedes hacer esto en una escena raíz!" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Shape" -msgstr "Crear Trimesh Shape" +msgstr "Crear forma triangular" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Shape" -msgstr "Crear Shape Convexa" +msgstr "Crear forma convexa" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "Crear Mesh de Navegación" +msgstr "Crear modelo de navegación 3D" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "A MeshInstance le falta un Mesh!" +msgstr "¡A MeshInstance le falta un modelo 3D!" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" -msgstr "El mesh no tiene una superficie de donde crear contornos(outlines)!" +msgstr "¡El modelo 3D no tiene una superficie en la que crear contornos!" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" -msgstr "No se pudo crear el outline!" +msgstr "¡No se pudo crear el contorno!" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline" -msgstr "Crear Outline" +msgstr "Crear contorno" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" -msgstr "Crear Body Estático Trimesh" +msgstr "Crear colisión estática triangular" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Static Body" -msgstr "Crear Body Estático Convexo" +msgstr "Crear colisión estática convexa" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" -msgstr "Crear Trimesh Collision Sibling" +msgstr "Crear colisión hermanada triangular" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Collision Sibling" -msgstr "Crear Collision Sibling Convexo" +msgstr "Crear colisión hermanada convexa" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh.." -msgstr "Crear Outline Mesh.." +msgstr "Crear modelo 3D de contorno.." #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" -msgstr "Crear Outline Mesh" +msgstr "Crear modelo 3D de contorno" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" -msgstr "Tamaño de Outline:" +msgstr "Tamaño del contorno:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." msgstr "" -"No se especificó mesh de origen (y no hay MultiMesh definido en el nodo)." +"No se especificó ningún modelo 3D de origen (y no se ha establecido ningún " +"MultiMesh en el nodo)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." -msgstr "No se especificó mesh de origen (y MultiMesh no contiene ningún Mesh)." +msgstr "" +"No se especificó ningún modelo de origen (y MultiMesh no contiene ningún " +"Mesh)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." -msgstr "Mesh de origen inválido (ruta inválida)." +msgstr "El origen del modelo es incorrecto (ruta incorrecta)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "Mesh de origen inválido (no es un MeshInstance)." +msgstr "El modelo elegido no es correcto (al no ser un MeshInstance)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "Mesh de origen inválido (no contiene ningun recurso Mesh)." +msgstr "El modelo elegido no es correcto (no contiene ningún recurso Mesh)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." @@ -3738,7 +4104,7 @@ msgstr "Ninguna superficie de origen especificada." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "La superficie de origen es inválida (ruta inválida)." +msgstr "La superficie de origen es incorrecta (ruta inválida)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." @@ -3758,7 +4124,7 @@ msgstr "No se pudo mapear el area." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "Seleccioná una Mesh de Origen:" +msgstr "Elige un modelo 3D:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" @@ -3766,59 +4132,59 @@ msgstr "Seleccioná una Superficie Objetivo:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "Poblar Superficie" +msgstr "Llenar superficie" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" -msgstr "Poblar MultiMesh" +msgstr "Llenar MultiMesh" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" -msgstr "Superficie Objetivo:" +msgstr "Superficie objetivo:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" -msgstr "Mesh de Origen:" +msgstr "Modelo 3D elegido:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" -msgstr "Eje-X" +msgstr "Eje X" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Y-Axis" -msgstr "Eje-Y" +msgstr "Eje Y" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Z-Axis" -msgstr "Eje-Z" +msgstr "Eje Z" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" -msgstr "Eje Arriba del Mesh:" +msgstr "Eje vertical del modelo:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" -msgstr "Rotación al Azar:" +msgstr "Rotación al azar:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Random Tilt:" -msgstr "Inclinación al Azar:" +msgstr "Inclinación al azar:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" -msgstr "Escala al Azar:" +msgstr "Escala al azar:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" -msgstr "Poblar" +msgstr "Rellenar" #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" -msgstr "Crear Polígono de Navegación" +msgstr "Crear polígono de navegación" #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Remove Poly And Point" -msgstr "Remover Polígono y Punto" +msgstr "Quitar polígono y punto" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" @@ -3826,23 +4192,24 @@ msgstr "Error al cargar la imagen:" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "No pixels with transparency > 128 in image.." -msgstr "Sin pixeles con transparencia > 128 en imagen.." +msgstr "" +"No hay píxeles que tengan menos de un 128/255 de transparencia en la imagen.." #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Set Emission Mask" -msgstr "Definir Máscara de Emisión" +msgstr "Establecer máscara de emisión" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" -msgstr "Limpiar Máscara de Emisión" +msgstr "Borrar máscara de emisión" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" -msgstr "Cargar Máscara de Emisión" +msgstr "Cargar máscara de emisión" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" -msgstr "Conteo de Puntos Generados:" +msgstr "Conteo de puntos generados:" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." @@ -3854,11 +4221,11 @@ msgstr "El nodo no contiene geometría (caras)." #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Faces contain no area!" -msgstr "Las caras no contienen area!" +msgstr "¡Las caras no contienen área!" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "No faces!" -msgstr "Sin caras!" +msgstr "¡Sin caras!" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" @@ -3866,27 +4233,27 @@ msgstr "Generar AABB" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter From Mesh" -msgstr "Crear Emisor desde Mesh" +msgstr "Crear emisor a partir de modelo" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter From Node" -msgstr "Crear Emisor desde Nodo" +msgstr "Crear emisor a partir de nodo" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Clear Emitter" -msgstr "Limpiar Emisor" +msgstr "Borrar emisor" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" -msgstr "Crear Emisor" +msgstr "Crear emisor" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Emission Positions:" -msgstr "Posiciones de Emisión:" +msgstr "Posiciones de emisión:" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Emission Fill:" -msgstr "Relleno de Emisión:" +msgstr "Relleno de emisión:" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Surface" @@ -3898,12 +4265,13 @@ msgstr "Volumen" #: tools/editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" -msgstr "Remover Punto de Curva" +msgstr "Borrar punto de curva" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp +#, fuzzy msgid "Add Point to Curve" -msgstr "Agregar Punto a Curva" +msgstr "Añadir punto a curva" #: tools/editor/plugins/path_2d_editor_plugin.cpp msgid "Move Point in Curve" @@ -3920,86 +4288,87 @@ msgstr "Mover Out-Control en Curva" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Select Points" -msgstr "Seleccionar Puntos" +msgstr "Seleccionar puntos" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Shift+Drag: Select Control Points" -msgstr "Shift+Arrastrar: Seleccionar Puntos de Control" +msgstr "Mayús + arrastrar: Seleccionar puntos de control" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp +#, fuzzy msgid "Click: Add Point" -msgstr "Click: Agregar Punto" +msgstr "Clic: Añadir punto" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "Click Derecho: Eliminar Punto" +msgstr "Clic derecho: Eliminar punto" #: tools/editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" -msgstr "Seleccionar Puntos de Control (Shift+Arrastrar)" +msgstr "Seleccionar puntos de control (Mayús + arrastrar)" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Add Point (in empty space)" -msgstr "Agregar Punto (en espacio vacío)" +msgstr "Añadir punto (en espacio vacío)" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" -msgstr "Partir Segmento (en curva)" +msgstr "Dividir segmento (en curva)" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "Eliminar Punto" +msgstr "Eliminar punto" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Close Curve" -msgstr "Cerrar Curva" +msgstr "Cerrar curva" #: tools/editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" -msgstr "Punto # de Curva" +msgstr "Nº de punto en curva" #: tools/editor/plugins/path_editor_plugin.cpp msgid "Set Curve Point Pos" -msgstr "Definir Pos. de Punto de Curva" +msgstr "Establecer pos. de punto de curva" #: tools/editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Pos" -msgstr "Definir Pos. In de Curva" +msgstr "Establecer pos. de entrada de curva" #: tools/editor/plugins/path_editor_plugin.cpp msgid "Set Curve Out Pos" -msgstr "Definir Pos. Out de Curva" +msgstr "Establecer pos. de salida de curva" #: tools/editor/plugins/path_editor_plugin.cpp msgid "Split Path" -msgstr "Partir Path" +msgstr "Dividir ruta" #: tools/editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "Quitar Punto del Path" +msgstr "Quitar Punto de ruta" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" -msgstr "Crear Mapa UV" +msgstr "Crear mapa UV" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "Transformar Mapa UV" +msgstr "Transformar mapa UV" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "Editor UV de Polígonos 2D" +msgstr "Editor UV de polígonos en 2D" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Point" -msgstr "Mover Punto" +msgstr "Mover punto" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -4007,23 +4376,23 @@ msgstr "Ctrl: Rotar" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" -msgstr "Shift: Mover Todos" +msgstr "Mayús: Mover todos" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" -msgstr "Shift+Ctrl: Escalar" +msgstr "Mayús + Ctrl: Escalar" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" -msgstr "Mover Polígono" +msgstr "Mover polígono" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Rotate Polygon" -msgstr "Rotar Polígono" +msgstr "Rotar polígono" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "Escalar Polígono" +msgstr "Escalar polígono" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -4048,73 +4417,73 @@ msgstr "Activar Snap" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" -msgstr "Grilla" +msgstr "Rejilla" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "ERROR: No se pudo cargar el recurso!" +msgstr "¡ERROR: No se pudo cargar el recurso!" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" -msgstr "Agregar Recurso" +msgstr "Añadir recurso" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp msgid "Rename Resource" -msgstr "Renombrar Recurso" +msgstr "Renombrar recurso" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Resource" -msgstr "Eliminar Recurso" +msgstr "Eliminar recurso" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" -msgstr "Clipboard de Recursos vacío!" +msgstr "¡El portapapeles de recursos está vacío!" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" -msgstr "Cargar Recurso" +msgstr "Cargar recurso" #: tools/editor/plugins/rich_text_editor_plugin.cpp msgid "Parse BBCode" -msgstr "Parsear BBCode" +msgstr "Leer BBCode" #: tools/editor/plugins/sample_editor_plugin.cpp msgid "Length:" -msgstr "Largo:" +msgstr "Duración:" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Open Sample File(s)" -msgstr "Abrir Archivo(s) de Muestra" +msgstr "Abrir archivos de sonido" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "ERROR: Couldn't load sample!" -msgstr "ERROR: No se pudo cargar la muestra!" +msgstr "¡ERROR: No se pudo cargar el archivo de sonido!" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Add Sample" -msgstr "Agregar Muestra" +msgstr "Añadir archivo de sonido" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Rename Sample" -msgstr "Renombrar Muestra" +msgstr "Renombrar archivo de sonido" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Delete Sample" -msgstr "Eliminar Muestra" +msgstr "Eliminar archivo de sonido" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "16 Bits" -msgstr "16 Bits" +msgstr "16 bits" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "8 Bits" -msgstr "8 Bits" +msgstr "8 bits" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Stereo" -msgstr "Estereo" +msgstr "Estéreo" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Mono" @@ -4147,21 +4516,19 @@ msgstr "Error al importar" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Import Theme" -msgstr "Importar Tema" +msgstr "Importar tema" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save Theme As.." -msgstr "Guardar Tema Como.." +msgstr "Guardar tema como.." #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next script" -msgstr "Crear Script" +msgstr "Script siguiente" #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Previous script" -msgstr "Pestaña anterior" +msgstr "Script anterior" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/project_export.cpp @@ -4175,120 +4542,53 @@ msgstr "Nuevo" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "Guardar Todo" +msgstr "Guardar todo" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "Recargar parcialmente el script" #: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" -msgstr "Previo en Historial" +msgstr "Previo en historial" #: tools/editor/plugins/script_editor_plugin.cpp msgid "History Next" -msgstr "Siguiente en Historial" +msgstr "Siguiente en el historial" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "Recargar Tema" +msgstr "Recargar tema" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "Guardar Tema" +msgstr "Guardar tema" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Save Theme As" -msgstr "Guardar Tema Como" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "Subir" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "Bajar" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" -msgstr "Indentar a la Izq" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" -msgstr "Indentar a la Der" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" -msgstr "Act/Desact. Comentario" +msgstr "Guardar tema como" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" -msgstr "Clonar hacia Abajo" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" -msgstr "Completar Símbolo" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" -msgstr "Eliminar Espacios Sobrantes al Final" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" -msgstr "Auto Indentar" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" -msgstr "Recarga Soft de Script" +msgid "Close Docs" +msgstr "Cerrar documentación" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find.." -msgstr "Encontrar.." +msgstr "Buscar..." #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find Next" -msgstr "Encontrar Siguiente" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" -msgstr "Encontrar Anterior" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." -msgstr "Reemplazar.." - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." -msgstr "Ir a Función.." - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." -msgstr "Ir a Línea.." +msgstr "Buscar siguiente" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Debug" msgstr "Depurar" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" -msgstr "Act/Desact. Breakpoint" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" -msgstr "Quitar Todos los Breakpoints" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" -msgstr "Ir a Próximo Breakpoint" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" -msgstr "Ir a Anterior Breakpoint" - -#: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp msgid "Step Over" msgstr "Step Over" @@ -4310,7 +4610,7 @@ msgstr "Continuar" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "Mantener el Depurador Abierto" +msgstr "Mantener el depurador abierto" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Window" @@ -4318,19 +4618,11 @@ msgstr "Ventana" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Move Left" -msgstr "Mover a la Izquierda" +msgstr "Mover a la izquierda" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Move Right" -msgstr "Mover a la Derecha" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" -msgstr "Ayuda" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" -msgstr "Ayuda Contextual" +msgstr "Mover a la derecha" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Tutorials" @@ -4338,7 +4630,7 @@ msgstr "Tutoriales" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Open https://godotengine.org at tutorials section." -msgstr "Abrir https://godotengine.org en la sección de tutoriales." +msgstr "Abre https://godotengine.org en la sección de tutoriales." #: tools/editor/plugins/script_editor_plugin.cpp msgid "Classes" @@ -4362,7 +4654,7 @@ msgstr "Ir a siguiente documento editado." #: tools/editor/plugins/script_editor_plugin.cpp msgid "Create Script" -msgstr "Crear Script" +msgstr "Crear script" #: tools/editor/plugins/script_editor_plugin.cpp msgid "" @@ -4370,15 +4662,15 @@ msgid "" "What action should be taken?:" msgstr "" "Los siguientes archivos son nuevos en disco.\n" -"¿Qué acción se debería tomar?:" +"¿Qué es lo que quieres hacer?:" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Reload" -msgstr "Volver a Cargar" +msgstr "Volver a cargar" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Resave" -msgstr "Volver a Guardar" +msgstr "Volver a guardar" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp @@ -4389,6 +4681,79 @@ msgstr "Depurador" msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" +"Los scripts integrados sólo se pueden editar cuando la escena a la que " +"pertenecen está cargada" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "Subir" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "Bajar" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "Indentar a la izquierda" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "Indentar a la derecha" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "Des/activar comentario" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Clonar hacia abajo" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "Completar símbolo" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "Borrar espacios sobrantes al final" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "Autoindentar" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "Desactivar todos los «breakpoints»" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "Ir a siguiente «breakpoint»" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "Ir al «breakpoint» anterior" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "Buscar anterior" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "Reemplazar..." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "Ir a función..." + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "Ir a línea.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "Ayuda contextual" #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Vertex" @@ -4475,12 +4840,13 @@ msgid "Change Comment" msgstr "Cambiar Comentarío" #: tools/editor/plugins/shader_graph_editor_plugin.cpp +#, fuzzy msgid "Add/Remove to Color Ramp" -msgstr "Agregar/Quitar a Rampa de Color" +msgstr "Añadir/quitar a/de rampa de color" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Curve Map" -msgstr "Agregar/quitar a Mapa de Curvas" +msgstr "Añadir/quitar a/de mapa de curvas" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Modify Curve Map" @@ -4523,8 +4889,9 @@ msgid "Error: Missing Input Connections" msgstr "Error: Conecciones de Entrada Faltantes" #: tools/editor/plugins/shader_graph_editor_plugin.cpp +#, fuzzy msgid "Add Shader Graph Node" -msgstr "Agregar Nodo de Gráficos de Shader" +msgstr "Añadir nodo de gráficos de sombreador" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -4536,35 +4903,35 @@ msgstr "Perspectiva" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." -msgstr "Transformación Abortada." +msgstr "Se ha cancelado la transformación." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." -msgstr "Transformación en Eje-X." +msgstr "Transformación en el eje X." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Y-Axis Transform." -msgstr "Transformación en Eje-Y." +msgstr "Transformación en el eje Y." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Z-Axis Transform." -msgstr "Transformación en Eje-Z." +msgstr "Transformación en el eje Z." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "Ver Transformación en Plano." +msgstr "Ver transformación en plano." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scaling to %s%%." -msgstr "Escalando a %s%%." +msgstr "Escalando al %s%%." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." -msgstr "Rotando %s grados." +msgstr "Girando %s grados." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View." -msgstr "Vista Inferior." +msgstr "Vista inferior." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Bottom" @@ -4572,7 +4939,7 @@ msgstr "Fondo" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Top View." -msgstr "Vista Superior." +msgstr "Vista superior." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Top" @@ -4580,7 +4947,7 @@ msgstr "Cima" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "Vista Anterior." +msgstr "Vista anterior." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Rear" @@ -4588,7 +4955,7 @@ msgstr "Detrás" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "Vista Frontal." +msgstr "Vista frontal." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Front" @@ -4596,7 +4963,7 @@ msgstr "Frente" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Left View." -msgstr "Vista Izquierda." +msgstr "Vista izquierda." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Left" @@ -4604,7 +4971,7 @@ msgstr "Izquierda" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "Vista Derecha." +msgstr "Vista derecha." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Right" @@ -4616,7 +4983,7 @@ msgstr "Poner claves está desactivado (no se insertaron claves)." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." -msgstr "Clave de Animación Insertada." +msgstr "Clave de animación insertada." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Align with view" @@ -4636,72 +5003,71 @@ msgstr "Gizmos" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" -msgstr "Dialogo XForm" +msgstr "Ventana de transformación" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "No scene selected to instance!" -msgstr "Ninguna escena seleccionada a la instancia!" +msgstr "¡No se ha elegido ninguna escena a instanciar!" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Instance at Cursor" -msgstr "Instancia en Cursor" +msgstr "Instanciar en cursor" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Could not instance scene!" -msgstr "No se pudo instanciar la escena!" +msgstr "¡No se pudo instanciar la escena!" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "Modo movimiento (W)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "Modo rotación (E)" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" -msgstr "Modo de Escalado (R)" +msgstr "Modo escalado (R)" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom View" -msgstr "Vista Inferior." +msgstr "Vista inferior" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top View" -msgstr "Vista Superior." +msgstr "Vista superior" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear View" -msgstr "Vista Anterior." +msgstr "Vista anterior" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front View" -msgstr "Vista Frontal." +msgstr "Vista frontal" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left View" -msgstr "Vista Izquierda." +msgstr "Vista izquierda" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right View" -msgstr "Vista Derecha." +msgstr "Vista derecha" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "" +msgstr "Intercambiar entre vista de perspectiva y ortogonal" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Insert Animation Key" -msgstr "Pegar Animación" +msgstr "Insertar clave de animación" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Focus Selection" -msgstr "Escalar Selección" +msgstr "Seleccionar" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Selection With View" -msgstr "Alinear con vista" +msgstr "Alinear selección con visor" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform" @@ -4709,67 +5075,67 @@ msgstr "Transformar" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "Coordenadas Locales" +msgstr "Coordenadas locales" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog.." -msgstr "Dialogo de Transformación.." +msgstr "Ventana de transformación.." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Default Light" -msgstr "Usar Luz por Defecto" +msgstr "Usar iluminación predeterminada" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Default sRGB" -msgstr "Usar sRGB por Defecto" +msgstr "Usar sRGB predeterminado" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "1 Viewport" +msgstr "1 visor" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" -msgstr "2 Viewports" +msgstr "2 visores" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "2 Viewports (Alt)" +msgstr "2 visores (altern.)" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" -msgstr "3 Viewports" +msgstr "3 visores" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "3 Viewports (Alt)" +msgstr "3 visores (altern.)" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" -msgstr "4 Viewports" +msgstr "4 visores" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "Mostrar Normales" +msgstr "Mostrar normales" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" -msgstr "Mostrar Wireframe" +msgstr "Mostrar polígonos" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "Mostrar Overdraw" +msgstr "Mostrar superposiciones" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Display Shadeless" -msgstr "Mostrar sin Sombreado" +msgstr "Mostrar sin sombras" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" -msgstr "Ver Origen" +msgstr "Ver origen" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "View Grid" -msgstr "Ver Grilla" +msgstr "Ver rejilla" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -4789,83 +5155,83 @@ msgstr "Snap de Escala (%):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" -msgstr "Ajustes de Viewport" +msgstr "Ajustes del visor" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Default Light Normal:" -msgstr "Normales de Luces por Defecto:" +msgstr "Iluminación por normales predeterminada:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Ambient Light Color:" -msgstr "Color de Luz Ambiental:" +msgstr "Color de iluminación ambiental:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Perspective FOV (deg.):" -msgstr "FOV de Perspectiva (grados.):" +msgstr "Anchura de perspectiva (en grados):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "Z-Near de Vista:" +msgstr "Profundidad mínima de vista:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "Z-Far de Vista:" +msgstr "Profundidad máxima de vista:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" -msgstr "Cambio de Transformación" +msgstr "Cambio de transformación" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Translate:" -msgstr "Trasladar:" +msgstr "Mover:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" -msgstr "Rotar (grados.):" +msgstr "Girar (grados):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale (ratio):" -msgstr "Scalar (ratio):" +msgstr "Escalar (porcentaje):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" -msgstr "Tipo de Transformación" +msgstr "Tipo de transformación" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Pre" -msgstr "Pre" +msgstr "Previa" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Post" -msgstr "Post" +msgstr "Posterior" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" -msgstr "ERROR: No se pudo cargar el recurso de frames!" +msgstr "ERROR: ¡No se pudo cargar el recurso de cuadros!" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" -msgstr "Agregar Frame" +msgstr "Añadir cuadro" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" -msgstr "El portapapeles de recursos esta vacío o no es una textura!" +msgstr "¡El portapapeles de recursos esta vacío o no es una textura!" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" -msgstr "Pegar Frame" +msgstr "Pegar cuadro" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Empty" -msgstr "Agregar Vacío" +msgstr "Añadir elemento vacío" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "Cambiar Loop de Animación" +msgstr "Cambiar repetición de animación" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" -msgstr "Cambiar FPS de Animación" +msgstr "Cambiar FPS de animación" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" @@ -4881,15 +5247,15 @@ msgstr "Velocidad (FPS):" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" -msgstr "Cuadros de Animación" +msgstr "Cuadros de animación" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" -msgstr "Insertar Vacío (Antes)" +msgstr "Insertar vacío (antes)" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (After)" -msgstr "Insertar Vacío (Después)" +msgstr "Insertar vacío (después)" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Up" @@ -4901,7 +5267,7 @@ msgstr "Abajo" #: tools/editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" -msgstr "Vista Previa de StyleBox:" +msgstr "Vista previa de StyleBox:" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" @@ -4921,11 +5287,11 @@ msgstr "Snap de Grilla" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "Auto Slice" -msgstr "Auto Rebanar" +msgstr "Autotrocear" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "Offset:" -msgstr "Offset:" +msgstr "Desplazamiento:" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "Step:" @@ -4937,11 +5303,11 @@ msgstr "Separación:" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region" -msgstr "Región de Textura" +msgstr "Región de textura" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region Editor" -msgstr "Editor de Regiones de Texturas" +msgstr "Editor de regiones de texturas" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" @@ -4949,11 +5315,11 @@ msgstr "No se pudo guardar el tema a un archivo:" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Add All Items" -msgstr "Agregar Todos los Items" +msgstr "Añadir todos los elementos" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Add All" -msgstr "Agregar Todos" +msgstr "Añadir todos" #: tools/editor/plugins/theme_editor_plugin.cpp #: tools/editor/plugins/tile_set_editor_plugin.cpp @@ -4962,19 +5328,19 @@ msgstr "Remover Item" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" -msgstr "Agregar Items de Clases" +msgstr "Añadir elementos de clase" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" -msgstr "Quitar Items de Clases" +msgstr "Quitar elementos de clases" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" -msgstr "Crear Template Vacío" +msgstr "Crear plantilla vacía" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Editor Template" -msgstr "Crear Template de Editor Vacío" +msgstr "Crear plantilla de editor vacía" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" @@ -4986,15 +5352,15 @@ msgstr "CheckBox Radio2" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Item" -msgstr "Item" +msgstr "Elemento" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Check Item" -msgstr "Tildar Item" +msgstr "Casilla de verificación" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" -msgstr "Item Tildado" +msgstr "Casilla de verificación activa" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5010,7 +5376,7 @@ msgstr "Opciones" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Have,Many,Several,Options!" -msgstr "Tenés,Muchas,Variadas,Opciones!" +msgstr "¡Tienes,Muchas,Y,Variadas,Opciones!" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5032,7 +5398,7 @@ msgstr "Tipo:" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" -msgstr "Tipo de Datos:" +msgstr "Tipo de datos:" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Icon" @@ -5061,7 +5427,7 @@ msgstr "Borrar TileMap" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Erase selection" -msgstr "Eliminar Selección" +msgstr "Eliminar selección" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Find tile" @@ -5073,15 +5439,15 @@ msgstr "Transponer" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror X" -msgstr "Espejar X" +msgstr "Voltear horizontalmente" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror Y" -msgstr "Espejar Y" +msgstr "Voltear verticalmente" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket" -msgstr "Balde" +msgstr "Cubo" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -5121,15 +5487,15 @@ msgstr "¿Crear desde escena?" #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" -msgstr "¿Fusionar desde escena?" +msgstr "¿Mergear desde escena?" #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" -msgstr "Crear desde Escena" +msgstr "Crear desde escena" #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "Fusionar desde Escena" +msgstr "Unir desde escena" #: tools/editor/plugins/tile_set_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp @@ -5138,11 +5504,11 @@ msgstr "Error" #: tools/editor/project_export.cpp msgid "Edit Script Options" -msgstr "Editar Opciones de Script" +msgstr "Editar opciones de script" #: tools/editor/project_export.cpp msgid "Please export outside the project folder!" -msgstr "Por favor exporte afuera de la carpeta de proyecto!" +msgstr "¡Prueba exportando fuera de la carpeta del proyecto!" #: tools/editor/project_export.cpp msgid "Error exporting project!" @@ -5162,35 +5528,35 @@ msgstr "Incluir" #: tools/editor/project_export.cpp msgid "Change Image Group" -msgstr "Cambiar Grupo de Imágenes" +msgstr "Cambiar grupo de imágenes" #: tools/editor/project_export.cpp msgid "Group name can't be empty!" -msgstr "El nombre del grupo no puede estar vacío!" +msgstr "¡El nombre del grupo no puede estar vacío!" #: tools/editor/project_export.cpp msgid "Invalid character in group name!" -msgstr "Caracter invalido en el nombre de grupo!" +msgstr "¡El nombre del grupo contiene una letra no permitida!" #: tools/editor/project_export.cpp msgid "Group name already exists!" -msgstr "El nombre de grupo ya existe!" +msgstr "¡El nombre de grupo ya existe!" #: tools/editor/project_export.cpp msgid "Add Image Group" -msgstr "Agregar Grupo de Imágenes" +msgstr "Añadir grupo de imágenes" #: tools/editor/project_export.cpp msgid "Delete Image Group" -msgstr "Eliminar Grupo de Imágenes" +msgstr "Eliminar grupo de imágenes" #: tools/editor/project_export.cpp msgid "Atlas Preview" -msgstr "Vista Previa de Atlas" +msgstr "Vista previa del atlas" #: tools/editor/project_export.cpp msgid "Project Export Settings" -msgstr "Ajustes de Exportación del Proyecto" +msgstr "Ajustes de exportación del proyecto" #: tools/editor/project_export.cpp msgid "Target" @@ -5198,7 +5564,7 @@ msgstr "Objetivo" #: tools/editor/project_export.cpp msgid "Export to Platform" -msgstr "Exportar a Plataforma" +msgstr "Exportar a plataforma" #: tools/editor/project_export.cpp msgid "Resources" @@ -5214,15 +5580,15 @@ msgstr "Exportar todos los recursos en el proyecto." #: tools/editor/project_export.cpp msgid "Export all files in the project directory." -msgstr "Exportar todos los archivos en el directorio del proyecto." +msgstr "Exportar todos los archivos en la carpeta del proyecto." #: tools/editor/project_export.cpp msgid "Export Mode:" -msgstr "Modo de Exportación:" +msgstr "Modo de exportación:" #: tools/editor/project_export.cpp msgid "Resources to Export:" -msgstr "Recursos a Exportar:" +msgstr "Recursos a exportar:" #: tools/editor/project_export.cpp msgid "Action" @@ -5251,11 +5617,11 @@ msgstr "Imágenes" #: tools/editor/project_export.cpp msgid "Keep Original" -msgstr "Mantener el Original" +msgstr "Mantener el original" #: tools/editor/project_export.cpp msgid "Compress for Disk (Lossy, WebP)" -msgstr "Comprimir para Disco (Con pérdidas, WebP)" +msgstr "Comprimir para disco (Con pérdidas, WebP)" #: tools/editor/project_export.cpp msgid "Compress for RAM (BC/PVRTC/ETC)" @@ -5263,23 +5629,23 @@ msgstr "Comprimir para RAM (BC/PVRTC/ETC)" #: tools/editor/project_export.cpp msgid "Convert Images (*.png):" -msgstr "Convertir Imágenes (*.png):" +msgstr "Convertir imágenes (*.png):" #: tools/editor/project_export.cpp msgid "Compress for Disk (Lossy) Quality:" -msgstr "Calidad de Compresión para Disco (con perdidas):" +msgstr "Calidad de compresión para disco (con pérdidas):" #: tools/editor/project_export.cpp msgid "Shrink All Images:" -msgstr "Reducir Todas las Imagenes:" +msgstr "Reducir todas las imágenes:" #: tools/editor/project_export.cpp msgid "Compress Formats:" -msgstr "Formatos de Compresión:" +msgstr "Formatos de compresión:" #: tools/editor/project_export.cpp msgid "Image Groups" -msgstr "Grupos de Imágenes" +msgstr "Grupos de imágenes" #: tools/editor/project_export.cpp msgid "Groups:" @@ -5287,7 +5653,7 @@ msgstr "Grupos:" #: tools/editor/project_export.cpp msgid "Compress Disk" -msgstr "Comprimir para Disco" +msgstr "Comprimir para disco" #: tools/editor/project_export.cpp msgid "Compress RAM" @@ -5295,11 +5661,11 @@ msgstr "Comprimir para RAM" #: tools/editor/project_export.cpp msgid "Compress Mode:" -msgstr "Modo de Compresión:" +msgstr "Modo de compresión:" #: tools/editor/project_export.cpp msgid "Lossy Quality:" -msgstr "Calidad con Pérdidas:" +msgstr "Calidad con pérdidas:" #: tools/editor/project_export.cpp msgid "Atlas:" @@ -5307,15 +5673,15 @@ msgstr "Atlas:" #: tools/editor/project_export.cpp msgid "Shrink By:" -msgstr "Reducir Por:" +msgstr "Reducir por:" #: tools/editor/project_export.cpp msgid "Preview Atlas" -msgstr "Vista Previa de Atlas" +msgstr "Vista previa del atlas" #: tools/editor/project_export.cpp msgid "Image Filter:" -msgstr "Filtro de Imágenes:" +msgstr "Filtrado de imágenes:" #: tools/editor/project_export.cpp msgid "Images:" @@ -5323,7 +5689,7 @@ msgstr "Imágenes:" #: tools/editor/project_export.cpp msgid "Select None" -msgstr "No Seleccionar Ninguno" +msgstr "Deseleccionar todo" #: tools/editor/project_export.cpp msgid "Group" @@ -5331,11 +5697,11 @@ msgstr "Grupo" #: tools/editor/project_export.cpp msgid "Samples" -msgstr "Muestras" +msgstr "Sonidos" #: tools/editor/project_export.cpp msgid "Sample Conversion Mode: (.wav files):" -msgstr "Modo de Conversión de Muestras: (archivos .wav):" +msgstr "Modo de conversión de muestreo: (archivos .wav):" #: tools/editor/project_export.cpp msgid "Keep" @@ -5347,7 +5713,7 @@ msgstr "Comprimir (RAM - IMA-ADPCM)" #: tools/editor/project_export.cpp msgid "Sampling Rate Limit (Hz):" -msgstr "Limite de Tasa de Sampleo (Hz):" +msgstr "Tasa de muestreo máxima (Hz):" #: tools/editor/project_export.cpp msgid "Trim" @@ -5355,7 +5721,7 @@ msgstr "Recortar" #: tools/editor/project_export.cpp msgid "Trailing Silence:" -msgstr "Silencio Sobrante al Final:" +msgstr "Silencio sobrante al final:" #: tools/editor/project_export.cpp msgid "Script" @@ -5363,7 +5729,7 @@ msgstr "Script" #: tools/editor/project_export.cpp msgid "Script Export Mode:" -msgstr "Modo de Exportación de Scipts:" +msgstr "Modo de exportación de scipts:" #: tools/editor/project_export.cpp msgid "Text" @@ -5379,7 +5745,7 @@ msgstr "Encriptado (Proveer la Clave Debajo)" #: tools/editor/project_export.cpp msgid "Script Encryption Key (256-bits as hex):" -msgstr "Clave de Encriptación de Script (256-bits como hex):" +msgstr "Clave de cifrado de scripts (256-bits en hexadecimal):" #: tools/editor/project_export.cpp msgid "Export PCK/Zip" @@ -5387,7 +5753,7 @@ msgstr "Exportar PCK/Zip" #: tools/editor/project_export.cpp msgid "Export Project PCK" -msgstr "Exportar PCK de Proyecto" +msgstr "Exportar PCK del proyecto" #: tools/editor/project_export.cpp msgid "Export.." @@ -5395,7 +5761,7 @@ msgstr "Exportar.." #: tools/editor/project_export.cpp msgid "Project Export" -msgstr "Exportar Proyecto" +msgstr "Exportar proyecto" #: tools/editor/project_export.cpp msgid "Export Preset:" @@ -5403,68 +5769,63 @@ msgstr "Presets de Exportación:" #: tools/editor/project_manager.cpp msgid "Invalid project path, the path must exist!" -msgstr "Ruta de proyecto inválida, la ruta debe existir!" +msgstr "¡La ruta del proyecto no es correcta, tiene que existir!" #: tools/editor/project_manager.cpp msgid "Invalid project path, engine.cfg must not exist." -msgstr "Ruta de proyecto inválida, engine.cfg no debe existir." +msgstr "La ruta del proyecto no es correcta, engine.cfg no debe existir." #: tools/editor/project_manager.cpp msgid "Invalid project path, engine.cfg must exist." -msgstr "Ruta de proyecto inválida, engine.cfg debe existir." +msgstr "¡La ruta del proyecto no es correcta, engine.cfg debe existir." #: tools/editor/project_manager.cpp msgid "Imported Project" -msgstr "Proyecto Importado" +msgstr "Proyecto importado" #: tools/editor/project_manager.cpp msgid "Invalid project path (changed anything?)." -msgstr "Ruta de proyecto inválida (cambiaste algo?)." +msgstr "La ruta del proyecto no es correcta (¿has cambiado algo?)." #: tools/editor/project_manager.cpp msgid "Couldn't create engine.cfg in project path." msgstr "No se pudo crear engine.cfg en la ruta de proyecto." #: tools/editor/project_manager.cpp -#, fuzzy msgid "The following files failed extraction from package:" -msgstr "" -"Los siguientes archivos son nuevos en disco.\n" -"¿Qué acción se debería tomar?:" +msgstr "Los siguientes archivos no se pudieron extraer del paquete:" #: tools/editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "¡El paquete se ha instalado correctamente!" #: tools/editor/project_manager.cpp msgid "Import Existing Project" -msgstr "Importar Proyecto Existente" +msgstr "Importar proyecto existente" #: tools/editor/project_manager.cpp msgid "Project Path (Must Exist):" -msgstr "Ruta del Proyecto (Debe Existir):" +msgstr "Ruta del proyecto (debe existir):" #: tools/editor/project_manager.cpp msgid "Project Name:" -msgstr "Nombre del Proyecto:" +msgstr "Nombre del proyecto:" #: tools/editor/project_manager.cpp msgid "Create New Project" -msgstr "Crear Proyecto Nuevo" +msgstr "Crear proyecto nuevo" #: tools/editor/project_manager.cpp msgid "Project Path:" -msgstr "Ruta del Proyecto:" +msgstr "Ruta del proyecto:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install Project:" -msgstr "Proyectos Recientes:" +msgstr "Instalar proyecto:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install" -msgstr "Instancia" +msgstr "Instalar" #: tools/editor/project_manager.cpp msgid "Browse" @@ -5472,7 +5833,7 @@ msgstr "Examinar" #: tools/editor/project_manager.cpp msgid "New Game Project" -msgstr "Nuevo Proyecto de Juego" +msgstr "Nuevo proyecto de juego" #: tools/editor/project_manager.cpp msgid "That's a BINGO!" @@ -5480,29 +5841,37 @@ msgstr "BINGO!" #: tools/editor/project_manager.cpp msgid "Unnamed Project" -msgstr "Proyecto Sin Nombre" +msgstr "Proyecto sin nombre" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" -msgstr "¿Estás seguro/a que querés abrir mas de un proyecto?" +msgid "Are you sure to open more than one project?" +msgstr "¿Seguro que quieres abrir más de un proyecto?" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" -msgstr "¿Estás seguro/a que queres ejecutar mas de un proyecto?" +msgid "Are you sure to run more than one project?" +msgstr "¿Seguro que quieres ejecutar más de un proyecto?" #: tools/editor/project_manager.cpp msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" -"¿Quitar proyecto de la lista? (Los contenidos de la carpeta no serán " -"modificados)" +"¿Quieres quitar proyecto de la lista? (El contenido de la carpeta no se " +"modificarán)" + +#: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" +"Estás a punto de analizar %s carpetas en busca de proyectos de Godot. " +"¿Quieres continuar?" #: tools/editor/project_manager.cpp msgid "Project Manager" -msgstr "Gestor de Proyectos" +msgstr "Administrador de proyectos" #: tools/editor/project_manager.cpp msgid "Project List" -msgstr "Listado de Proyectos" +msgstr "Lista de proyectos" #: tools/editor/project_manager.cpp msgid "Run" @@ -5510,11 +5879,15 @@ msgstr "Ejecutar" #: tools/editor/project_manager.cpp msgid "Scan" -msgstr "Escanear" +msgstr "Analizar" + +#: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "Selecciona la carpeta a analizar" #: tools/editor/project_manager.cpp msgid "New Project" -msgstr "Proyecto Nuevo" +msgstr "Proyecto nuevo" #: tools/editor/project_manager.cpp msgid "Exit" @@ -5526,31 +5899,31 @@ msgstr "Tecla " #: tools/editor/project_settings.cpp msgid "Joy Button" -msgstr "Botón de Joystick" +msgstr "Botón del mando" #: tools/editor/project_settings.cpp msgid "Joy Axis" -msgstr "Eje de Joystick" +msgstr "Eje del mando" #: tools/editor/project_settings.cpp msgid "Mouse Button" -msgstr "Botón de Mouse" +msgstr "Botón del ratón" #: tools/editor/project_settings.cpp msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Acción Invalida (cualquier cosa va menos '/' o ':')." +msgstr "La acción no es correcta (no puedes utilizar «/» o «:»)." #: tools/editor/project_settings.cpp msgid "Action '%s' already exists!" -msgstr "La acción '%s' ya existe!" +msgstr "¡La acción «%s» ya existe!" #: tools/editor/project_settings.cpp msgid "Rename Input Action Event" -msgstr "Renombrar Evento de Acción de Entrada" +msgstr "Renombrar evento de acción de entrada" #: tools/editor/project_settings.cpp msgid "Add Input Action Event" -msgstr "Agregar Evento de Acción de Entrada" +msgstr "Añadir evento de acción de entrada" #: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp msgid "Control+" @@ -5558,31 +5931,31 @@ msgstr "Control+" #: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp msgid "Press a Key.." -msgstr "Presionar una Tecla.." +msgstr "Presiona una tecla..." #: tools/editor/project_settings.cpp msgid "Mouse Button Index:" -msgstr "Indice de Botones de Mouse:" +msgstr "Índice de botón del ratón:" #: tools/editor/project_settings.cpp msgid "Left Button" -msgstr "Botón Izquierdo" +msgstr "Botón izquierdo" #: tools/editor/project_settings.cpp msgid "Right Button" -msgstr "Botón Derecho" +msgstr "Botón derecho" #: tools/editor/project_settings.cpp msgid "Middle Button" -msgstr "Botón del Medio" +msgstr "Botón del medio" #: tools/editor/project_settings.cpp msgid "Wheel Up Button" -msgstr "Botón Rueda Arriba" +msgstr "Botón rueda arriba" #: tools/editor/project_settings.cpp msgid "Wheel Down Button" -msgstr "Botón Rueda Abajo" +msgstr "Botón rueda abajo" #: tools/editor/project_settings.cpp msgid "Button 6" @@ -5602,23 +5975,23 @@ msgstr "Botón 9" #: tools/editor/project_settings.cpp msgid "Joystick Axis Index:" -msgstr "Indice de Ejes de Joystick:" +msgstr "Índice de ejes del mando:" #: tools/editor/project_settings.cpp msgid "Joystick Button Index:" -msgstr "Indice de Botones de Joystick:" +msgstr "Índice de botones del mando:" #: tools/editor/project_settings.cpp msgid "Add Input Action" -msgstr "Agregar Acción de Entrada" +msgstr "Añadir acción de entrada" #: tools/editor/project_settings.cpp msgid "Erase Input Action Event" -msgstr "Borrar Evento de Acción de Entrada" +msgstr "Borrar evento de acción de entrada" #: tools/editor/project_settings.cpp msgid "Toggle Persisting" -msgstr "Act/Desact. Persistente" +msgstr "Des/activar persistencia" #: tools/editor/project_settings.cpp msgid "Error saving settings." @@ -5626,39 +5999,39 @@ msgstr "Error al guardar los ajustes." #: tools/editor/project_settings.cpp msgid "Settings saved OK." -msgstr "Ajustes guardados satisfactoriamente." +msgstr "Los ajustes se han guardado correctamente." #: tools/editor/project_settings.cpp msgid "Add Translation" -msgstr "Agregar Traducción" +msgstr "Añadir traducción" #: tools/editor/project_settings.cpp msgid "Remove Translation" -msgstr "Quitar Traducción" +msgstr "Quitar traducción" #: tools/editor/project_settings.cpp msgid "Add Remapped Path" -msgstr "Agregar Path Remapeado" +msgstr "Añadir ruta remapeada" #: tools/editor/project_settings.cpp msgid "Resource Remap Add Remap" -msgstr "Remapear Recurso Agregar Remap" +msgstr "Añadir remapeo de recursos" #: tools/editor/project_settings.cpp msgid "Change Resource Remap Language" -msgstr "Cambiar Lenguaje de Remapeo de Recursos" +msgstr "Cambiar idioma de remapeo de recursos" #: tools/editor/project_settings.cpp msgid "Remove Resource Remap" -msgstr "Remover Remapeo de Recursos" +msgstr "Quitar remapeo de recursos" #: tools/editor/project_settings.cpp msgid "Remove Resource Remap Option" -msgstr "Remover Opción de Remapeo de Recursos" +msgstr "Quitar opción de remapeo de recursos" #: tools/editor/project_settings.cpp msgid "Project Settings (engine.cfg)" -msgstr "Ajustes de Proyecto (engine.cfg)" +msgstr "Ajustes de proyecto (engine.cfg)" #: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp msgid "General" @@ -5674,11 +6047,11 @@ msgstr "Eliminar" #: tools/editor/project_settings.cpp msgid "Copy To Platform.." -msgstr "Copiar A Plataforma.." +msgstr "Copiar a plataforma.." #: tools/editor/project_settings.cpp msgid "Input Map" -msgstr "Mapa de Entradas" +msgstr "Mapa de entradas" #: tools/editor/project_settings.cpp msgid "Action:" @@ -5690,11 +6063,11 @@ msgstr "Dispositivo:" #: tools/editor/project_settings.cpp msgid "Index:" -msgstr "Indice:" +msgstr "Índice:" #: tools/editor/project_settings.cpp msgid "Localization" -msgstr "Localización" +msgstr "Traducciones" #: tools/editor/project_settings.cpp msgid "Translations" @@ -5706,7 +6079,7 @@ msgstr "Traducciones:" #: tools/editor/project_settings.cpp msgid "Add.." -msgstr "Agregar.." +msgstr "Añadir..." #: tools/editor/project_settings.cpp msgid "Remaps" @@ -5718,11 +6091,11 @@ msgstr "Recursos:" #: tools/editor/project_settings.cpp msgid "Remaps by Locale:" -msgstr "Remapeos por Locale:" +msgstr "Remapeos por idioma:" #: tools/editor/project_settings.cpp msgid "Locale" -msgstr "Locale" +msgstr "Idioma" #: tools/editor/project_settings.cpp msgid "AutoLoad" @@ -5734,27 +6107,27 @@ msgstr "Plugins" #: tools/editor/property_editor.cpp msgid "Preset.." -msgstr "Preseteo.." +msgstr "Ajuste.." #: tools/editor/property_editor.cpp msgid "Ease In" -msgstr "Ease In" +msgstr "Transición entrada" #: tools/editor/property_editor.cpp msgid "Ease Out" -msgstr "Ease Out" +msgstr "Transición salida" #: tools/editor/property_editor.cpp msgid "Zero" -msgstr "Zero" +msgstr "Cero" #: tools/editor/property_editor.cpp msgid "Easing In-Out" -msgstr "Easing In-Out" +msgstr "Transición entrada-salida" #: tools/editor/property_editor.cpp msgid "Easing Out-In" -msgstr "Easing Out-In" +msgstr "Transición salida-entrada" #: tools/editor/property_editor.cpp msgid "File.." @@ -5774,7 +6147,7 @@ msgstr "Asignar" #: tools/editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "Error al cargar el archivo: No es un recurso!" +msgstr "Error al cargar el archivo: ¡No es un recurso!" #: tools/editor/property_editor.cpp msgid "Couldn't load image" @@ -5782,15 +6155,15 @@ msgstr "No se pudo cargar la imagen" #: tools/editor/property_editor.cpp msgid "Bit %d, val %d." -msgstr "Bit %d, val %d." +msgstr "Bit %d, valor %d." #: tools/editor/property_editor.cpp msgid "On" -msgstr "On" +msgstr "Activado" #: tools/editor/property_editor.cpp msgid "Set" -msgstr "Definir" +msgstr "Establecer" #: tools/editor/property_editor.cpp msgid "Properties:" @@ -5804,6 +6177,16 @@ msgstr "Global" msgid "Sections:" msgstr "Selecciones:" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Seleccionar puntos" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Modo de selección" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "No se pudo ejecutar la herramienta PVRTC:" @@ -5815,15 +6198,15 @@ msgstr "" #: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "Reemparentar Nodo" +msgstr "Reemparentar nodo" #: tools/editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "Reemparentar Ubicación (Seleccionar nuevo Padre):" +msgstr "Reemparentar ubicación (selecciona un nuevo padre):" #: tools/editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "Mantener Transformación Global" +msgstr "Mantener transformación global" #: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp msgid "Reparent" @@ -5831,53 +6214,57 @@ msgstr "Reemparentar" #: tools/editor/resources_dock.cpp msgid "Create New Resource" -msgstr "Crear Nuevo Recurso" +msgstr "Crear recurso nuevo" #: tools/editor/resources_dock.cpp msgid "Open Resource" -msgstr "Abrir Recurso" +msgstr "Abrir recurso" #: tools/editor/resources_dock.cpp msgid "Save Resource" -msgstr "Guardar Recurso" +msgstr "Guardar recurso" #: tools/editor/resources_dock.cpp msgid "Resource Tools" -msgstr "Herramientas de Recursos" +msgstr "Herramientas de recursos" #: tools/editor/resources_dock.cpp msgid "Make Local" -msgstr "Crear Local" +msgstr "Crear local" #: tools/editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "Modo de Ejecución:" +msgstr "Modo de ejecución:" #: tools/editor/run_settings_dialog.cpp msgid "Current Scene" -msgstr "Escena Actual" +msgstr "Escena actual" #: tools/editor/run_settings_dialog.cpp msgid "Main Scene" -msgstr "Escena Principal" +msgstr "Escena principal" #: tools/editor/run_settings_dialog.cpp msgid "Main Scene Arguments:" -msgstr "Argumentos de Escena Principal:" +msgstr "Argumentos de escena principal:" #: tools/editor/run_settings_dialog.cpp msgid "Scene Run Settings" -msgstr "Ajustes de Ejecución de Escena" +msgstr "Ajustes de ejecución de escena" #: tools/editor/scene_tree_dock.cpp msgid "OK :(" -msgstr "OK :(" +msgstr "Muy bien :(" #: tools/editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "No hay padre al que instanciarle un hijo." #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "No hay padre donde instanciar la escena." + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "Error al cargar escena desde %s" @@ -5887,7 +6274,7 @@ msgstr "Error al instanciar escena desde %s" #: tools/editor/scene_tree_dock.cpp msgid "Ok" -msgstr "Ok" +msgstr "Aceptar" #: tools/editor/scene_tree_dock.cpp msgid "" @@ -5899,7 +6286,7 @@ msgstr "" #: tools/editor/scene_tree_dock.cpp msgid "Instance Scene(s)" -msgstr "Instanciar Escena(s)" +msgstr "Instanciar escenas" #: tools/editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." @@ -5915,15 +6302,15 @@ msgstr "Mover Nodos Dentro del Padre" #: tools/editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "Duplicar Nodo(s)" +msgstr "Duplicar nodos" #: tools/editor/scene_tree_dock.cpp msgid "Delete Node(s)?" -msgstr "Eliminar Nodo(s)?" +msgstr "¿Quieres borrar los nodos?" #: tools/editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "Esta operación no puede hacerse sin una escena." +msgstr "Esta operación no puede realizarse sin una escena." #: tools/editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." @@ -5931,39 +6318,38 @@ msgstr "Esta operación requiere un solo nodo seleccionado." #: tools/editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "Esta operación no puede ser realizada en escenas instanciadas." +msgstr "Esta operación no puede realizarse en escenas instanciadas." #: tools/editor/scene_tree_dock.cpp msgid "Save New Scene As.." -msgstr "Guardar Nueva Escena Como.." +msgstr "Guardar nueva escena como.." #: tools/editor/scene_tree_dock.cpp msgid "Makes Sense!" -msgstr "Tiene Sentido!" +msgstr "¡Entendido!" #: tools/editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "No se puede operar sobre los nodos de una escena externa!" +msgstr "¡No se puede operar sobre los nodos de una escena externa!" #: tools/editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "" -"No se puede operar sobre los nodos de los cual hereda la escena actual!" +msgstr "¡No se puede operar sobre los nodos heredados por la escena actual!" #: tools/editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "Quitar Nodo(s)" +msgstr "Borrar nodos" #: tools/editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "Crear Nodo" +msgstr "Crear nodo" #: tools/editor/scene_tree_dock.cpp msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" -"No se pudo guardar la escena nueva. Probablemente no se hayan podido " +"No se pudo guardar la escena nueva. Es posible que no se hayan podido " "satisfacer las dependencias (instancias)." #: tools/editor/scene_tree_dock.cpp @@ -5976,43 +6362,47 @@ msgstr "Error al duplicar escena para guardarla." #: tools/editor/scene_tree_dock.cpp msgid "Edit Groups" -msgstr "Editar Grupos" +msgstr "Editar grupos" #: tools/editor/scene_tree_dock.cpp msgid "Edit Connections" -msgstr "Editar Conexiones" +msgstr "Editar conexiones" #: tools/editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "Eliminar Nodo(s)" +msgstr "Borrar nodos" #: tools/editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "Agregar Nodo Hijo" +msgstr "Añadir nodo hijo" #: tools/editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "Instanciar Escena Hija" +msgstr "Instanciar escena hija" #: tools/editor/scene_tree_dock.cpp msgid "Change Type" -msgstr "Cambiar Tipo" +msgstr "Cambiar tipo" #: tools/editor/scene_tree_dock.cpp msgid "Add Script" -msgstr "Agregar Script" +msgstr "Añadir script" #: tools/editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "Fusionar Desde Escena" +msgstr "Unir desde escena" #: tools/editor/scene_tree_dock.cpp msgid "Save Branch as Scene" msgstr "Guardar Rama como Escena" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "Eliminar (sin confirmar)" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" -msgstr "Agregar/Crear un Nuevo Nodo" +msgstr "Añadir/crear nodo nuevo" #: tools/editor/scene_tree_dock.cpp msgid "" @@ -6022,6 +6412,10 @@ msgstr "" "Instanciar un archivo de escena como Nodo. Crear una escena heredada si no " "existe ningún nodo raíz." +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "Crear un nuevo script para el nodo seleccionado." + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -6044,144 +6438,60 @@ msgstr "Instancia:" #: tools/editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" -msgstr "Nobre de nodo inválido, los siguientes caracteres no estan permitidos:" +msgstr "" +"El nombre del nodo no es correcto, las siguientes letras no están permitidas:" #: tools/editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "Renombrar Nodo" +msgstr "Renombrar nodo" #: tools/editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "Arbol de Escenas (Nodos):" +msgstr "Árbol de escenas (nodos):" #: tools/editor/scene_tree_editor.cpp msgid "Editable Children" -msgstr "Hijos Editables" +msgstr "Hijos editables" #: tools/editor/scene_tree_editor.cpp msgid "Load As Placeholder" -msgstr "Cargar Como Placeholder" +msgstr "Cargar como temporal" #: tools/editor/scene_tree_editor.cpp msgid "Discard Instancing" -msgstr "Descartar Instanciado" +msgstr "Descartar instancia" #: tools/editor/scene_tree_editor.cpp msgid "Open in Editor" -msgstr "Abrir en Editor" +msgstr "Abrir en el editor" #: tools/editor/scene_tree_editor.cpp msgid "Clear Inheritance" -msgstr "Limpiar Herencia" +msgstr "Limpiar heredado" #: tools/editor/scene_tree_editor.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "Limpiar Herencia? (Imposible Deshacer!)" +msgstr "¿Quieres limpiar la herencia? (No se puede deshacer)" #: tools/editor/scene_tree_editor.cpp msgid "Clear!" -msgstr "Limpiar!" +msgstr "¡Borrar!" #: tools/editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "Seleccionar un Nodo" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Archivos de origen y destino iguales, no se realizará ninguna acción." - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "Ruta de origen y destino iguales, no se realizará ninguna acción." - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "No se pueden mover directorios dentro de si mismos." - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "No se puede operar en '..'" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Elejí un Nuevo Nombre y Ubicación Para:" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "Ningún Archivo seleccionado!" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "Instancia" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar Dependencias.." - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "Ver Dueños.." - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "Copiar Ruta" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "Renombrar o Mover.." - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "Mover A.." - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "Info" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "Mostrar en Gestor de Archivos" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "Reimportando.." - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "Directorio Previo" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "Directorio Siguiente" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "Reescanear Sistema de Archivos" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "Act/Desact. estado de carpeta como Favorito" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" -"Instanciar la(s) escena(s) seleccionadas como hijas del nodo seleccionado." - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "Mover" +msgstr "Selecciona un nodo" #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" -msgstr "Nombre de clase padre inválido" +msgstr "El nombre de clase padre no es correcto" #: tools/editor/script_create_dialog.cpp msgid "Valid chars:" -msgstr "Caracteres válidos:" +msgstr "Letras permitidas:" #: tools/editor/script_create_dialog.cpp msgid "Invalid class name" -msgstr "Nombre de clase inválido" +msgstr "El nombre de clase no es correcto" #: tools/editor/script_create_dialog.cpp msgid "Valid name" @@ -6189,19 +6499,19 @@ msgstr "Nombre válido" #: tools/editor/script_create_dialog.cpp msgid "N/A" -msgstr "N/A" +msgstr "N/D" #: tools/editor/script_create_dialog.cpp msgid "Class name is invalid!" -msgstr "El nombre de clase es inválido!" +msgstr "¡El nombre de clase no es correcto!" #: tools/editor/script_create_dialog.cpp msgid "Parent class name is invalid!" -msgstr "El nombre de la clase padre es inválido!" +msgstr "¡El nombre de clase padre no es correcto!" #: tools/editor/script_create_dialog.cpp msgid "Invalid path!" -msgstr "Ruta inválida!" +msgstr "¡Ruta incorrecta!" #: tools/editor/script_create_dialog.cpp msgid "Could not create script in filesystem." @@ -6217,31 +6527,31 @@ msgstr "La ruta no es local" #: tools/editor/script_create_dialog.cpp msgid "Invalid base path" -msgstr "Ruta base inválida" +msgstr "Ruta base incorrecta" #: tools/editor/script_create_dialog.cpp msgid "File exists" -msgstr "El archivo existe" +msgstr "El archivo ya existe" #: tools/editor/script_create_dialog.cpp msgid "Invalid extension" -msgstr "Extensión invalida" +msgstr "La extensión no es correcta" #: tools/editor/script_create_dialog.cpp msgid "Valid path" -msgstr "Ruta inválida" +msgstr "Ruta válida" #: tools/editor/script_create_dialog.cpp msgid "Class Name:" -msgstr "Nombre de Clase:" +msgstr "Nombre de clase:" #: tools/editor/script_create_dialog.cpp msgid "Built-In Script" -msgstr "Script Integrado (Built-In)" +msgstr "Script integrado" #: tools/editor/script_create_dialog.cpp msgid "Create Node Script" -msgstr "Crear Script de Nodo" +msgstr "Crear script de nodo" #: tools/editor/script_editor_debugger.cpp msgid "Bytes:" @@ -6261,7 +6571,7 @@ msgstr "Fuente:" #: tools/editor/script_editor_debugger.cpp msgid "Function:" -msgstr "Funcion:" +msgstr "Función:" #: tools/editor/script_editor_debugger.cpp msgid "Errors" @@ -6273,11 +6583,11 @@ msgstr "Proceso Hijo Conectado" #: tools/editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" -msgstr "Inspeccionar Instancia Previa" +msgstr "Inspeccionar instancia anterior" #: tools/editor/script_editor_debugger.cpp msgid "Inspect Next Instance" -msgstr "Inspeccionar Instancia Siguiente" +msgstr "Inspeccionar instancia siguiente" #: tools/editor/script_editor_debugger.cpp msgid "Stack Frames" @@ -6301,7 +6611,7 @@ msgstr "Inspector Remoto" #: tools/editor/script_editor_debugger.cpp msgid "Live Scene Tree:" -msgstr "Arbos de Escenas en Vivo:" +msgstr "Árbol de Escenas en Vivo:" #: tools/editor/script_editor_debugger.cpp msgid "Remote Object Properties: " @@ -6333,11 +6643,11 @@ msgstr "Total:" #: tools/editor/script_editor_debugger.cpp msgid "Video Mem" -msgstr "Mem. de Video" +msgstr "Memoria de vídeo" #: tools/editor/script_editor_debugger.cpp msgid "Resource Path" -msgstr "Ruta de Recursos" +msgstr "Ruta de recursos" #: tools/editor/script_editor_debugger.cpp msgid "Type" @@ -6349,15 +6659,15 @@ msgstr "Uso" #: tools/editor/script_editor_debugger.cpp msgid "Misc" -msgstr "Misc" +msgstr "Otros" #: tools/editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "Controles Cliqueados:" +msgstr "Controles seleccionados:" #: tools/editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "Tipo de Controles Cliqueados:" +msgstr "Tipo de controles seleccionados:" #: tools/editor/script_editor_debugger.cpp msgid "Live Edit Root:" @@ -6365,7 +6675,7 @@ msgstr "Raíz de Edición en Vivo:" #: tools/editor/script_editor_debugger.cpp msgid "Set From Tree" -msgstr "Definir Desde Arbol" +msgstr "Establecer desde árbol" #: tools/editor/settings_config_dialog.cpp msgid "Shortcuts" @@ -6401,12 +6711,25 @@ msgstr "Cambiar Altura de Shape Cápsula" #: tools/editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" -msgstr "Cambiar Largo de Shape Rayo" +msgstr "Cambiar longitud de forma de rayo" #: tools/editor/spatial_editor_gizmos.cpp msgid "Change Notifier Extents" msgstr "Cambiar Alcances de Notificadores" +#~ msgid "" +#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but " +#~ "unsequenced ports were specified." +#~ msgstr "" +#~ "El nodo personalizado no tiene ningún _get_output_port_unsequenced(idx," +#~ "wmem), pero se especificaron puertos no secuenciados." + +#~ msgid "Cannot go into subdir:" +#~ msgstr "No se puede acceder al subdir:" + +#~ msgid "Help" +#~ msgstr "Ayuda" + #~ msgid "Imported Resources" #~ msgstr "Importar Recursos" diff --git a/tools/translations/es_AR.po b/tools/translations/es_AR.po index 1c2b697101..7a430aa695 100644 --- a/tools/translations/es_AR.po +++ b/tools/translations/es_AR.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the Godot source code. # # Lisandro Lorea <lisandrolorea@gmail.com>, 2016. +# Sebastian Silva <sebastian@sugarlabs.org>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2016-06-30 13:09+0000\n" -"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" +"PO-Revision-Date: 2016-08-23 11:49+0000\n" +"Last-Translator: Sebastian Silva <sebastian@sugarlabs.org>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" "Language: es_AR\n" @@ -17,13 +18,15 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.7-dev\n" +"X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Argumento de tipo inválido para convert(), usá constantes TYPE_*." #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" "No hay suficientes bytes para decodificar bytes, o el formato es inválido." @@ -63,6 +66,289 @@ msgstr "" msgid "Invalid instance dictionary (invalid subclasses)" msgstr "Diccionario de instancias inválido (subclases inválidas)" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"Un nodo rindió(yielded) sin memoria de trabajo, por favor lee los docs sobre " +"como usar yield correctamente!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"El nodo rindió(yielded), pero no retornó un estado de función en la primera " +"memoria de trabajo." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"El valor de retorno debe ser asignado al primer elemento de la memoria de " +"trabajo nodos! Arreglá tu nodo, por favor." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "El nodo retornó una secuencia de salida inválida: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" +"Se encontró un bit de secuencia pero no el nodo en el stack, reportá el bug!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Stack overflow con la profundidad del stack: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Funciones:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Variables:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Señales:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "El nombre no es un identificador válido:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "El nombre ya esta en uso por otra func/var/señal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Renombrar Función" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Renombrar Variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Renombrar Señal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Agregar Función" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Agregar Variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Agregar Señal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Quitar Función" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Quitar Variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Editando Variable:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Quitar Señal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Editando Señal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Agregar Nodo" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Agregar Nodo Hijo" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Agregar Nodo(s) Desde Arbol" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Agregar Propiedad Getter" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Agregar Propiedad Setter" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Editar" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Tipo Base:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Miembros:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Nodos Disponibles:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Seleccioná o creá una función para editar el grafo" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Cerrar" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Editar Argumentos de Señal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Editar Variable:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Cambiar" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Eliminar Seleccionados" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Act/Desact. Breakpoint" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Encontrar Tipo de Nodo" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "Copiar Pose" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "Crear Nodo" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Pegar Pose" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "Tipo de input no iterable: " + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "El iterador se volvió inválido" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "El iterador se volvió inválido: " + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "Nombre de propiedad indíce inválido." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "El objeto base no es un Nodo!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "La ruta no apunta a un Nodo!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "Nombre de propiedad índice '%s' inválido en nodo %s." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": Argumento inválido de tipo: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Argumentos inválidos: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "VariableGet no encontrado en el script: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "VariableSet no encontrado en el script: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" +"El nodo personalizado no tiene ningún método _step(), no se puede procesar " +"el grafo." + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" +"Valor de retorno inválido de _step(), debe ser un entero (seq out), o string " +"(error)." + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -199,6 +485,10 @@ msgstr "" "VisibilityEnable2D funciona mejor cuando se usa con la raíz de escena " "editada directamente como padre." +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance no contiene un recurso BakedLight." + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -271,7 +561,7 @@ msgstr "" msgid "Cancel" msgstr "Cancelar" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "OK" @@ -297,8 +587,9 @@ msgstr "Todos los Archivos (*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "Abrir" @@ -421,13 +712,13 @@ msgid "Axis" msgstr "Eje" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "Cortar" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -435,7 +726,7 @@ msgstr "Copiar" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -443,7 +734,7 @@ msgid "Paste" msgstr "Pegar" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -457,7 +748,7 @@ msgid "Clear" msgstr "Limpiar" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "Deshacer" @@ -590,9 +881,8 @@ msgid "Duplicate Transposed" msgstr "Duplicar Transpuesto" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Remove Selection" -msgstr "Encuadrar Selección" +msgstr "Quitar Selección" #: tools/editor/animation_editor.cpp msgid "Continuous" @@ -789,6 +1079,11 @@ msgid "Optimize" msgstr "Optimizar" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" +"Seleccioná un AnimationPlayer de el Arbol de Escenas para editar animaciones." + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "Clave" @@ -838,7 +1133,8 @@ msgstr "Cambiar Valor del Array" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "Buscar:" @@ -892,18 +1188,6 @@ msgstr "Lista de Métodos Para '%s':" msgid "Call" msgstr "Llamar" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "Cerrar" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "Lista de Métodos:" @@ -954,6 +1238,7 @@ msgstr "Solo Selección" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -995,6 +1280,20 @@ msgstr "Preguntar Antes de Reemplazar" msgid "Skip" msgstr "Saltear" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Zoom In" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Zoom Out" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Resetear el Zoom" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "Linea:" @@ -1084,10 +1383,16 @@ msgid "Create New" msgstr "Crear Nuevo" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "Coincidencias:" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Descripción:" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Buscar Reemplazo Para:" @@ -1203,8 +1508,9 @@ msgid "Delete selected files?" msgstr "Eliminar archivos seleccionados?" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "Eliminar" @@ -1235,24 +1541,20 @@ msgstr "" "existente." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid Path." -msgstr "Ruta inválida!" +msgstr "Ruta inválida." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "File does not exist." -msgstr "El archivo existe" +msgstr "El archivo existe." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." -msgstr "Ruta de Recursos" +msgstr "No está en la ruta de recursos." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Add AutoLoad" -msgstr "Agregar Autoload" +msgstr "Agregar AutoLoad" #: tools/editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" @@ -1279,9 +1581,8 @@ msgid "Enable" msgstr "Activar" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rearrange Autoloads" -msgstr "Renombrar Autoload" +msgstr "Reordenar Autoloads" #: tools/editor/editor_autoload_settings.cpp msgid "Node Name:" @@ -1355,16 +1656,14 @@ msgid "Focus Path" msgstr "Foco en Ruta" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" -msgstr "Mover Favorito Hacia Arriba" +msgstr "Subir Favorito" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" -msgstr "Mover Favorito Hacia Abajo" +msgstr "Bajar Favorito" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "Favoritos:" @@ -1377,10 +1676,6 @@ msgid "Preview:" msgstr "Vista Previa:" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "No se puede acceder al subdir:" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "EscanearFuentes" @@ -1418,25 +1713,13 @@ msgid "Public Methods:" msgstr "Métodos Públicos:" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "Miembros:" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Items de Tema de la GUI:" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "Señales:" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "Constantes:" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Descripción:" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "Descripción de Métodos:" @@ -1740,7 +2023,6 @@ msgid "" msgstr "Abrir el Gestor de Proyectos? (Los cambios sin guardar se perderán)" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" msgstr "Elegí una Escena Principal" @@ -1835,9 +2117,8 @@ msgid "Save Scene" msgstr "Guardar Escena" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Save all Scenes" -msgstr "Guardar Escena" +msgstr "Guardar todas las Escenas" #: tools/editor/editor_node.cpp msgid "Close Scene" @@ -1871,7 +2152,7 @@ msgstr "MeshLibrary.." msgid "TileSet.." msgstr "TileSet.." -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "Rehacer" @@ -1963,9 +2244,8 @@ msgid "Play custom scene" msgstr "Reproducir escena personalizada" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play Custom Scene" -msgstr "Reproducir escena personalizada" +msgstr "Reproducir Escena Personalizada" #: tools/editor/editor_node.cpp msgid "Debug options" @@ -2305,6 +2585,91 @@ msgstr "" "No se puede abrir file_type_cache.cch para escribir, no se guardará el cache " "de tipos de archivo!" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "Archivos de origen y destino iguales, no se realizará ninguna acción." + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "Ruta de origen y destino iguales, no se realizará ninguna acción." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "No se pueden mover directorios dentro de si mismos." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "No se puede operar en '..'" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "Elejí un Nuevo Nombre y Ubicación Para:" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "Ningún Archivo seleccionado!" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "Instancia" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "Editar Dependencias.." + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "Ver Dueños.." + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "Copiar Ruta" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "Renombrar o Mover.." + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "Mover A.." + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "Info" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "Mostrar en Gestor de Archivos" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "Reimportando.." + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "Directorio Previo" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "Directorio Siguiente" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "Reescanear Sistema de Archivos" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "Act/Desact. estado de carpeta como Favorito" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" +"Instanciar la(s) escena(s) seleccionadas como hijas del nodo seleccionado." + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "Mover" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "Agregar al Grupo" @@ -3270,10 +3635,6 @@ msgid "Post-Processing Texture #" msgstr "Postprocesando Textura #" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "BakedLightInstance no contiene un recurso BakedLight." - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "Hacer Bake!" @@ -3338,8 +3699,8 @@ msgid "Paste Pose" msgstr "Pegar Pose" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" -msgstr "Seleccionar Modo (Q)" +msgid "Select Mode" +msgstr "Seleccionar Modo" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -3360,14 +3721,12 @@ msgid "Alt+RMB: Depth list selection" msgstr "Alt+Click Der.: Selección en depth list" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "Modo Mover (W)" +msgid "Move Mode" +msgstr "Modo Mover" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" -msgstr "Modo Rotar (E)" +msgid "Rotate Mode" +msgstr "Modo Rotar" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3403,14 +3762,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "Restaurar la habilidad de seleccionar los hijos de un objeto." #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "Editar" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "Usar Snap" @@ -3467,14 +3818,6 @@ msgid "View" msgstr "Ver" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "Zoom In" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "Zoom Out" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "Resetear Zoom" @@ -3495,9 +3838,8 @@ msgid "Anchor" msgstr "Anchor" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Keys" -msgstr "Insertar Clave" +msgstr "Insertar Claves" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" @@ -4152,14 +4494,12 @@ msgid "Save Theme As.." msgstr "Guardar Tema Como.." #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next script" -msgstr "Crear Script" +msgstr "Script siguiente" #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Previous script" -msgstr "Pestaña anterior" +msgstr "Script anterior" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/project_export.cpp @@ -4176,6 +4516,10 @@ msgid "Save All" msgstr "Guardar Todo" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "Recarga Soft de Script" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "Previo en Historial" @@ -4196,97 +4540,26 @@ msgid "Save Theme As" msgstr "Guardar Tema Como" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "Subir" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "Bajar" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" -msgstr "Indentar a la Izq" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" -msgstr "Indentar a la Der" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" -msgstr "Act/Desact. Comentario" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" -msgstr "Clonar hacia Abajo" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" -msgstr "Completar Símbolo" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" -msgstr "Eliminar Espacios Sobrantes al Final" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" -msgstr "Auto Indentar" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" -msgstr "Recarga Soft de Script" +msgid "Close Docs" +msgstr "Cerrar Docs" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find.." msgstr "Encontrar.." #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find Next" msgstr "Encontrar Siguiente" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" -msgstr "Encontrar Anterior" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." -msgstr "Reemplazar.." - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." -msgstr "Ir a Función.." - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." -msgstr "Ir a Línea.." - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Debug" msgstr "Debuguear" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" -msgstr "Act/Desact. Breakpoint" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" -msgstr "Quitar Todos los Breakpoints" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" -msgstr "Ir a Próximo Breakpoint" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" -msgstr "Ir a Anterior Breakpoint" - -#: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp msgid "Step Over" msgstr "Step Over" @@ -4323,14 +4596,6 @@ msgid "Move Right" msgstr "Mover a la Derecha" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" -msgstr "Ayuda" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" -msgstr "Ayuda Contextual" - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Tutorials" msgstr "Tutoriales" @@ -4387,6 +4652,79 @@ msgstr "Debugger" msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" +"Los scripts built-in solo pueden ser editados cuando la escena a la que " +"pertenecen esta cargada" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "Subir" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "Bajar" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "Indentar a la Izq" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "Indentar a la Der" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "Act/Desact. Comentario" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Clonar hacia Abajo" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "Completar Símbolo" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "Eliminar Espacios Sobrantes al Final" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "Auto Indentar" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "Quitar Todos los Breakpoints" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "Ir a Próximo Breakpoint" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "Ir a Anterior Breakpoint" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "Encontrar Anterior" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "Reemplazar.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "Ir a Función.." + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "Ir a Línea.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "Ayuda Contextual" #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Vertex" @@ -4649,57 +4987,56 @@ msgid "Could not instance scene!" msgstr "No se pudo instanciar la escena!" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "Modo Mover (W)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "Modo Rotar (E)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "Modo de Escalado (R)" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom View" -msgstr "Vista Inferior." +msgstr "Vista Inferior" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top View" -msgstr "Vista Superior." +msgstr "Vista Superior" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear View" -msgstr "Vista Anterior." +msgstr "Vista Anterior" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front View" -msgstr "Vista Frontal." +msgstr "Vista Frontal" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left View" -msgstr "Vista Izquierda." +msgstr "Vista Izquierda" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right View" -msgstr "Vista Derecha." +msgstr "Vista Derecha" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "" +msgstr "Intercambiar entre vista Perspectiva/Orthogonal" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Insert Animation Key" -msgstr "Pegar Animación" +msgstr "Insertar Clave de Animación" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Focus Selection" -msgstr "Escalar Selección" +msgstr "Foco en Selección" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Selection With View" -msgstr "Alinear con vista" +msgstr "Alinear Selección Con Vista" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform" @@ -5424,15 +5761,12 @@ msgid "Couldn't create engine.cfg in project path." msgstr "No se pudo crear engine.cfg en la ruta de proyecto." #: tools/editor/project_manager.cpp -#, fuzzy msgid "The following files failed extraction from package:" -msgstr "" -"Los siguientes archivos son nuevos en disco.\n" -"¿Qué acción se debería tomar?:" +msgstr "Los siguientes archivos no se pudieron extraer del paquete:" #: tools/editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "El Paquete se Instaló Exitosamente!" #: tools/editor/project_manager.cpp msgid "Import Existing Project" @@ -5455,14 +5789,12 @@ msgid "Project Path:" msgstr "Ruta del Proyecto:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install Project:" -msgstr "Proyectos Recientes:" +msgstr "Instalar Proyecto:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install" -msgstr "Instancia" +msgstr "Instalar" #: tools/editor/project_manager.cpp msgid "Browse" @@ -5481,12 +5813,12 @@ msgid "Unnamed Project" msgstr "Proyecto Sin Nombre" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "¿Estás seguro/a que querés abrir mas de un proyecto?" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" -msgstr "¿Estás seguro/a que queres ejecutar mas de un proyecto?" +msgid "Are you sure to run more than one project?" +msgstr "¿Estás seguro/a que querés ejecutar mas de un proyecto?" #: tools/editor/project_manager.cpp msgid "Remove project from the list? (Folder contents will not be modified)" @@ -5495,6 +5827,14 @@ msgstr "" "modificados)" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" +"Estas a punto de examinar %s carpetas en busca de proyectos de Godot. " +"Confirmar?" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "Gestor de Proyectos" @@ -5511,6 +5851,10 @@ msgid "Scan" msgstr "Escanear" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "Seleccionar una Carpeta para Examinar" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "Proyecto Nuevo" @@ -5802,6 +6146,16 @@ msgstr "Global" msgid "Sections:" msgstr "Selecciones:" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Seleccionar Puntos" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Seleccionar Modo" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "No se pudo ejecutar la herramienta PVRTC:" @@ -5876,6 +6230,10 @@ msgid "No parent to instance a child at." msgstr "No hay padre al que instanciarle un hijo." #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "No hay padre donde instanciar la escena." + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "Error al cargar escena desde %s" @@ -6009,6 +6367,10 @@ msgid "Save Branch as Scene" msgstr "Guardar Rama como Escena" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "Eliminar (Sin Confirmación)" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "Agregar/Crear un Nuevo Nodo" @@ -6020,6 +6382,10 @@ msgstr "" "Instanciar un archivo de escena como Nodo. Crear una escena heredada si no " "existe ningún nodo raíz." +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "Crear un nuevo script para el nodo seleccionado." + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -6084,91 +6450,6 @@ msgstr "Limpiar!" msgid "Select a Node" msgstr "Seleccionar un Nodo" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Archivos de origen y destino iguales, no se realizará ninguna acción." - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "Ruta de origen y destino iguales, no se realizará ninguna acción." - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "No se pueden mover directorios dentro de si mismos." - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "No se puede operar en '..'" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Elejí un Nuevo Nombre y Ubicación Para:" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "Ningún Archivo seleccionado!" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "Instancia" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar Dependencias.." - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "Ver Dueños.." - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "Copiar Ruta" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "Renombrar o Mover.." - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "Mover A.." - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "Info" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "Mostrar en Gestor de Archivos" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "Reimportando.." - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "Directorio Previo" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "Directorio Siguiente" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "Reescanear Sistema de Archivos" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "Act/Desact. estado de carpeta como Favorito" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" -"Instanciar la(s) escena(s) seleccionadas como hijas del nodo seleccionado." - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "Mover" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "Nombre de clase padre inválido" @@ -6299,7 +6580,7 @@ msgstr "Inspector Remoto" #: tools/editor/script_editor_debugger.cpp msgid "Live Scene Tree:" -msgstr "Arbos de Escenas en Vivo:" +msgstr "Árbol de Escenas en Vivo:" #: tools/editor/script_editor_debugger.cpp msgid "Remote Object Properties: " @@ -6405,6 +6686,19 @@ msgstr "Cambiar Largo de Shape Rayo" msgid "Change Notifier Extents" msgstr "Cambiar Alcances de Notificadores" +#~ msgid "" +#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but " +#~ "unsequenced ports were specified." +#~ msgstr "" +#~ "El nodo personalizado no tiene ningún _get_output_port_unsequenced(idx," +#~ "wmem), pero se especificaron puertos no secuenciados." + +#~ msgid "Cannot go into subdir:" +#~ msgstr "No se puede acceder al subdir:" + +#~ msgid "Help" +#~ msgstr "Ayuda" + #~ msgid "Imported Resources" #~ msgstr "Importar Recursos" diff --git a/tools/translations/fa.po b/tools/translations/fa.po new file mode 100644 index 0000000000..dcc29135af --- /dev/null +++ b/tools/translations/fa.po @@ -0,0 +1,6624 @@ +# Persian translation of the Godot Engine editor +# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community +# This file is distributed under the same license as the Godot source code. +# +# alabd14313 <alabd14313@yahoo.com>, 2016. +# hamed nasib <cghamed752@chmail.ir>, 2016. +# rezapouya <r.pouya@chmail.ir>, 2016. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2016-08-12 12:55+0000\n" +"Last-Translator: alabd14313 <alabd14313@yahoo.com>\n" +"Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/" +"godot/fa/>\n" +"Language: fa\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.8-dev\n" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "" +"نوع آرگومان برای متد ()convert نامعتبر است ، از ثابت های *_TYPE استفاده " +"کنید ." + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "" +"تعداد بایت های مورد نظر برای رمزگشایی بایت ها کافی نیست ، و یا فرمت نامعتبر " +"است ." + +#: modules/gdscript/gd_functions.cpp +msgid "step argument is zero!" +msgstr "آرگومان step صفر است!" + +#: modules/gdscript/gd_functions.cpp +#, fuzzy +msgid "Not a script with an instance" +msgstr "اسکریپتی با یک نمونه نیست ." + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a script" +msgstr "بر اساس یک اسکریپت نیست." + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a resource file" +msgstr "بر اساس یک فایل منبع نیست." + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "فرمت دیکشنری نمونه نامعتبر (pass@ مفقود)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" +"فرمت نمونه ی دیکشنری نامعتبر است . ( نمی توان اسکریپت را از مسیر path@ " +"بارگذاری کرد.)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "فرمت دیکشنری نمونه نامعتبر (اسکریپت نامعتبر در path@)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "نمونه ی دیکشنری نامعتبر است . (زیرکلاسهای نامعتبر)" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"یک گره بدون قرارگیری در حافظه ، متوقف شده است. لطفا اسناد رسمی Godot را برای " +"یادگیری درست متوقف کردن(yield کردن بازی)، مطالعه کنید." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"گره متوقف شده است، ولی وضعیت تابع را به اولین حافظهی فعال برنگردانده است." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"مقدار بازگشتی باید به اولین المان گره فعال در حافظه ،تخصیص یابد! لطفا گره " +"خود را اصلاح کنید." + +#: modules/visual_script/visual_script.cpp +#, fuzzy +msgid "Node returned an invalid sequence output: " +msgstr "گره ، یک سلسله خروجی نامعتبر را برگردانده است: " + +#: modules/visual_script/visual_script.cpp +#, fuzzy +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "بیت دنباله پیدا شد ولی گره موجود در پشته نه، باگ را گزارش کن!" + +#: modules/visual_script/visual_script.cpp +#, fuzzy +msgid "Stack overflow with stack depth: " +msgstr "سرریزی پشته با عمق پشته: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "وظایف:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "متغیرها:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "سیگنال ها:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "نام یک شناسهی معتبر نیست:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "نام هماکنون توسط تابع/متغیر/سیگنال استفاده شده است:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "تغییر نام نقش" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "تغییر متغیر" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Signal را تغییر نام بده" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "افزودن وظیفه" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "افزودن متغیر" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Signal را اضافه کن" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "برداشتن نقش" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "برداشتن متغیر" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "ویرایش متغیر:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "برداشتن موج" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "ویرایش سیگنال:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "افزودن گره" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "افزودن گره" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "گره(ها) را از درخت اضافه کن" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "دارایی Getter را اضافه کن" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "دارایی Setter را اضافه کن" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "ویرایش کردن" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "نوع پایه:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "عضوها:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "گره های موجود:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "یک تابع انتخاب یا ایجاد کنید تا گراف را ویرایش کنید" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "بستن" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "آرگومانهای سیگنال را ویرایش کن" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "متغیر را ویرایش کن:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "تغییر بده" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "انتخاب شده را حذف کن" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "یک Breakpoint درج کن" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "پیدا کردن نوع گره" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "مسیر به سمت گره:" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "نوع ورودی قابل تکرار نیست: " + +#: modules/visual_script/visual_script_flow_control.cpp +#, fuzzy +msgid "Iterator became invalid" +msgstr "تکرارگر نامعتبر شد" + +#: modules/visual_script/visual_script_flow_control.cpp +#, fuzzy +msgid "Iterator became invalid: " +msgstr "تکرارگر نامعتبر شد: " + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "نام دارایی ایندکس نامعتبر." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "شیء پایه یک گره نیست!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "مسیربه یک گره نمی رسد!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "نام دارایی ایندکس نامعتبر 's%' در گره s%." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": آرگومان نوع نامعتبر " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": آرگومانهای نامعتبر: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "VariableGet در اسکریپت پیدا نشد: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "VariableSet در اسکریپت پیدا نشد: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "گره سفارشی بدون متد ()step_ نمیتواند گراف را پردازش کند." + +#: modules/visual_script/visual_script_nodes.cpp +#, fuzzy +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" +"مقدار بازگشتی نامعتبر از ()step_ ، باید integer (seq out) ، یا string " +"(error) باشد." + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" +"یک منبع SpriteFrames باید در دارایی Frames ایجاد یا تنظیم شود تا " +"AnimatedSprite فریمها را نمایش دهد." + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" +"تنها یک CanvasModulate نمایان به ازای هر صحنه (یا یک مجموعه از صحنههای " +"نمونهگذاری شده) مجاز است. اولین مورد ایجاد شده کار خواهد کرد، در حالیکه از " +"بقیه صرفنظر میشود." + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionPolygon2D تنها برای فراهم کردن یک شکل برخورد برای یک گره مشتقشدهی " +"CollisionObject2D بکار میرود. لطفا از آن تنها به عنوان یک فرزند Area2D و " +"StaticBody2D و RigidBody2D و KinematicBody2D و غیره استفاده کنید تا به آنها " +"یک شکل بدهید." + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "یک CollisionPolygon2D خالی اثری بر برخورد ندارد." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionShape2D تنها برای فراهم کردن یک شکل برخورد برای یک گره مشتقشدهی " +"CollisionObject2D بکار میرود. لطفا از آن تنها به عنوان یک فرزند Area2D و " +"StaticBody2D و RigidBody2D و KinematicBody2D و غیره استفاده کنید تا به آنها " +"یک شکل بدهید." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" +"یک شکل باید برای CollisionShape2D فراهم شده باشد تا عمل کند. لطفا یک شکل " +"منبع برای آن ایجاد کنید!" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "یک بافت با شکل نور باید برای دارایی texture فراهم شده باشد." + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" +"یک چندضلعی مسدود باید برای این مسدودکننده (occluder) تنظیم (یا ترسیم) شود تا " +"تأثیرگذار باشد." + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "چندضلعی مسدود برای این مسدودکننده، خالی است. لطفا یک چندضلعی رسم کنید!" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" +"یک منبع NavigationPolygon باید برای این گره تنظیم یا ایجاد شود تا کار کند. " +"لطفا یک دارایی تعیین یا یک چندضلعی ترسیم کنید." + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" +"NavigationPolygonInstance باید یک فرزند یا نوهی یک گره Navigation2D باشد. " +"این تنها یک دادهی پیمایش را فراهم میکند." + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" +"گره ParallaxLayer تنها در زمانی که به عنوان فرزند یک گره ParallaxBackground " +"تنظیم شود کار میکند." + +#: scene/2d/particles_2d.cpp +msgid "Path property must point to a valid Particles2D node to work." +msgstr "دارایی Path باید به یک گره Particles2D معتبر اشاره کند تا کار کند." + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" +"PathFollow2D تنها در زمانی که به عنوان یک فرزند یک گره Path2D تنظیم شود کار " +"میکند." + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "دارایی Path باید به یک گره Node2D معتبر اشاره کند تا کار کند." + +#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SamplePlayer to play sound." +msgstr "" +"یک منبع SampleLibrary باید در دارایی samples ایجاد یا تنظیم شود تا " +"SamplePlayer آهنگ را پخش کند." + +#: scene/2d/sprite.cpp +msgid "" +"Path property must point to a valid Viewport node to work. Such Viewport " +"must be set to 'render target' mode." +msgstr "" +"دارایی Path باید به یک گره Viewport معتبر اشاره کند تا کار کند. این Viewport " +"باید روی حالت render target تنظیم شود." + +#: scene/2d/sprite.cpp +msgid "" +"The Viewport set in the path property must be set as 'render target' in " +"order for this sprite to work." +msgstr "" +"Viewport تنظیم شده در داریی path باید به صورت render target برای این اسپرایت " +"تنظیم شود تا کار کند." + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" +"VisibilityEnable2D زمانی بهتر کار میکند که در یک ریشهی صحنهی ویرایش شده به " +"صورت پدر (parent) استفاده شود." + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance محتوی یک منبع BakedLight نیست." + +#: scene/3d/body_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" +"CollisionShape تنها برای فراهم کردن یک شکل برخورد برای یک گره مشتقشدهی " +"CollisionObject به کار میرود. لطفا از آن تنها به عنوان یک فرزند Area و " +"StaticBody و RigidBody و KinematicBody و غیره استفاده کنید تا به آنها یک شکل " +"بدهید." + +#: scene/3d/body_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" +"باید یک شکل برای CollisionShape فراهم شده باشد تا عمل کند. لطفا یک منبع شکل " +"برای آن ایجاد کنید!" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" +"CollisionPolygon تنها برای فراهم کردن یک شکل برخورد برای یک گره مشتقشدهی " +"CollisionObject به کار میرود. لطفا از آن تنها به عنوان یک فرزند Area و " +"StaticBody و RigidBody و KinematicBody و غیره استفاده کنید تا به آنها یک شکل " +"بدهید." + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "یک CollisionPolygon خالی تأثیری بر برخورد ندارد." + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "یک منبع NavigationMesh باید برای یک گره تنظیم یا ایجاد شود تا کار کند." + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" +"NavigationMeshInstance باید یک فرزند یا نوهی یک گره Navigation باشد. این " +"تنها دادهی پیمایش را فراهم میکند." + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" +"فقط یک WorldEnvironment در هر صحنه (یا مجموعه ای از صحنه های نمونهگذاری شده) " +"مجاز است." + +#: scene/3d/spatial_sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SpatialSamplePlayer to play sound." +msgstr "" +"یک منبع SampleLibrary باید در دارایی samples ایجاد یا تنظیم شده باشد تا " +"SpatialSamplePlayer آهنگ را پخش کند." + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" +"یک منبع SpriteFrames باید در دارایی Frames ایجاد شده باشد تا " +"AnimatedSprite3D فریمها را نمایش دهد." + +#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Cancel" +msgstr "لغو" + +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp +msgid "OK" +msgstr "موافقت" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "هشدار!" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "لطفا تأیید کنید..." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "فایل وجود دارد، آیا بازنویسی شود؟" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Recognized" +msgstr "همه ی موارد شناخته شده اند." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Files (*)" +msgstr "تمام پروندهها (*)" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Open" +msgstr "باز کن" + +#: scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "یک پرونده را باز کن" + +#: scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "پرونده(ها) را باز کن" + +#: scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "یک دیکشنری را باز کن" + +#: scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "یک پرونده یا پوشه را باز کن" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save" +msgstr "ذخیره کن" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Save a File" +msgstr "یک پرونده را ذخیره کن" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Create Folder" +msgstr "پوشه ایجاد کن" + +#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/editor_file_dialog.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Path:" +msgstr "مسیر:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Directories & Files:" +msgstr "پوشهها و پروندهها:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "File:" +msgstr "پرونده:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Filter:" +msgstr "صافی:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Name:" +msgstr "نام:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Could not create folder." +msgstr "نمیتواند یک پوشه ایجاد شود." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Must use a valid extension." +msgstr "باید از یک پسوند معتبر استفاده شود." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "+Shift" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "+Alt" + +#: scene/gui/input_action.cpp +msgid "Ctrl+" +msgstr "+Ctrl" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Meta+" +msgstr "+Meta" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Device" +msgstr "دستگاه" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Button" +msgstr "دکمه" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Left Button." +msgstr "دکمهی چپ." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Right Button." +msgstr "دکمهی راست." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Middle Button." +msgstr "دکمهی وسط." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Up." +msgstr "غلطاندن به بالا." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Down." +msgstr "غلطاندن به پایین." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Axis" +msgstr "محور" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Cut" +msgstr "بریدن" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Copy" +msgstr "کپی کردن" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Paste" +msgstr "چسباندن" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "Select All" +msgstr "انتخاب همه" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/rich_text_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Clear" +msgstr "پاک کردن" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Undo" +msgstr "خنثی کردن (Undo)" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" +"Popup ها به صورت پیشفرض مخفی میشوند مگر اینکه ()popup یا یکی از توابع " +"()*popup را فراخوانی کنید. در هر صورت نمایان کردن آنها برای ویرایش خوب است، " +"اما به محض اجرا مخفی میشوند." + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" +"این viewport به صورت render target تنظیم نیست. اگر قصد دارید که محتویاتش را " +"به صورت مستقیم در صفحهنمایش نمایش دهد، آن را یک فرزند یک Control قرار دهید " +"تا بتواند یک اندازه بگیرد. در غیر اینصورت، آن را یک RenderTarget قرار دهید و " +"بافت داخلی آن را برای نمایش به تعدادی گره تخصیص دهید." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error initializing FreeType." +msgstr "خطا در ارزشدهی آغارین به FreeType." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Unknown font format." +msgstr "فرمت قلم ناشناخته." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error loading font." +msgstr "خطای بارگذاری قلم." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font size." +msgstr "اندازهی قلم نامعتبر." + +#: tools/editor/animation_editor.cpp +msgid "Disabled" +msgstr "غیرفعال شده" + +#: tools/editor/animation_editor.cpp +msgid "All Selection" +msgstr "همهی انتخاب ها" + +#: tools/editor/animation_editor.cpp +msgid "Move Add Key" +msgstr "کلید Add را جابجا کن" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transition" +msgstr "انتقال را در انیمیشن تغییر بده" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "انتقال را در انیمیشن تغییر بده" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Value" +msgstr "مقدار را در انیمیشن تغییر بده" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Call" +msgstr "فراخوانی را در انیمیشن تغییر بده" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "کلیدها را در انیمیشن حذف کن" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "انتخاب شده را به دو تا تکثیر کن" + +#: tools/editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "ترانهاده را به دو تا تکثیر کن" + +#: tools/editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "برداشتن انتخاب شده" + +#: tools/editor/animation_editor.cpp +msgid "Continuous" +msgstr "مستمر" + +#: tools/editor/animation_editor.cpp +msgid "Discrete" +msgstr "گسسته" + +#: tools/editor/animation_editor.cpp +msgid "Trigger" +msgstr "تریگر" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "یک کلید در انیمیشن اضافه کن" + +#: tools/editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "کلیدها را در انیمیشن جابجا کن" + +#: tools/editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "انتخاب شده را تغییر مقیاس بده" + +#: tools/editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "از مکاننما تغییر مقیاس بده" + +#: tools/editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "به گام بعدی برو" + +#: tools/editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "به گام قبلی برو" + +#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp +msgid "Linear" +msgstr "خطی" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "ثابت" + +#: tools/editor/animation_editor.cpp +msgid "In" +msgstr "داخل" + +#: tools/editor/animation_editor.cpp +msgid "Out" +msgstr "خارج" + +#: tools/editor/animation_editor.cpp +msgid "In-Out" +msgstr "داخل-خارج" + +#: tools/editor/animation_editor.cpp +msgid "Out-In" +msgstr "خارج-داخل" + +#: tools/editor/animation_editor.cpp +msgid "Transitions" +msgstr "انتقالها" + +#: tools/editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "انیمیشن را بهینهسازی کن" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "انیمیشن را پاکسازی کن" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Create NEW track for %s and insert key?" +msgstr "یک ترک جدید برای s% ایجاد کن و کلید را درج کن؟" + +#: tools/editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "تعداد d% ترک جدید ایجاد، و کلیدها را درج کن؟" + +#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/particles_editor_plugin.cpp +#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp +msgid "Create" +msgstr "ایجاد کن" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "ایجاد و درج در انیمیشن" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "درج ترک و کلید در انیمیشن" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "کلید را در انیمیشن درج کن" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "طول انیمیشن را تغییر بده" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "حلقه انیمیشن را تغییر بده" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "کلید مقدار دارای نوع را در انیمیشن ایجاد کن" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert" +msgstr "در انیمیشن درج کن" + +#: tools/editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "کلیدها را در انیمیشن تغییر مقیاس بده" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "ترک فراخوانی را در انیمیشن اضافه کن" + +#: tools/editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "بزرگنمایی در انیمیشن." + +#: tools/editor/animation_editor.cpp +msgid "Length (s):" +msgstr "طول(ها):" + +#: tools/editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "طول انیمیشن (به ثانیه)." + +#: tools/editor/animation_editor.cpp +msgid "Step (s):" +msgstr "گام(ها):" + +#: tools/editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "گام چسبندهی مکاننما (به ثانیه)." + +#: tools/editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "ایجاد حلقه را در انیمیشن فعال/غیر فعال کن." + +#: tools/editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "ترکهای جدید اضافه کن." + +#: tools/editor/animation_editor.cpp +msgid "Move current track up." +msgstr "ترک جاری را به بالا جابجا کن." + +#: tools/editor/animation_editor.cpp +msgid "Move current track down." +msgstr "ترک جاری را به پایین جابجا کن." + +#: tools/editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "ترک انتخاب شده را حذف کن." + +#: tools/editor/animation_editor.cpp +msgid "Track tools" +msgstr "ابزارهای ترک" + +#: tools/editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "ویرایش کلیدهای انفرادی با کلیک بر روی آنها را فعال کن." + +#: tools/editor/animation_editor.cpp +msgid "Anim. Optimizer" +msgstr "بهینهساز انیمیشن" + +#: tools/editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "خطای Max. Linear:" + +#: tools/editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "خطای Max. Angular:" + +#: tools/editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "زاویهی قابل بهینهسازی بیشینه:" + +#: tools/editor/animation_editor.cpp +msgid "Optimize" +msgstr "بهینهسازی کن" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" +"یک AnimationPlayer از درخت صحنه انتخاب کنید تا انیمیشنها را ویرایش کنید." + +#: tools/editor/animation_editor.cpp +msgid "Key" +msgstr "کلید" + +#: tools/editor/animation_editor.cpp +msgid "Transition" +msgstr "انتقال" + +#: tools/editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "نسبت تغییر مقیاس:" + +#: tools/editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "توابع را در کدام گره فراخوانی کند؟" + +#: tools/editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "کلیدهای نامعتبر را حذف کن" + +#: tools/editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "ترکهای حل نشده و خالی را حذف کن" + +#: tools/editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "تمام انیمیشنها را پاکسازی کن" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "انیمیشن(ها) را پاکسازی کن (نه UNDO !)" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up" +msgstr "پاکسازی" + +#: tools/editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "آرایه را تغییر اندازه بده" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "نوع مقدار آرایه را تغییر بده" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "مقدار آرایه را تغییر بده" + +#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "جستجو:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "مرتبسازی:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "معکوس" + +#: tools/editor/asset_library_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Category:" +msgstr "طبقهبندی:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "All" +msgstr "همه" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "تارنما:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "پشتیبانی.." + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "دفتری" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "انجمن" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "آزمودن" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "فایل های ZIP منابع بازی" + +#: tools/editor/call_dialog.cpp +msgid "Method List For '%s':" +msgstr "لیست متد برای 's%' :" + +#: tools/editor/call_dialog.cpp +msgid "Call" +msgstr "فراخوانی" + +#: tools/editor/call_dialog.cpp +msgid "Method List:" +msgstr "فهرست متدها:" + +#: tools/editor/call_dialog.cpp +msgid "Arguments:" +msgstr "نشانوندها:" + +#: tools/editor/call_dialog.cpp +msgid "Return:" +msgstr "بازگشت:" + +#: tools/editor/code_editor.cpp +msgid "Go to Line" +msgstr "برو به خط" + +#: tools/editor/code_editor.cpp +msgid "Line Number:" +msgstr "شماره خط:" + +#: tools/editor/code_editor.cpp +msgid "No Matches" +msgstr "تطبیقی ندارد" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d Ocurrence(s)." +msgstr "تعداد d% رخداد جایگزین شد." + +#: tools/editor/code_editor.cpp +msgid "Replace" +msgstr "جایگزینی" + +#: tools/editor/code_editor.cpp +msgid "Replace All" +msgstr "جایگزینی همه" + +#: tools/editor/code_editor.cpp +msgid "Match Case" +msgstr "بین حروف کوچک و بزرگ لاتین تمایز قائل شو" + +#: tools/editor/code_editor.cpp +msgid "Whole Words" +msgstr "عین کلمات (بدون هیچ کم و کاستی)" + +#: tools/editor/code_editor.cpp +msgid "Selection Only" +msgstr "تنها در قسمت انتخاب شده" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Search" +msgstr "جستجو" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +msgid "Find" +msgstr "یافتن" + +#: tools/editor/code_editor.cpp +msgid "Next" +msgstr "بعدی" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d ocurrence(s)." +msgstr "تعداد d% رخداد جایگزین شد." + +#: tools/editor/code_editor.cpp +msgid "Not found!" +msgstr "چیزی یافت نشد!" + +#: tools/editor/code_editor.cpp +msgid "Replace By" +msgstr "جایگزین کردن با" + +#: tools/editor/code_editor.cpp +msgid "Case Sensitive" +msgstr "حساس به حالت (حروف لاتین)" + +#: tools/editor/code_editor.cpp +msgid "Backwards" +msgstr "به سمت عقب" + +#: tools/editor/code_editor.cpp +msgid "Prompt On Replace" +msgstr "موقع جایگزینی از کاربر بپرس" + +#: tools/editor/code_editor.cpp +msgid "Skip" +msgstr "رد کردن" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "بزرگنمایی بیشتر" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "بزرگنمایی کمتر" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "بازنشانی بزرگنمایی" + +#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "خط:" + +#: tools/editor/code_editor.cpp +msgid "Col:" +msgstr "ستون:" + +#: tools/editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "متد در گره مقصد باید مشخص شده باشد!" + +#: tools/editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "اتصال به گره:" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Add" +msgstr "افزودن" + +#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Remove" +msgstr "برداشتن" + +#: tools/editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "آرگومان اضافی فراخوانی را اضافه کن:" + +#: tools/editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "آرگومانهای اضافی فراخوانی:" + +#: tools/editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "مسیر به سمت گره:" + +#: tools/editor/connections_dialog.cpp +msgid "Make Function" +msgstr "تابع را بساز" + +#: tools/editor/connections_dialog.cpp +msgid "Deferred" +msgstr "معوق" + +#: tools/editor/connections_dialog.cpp +#, fuzzy +msgid "Oneshot" +msgstr "تک شات" + +#: tools/editor/connections_dialog.cpp +msgid "Connect" +msgstr "اتصال" + +#: tools/editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "'s%' را به 's%' متصل کن" + +#: tools/editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "اتصال سیگنال:" + +#: tools/editor/connections_dialog.cpp +msgid "Create Subscription" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect.." +msgstr "در حال اتصال..." + +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "عدم اتصال" + +#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp +msgid "Signals" +msgstr "سیگنالها" + +#: tools/editor/create_dialog.cpp +msgid "Create New" +msgstr "جدید ایجاد کن" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Matches:" +msgstr "تطبیقها:" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "توضیح:" + +#: tools/editor/dependency_editor.cpp +#, fuzzy +msgid "Search Replacement For:" +msgstr "جستجو کن جایگزینی را برای:" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "بستگیها برای:" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" +"صحنهی 's%' در حال حاضر ویرایش شده است.\n" +"تغییرات مؤثر نخواهد بود مگر با بارگذاری مجدد." + +#: tools/editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" +"منابع 's%' در حال استفاده است.\n" +"تغییرات با بارگذاری مجدد مؤثر خواهد بود." + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies" +msgstr "بستگیها" + +#: tools/editor/dependency_editor.cpp +msgid "Resource" +msgstr "منبع" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp +msgid "Path" +msgstr "مسیر" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "بستگیها:" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "(بستگی) معیوب را تعمیر کن" + +#: tools/editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "ویرایشگر بستگی" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "منبع جایگزینی را جستجو کن:" + +#: tools/editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "مالکانِ:" + +#: tools/editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" +"پروندههایی که میخواهید حذف شوند برای منابع دیگر مورد نیاز هستند تا کار " +"کنند.\n" +"آیا در هر صورت حذف شوند (بدون undo)؟" + +#: tools/editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "آیا پروندههای انتخاب شده از پروژه حذف شوند؟ (بدون undo)" + +#: tools/editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "خطا در بارگذاری:" + +#: tools/editor/dependency_editor.cpp +msgid "Scene failed to load due to missing dependencies:" +msgstr "خطا در بارگذاری صحنه به دلیل بستگیهای مفقود:" + +#: tools/editor/dependency_editor.cpp +msgid "Open Anyway" +msgstr "در هر صورت باز کن" + +#: tools/editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "کدام عمل باید اجرا شود؟" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "بستگیها را تعمیر کن" + +#: tools/editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "خطا در بارگذاری!" + +#: tools/editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "به طور دائمی تعداد 'd%' آیتم را حذف کند؟ (بدون undo !)" + +#: tools/editor/dependency_editor.cpp +#, fuzzy +msgid "Owns" +msgstr "مال خود" + +#: tools/editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "منابع بدون مالکیت صریح:" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "پویندهی منبع جدا افتاده" + +#: tools/editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "آیا پروندههای انتخاب شده حذف شود؟" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "حذف کن" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "نام نامعتبر." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "کاراکترهای معتبر:" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "نام نامعتبر. نباید با یک نام کلاس موجود در موتور برخوردی داشته باشد." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "نام نامعتبر. نباید یا یک نام نوع توکار برخوردی داشته باشد." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "نام نامعتبر. نباید با نام یک ثابت سراسری موجود برخوردی داشته باشد." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "مسیر نامعتبر." + +#: tools/editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "پرونده موجود نیست." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "در مسیرِ منبع نیست." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "بارگذاری خودکار (AutoLoad) را اضافه کن" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "بارگذاری خودکار 's%' هم اکنون موجود است!" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "بارگذاری خودکار را تغییر نام بده" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Name" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "List:" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating Scene" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Storing local changes.." +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating scene.." +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "" + +#: tools/editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Class List:" +msgstr "فهرست کلاس:" + +#: tools/editor/editor_help.cpp +msgid "Search Classes" +msgstr "جستجوی کلاسها" + +#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp +msgid "Class:" +msgstr "کلاس:" + +#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "میراث:" + +#: tools/editor/editor_help.cpp +msgid "Inherited by:" +msgstr "به ارث رسیده به وسیله:" + +#: tools/editor/editor_help.cpp +msgid "Brief Description:" +msgstr "خلاصه توضیحات:" + +#: tools/editor/editor_help.cpp +msgid "Public Methods:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Constants:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Method Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Search Text" +msgstr "جستجوی متن" + +#: tools/editor/editor_import_export.cpp +msgid "Added:" +msgstr "افزوده شده:" + +#: tools/editor/editor_import_export.cpp +msgid "Removed:" +msgstr "برداشته شده:" + +#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp +msgid "Error saving atlas:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Could not save atlas subtexture:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Storing File:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Packing" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Exporting for %s" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Setting Up.." +msgstr "" + +#: tools/editor/editor_log.cpp +msgid " Output:" +msgstr " خروجی:" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Importing" +msgstr "در حال وارد کردن دوباره..." + +#: tools/editor/editor_node.cpp +msgid "Importing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Node From Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Error saving resource!" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Save Resource As.." +msgstr "ذخیره منبع از ..." + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "I see.." +msgstr "من میبینم ..." + +#: tools/editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error while saving." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Saving Scene" +msgstr "ذخیره سازی صحنه" + +#: tools/editor/editor_node.cpp +msgid "Analyzing" +msgstr "در حال پردازش" + +#: tools/editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Failed to load resource." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Loading Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Params" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Paste Params" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Built-In" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open in Help" +msgstr "باز کردن راهنما" + +#: tools/editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in later in \"Project Settings\" under the " +"'application' category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene" +msgstr "باز کردن صحنه" + +#: tools/editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Script.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Yes" +msgstr "تایید" + +#: tools/editor/editor_node.cpp +msgid "Close scene? (Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene As.." +msgstr "ذخیره صحنه در ..." + +#: tools/editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Please save the scene first." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Translatable Strings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit" +msgstr "خروج" + +#: tools/editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "از ویرایشگر خارج می شوید؟" + +#: tools/editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Run Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Open Project Manager? \n" +"(Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "Ugh" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error loading scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Default" +msgstr "پیشفرض" + +#: tools/editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s) or folder(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Scene" +msgstr "صحنه" + +#: tools/editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Fullscreen Mode" +msgstr "حالت تمام صفحه" + +#: tools/editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Next tab" +msgstr "زبانه بعدی" + +#: tools/editor/editor_node.cpp +msgid "Previous tab" +msgstr "زبانه قبلی" + +#: tools/editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Scene" +msgstr "صحنه جدید" + +#: tools/editor/editor_node.cpp +msgid "New Inherited Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Goto Prev. Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Recent" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Filter Files.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Convert To.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Translatable Strings.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "MeshLibrary.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "TileSet.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Redo" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Run Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import assets to the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Tools" +msgstr "ابزارها" + +#: tools/editor/editor_node.cpp +msgid "Export the project to many platforms." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Play" +msgstr "پخش" + +#: tools/editor/editor_node.cpp +msgid "Pause the scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stop" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Scene" +msgstr "پخش صحنه" + +#: tools/editor/editor_node.cpp +msgid "Play custom scene" +msgstr "پخش سفارشی صحنه" + +#: tools/editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "پخش سفارشی صحنه" + +#: tools/editor/editor_node.cpp +msgid "Debug options" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Settings" +msgstr "ترجیحات" + +#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "ویرایشگر ترجیحات" + +#: tools/editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Install Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "About" +msgstr "معرفی" + +#: tools/editor/editor_node.cpp +msgid "Alerts when an external resource has changed." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Always" +msgstr "به روز رسانی دامی" + +#: tools/editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Save As.." +msgstr "ذخیره در..." + +#: tools/editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Object properties." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Output" +msgstr "خروجی" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "بروز رسانی" + +#: tools/editor/editor_node.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks!" +msgstr "تشکرات!" + +#: tools/editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "واردکردن قالب ها از درون یک فایل ZIP" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export Project" +msgstr "صادر کردن پروژه" + +#: tools/editor/editor_node.cpp +msgid "Export Library" +msgstr "صادکردن فایل کتابخانه ای" + +#: tools/editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "ترکیب کردن با نمونه ی موجود" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Password:" +msgstr "گذرواژه:" + +#: tools/editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "باز کردن و اجرای یک اسکریپت" + +#: tools/editor/editor_node.cpp +msgid "Load Errors" +msgstr "خطاهای بارگذاری" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "افزونه های نصب شده:" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Version:" +msgstr "نسخه:" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "خالق:" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "وضعیت:" + +#: tools/editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Start Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Fixed Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp +msgid "Time:" +msgstr "زمان:" + +#: tools/editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Please wait for scan to complete." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Current scene must be saved to re-import." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Save & Re-Import" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import Changed Resources" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: tools/editor/editor_settings.cpp +msgid "Default (Same as Editor)" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: tools/editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "No bit masks to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must be a complete resource path." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must exist." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Save path is empty!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Import BitMasks" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Target Path:" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Accept" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Bit Mask" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No source font file!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No target font resource!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"Invalid file extension.\n" +"Please use .fnt." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Can't load/process source font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Couldn't save font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Dest Resource:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "The quick brown fox jumps over the lazy dog." +msgstr "" +"کلاغ فرز و چابک، ظهر هر روز با صدای ضخیم و عذابآورش بـه جستجوی یک مثقال گنج " +"پنهان در حیاط رژه می رفت." + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Test:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Options:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Font Import" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"This file is already a Godot font file, please supply a BMFont type file " +"instead." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Failed opening as BMFont file." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font custom source." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "No meshes to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Single Mesh Import" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Source Mesh(es):" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Surface %d" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "No samples to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Import Audio Samples" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Source Sample(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Audio Sample" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "New Clip" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Animation Options" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Flags" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Bake FPS:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Optimizer" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Linear Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angular Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angle" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Clips" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Start(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "End(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Filters" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error importing scene." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import 3D Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source Scene:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Same as Target Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Shared" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Target Texture Folder:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Post-Process Script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Custom Root Node Type:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Auto" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "The Following Files are Missing:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Anyway" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import & Open" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Edited scene has not been saved, open imported scene anyway?" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Importing Scene.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Running Custom Script.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error running post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Can't import a file over itself:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't localize path: %s (already local)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Saving.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "3D Scene Animation" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Uncompressed" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossless (PNG)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossy (WebP)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress (VRAM)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Format" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Compression Quality (WebP):" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Options" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Please specify some files!" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "At least one file needed for Atlas." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Error importing:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Only one file is required for large texture." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Max Texture Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for Atlas (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cell Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Textures (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Base Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 2D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 3D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "2D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "3D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "" +"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " +"the project." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Crop empty space." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Load Source Image" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Slicing" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Inserting" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Saving" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save large texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Build Atlas For:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Loading Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't load image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Converting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cropping Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Blitting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save atlas image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save converted texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid translation source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Column" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No items to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No target path!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translations" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Couldn't import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translation" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Source CSV:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Ignore First Row" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Compress" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Add to Project (engine.cfg)" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Languages:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Translation" +msgstr "" + +#: tools/editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Node" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Invalid animation name!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Animation name already exists!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to copy!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation resource on clipboard!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to edit!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create new animation in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save As" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Target Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Rename" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations.." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters.." +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing %d Triangles:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Light Baker Setup:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing Geometry" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Fixing Lights" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Making BVH" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Light Octree" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Octree Texture" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Transfer to Lightmaps:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Allocating Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Baking Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Post-Processing Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Reset the lightmap octree baking process (start over)." +msgstr "" + +#: tools/editor/plugins/camera_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Pivot" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom (%):" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "انتخاب حالت" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Expand to Parent" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Reset" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Set.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchor" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set a Value" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap (Pixels):" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Creating Mesh Library" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh.." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image.." +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Set Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Mesh" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Node" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Clear Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Positions:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Fill:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Surface" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: tools/editor/plugins/rich_text_editor_plugin.cpp +msgid "Parse BBCode" +msgstr "" + +#: tools/editor/plugins/sample_editor_plugin.cpp +msgid "Length:" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Open Sample File(s)" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "ERROR: Couldn't load sample!" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Add Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Rename Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Delete Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "16 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "8 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stereo" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Mono" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "File" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_editor.cpp +msgid "New" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Window" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Left" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Right" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Tutorials" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Open https://godotengine.org at tutorials section." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the class hierarchy." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Lighting" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling to %s%%." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Environment" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "No scene selected to instance!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Instance at Cursor" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Could not instance scene!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog.." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default Light" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default sRGB" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Shadeless" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Default Light Normal:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Ambient Light Color:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Up" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Down" +msgstr "" + +#: tools/editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp +msgid "Options" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Have,Many,Several,Options!" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Style" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase selection" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Find tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Error" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Edit Script Options" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Please export outside the project folder!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error exporting project!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error writing the project PCK!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "No exporter for platform '%s' yet." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Include" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Change Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name can't be empty!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Invalid character in group name!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name already exists!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Add Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Delete Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas Preview" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export Settings" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Target" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export to Platform" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export selected resources (including dependencies)." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all resources in the project." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all files in the project directory." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources to Export:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Action" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert text scenes to binary on export." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep Original" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy, WebP)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for RAM (BC/PVRTC/ETC)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert Images (*.png):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy) Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink All Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Formats:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Groups" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Groups:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Disk" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress RAM" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Lossy Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink By:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Preview Atlas" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Filter:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Select None" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Samples" +msgstr "نمونه ها" + +#: tools/editor/project_export.cpp +msgid "Sample Conversion Mode: (.wav files):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress (RAM - IMA-ADPCM)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sampling Rate Limit (Hz):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trim" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trailing Silence:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Text" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compiled" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Encryption Key (256-bits as hex):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Project PCK" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export.." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Preset:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, the path must exist!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must not exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Couldn't create engine.cfg in project path." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path (Must Exist):" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "That's a BINGO!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" +"شما درخواست بررسی پوشه های ٪ را برای پیدا کردن پروژه های Godot را داده اید. " +"آیا انجام این عمل را تایید می کنید!؟" + +#: tools/editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Key " +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Axis" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Invalid action (anything goes but '/' or ':')." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Press a Key.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Left Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Right Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Middle Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Up Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Down Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 6" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 7" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 8" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 9" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Axis Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Toggle Persisting" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Error saving settings." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Settings saved OK." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Remapped Path" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Project Settings (engine.cfg)" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +msgid "Property:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Del" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Copy To Platform.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Input Map" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Device:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Localization" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resources:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Locale" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "AutoLoad" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Plugins" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Preset.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "File.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Dir.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Load" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Couldn't load image" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "On" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Set" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Properties:" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Global" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Sections:" +msgstr "" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "دارایی Setter را اضافه کن" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "انتخاب حالت" + +#: tools/editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Create New Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Open Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Save Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Resource Tools" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Make Local" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "OK :(" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Ok" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save New Scene As.." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Makes Sense!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Groups" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Connections" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Script" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "خذف(تایید نشده)" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "" +"This item cannot be made visible because the parent is hidden. Unhide the " +"parent first." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Editable Children" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Load As Placeholder" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Discard Instancing" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear!" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid parent class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid chars:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Parent class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid path!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Could not create script in filesystem." +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "File exists" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Built-In Script" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Create Node Script" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Warning" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Function:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Variable" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Inspector" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Scene Tree:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Object Properties: " +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: tools/editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" + +#~ msgid "" +#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but " +#~ "unsequenced ports were specified." +#~ msgstr "" +#~ "گره سفارشی دارای get_output_port_unsequenced(idx,wmem)_ نیست، اما پورتهای " +#~ "نامتوالی مشخص شده است." diff --git a/tools/translations/fr.po b/tools/translations/fr.po index 7067ae472c..354934fefa 100644 --- a/tools/translations/fr.po +++ b/tools/translations/fr.po @@ -8,13 +8,17 @@ # Hugo Locurcio <hugo.l@openmailbox.org>, 2016. # Marc <marc.gilleron@gmail.com>, 2016. # Onyx Steinheim <thevoxelmanonyx@gmail.com>, 2016. +# rafeu <duchainer@gmail.com>, 2016. +# Rémi Verschelde <rverschelde@gmail.com>, 2016. +# Roger BR <drai_kin@hotmail.com>, 2016. +# Thomas Baijot <thomasbaijot@gmail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2016-07-13 18:14+0000\n" -"Last-Translator: Chenebel Dorian <LoubiTek54@gmail.com>\n" +"PO-Revision-Date: 2016-08-29 13:56+0000\n" +"Last-Translator: Thomas Baijot <thomasbaijot@gmail.com>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -25,16 +29,18 @@ msgstr "" "X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Argument invalide de type convertir(), utiliser le TYPE * constantes." #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Pas assez d'octets pour les octets de décodage, ou format non valide." #: modules/gdscript/gd_functions.cpp msgid "step argument is zero!" -msgstr "" +msgstr "L'argument du pas est zéro!" #: modules/gdscript/gd_functions.cpp msgid "Not a script with an instance" @@ -68,6 +74,283 @@ msgid "Invalid instance dictionary (invalid subclasses)" msgstr "" "Instance invalide pour le format de dictionnaire (sous-classes invalides)" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "Le nœud a retourné une séquence de sortie invalide " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Fonction :" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Variables:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Signaux :" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Name is not a valid identifier:" +msgstr "Le nom n'est pas un identifiant valide" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Le nom est déjà utilisé dans une autre func/var/signal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Renommer la fonction" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Renommer la variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Renommer le signal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Ajouter une fonction" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Ajouter une variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Ajouter un signal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Supprimer la fonction" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Supprimer la variable" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Editing Variable:" +msgstr "Variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Supprimer le signal" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Editing Signal:" +msgstr "Connecter un signal :" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Ajouter un nœud" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Ajouter un nœud enfant" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Ajouter un nœud à partir de l'arbre" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Modifier" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Type de base" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Membres :" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Nœuds disponibles:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Sélectionner ou créer une fonction pour éditer le graph" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Fermer" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Editer les arguments du signal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Editer la variable" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Changer" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Supprimer la selection" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Placer un point d'arrêt" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Trouver le type du noeud" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "Copier la pose" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "Créer un nœud" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Coller la pose" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "L'itérateur est devenu invalide" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "L'itérateur est devenu invalide " + +#: modules/visual_script/visual_script_func_nodes.cpp +#, fuzzy +msgid "Invalid index property name." +msgstr "Nom de classe parent invalide" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "L'objet de base n'est pas un nœud !" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "Le chemin ne mène pas au nœud !" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +#, fuzzy +msgid ": Invalid argument of type: " +msgstr "Nom de classe parent invalide" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Arguments invalides " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -211,6 +494,10 @@ msgstr "" "Un VisibilityEnable2D fonctionne mieux lorsqu'il est directement enfant du " "nœud racine de la scène." +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "La BakedLightInstance ne contient pas de ressource BakedLight." + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -282,7 +569,7 @@ msgstr "" msgid "Cancel" msgstr "Annuler" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "OK" @@ -308,8 +595,9 @@ msgstr "Tous les fichiers (*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "Ouvrir" @@ -432,13 +720,13 @@ msgid "Axis" msgstr "Axe" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "Couper" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -446,7 +734,7 @@ msgstr "Copier" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -454,7 +742,7 @@ msgid "Paste" msgstr "Coller" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -468,7 +756,7 @@ msgid "Clear" msgstr "Effacer" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "Annuler" @@ -602,9 +890,8 @@ msgid "Duplicate Transposed" msgstr "" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Remove Selection" -msgstr "Mettre à l'échelle la sélection" +msgstr "Supprimer la sélection" #: tools/editor/animation_editor.cpp msgid "Continuous" @@ -615,7 +902,6 @@ msgid "Discrete" msgstr "Discret" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Trigger" msgstr "Déclencheur" @@ -640,7 +926,6 @@ msgid "Goto Next Step" msgstr "Aller à l'étape suivante" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Goto Prev Step" msgstr "Revenir à l'étape précédente" @@ -711,9 +996,8 @@ msgid "Anim Insert Key" msgstr "Animation Inserer une clé" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Change Anim Len" -msgstr "Change le format de l'animation" +msgstr "Changer la longueur de l'animation" #: tools/editor/animation_editor.cpp msgid "Change Anim Loop" @@ -728,9 +1012,8 @@ msgid "Anim Insert" msgstr "Insérer une animation" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Anim Scale Keys" -msgstr "Touches de l'échelle de l'animation" +msgstr "Images-clés d'échelle de l'animation" #: tools/editor/animation_editor.cpp msgid "Anim Add Call Track" @@ -805,6 +1088,10 @@ msgid "Optimize" msgstr "Optimiser" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "Clé" @@ -845,18 +1132,17 @@ msgid "Resize Array" msgstr "Redimensionner le tableau" #: tools/editor/array_property_edit.cpp -#, fuzzy msgid "Change Array Value Type" -msgstr "Changer les valeurs types d'un tableau" +msgstr "Changer les types des valeurs du tableau" #: tools/editor/array_property_edit.cpp -#, fuzzy msgid "Change Array Value" -msgstr "Changer la valeur d'un tableau" +msgstr "Changer les valeurs du tableau" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "Rechercher :" @@ -910,18 +1196,6 @@ msgstr "Liste des méthodes pour « %s » :" msgid "Call" msgstr "Appel" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "Fermer" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "Liste des méthodes :" @@ -972,6 +1246,7 @@ msgstr "Sélection uniquement" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -1013,6 +1288,20 @@ msgstr "Avertir lors du remplacement" msgid "Skip" msgstr "Passer" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Zoomer" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Dézoomer" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Réinitialiser le zoom" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "Ligne :" @@ -1026,7 +1315,6 @@ msgid "Method in target Node must be specified!" msgstr "La méthode du nœud cible doit être spécifiée !" #: tools/editor/connections_dialog.cpp -#, fuzzy msgid "Connect To Node:" msgstr "Connecter au nœud :" @@ -1103,10 +1391,16 @@ msgid "Create New" msgstr "Créer un nouveau" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "Correspondances :" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Description :" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Rechercher un remplacement pour :" @@ -1158,14 +1452,13 @@ msgstr "Éditeur de dépendances" #: tools/editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "Recherche une ressource de remplacement:" +msgstr "Recherche une ressource de remplacement :" #: tools/editor/dependency_editor.cpp msgid "Owners Of:" msgstr "Propriétaires de :" #: tools/editor/dependency_editor.cpp -#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -1173,19 +1466,16 @@ msgid "" msgstr "" "Les fichiers supprimés sont requis par d'autres ressources pour leur " "fonctionnement.\n" -"Les supprimez-vous quand même ? (aucune annulation possible)" +"Les supprimer quand même ? (aucune annulation possible)" #: tools/editor/dependency_editor.cpp -#, fuzzy msgid "Remove selected files from the project? (no undo)" msgstr "" -"Supprimer les fichiers sélectionnés dans le projet ? (aucune annulation " -"possible)" +"Supprimer les fichiers sélectionnés du projet ? (aucune annulation possible)" #: tools/editor/dependency_editor.cpp -#, fuzzy msgid "Error loading:" -msgstr "Erreur de chargement:" +msgstr "Erreur de chargement :" #: tools/editor/dependency_editor.cpp msgid "Scene failed to load due to missing dependencies:" @@ -1230,8 +1520,9 @@ msgid "Delete selected files?" msgstr "Supprimer les fichiers sélectionnés ?" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "Supprimer" @@ -1262,24 +1553,20 @@ msgstr "" "constante globale." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid Path." -msgstr "Chemin invalide !" +msgstr "Chemin invalide." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "File does not exist." -msgstr "Le fichier existe" +msgstr "Le fichier n'existe pas." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." -msgstr "Chemin de la ressource" +msgstr "Pas dans le chemin de la ressource." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Add AutoLoad" -msgstr "Ajouter un AutoLoad" +msgstr "Ajouter l'AutoLoad" #: tools/editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" @@ -1306,9 +1593,8 @@ msgid "Enable" msgstr "Activer" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rearrange Autoloads" -msgstr "Renommer l'AutoLoad" +msgstr "Ré-organiser les AutoLoads" #: tools/editor/editor_autoload_settings.cpp msgid "Node Name:" @@ -1370,14 +1656,12 @@ msgid "Toggle Hidden Files" msgstr "Basculer les fichiers cachés" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Favorite" -msgstr "Déplacer le favori vers le haut" +msgstr "Basculer le favori" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Mode" -msgstr "Commenter/décommenter" +msgstr "Basculer le mode" #: tools/editor/editor_file_dialog.cpp #, fuzzy @@ -1385,16 +1669,14 @@ msgid "Focus Path" msgstr "Copier le chemin" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" msgstr "Déplacer le favori vers le haut" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" msgstr "Déplacer le favori vers le bas" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "Favoris :" @@ -1407,10 +1689,6 @@ msgid "Preview:" msgstr "Aperçu :" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "Impossible d'aller dans le sous-répertoire :" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "Scanner les sources" @@ -1448,25 +1726,13 @@ msgid "Public Methods:" msgstr "Méthodes publiques :" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "Membres :" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Items de thème GUI :" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "Signaux :" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "Constantes :" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Description :" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "Description de la méthode :" @@ -1649,38 +1915,35 @@ msgid "There is no defined scene to run." msgstr "Il n'y a pas de scène définie pour être lancée." #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select one?\n" "You can change it later in later in \"Project Settings\" under the " "'application' category." msgstr "" -"Aucune scène principale n'a jamais été définie, en sélectionner une?\n" -"Vous pouvez modifier ultérieurement dans 'Paramètres du projet' dans la " -"catégorie «application»." +"Aucune scène principale n'a jamais été définie, en sélectionner une ?\n" +"Vous pouvez la modifier ultérieurement dans les « Paramètres du projet » " +"dans la catégorie « application »." #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "Selected scene '%s' does not exist, select a valid one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"La scène sélectionnée '%s' n'existe pas, en sélectionner une valide?\n" -"Vous pouvez modifier ultérieurement dans 'Paramètres du projet' dans la " -"catégorie «application»." +"La scène sélectionnée « %s » n'existe pas, en sélectionner une valide ?\n" +"Vous pouvez la modifier ultérieurement dans les « Paramètres du projet » " +"dans la catégorie « application »." #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "Selected scene '%s' is not a scene file, select a valid one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"La scène sélectionnée '%s' n'est pas un fichier de scène, en sélectionner " -"une valide?\n" -"Vous pouvez modifier ultérieurement dans 'Paramètres du projet' dans la " -"catégorie «application»." +"La scène sélectionnée « %s » n'est pas un fichier de scène, en sélectionner " +"une valide ?\n" +"Vous pouvez la modifier ultérieurement dans les « Paramètres du projet » " +"dans la catégorie « application »." #: tools/editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." @@ -1778,9 +2041,8 @@ msgstr "" "(les modifications non sauvegardées seront perdues)" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" -msgstr "Scène principale" +msgstr "Choisir une scène principale" #: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp msgid "Ugh" @@ -1841,19 +2103,16 @@ msgid "Fullscreen Mode" msgstr "Mode plein écran" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Distraction Free Mode" -msgstr "Mode distraction libre" +msgstr "Mode sans distraction" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Next tab" -msgstr "Suivant" +msgstr "Onglet suivant" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Previous tab" -msgstr "Répertoire précédent" +msgstr "Onglet precedent" #: tools/editor/editor_node.cpp msgid "Operations with scene files." @@ -1876,9 +2135,8 @@ msgid "Save Scene" msgstr "Enregistrer la scène" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Save all Scenes" -msgstr "Enregistrer la scène" +msgstr "Enregistrer toutes les scènes" #: tools/editor/editor_node.cpp msgid "Close Scene" @@ -1912,7 +2170,7 @@ msgstr "MeshLibrary…" msgid "TileSet.." msgstr "TileSet…" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "Refaire" @@ -2017,12 +2275,11 @@ msgid "Deploy with Remote Debug" msgstr "Déployer avec le débogage distant" #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "When exporting or deploying, the resulting executable will attempt to " "connect to the IP of this computer in order to be debugged." msgstr "" -"Lors de l'exportation ou du déploiement, l'exécutable tentera de se " +"Lors de l'exportation ou du déploiement, l'exécutable produit tentera de se " "connecter à l'adresse IP de cet ordinateur afin de procéder au débogage." #: tools/editor/editor_node.cpp @@ -2066,12 +2323,11 @@ msgid "Visible Navigation" msgstr "Navigation visible" #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" -"la navigation des maillages et des polygones sera visible en jeu si cette " +"Les maillages et polygones de navigation seront visibles en jeu si cette " "option est activée." #: tools/editor/editor_node.cpp @@ -2080,7 +2336,6 @@ msgid "Sync Scene Changes" msgstr "Changement de synchronisation de scène" #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "When this option is turned on, any changes made to the scene in the editor " "will be replicated in the running game.\n" @@ -2089,8 +2344,8 @@ msgid "" msgstr "" "Lorsque cette option est activée, toutes les modifications apportées à la " "scène dans l'éditeur seront reproduites en jeu.\n" -"Lorsque c'est utilisé à distance sur un périphérique, c'est plus efficace " -"avec le système de fichiers réseau." +"Lorsqu'elle est utilisée à distance sur un périphérique, l'efficacité est " +"meilleure avec le système de fichiers réseau." #: tools/editor/editor_node.cpp msgid "Sync Script Changes" @@ -2250,29 +2505,24 @@ msgid "Status:" msgstr "État :" #: tools/editor/editor_profiler.cpp -#, fuzzy msgid "Stop Profiling" -msgstr "Arrêt du profilage" +msgstr "Arrêter le profilage" #: tools/editor/editor_profiler.cpp -#, fuzzy msgid "Start Profiling" -msgstr "Démarrage du profilage" +msgstr "Démarrer le profilage" #: tools/editor/editor_profiler.cpp -#, fuzzy msgid "Measure:" -msgstr "Quantité:" +msgstr "Mesure:" #: tools/editor/editor_profiler.cpp -#, fuzzy msgid "Frame Time (sec)" -msgstr "Image par seconde" +msgstr "Temps image (en seconde)" #: tools/editor/editor_profiler.cpp -#, fuzzy msgid "Average Time (sec)" -msgstr "Temps moyen (sec)" +msgstr "Temps moyen (seconde)" #: tools/editor/editor_profiler.cpp #, fuzzy @@ -2364,6 +2614,90 @@ msgstr "" "Impossible d'ouvrir file_type_cache.cch en écriture, le fichier de cache ne " "sera pas sauvé !" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "Fichiers source et destination identiques, rien à faire." + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "Chemins source et destination identiques, rien à faire." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "Impossible de déplacer des répertoires vers eux-mêmes." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "Impossible d'opérer sur « .. »" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "Entrez un nouveau nom et chemin pour :" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "Pas de fichiers sélectionnés !" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "Instance" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "Modifier les dépendances…" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "Voir les propriétaires…" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "Copier le chemin" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "Renommer ou déplacer…" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "Déplacer vers…" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "Information" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "Montrer dans le gestionnaire de fichiers" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "Ré-importer…" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "Répertoire précédent" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "Répertoire suivant" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "Re-scanner le système de fichiers" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "Basculer l'état favori du dossier" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "Instancie la/les scènes sélectionnées en tant qu'enfant du nœud." + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "Déplacer" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "Ajouter au groupe" @@ -3044,9 +3378,9 @@ msgid "ERROR: No animation to edit!" msgstr "ERREUR : Pas d'animation à modifier !" #: tools/editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Play selected animation backwards from current pos. (A)" -msgstr "Lire l'animation sélectionnée à rebours de la position actuelle. (A)" +msgstr "" +"Jouer l'animation sélectionnée à l'envers depuis la position actuelle. (A)" #: tools/editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -3140,7 +3474,7 @@ msgstr "Temps de mélange" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" -msgstr "Suivant (file d'attente automatique):" +msgstr "Suivant (file d'attente automatique) :" #: tools/editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -3179,15 +3513,15 @@ msgstr "Mixer" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Auto Restart:" -msgstr "Redémarrage automatique:" +msgstr "Redémarrage automatique :" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Restart (s):" -msgstr "Redémarrer (s):" +msgstr "Redémarrer (s) :" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Random Restart (s):" -msgstr "Redémarrage aléatoire (s):" +msgstr "Redémarrage aléatoire (s) :" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Start!" @@ -3248,11 +3582,11 @@ msgstr "L'arbre d'animations est invalide." #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation Node" -msgstr "" +msgstr "Nœud d'animation" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "OneShot Node" -msgstr "" +msgstr "Nœud one-shot" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix Node" @@ -3260,27 +3594,27 @@ msgstr "" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend2 Node" -msgstr "" +msgstr "Nœud Blend2" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend3 Node" -msgstr "" +msgstr "Nœud Blend3" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend4 Node" -msgstr "" +msgstr "Nœud Blend4" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "" +msgstr "Nœud TimeScale" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "" +msgstr "Nœud TimeSeek" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "" +msgstr "Nœud Transition" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Import Animations.." @@ -3343,10 +3677,6 @@ msgid "Post-Processing Texture #" msgstr "Post-traitement de la texture #" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "La BakedLightInstance ne contient pas de ressource BakedLight." - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "Calculer !" @@ -3399,7 +3729,7 @@ msgstr "Modifier le CanvasItem" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" -msgstr "" +msgstr "Modifier les ancres" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom (%):" @@ -3407,10 +3737,11 @@ msgstr "Zoom (%) :" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" -msgstr "" +msgstr "Coller la pose" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" +#, fuzzy +msgid "Select Mode" msgstr "Mode sélection (Q)" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3424,19 +3755,21 @@ msgstr "Alt + Glisser : déplacer" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" +"Appuyez sur « v » pour changer le pivot, « Maj+V » pour glisser le pivot " +"(lors du déplacement)." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" msgstr "Alt + Bouton droit : sélection détaillée par liste" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" +#, fuzzy +msgid "Move Mode" msgstr "Move déplacement (W)" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +#, fuzzy +msgid "Rotate Mode" msgstr "Mode rotation (E)" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3445,6 +3778,8 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" +"Afficher une liste de tous les objets à la position cliquée\n" +"(identique à Alt+Clic droit en mode sélection)." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." @@ -3456,27 +3791,19 @@ msgstr "Mode navigation" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "" +msgstr "Verrouiller l'objet sélectionné (il ne pourra plus être déplacé)." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "" +msgstr "Déverouiller l'objet sélectionné (il pourra être déplacé de nouveau)." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." -msgstr "" +msgstr "Rendre la sélection des enfants de l'objet impossible." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "Modifier" +msgstr "Rendre la sélection des enfants de l'objet de nouveau possible." #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3535,14 +3862,6 @@ msgid "View" msgstr "Affichage" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "Zoomer" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "Dézoomer" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "Réinitialiser le zoom" @@ -3552,11 +3871,11 @@ msgstr "Définir le zoom…" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "" +msgstr "Centrer sur la sélection" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "" +msgstr "Cadrer la sélection" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchor" @@ -3569,27 +3888,27 @@ msgstr "Animation Inserer une clé" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "" +msgstr "Insérer une clé" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "" +msgstr "Insérer une clé (pistes existantes)" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" -msgstr "" +msgstr "Copier la pose" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Pose" -msgstr "" +msgstr "Vider la pose" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Set a Value" -msgstr "" +msgstr "Définir une valeur" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap (Pixels):" -msgstr "" +msgstr "Aligner (pixels) :" #: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3628,7 +3947,7 @@ msgstr "Créer un Poly3D" #: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" -msgstr "" +msgstr "Définir la poignée" #: tools/editor/plugins/color_ramp_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -3641,7 +3960,7 @@ msgstr "Modifier une rampe de couleurs" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Creating Mesh Library" -msgstr "" +msgstr "Création de la bibliothèque de maillages" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Thumbnail.." @@ -3659,7 +3978,7 @@ msgstr "Ajouter un item" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove Selected Item" -msgstr "" +msgstr "Supprimer l'élément sélectionné" #: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import from Scene" @@ -3711,11 +4030,11 @@ msgstr "Le maillage est vide !" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "" +msgstr "Créer un corps statique de type Trimesh" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Convex Body" -msgstr "" +msgstr "Créer un corps statique de type convexe" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -3740,6 +4059,7 @@ msgstr "Le MeshInstance n'a pas de maillage !" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" msgstr "" +"Le maillage n'a pas de surfaces où des contours pourraient être créées !" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -3780,70 +4100,75 @@ msgstr "Taille du contour :" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." msgstr "" +"Pas de maillage source spécifié (et aucun MultiMesh n'a été défini dans le " +"nœud)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." msgstr "" +"Pas de maillage source spécifié (et le MultiMesh ne contient pas de " +"maillage)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." -msgstr "" +msgstr "La source du maillage est invalide (chemin non valide)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "" +msgstr "Le maillage source est invalide (ce n'est pas une MeshInstance)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." msgstr "" +"Le maillage source est invalide (ne contient pas de ressource de type Mesh)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "" +msgstr "Pas de surface source spécifiée." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "" +msgstr "La surface source est invalide (chemin non valide)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "" +msgstr "La surface source est invalide (pas de géométrie)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "" +msgstr "La surface source est invalide (pas de faces)." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Parent has no solid faces to populate." -msgstr "" +msgstr "Le parent n'a pas de faces solides à peupler." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Couldn't map area." -msgstr "" +msgstr "Impossible de cartographier la zone." #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "" +msgstr "Sélectionner un maillage source :" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "" +msgstr "Sélectionner une surface cible :" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "" +msgstr "Peupler la surface" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" -msgstr "" +msgstr "Peupler la MultiMesh" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" -msgstr "" +msgstr "Surface cible :" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" -msgstr "" +msgstr "Maillage source :" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" @@ -3867,7 +4192,7 @@ msgstr "Rotation aléatoire :" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Random Tilt:" -msgstr "" +msgstr "Inclinaison aléatoire :" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" @@ -3895,15 +4220,15 @@ msgstr "Pas de pixels avec une transparence > 128 dans l'image…" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Set Emission Mask" -msgstr "" +msgstr "Définir le masque d'émission" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" -msgstr "" +msgstr "Effacer le masque d'émission" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" -msgstr "" +msgstr "Charger le masque d'émission" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -3911,11 +4236,11 @@ msgstr "" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." -msgstr "" +msgstr "Le nœud ne contient pas de géométrie." #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry (faces)." -msgstr "" +msgstr "Le nœud ne contient pas de géométrie (faces)." #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Faces contain no area!" @@ -3931,27 +4256,27 @@ msgstr "Générer un AABB" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter From Mesh" -msgstr "" +msgstr "Créer un émetteur à partir d'un maillage" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter From Node" -msgstr "" +msgstr "Créer un émetteur à partir d'un nœud" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Clear Emitter" -msgstr "" +msgstr "Effacer l'émetteur" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" -msgstr "" +msgstr "Créer un émetteur" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Emission Positions:" -msgstr "" +msgstr "Positions d'émission :" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Emission Fill:" -msgstr "" +msgstr "Remplissage d'émission :" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Surface" @@ -3968,7 +4293,7 @@ msgstr "Supprimer le point d'une courbe" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Add Point to Curve" -msgstr "" +msgstr "Ajouter un point à la courbe" #: tools/editor/plugins/path_2d_editor_plugin.cpp msgid "Move Point in Curve" @@ -4014,17 +4339,17 @@ msgstr "Ajouter un point (dans un espace vide)" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" -msgstr "" +msgstr "Diviser le segment (en courbe)" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "" +msgstr "Supprimer le point" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Close Curve" -msgstr "" +msgstr "Fermer la courbe" #: tools/editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -4032,7 +4357,7 @@ msgstr "Point de courbe #" #: tools/editor/plugins/path_editor_plugin.cpp msgid "Set Curve Point Pos" -msgstr "" +msgstr "Définir la position du point de la courbe" #: tools/editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Pos" @@ -4044,11 +4369,11 @@ msgstr "" #: tools/editor/plugins/path_editor_plugin.cpp msgid "Split Path" -msgstr "" +msgstr "Diviser le chemin" #: tools/editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "" +msgstr "Supprimer le chemin du point" #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" @@ -4243,6 +4568,11 @@ msgid "Save All" msgstr "Tout enregistrer" #: tools/editor/plugins/script_editor_plugin.cpp +#, fuzzy +msgid "Soft Reload Script" +msgstr "Recharger le script (mode doux)" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "Précédent dans l'historique" @@ -4263,98 +4593,27 @@ msgid "Save Theme As" msgstr "Enregistrer le thème sous" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "Déplacer vers le haut" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "Déplacer vers le bas" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" -msgstr "Indenter vers la gauche" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" -msgstr "Indenter vers la droite" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" -msgstr "Commenter/décommenter" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" -msgstr "Cloner en dessous" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" -msgstr "Compléter le symbole" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" -msgstr "Supprimer les espaces de fin de ligne" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" -msgstr "Indentation automatique" - -#: tools/editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Soft Reload Script" -msgstr "Recharger le script (mode doux)" +msgid "Close Docs" +msgstr "Cloner en dessous" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find.." msgstr "Trouver…" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find Next" msgstr "Trouver le suivant" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" -msgstr "trouver précédente" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." -msgstr "Remplacer…" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." -msgstr "Aller à la fonction…" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." -msgstr "Aller à la ligne…" - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Debug" msgstr "Débogage" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" -msgstr "Placer un point d'arrêt" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" -msgstr "Supprimer tous les points d'arrêt" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" -msgstr "Aller au point d'arrêt suivant" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" -msgstr "Aller au point d'arrêt précédent" - -#: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp msgid "Step Over" msgstr "Sortir" @@ -4391,14 +4650,6 @@ msgid "Move Right" msgstr "Aller à droite" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" -msgstr "Aide" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" -msgstr "Aide contextuelle" - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Tutorials" msgstr "Tutoriels" @@ -4455,6 +4706,79 @@ msgstr "Débogueur" msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" +"Les scripts intégrés ne peuvent être modifiés uniquement lorsque la scène à " +"qui ils appartiennent est ouverte" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "Déplacer vers le haut" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "Déplacer vers le bas" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "Indenter vers la gauche" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "Indenter vers la droite" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "Commenter/décommenter" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Cloner en dessous" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "Compléter le symbole" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "Supprimer les espaces de fin de ligne" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "Indentation automatique" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "Supprimer tous les points d'arrêt" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "Aller au point d'arrêt suivant" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "Aller au point d'arrêt précédent" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "trouver précédente" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "Remplacer…" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "Aller à la fonction…" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "Aller à la ligne…" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "Aide contextuelle" #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Vertex" @@ -4522,7 +4846,7 @@ msgstr "" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Default Value" -msgstr "" +msgstr "Changer la valeur par défaut" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Change XForm Uniform" @@ -4582,11 +4906,11 @@ msgstr "" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Cyclic Connection Link" -msgstr "" +msgstr "Erreur: lien de connexion cyclique" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Missing Input Connections" -msgstr "" +msgstr "Erreur : connexions d'entrée manquantes" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Add Shader Graph Node" @@ -4717,6 +5041,14 @@ msgid "Could not instance scene!" msgstr "Impossible d'instancier la scène !" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "Move déplacement (W)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "Mode rotation (E)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "Mode de mise à l'échelle (R)" @@ -4752,7 +5084,7 @@ msgstr "Vue de droite." #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "" +msgstr "Basculer entre la vue perspective et orthogonale" #: tools/editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -4791,7 +5123,7 @@ msgstr "Utiliser sRGB par défaut" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "" +msgstr "1 vue" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" @@ -4799,7 +5131,7 @@ msgstr "2 vues" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "" +msgstr "2 vues (alt.)" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" @@ -4807,7 +5139,7 @@ msgstr "3 vues" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "" +msgstr "3 vues (alt.)" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" @@ -4931,7 +5263,7 @@ msgstr "" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" -msgstr "" +msgstr "Modifier le taux d'IPS de l'animation" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" @@ -4951,11 +5283,11 @@ msgstr "Trames d'animation" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" -msgstr "" +msgstr "Insérer vide (avant)" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (After)" -msgstr "" +msgstr "Insérer vide (après)" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Up" @@ -4976,7 +5308,7 @@ msgstr "Mode d'exécution :" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "<None>" -msgstr "" +msgstr "<Aucun>" #: tools/editor/plugins/texture_region_editor_plugin.cpp #, fuzzy @@ -5035,11 +5367,11 @@ msgstr "Supprimer l'item" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" -msgstr "" +msgstr "Ajouter des items de classe" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" -msgstr "" +msgstr "Supprimer des items de classe" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" @@ -5051,11 +5383,11 @@ msgstr "Créer un nouveau modèle d'éditeur" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" -msgstr "" +msgstr "Case à cocher Radio1" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio2" -msgstr "" +msgstr "Case à cocher Radio2" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Item" @@ -5121,7 +5453,7 @@ msgstr "Couleur" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" -msgstr "" +msgstr "Peindre sur la TileMap" #: tools/editor/plugins/tile_map_editor_plugin.cpp #: tools/editor/scene_tree_dock.cpp @@ -5130,7 +5462,7 @@ msgstr "Dupliquer" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" -msgstr "" +msgstr "Supprimer la TileMap" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Erase selection" @@ -5493,7 +5825,7 @@ msgstr "Projet importé" #: tools/editor/project_manager.cpp msgid "Invalid project path (changed anything?)." -msgstr "" +msgstr "Chemin de projet non valide (avez-vous changé quelque chose ?)." #: tools/editor/project_manager.cpp msgid "Couldn't create engine.cfg in project path." @@ -5509,7 +5841,7 @@ msgstr "" #: tools/editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "Paquetage installé avec succès !" #: tools/editor/project_manager.cpp msgid "Import Existing Project" @@ -5558,11 +5890,13 @@ msgid "Unnamed Project" msgstr "Projet sans titre" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +#, fuzzy +msgid "Are you sure to open more than one project?" msgstr "Voulez-vous vraiment ouvrir plus d'un projet à la fois ?" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +#, fuzzy +msgid "Are you sure to run more than one project?" msgstr "Voulez-vous vraiment lancer plus d'un projet à la fois ?" #: tools/editor/project_manager.cpp @@ -5571,6 +5905,12 @@ msgstr "" "Supprimer le projet de la liste ? (Le contenu du dossier ne sera pas modifié)" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "Gestionnaire de projets" @@ -5587,6 +5927,11 @@ msgid "Scan" msgstr "Scanner" #: tools/editor/project_manager.cpp +#, fuzzy +msgid "Select a Folder to Scan" +msgstr "Sélectionner un nœud" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "Nouveau projet" @@ -5596,7 +5941,7 @@ msgstr "Quitter" #: tools/editor/project_settings.cpp msgid "Key " -msgstr "" +msgstr "Touche " #: tools/editor/project_settings.cpp msgid "Joy Button" @@ -5878,6 +6223,16 @@ msgstr "Global" msgid "Sections:" msgstr "Sections :" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Sélectionner des points" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Mode sélection (Q)" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "Impossible d'exécuter l'outil PVRTC :" @@ -5940,7 +6295,7 @@ msgstr "Arguments de la scène principale :" #: tools/editor/run_settings_dialog.cpp msgid "Scene Run Settings" -msgstr "" +msgstr "Paramètres d'exécution de la scène" #: tools/editor/scene_tree_dock.cpp msgid "OK :(" @@ -5948,7 +6303,12 @@ msgstr "OK :(" #: tools/editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "" +msgstr "Pas de parent dans lequel instancier l'enfant." + +#: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "No parent to instance the scenes at." +msgstr "Pas de parent dans lequel instancier l'enfant." #: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" @@ -5967,6 +6327,8 @@ msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" +"Impossible d'instancier la scène « %s » car la scène actuelle existe dans " +"l'un de ses nœuds." #: tools/editor/scene_tree_dock.cpp msgid "Instance Scene(s)" @@ -5978,11 +6340,11 @@ msgstr "Cette opération ne peut être réalisée sur la racine de l'arbre." #: tools/editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "" +msgstr "Déplacer le nœud dans le parent" #: tools/editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "" +msgstr "Déplacer des nœuds dans le parent" #: tools/editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" @@ -6016,11 +6378,11 @@ msgstr "C'est sensé !" #: tools/editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "" +msgstr "Impossible d'opérer sur des nœuds d'une scène étrangère !" #: tools/editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "" +msgstr "Impossible d'opérer sur des nœuds dont la scène actuelle hérite !" #: tools/editor/scene_tree_dock.cpp msgid "Remove Node(s)" @@ -6035,6 +6397,8 @@ msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" +"Impossible d'enregistrer la nouvelle scène. Il est probable que des " +"dépendances (comme des instances) n'ont pas pu être satisfaites." #: tools/editor/scene_tree_dock.cpp msgid "Error saving scene." @@ -6042,7 +6406,7 @@ msgstr "Erreur d'enregistrement de la scène." #: tools/editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "" +msgstr "Erreur de duplication de la scène afin de l'enregistrer." #: tools/editor/scene_tree_dock.cpp msgid "Edit Groups" @@ -6081,6 +6445,11 @@ msgid "Save Branch as Scene" msgstr "Sauvegarder la branche comme scène" #: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete (No Confirm)" +msgstr "Veuillez confirmer…" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "Ajouter un nouveau nœud" @@ -6092,6 +6461,11 @@ msgstr "" "Instancie un fichier de scène comme nœud. Crée une scène héritée si aucun " "nœud racine n'existe." +#: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "Create a new script for the selected node." +msgstr "Instancie la/les scènes sélectionnées en tant qu'enfant du nœud." + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -6134,7 +6508,7 @@ msgstr "Charger en tant que fictif" #: tools/editor/scene_tree_editor.cpp msgid "Discard Instancing" -msgstr "" +msgstr "Abandonner l'instanciation" #: tools/editor/scene_tree_editor.cpp msgid "Open in Editor" @@ -6156,90 +6530,6 @@ msgstr "Effacer !" msgid "Select a Node" msgstr "Sélectionner un nœud" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Fichiers source et destination identiques, rien à faire." - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "Chemins source et destination identiques, rien à faire." - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "Impossible de déplacer des répertoires vers eux-mêmes." - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "Impossible d'opérer sur « .. »" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Entrez un nouveau nom et chemin pour :" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "Pas de fichiers sélectionnés !" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "Instance" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "Modifier les dépendances…" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "Voir les propriétaires…" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "Copier le chemin" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "Renommer ou déplacer…" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "Déplacer vers…" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "Information" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "Montrer dans le gestionnaire de fichiers" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "Ré-importer…" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "Répertoire précédent" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "Répertoire suivant" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "Re-scanner le système de fichiers" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "Basculer l'état favori du dossier" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "Instancie la/les scènes sélectionnées en tant qu'enfant du nœud." - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "Déplacer" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "Nom de classe parent invalide" @@ -6350,7 +6640,7 @@ msgstr "Inspecter l'instance suivante" #: tools/editor/script_editor_debugger.cpp msgid "Stack Frames" -msgstr "" +msgstr "Pile des appels" #: tools/editor/script_editor_debugger.cpp msgid "Variable" @@ -6378,7 +6668,7 @@ msgstr "Propriétés de l'objet distant : " #: tools/editor/script_editor_debugger.cpp msgid "Profiler" -msgstr "" +msgstr "Profileur" #: tools/editor/script_editor_debugger.cpp msgid "Monitor" @@ -6476,6 +6766,12 @@ msgstr "Changer la longueur d'une forme en rayon" msgid "Change Notifier Extents" msgstr "Changer les extents d'un notificateur" +#~ msgid "Cannot go into subdir:" +#~ msgstr "Impossible d'aller dans le sous-répertoire :" + +#~ msgid "Help" +#~ msgstr "Aide" + #~ msgid "Imported Resources" #~ msgstr "Ressources importées" diff --git a/tools/translations/id.po b/tools/translations/id.po new file mode 100644 index 0000000000..0478612745 --- /dev/null +++ b/tools/translations/id.po @@ -0,0 +1,6678 @@ +# Indonesian translation of the Godot Engine editor +# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community +# This file is distributed under the same license as the Godot source code. +# +# Abdul Aziz Muslim Alqudsy <abdul.aziz.muslim.alqudsy@gmail.com>, 2016. +# Andinawan Asa <asaandinawan@gmail.com>, 2016. +# Khairul Hidayat <khairulcyber4rt@gmail.com>, 2016. +# yursan9 <rizal.sagi@gmail.com>, 2016. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2016-08-27 02:11+0000\n" +"Last-Translator: yursan9 <rizal.sagi@gmail.com>\n" +"Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" +"godot/id/>\n" +"Language: id\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 2.8-dev\n" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "" +"Tipe argument salah dalam menggunakan convert(), gunakan konstanta TYPE_*." + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "Tidak cukup bytes untuk menerjemahkan, atau format tidak sah." + +#: modules/gdscript/gd_functions.cpp +msgid "step argument is zero!" +msgstr "Langkah argumen adalah nol!" + +#: modules/gdscript/gd_functions.cpp +#, fuzzy +msgid "Not a script with an instance" +msgstr "Skrip tidak mempunyai turunannya" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a script" +msgstr "Tidak berbasis skrip" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a resource file" +msgstr "Tidak berbasis resource file" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "Format kamus acuan tidak sah (@path hilang)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "Format kamus acuan tidak sah (tidak dapat memuat script pada @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "Format kamus acuan tidak sah (skrip tidak sah pada @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "Kamus acuan tidak sah (sub kelas tidak sah)" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"Sebuah node dihasilkan tanpa kerja memori, silahkan baca dokumentasi tentang " +"bagaimana menggunakannya dengan benar!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"Node dihasilkan, tetapi keadaan sebuah fungsi tidak kembali saat kerja " +"memori pertama." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"Nilai pengembalian harus ditetapkan pada elemen pertama dari node kerja " +"memori! Silahkan perbaiki node anda." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "Node mengembalikan sebuah keluaran urutan yang tidak sah: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" +"Telah ditemukan urutan dalam jumlah sedikit tetapi bukan node dalam jumlah " +"besar, laporkan bug!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Tumpukan melimpah dengan kedalaman tumpukan: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Fungsi-fungsi:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Variabel-variabel:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Sinyal-sinyal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "Nama bukan sebuah pengidentifikasi yang sah:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Nama telah digunakan oleh fungsi/variabel/sinyal yang lain:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Namai kembali Fungsi" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Namai kembali Variabel" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Namai kembali Sinyal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Tambahkan Fungsi" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Tambahkan Variabel" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Tambahkan Sinyal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Hapus Fungsi" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Hapus Variabel" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Mengedit Variabel:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Hapus Sinyal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Mengedit Sinyal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Tambahkan Node" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Tambahkan Node" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Tambahkan Node (Node-node) dari Tree" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Tambahkan Properti Getter" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Tambahkan Properti Setter" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Edit" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Tipe Dasar:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Member-member:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Node-node yang Tersedia:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Pilih atau ciptakan sebuah fungsi untuk mengedit grafik" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Tutup" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Edit Argumen-argumen Sinyal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Edit Variabel:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Ubah" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Hapus yang Dipilih" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Beralih Breakpoint" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Cari Tipe Node" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "Salin Resource" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Path ke Node:" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "Tipe masukan tidak iterable: " + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "Iterator menjadi tidak sah" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "Iterator menjadi tidak sah: " + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "Nama properti index tidak sah." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "Objek dasar bukan sebuah Node!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "Path tidak menunjukkan Node!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "Nama properti index '%s' tidak sah dalam node %s." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": Argumen tidak sah dari tipe: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Argumen-argumen tidak sah: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "VariableGet tidak ditemukan dalam script: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "VariableSet tidak ditemukan dalam script: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" +"Node modifikasi tidak memiliki method _step(), tidak bisa memproses grafik." + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" +"Nilai kembali dari _step() tidak sah, seharusnya integer (seq out), atau " +"string (error)." + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" +"Sebuah resource SpriteFrames seharusnya diciptakan atau diatur dalam " +"properti 'Frames' agar AnimatedSprite menampilkan frame-frame." + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" +"Hanya satu visible CanvasModulate yang diizinkan per scene (atau atur pada " +"scene-scene yang diacu). Yang diciptakan pertama akan bekerja, sedangkan " +"sisanya akan diabaikan." + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionPolygon2D hanya berfungsi untuk menyediakan sebuah bentuk collision " +"pada sebuah CollisionObject2D node asal. Mohon hanya gunakan itu sebagai " +"sebuah child dari Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, dll. " +"untuk memberikan mereka sebuah bentuk." + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "" +"Sebuah CollisionPolygon2D yang kosong tidak memiliki efek pada collision." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionShape2D hanya berfungsi untuk menyediakan sebuah bentuk collision " +"pada sebuah CollisionObject2D node asal. Mohon hanya gunakan itu sebagai " +"sebuah child dari Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, dll. " +"untuk memberikan mereka sebuah bentuk." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" +"Sebuah bentuk harus disediakan untuk CollisionShape2D untuk fungsi. Mohon " +"ciptakan resource bentuk untuk itu!" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "" +"Sebuah tekstur dengan bentuk cahaya harus disuplai ke properti 'texture'." + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" +"Sebuah polygon occluder harus diatur (atau digambar) untuk occluder ini " +"berpengaruh." + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "" +"Polygon occluder untuk occluder ini kosong. Mohon gambar dulu sebuah polygon!" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" +"Sebuah resource NavigationPolygon harus diatur atau diciptakan untuk node " +"ini bekerja. Mohon atur sebuah properti atau gambar sebuah polygon." + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" +"NavigationPolygonInstance harus menjadi sebuah child atau grandchild ke " +"sebuah node Navigation2D. Ini hanya menyediakan data navigasi." + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" +"Node ParallaxLayer hanya bekerja ketika diatur sebagai child dari sebuah " +"node ParallaxBackground." + +#: scene/2d/particles_2d.cpp +msgid "Path property must point to a valid Particles2D node to work." +msgstr "" +"Properti path harus menunjuk ke sebuah node Particles2D yang sah agar " +"bekerja." + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" +"PathFollow2D hanya bekerja ketika diatur sebagai sebuah child dari sebuah " +"node Path2D." + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "" +"Properti path harus menunjuk pada sebuah node Node2D yang sah untuk bekerja." + +#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SamplePlayer to play sound." +msgstr "" +"Sebuah resource SampleLibrary harus diciptakan atau diatur didalam properti " +"'samples' agar SamplePlayer memainkan suara." + +#: scene/2d/sprite.cpp +msgid "" +"Path property must point to a valid Viewport node to work. Such Viewport " +"must be set to 'render target' mode." +msgstr "" +"Properti path harus menunjuk pada node Viewport yang sah untuk bekerja. " +"Viewport tersebut harus diatur ke mode 'render target'." + +#: scene/2d/sprite.cpp +msgid "" +"The Viewport set in the path property must be set as 'render target' in " +"order for this sprite to work." +msgstr "" +"Pengaturan Vieport dalam properti path harus diatur sebagai 'render target' " +"agar sprite bekerja." + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" +"VisibilityEnable2D bekerja dengan sangat baik ketika digunakan dengan " +"mengedit root scene secara langsung sebagai parent." + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance tidak berisi resource BakedLight." + +#: scene/3d/body_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" +"CollisionShape hanya berfungsi untuk memberikan sebuah bentuk collision ke " +"node CollisionObject asal. Mohon hanya gunakan ini sebagai child dari Area, " +"StaticBody, RigidBody, KinematicBody, dll. untuk memberi mereka sebuah " +"bentuk." + +#: scene/3d/body_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" +"Sebuah bentuk harus disediakan untuk CollisionShape untuk fungsi. Mohon " +"ciptakan sebuah resource bentuk untuk itu!" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" +"CollisionPolygon hanya berfungsi untuk menyediakan sebuah bentuk collision " +"ke node CollisionObject asal. Mohon hanya gunakan ini sebagai child dari " +"Area, StaticBody, RigidBody, KinematicBody, dll. untuk memberi mereka bentuk." + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "" +"Sebuah CollisionPolygon yang kosong tidak memiliki efek pada collision." + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" +"Sebuah resource NavigationMesh harus diatur atau diciptakan untuk node ini " +"bekerja." + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" +"NavigationMeshInstance harus menjadi child atau grandchild untuk sebuah node " +"Navigation. Ini hanya menyediakan data navigasi." + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" +"Hanya satu WorldEnvironment yang diizinkan per scene (atau atur scene-scene " +"yang diacu)." + +#: scene/3d/spatial_sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SpatialSamplePlayer to play sound." +msgstr "" +"Sebuah resource SampleLibrary harus dibuat atau diatur didalam properti " +"'samples' agar SpatialSamplePlayer memainkan suara." + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" +"Sebuah resource SpriteFrames harus diciptakan atau diatur didalam properti " +"'Frames' agar AnimatedSprite3D menampilkan frame-frame." + +#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Cancel" +msgstr "Batal" + +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp +msgid "OK" +msgstr "Oke" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "Peringatan!" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "Mohon konfirmasi..." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "File telah ada, Overwrite?" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Recognized" +msgstr "Semua diakui" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Files (*)" +msgstr "Semua File-file (*)" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Open" +msgstr "Buka" + +#: scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "Buka sebuah File" + +#: scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "Buka File (File-file)" + +#: scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "Buka sebuah Direktori" + +#: scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "Buka sebuah File atau Direktori" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save" +msgstr "Simpan" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Save a File" +msgstr "Simpan sebuah File" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Create Folder" +msgstr "Buat Folder" + +#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/editor_file_dialog.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Path:" +msgstr "Path:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Directories & Files:" +msgstr "Direktori-direktori & File-file:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "File:" +msgstr "File:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Filter:" +msgstr "Filter:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Name:" +msgstr "Nama:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Could not create folder." +msgstr "Tidak dapat membuat folder." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Must use a valid extension." +msgstr "Harus menggunakan ekstensi yang sah." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "Shift+" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "Alt+" + +#: scene/gui/input_action.cpp +msgid "Ctrl+" +msgstr "Ctrl+" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Meta+" +msgstr "Meta+" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Device" +msgstr "Perangkat" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Button" +msgstr "Tombol" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Left Button." +msgstr "Tombol Kiri." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Right Button." +msgstr "Tombol Kanan." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Middle Button." +msgstr "Tombol Tengah." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#, fuzzy +msgid "Wheel Up." +msgstr "Scroll keatas." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#, fuzzy +msgid "Wheel Down." +msgstr "Scroll kebawah." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Axis" +msgstr "Axis" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Cut" +msgstr "Potong" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Copy" +msgstr "Kopy" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Paste" +msgstr "Tempel" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "Select All" +msgstr "Pilih Semua" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/rich_text_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Clear" +msgstr "Bersihkan" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Undo" +msgstr "Batal" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" +"Popup-popup akan sembunyi secara default kecuali panggil popup() atau apapun " +"dari fungsi-fungsi popup*(). Meskipun membuat mereka terlihat untuk mengedit " +"itu baik, tetapi mereka akan sembunyi saat berjalan." + +#: scene/main/viewport.cpp +#, fuzzy +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" +"Viewport ini tidak diatur sebagai target render. Jika anda berniat untuk " +"menampilkan konten-kontennya secara langsung ke layar, buatlah sebuah child " +"dari kontrol jadi hal tersebut bisa memperoleh ukuran. Jika tidak, buatlah " +"sebuah RenderTarget dan tetapkannya tekstur internal untuk beberapa node " +"untuk ditampilkan." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error initializing FreeType." +msgstr "Error menginisialisasi FreeType." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Unknown font format." +msgstr "Format font tidak diketahui." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error loading font." +msgstr "Error memuat font." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font size." +msgstr "Ukuran font tidak sah." + +#: tools/editor/animation_editor.cpp +msgid "Disabled" +msgstr "Dinonaktifkan" + +#: tools/editor/animation_editor.cpp +msgid "All Selection" +msgstr "Semua pilihan" + +#: tools/editor/animation_editor.cpp +msgid "Move Add Key" +msgstr "Pindahkan Kunci Tambah" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Change Transition" +msgstr "Ubah Transisi Anim" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Change Transform" +msgstr "Ubah Transformasi Anim" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Change Value" +msgstr "Ubah Nilai Anim" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Change Call" +msgstr "Ubah Panggilan Anim" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Add Track" +msgstr "Tambah Track Anim" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Duplicate Keys" +msgstr "Duplikat Tombol Anim" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Move Anim Track Up" +msgstr "Pindahkan Track Anim ke Atas" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Move Anim Track Down" +msgstr "Pindahkan Track Anim ke Bawah" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Remove Anim Track" +msgstr "Hapus Track Anim" + +#: tools/editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "Atur transisi ke:" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Track Rename" +msgstr "Namai Kembali Track Anim" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "Ganti Mode Nilai Track Anim" + +#: tools/editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "Edit Kurva Node" + +#: tools/editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "Edit Kurva Pilihan" + +#: tools/editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "Hapus Kunci Anim" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "Duplikat Pilihan" + +#: tools/editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "Duplikat Dialihkan" + +#: tools/editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "Hapus Pilihan" + +#: tools/editor/animation_editor.cpp +msgid "Continuous" +msgstr "Lanjut" + +#: tools/editor/animation_editor.cpp +msgid "Discrete" +msgstr "Berlainan" + +#: tools/editor/animation_editor.cpp +msgid "Trigger" +msgstr "Pemicu" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "Tambah Kunci Anim" + +#: tools/editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "Pindahkan Kunci Anim" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Scale Selection" +msgstr "Beri Skala Seleksi" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Scale From Cursor" +msgstr "Beri Skala dari Kursor" + +#: tools/editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "Lanjut ke Langkah Berikutnya" + +#: tools/editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "Lanjut ke Langkah Sebelumnya" + +#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp +msgid "Linear" +msgstr "Linier" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "Konstan" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "In" +msgstr "Kedalam" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Out" +msgstr "Keluar" + +#: tools/editor/animation_editor.cpp +msgid "In-Out" +msgstr "Masuk-Keluar" + +#: tools/editor/animation_editor.cpp +msgid "Out-In" +msgstr "Keluar-Masuk" + +#: tools/editor/animation_editor.cpp +msgid "Transitions" +msgstr "Transisi" + +#: tools/editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "Optimalkan Animasi" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "Bersihkan Animasi" + +#: tools/editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "Buat track BARU untuk %s dan masukkan tombol?" + +#: tools/editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "Buat track BARU %d dan masukkan tombol-tombol?" + +#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/particles_editor_plugin.cpp +#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp +msgid "Create" +msgstr "Buat" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Create & Insert" +msgstr "Anim Buat & Masukan" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Insert Track & Key" +msgstr "Masukkan Track & Tombol Anim" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Insert Key" +msgstr "Anim Masukkan Tombol" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "Ubah Panjang Animasi" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "Ubah Perulangan Animasi" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "Buat Nilai Kunci Animasi Tertulis" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Insert" +msgstr "Anim Masukkan" + +#: tools/editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "Skala Kunci Anim" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "Tambah Pemanggilan Track Anim" + +#: tools/editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "Zoom animasi." + +#: tools/editor/animation_editor.cpp +msgid "Length (s):" +msgstr "Panjang:" + +#: tools/editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "Panjang animasi (dalam detik)." + +#: tools/editor/animation_editor.cpp +msgid "Step (s):" +msgstr "Langkah:" + +#: tools/editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "Langkah kursor sekejap (dalam detik)." + +#: tools/editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "Aktifkan/Nonaktifkan pengulangan dalam animasi." + +#: tools/editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "Tambah tracks baru." + +#: tools/editor/animation_editor.cpp +msgid "Move current track up." +msgstr "Pindahkan track sekarang ke atas." + +#: tools/editor/animation_editor.cpp +msgid "Move current track down." +msgstr "Pindahkan track sekarang ke bawah." + +#: tools/editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "Hapus track yang dipilih." + +#: tools/editor/animation_editor.cpp +msgid "Track tools" +msgstr "Alat track" + +#: tools/editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "Aktifkan penyuntingan tombol-tombol individual dengan mengkliknya." + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim. Optimizer" +msgstr "Anim. Optimisasi" + +#: tools/editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "Maks. Linier Error:" + +#: tools/editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "Maks. Angular Error:" + +#: tools/editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "Maksimal Angle yang dapat Dioptimalkan:" + +#: tools/editor/animation_editor.cpp +msgid "Optimize" +msgstr "Optimasi" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "Pilih sebuah AnimationPlayer dari Scene Tree untuk menyunting animasi." + +#: tools/editor/animation_editor.cpp +msgid "Key" +msgstr "Tombol" + +#: tools/editor/animation_editor.cpp +msgid "Transition" +msgstr "Transisi" + +#: tools/editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "Skala Rasio:" + +#: tools/editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "Memanggil Fungsi-Fungsi dalam Node yang Mana?" + +#: tools/editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "Hapus Tombol-tombol yang tidak sah" + +#: tools/editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "Hapus tracks yang kosong dan belum diselesaikan" + +#: tools/editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "Bersihkan semua animasi" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "Bersihkan Animasi (Tidak Dapat Dikembalikan!)" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up" +msgstr "Bersihkan" + +#: tools/editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "Ubah ukuran Array" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "Ubah Tipe Nilai Array" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "Ubah Nilai Array" + +#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Cari:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Sortir:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Terbalik" + +#: tools/editor/asset_library_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Category:" +msgstr "Kategori:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Semua" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Situs:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Dukungan.." + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Resmi" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Komunitas" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Menguji" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Aset-aset File ZIP" + +#: tools/editor/call_dialog.cpp +msgid "Method List For '%s':" +msgstr "Daftar Fungsi Untuk '%s':" + +#: tools/editor/call_dialog.cpp +msgid "Call" +msgstr "Panggil" + +#: tools/editor/call_dialog.cpp +msgid "Method List:" +msgstr "Daftar Fungsi:" + +#: tools/editor/call_dialog.cpp +msgid "Arguments:" +msgstr "Argumen:" + +#: tools/editor/call_dialog.cpp +#, fuzzy +msgid "Return:" +msgstr "Kembali:" + +#: tools/editor/code_editor.cpp +msgid "Go to Line" +msgstr "Pergi ke Barisan" + +#: tools/editor/code_editor.cpp +msgid "Line Number:" +msgstr "Nomor Barisan:" + +#: tools/editor/code_editor.cpp +msgid "No Matches" +msgstr "Tidak ada yang cocok" + +#: tools/editor/code_editor.cpp +#, fuzzy +msgid "Replaced %d Ocurrence(s)." +msgstr "Diganti Kejadian (Kejadian-kejadian) %d." + +#: tools/editor/code_editor.cpp +msgid "Replace" +msgstr "Tukar" + +#: tools/editor/code_editor.cpp +msgid "Replace All" +msgstr "Tukar Semua" + +#: tools/editor/code_editor.cpp +msgid "Match Case" +msgstr "Kasus Kecocokan" + +#: tools/editor/code_editor.cpp +msgid "Whole Words" +msgstr "Semua Kata" + +#: tools/editor/code_editor.cpp +msgid "Selection Only" +msgstr "Hanya yang Dipilih" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Search" +msgstr "Cari" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +msgid "Find" +msgstr "Cari" + +#: tools/editor/code_editor.cpp +msgid "Next" +msgstr "Berikutnya" + +#: tools/editor/code_editor.cpp +#, fuzzy +msgid "Replaced %d ocurrence(s)." +msgstr "Diganti kejadian (kejadian-kejadian) %d." + +#: tools/editor/code_editor.cpp +msgid "Not found!" +msgstr "Tidak ditemukan!" + +#: tools/editor/code_editor.cpp +msgid "Replace By" +msgstr "Ganti dengan" + +#: tools/editor/code_editor.cpp +#, fuzzy +msgid "Case Sensitive" +msgstr "Case Sensitive" + +#: tools/editor/code_editor.cpp +msgid "Backwards" +msgstr "Ke belakang" + +#: tools/editor/code_editor.cpp +#, fuzzy +msgid "Prompt On Replace" +msgstr "Cepat Pada Penggantian" + +#: tools/editor/code_editor.cpp +msgid "Skip" +msgstr "Lalui" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Perbesar Pandangan" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Perkecil Pandangan" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Kebalikan Semula Pandangan" + +#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "Baris:" + +#: tools/editor/code_editor.cpp +msgid "Col:" +msgstr "Kolom:" + +#: tools/editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "Method dalam Node target harus spesifik!" + +#: tools/editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "Sambungkan Ke Node:" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Add" +msgstr "Tambah" + +#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Remove" +msgstr "Hapus" + +#: tools/editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "Tambah Argumen Panggilan Ekstra:" + +#: tools/editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "Argumen-argumen Panggilan Ekstra:" + +#: tools/editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "Path ke Node:" + +#: tools/editor/connections_dialog.cpp +msgid "Make Function" +msgstr "Buat Fungsi" + +#: tools/editor/connections_dialog.cpp +msgid "Deferred" +msgstr "Ditunda" + +#: tools/editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "Satu Waktu" + +#: tools/editor/connections_dialog.cpp +msgid "Connect" +msgstr "Menghubungkan" + +#: tools/editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "Sambungkan '%s' ke '%s'" + +#: tools/editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "Menyambungkan Sinyal:" + +#: tools/editor/connections_dialog.cpp +msgid "Create Subscription" +msgstr "Buat Subskribsi" + +#: tools/editor/connections_dialog.cpp +msgid "Connect.." +msgstr "Menyambungkan.." + +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "Tidak tersambung" + +#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp +msgid "Signals" +msgstr "Sinyal-sinyal" + +#: tools/editor/create_dialog.cpp +msgid "Create New" +msgstr "Buat Baru" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +#, fuzzy +msgid "Matches:" +msgstr "Kecocokan:" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Deskripsi:" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "Cari Ganti Untuk:" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "Ketergantungan Untuk:" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" +"Scene '%s' sedang disunting saat ini.\n" +"Perubahan-perubahan tidak akan berefek kecuali dimuat ulang." + +#: tools/editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" +"Resource '%s' sedang digunakan.\n" +"Perubahan-perubahan akan terjadi ketika dimuat ulang." + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies" +msgstr "Ketergantungan" + +#: tools/editor/dependency_editor.cpp +msgid "Resource" +msgstr "Resource" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp +msgid "Path" +msgstr "Path" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "Ketergantungan:" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "Perbaiki yang Rusak" + +#: tools/editor/dependency_editor.cpp +#, fuzzy +msgid "Dependency Editor" +msgstr "Editor Ketergantungan" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "Cari Resource Pengganti:" + +#: tools/editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "Pemilik Dari:" + +#: tools/editor/dependency_editor.cpp +#, fuzzy +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" +"File-file yang telah dihapus diperlukan oleh resource-resource lainnya agar " +"mereka bekerja.\n" +"Hapus saja mereka? (tanpa membatalkan/undo)" + +#: tools/editor/dependency_editor.cpp +#, fuzzy +msgid "Remove selected files from the project? (no undo)" +msgstr "Hapus file-file yang dipilih dari proyek? (tanpa membatalkan/undo)" + +#: tools/editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "Error memuat:" + +#: tools/editor/dependency_editor.cpp +#, fuzzy +msgid "Scene failed to load due to missing dependencies:" +msgstr "Scene gagal memuat disebabkan oleh ketergantungan yang hilang:" + +#: tools/editor/dependency_editor.cpp +msgid "Open Anyway" +msgstr "Buka Saja" + +#: tools/editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "Tindakan mana yang seharusnya diambil?" + +#: tools/editor/dependency_editor.cpp +#, fuzzy +msgid "Fix Dependencies" +msgstr "Perbaiki Ketergantungan" + +#: tools/editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "Gagal memuat!" + +#: tools/editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "Hapus secara permanen %d item? (Tidak dapat dikembalikan!)" + +#: tools/editor/dependency_editor.cpp +msgid "Owns" +msgstr "Memiliki" + +#: tools/editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "Resource-resource tanpa kepemilikan yang jelas:" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#, fuzzy +msgid "Orphan Resource Explorer" +msgstr "Penjelajah Resource Orphan" + +#: tools/editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "Hapus file yang dipilih?" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "Hapus" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "Nama tidak sah." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "Karakter sah:" + +#: tools/editor/editor_autoload_settings.cpp +#, fuzzy +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "Nama tidak sah. Harus tidak serupa dengan class name engine yang ada." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "Nama tidak sah. Tidak boleh serupa dengan nama bawaan." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "" +"Nama tidak sah. Tidak boleh serupa dengan nama konstanta global yang ada." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "Path Tidak Sah." + +#: tools/editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "File tidak ada." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "Tidak didalam path resource." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "Tambahkan AutoLoad" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "Autoload '%s' telah ada!" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "Namai kembali Autoload" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "Beralih AutoLoad Globals" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "Pindahkan Autoload" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "Hapus Autoload" + +#: tools/editor/editor_autoload_settings.cpp +#, fuzzy +msgid "Enable" +msgstr "Aktifkan" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "Mengatur kembali Autoload-autoload" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "Nama Node:" + +#: tools/editor/editor_autoload_settings.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Name" +msgstr "Nama" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "Singleton" + +#: tools/editor/editor_autoload_settings.cpp +msgid "List:" +msgstr "Daftar:" + +#: tools/editor/editor_data.cpp +msgid "Updating Scene" +msgstr "Memperbaharui Scene" + +#: tools/editor/editor_data.cpp +msgid "Storing local changes.." +msgstr "Menyimpan perubahan-perubahan lokal.." + +#: tools/editor/editor_data.cpp +msgid "Updating scene.." +msgstr "Memperbaharui scene.." + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "Pilih sebuah Direktori" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "Pilih" + +#: tools/editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go Back" +msgstr "Mundur" + +#: tools/editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go Forward" +msgstr "Maju" + +#: tools/editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go Up" +msgstr "Naik" + +#: tools/editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "Segarkan" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "Beralih File Tersembunyi" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "Beralih Favorit" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "Beralih Mode" + +#: tools/editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "Garis Fokus" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "Pindahkan Favorit Keatas" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "Pindahkan Favorit Kebawah" + +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "Favorit:" + +#: tools/editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "Saat ini:" + +#: tools/editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "Pratinjau:" + +#: tools/editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "Sumber Pemindaian" + +#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Mencari Bantuan" + +#: tools/editor/editor_help.cpp +msgid "Class List:" +msgstr "Daftar Class:" + +#: tools/editor/editor_help.cpp +msgid "Search Classes" +msgstr "Cari Kelas" + +#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp +msgid "Class:" +msgstr "Kelas:" + +#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "Turunan:" + +#: tools/editor/editor_help.cpp +msgid "Inherited by:" +msgstr "Diturunkan oleh:" + +#: tools/editor/editor_help.cpp +msgid "Brief Description:" +msgstr "Deskripsi Singkat:" + +#: tools/editor/editor_help.cpp +msgid "Public Methods:" +msgstr "Metode Publik:" + +#: tools/editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "Item-item Tema GUI:" + +#: tools/editor/editor_help.cpp +msgid "Constants:" +msgstr "Konstanta:" + +#: tools/editor/editor_help.cpp +msgid "Method Description:" +msgstr "Deskripsi Metode:" + +#: tools/editor/editor_help.cpp +msgid "Search Text" +msgstr "Mencari Teks" + +#: tools/editor/editor_import_export.cpp +msgid "Added:" +msgstr "Ditambahkan:" + +#: tools/editor/editor_import_export.cpp +msgid "Removed:" +msgstr "Dihapus:" + +#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp +msgid "Error saving atlas:" +msgstr "Gagal menyimpan atlas:" + +#: tools/editor/editor_import_export.cpp +msgid "Could not save atlas subtexture:" +msgstr "Tidak dapat menyimpan sub tekstur atlas:" + +#: tools/editor/editor_import_export.cpp +msgid "Storing File:" +msgstr "Menyimpan File:" + +#: tools/editor/editor_import_export.cpp +msgid "Packing" +msgstr "Mengemas" + +#: tools/editor/editor_import_export.cpp +msgid "Exporting for %s" +msgstr "Mengekspor untuk %s" + +#: tools/editor/editor_import_export.cpp +msgid "Setting Up.." +msgstr "Mengatur.." + +#: tools/editor/editor_log.cpp +msgid " Output:" +msgstr " Keluaran:" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Importing" +msgstr "Mengimpor ulang" + +#: tools/editor/editor_node.cpp +msgid "Importing:" +msgstr "Mengimpor:" + +#: tools/editor/editor_node.cpp +msgid "Node From Scene" +msgstr "Node Dari Scene" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Error saving resource!" +msgstr "Error menyimpan resource!" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Save Resource As.." +msgstr "Simpan Resource Sebagai.." + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "I see.." +msgstr "Aku tahu.." + +#: tools/editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "Tidak dapat membuka file untuk menulis:" + +#: tools/editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "Format file yang diminta tidak diketahui:" + +#: tools/editor/editor_node.cpp +msgid "Error while saving." +msgstr "Error saat menyimpan." + +#: tools/editor/editor_node.cpp +msgid "Saving Scene" +msgstr "Menyimpan Scene" + +#: tools/editor/editor_node.cpp +msgid "Analyzing" +msgstr "Menganalisis" + +#: tools/editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "Membuat Thumbnail" + +#: tools/editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." +msgstr "" +"Tidak dapat menyimpan scene. Dependensi (instance) mungkin tidak terpenuhi." + +#: tools/editor/editor_node.cpp +msgid "Failed to load resource." +msgstr "Gagal memuat resource." + +#: tools/editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "Tidak dapat memuat MeshLibrary untuk menggabungkan!" + +#: tools/editor/editor_node.cpp +#, fuzzy +msgid "Error saving MeshLibrary!" +msgstr "Error menyimpan MeshLibrary!" + +#: tools/editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "Tidak dapat memuat TileSet untuk menggabungkan!" + +#: tools/editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "Error menyimpan TileSet!" + +#: tools/editor/editor_node.cpp +msgid "Can't open export templates zip." +msgstr "Tidak dapat membuka ekspor template-template zip." + +#: tools/editor/editor_node.cpp +msgid "Loading Export Templates" +msgstr "Memuat Ekspor Template-template." + +#: tools/editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "Error mencoba untuk menyimpan layout!" + +#: tools/editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "Layout editor default ditimpa." + +#: tools/editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "Nama layout tidak ditemukan!" + +#: tools/editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "Mengembalikan semula layout default ke pengaturan-pengaturan awal." + +#: tools/editor/editor_node.cpp +msgid "Copy Params" +msgstr "Salin Parameter" + +#: tools/editor/editor_node.cpp +msgid "Paste Params" +msgstr "Tempel Parameter" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "Tempel Resource" + +#: tools/editor/editor_node.cpp +msgid "Copy Resource" +msgstr "Salin Resource" + +#: tools/editor/editor_node.cpp +msgid "Make Built-In" +msgstr "Buat Menjadi Bawaan" + +#: tools/editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "Membuat sub-Resource Unik" + +#: tools/editor/editor_node.cpp +msgid "Open in Help" +msgstr "Buka di Bantuan" + +#: tools/editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "Tidak ada definisi scene untuk dijalankan." + +#: tools/editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in later in \"Project Settings\" under the " +"'application' category." +msgstr "" +"Tidak ada scene utama yang pernah didefinisikan, pilih satu?\n" +"Anda dapat mengubahnya nanti di akhir dalam \"Project Settings\" dibawah " +"kategori 'application'." + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" +"Scene '%s' tidak tersedia, pilih yang sah?\n" +"Anda dapat menggantinya kemudian di \"Pengaturan Proyek\" di bawah kategori " +"'aplikasi'." + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" +"Scene '%s' bukanlah sebuah file scene, pilih yang sah?\n" +"Anda dapat menggantinya kemudian di \"Pengaturan Proyek\" di bawah kategori " +"'aplikasi'." + +#: tools/editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" +"Scene saat ini belum pernah disimpan, mohon simpat dahulu untuk " +"menjalankannya." + +#: tools/editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "Tidak dapat memulai subprocess!" + +#: tools/editor/editor_node.cpp +msgid "Open Scene" +msgstr "Buka Scene" + +#: tools/editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "Buka Scene Dasar" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Scene.." +msgstr "Buka Cepat Scene.." + +#: tools/editor/editor_node.cpp +msgid "Quick Open Script.." +msgstr "Buka Cepat Script.." + +#: tools/editor/editor_node.cpp +msgid "Yes" +msgstr "Ya" + +#: tools/editor/editor_node.cpp +msgid "Close scene? (Unsaved changes will be lost)" +msgstr "Tutup scene? (Perubahan-perubahan yang belum disimpan akan hilang)" + +#: tools/editor/editor_node.cpp +msgid "Save Scene As.." +msgstr "Simpan Scene Sebagai.." + +#: tools/editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "Scene ini belum pernah disimpan. Simpan sebelum menjalankan?" + +#: tools/editor/editor_node.cpp +msgid "Please save the scene first." +msgstr "Mohon simpan scene terlebih dahulu." + +#: tools/editor/editor_node.cpp +msgid "Save Translatable Strings" +msgstr "Simpan Kalimat yang Dapat Diterjemahkan" + +#: tools/editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "Ekspor Mesh Library" + +#: tools/editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "Ekspor Tile Set" + +#: tools/editor/editor_node.cpp +msgid "Quit" +msgstr "Keluar" + +#: tools/editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "Keluar editor?" + +#: tools/editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "Scene saat ini tidak disimpan. Buka saja?" + +#: tools/editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "Tidak bisa memuat ulang scene yang tidak pernah disimpan." + +#: tools/editor/editor_node.cpp +msgid "Revert" +msgstr "Pulihkan" + +#: tools/editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "Tindakan ini tidak dapat dibatalkan. Pulihkan saja?" + +#: tools/editor/editor_node.cpp +msgid "Quick Run Scene.." +msgstr "Jalankan Cepat Scene.." + +#: tools/editor/editor_node.cpp +msgid "" +"Open Project Manager? \n" +"(Unsaved changes will be lost)" +msgstr "" +"Buka Manajer Proyek?\n" +"(Perubahan yang tidak disimpan akan hilang)" + +#: tools/editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "Pilih sebuah Scene Utama" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "Ugh" +msgstr "Wadoo" + +#: tools/editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" +"Gagal memuat scene, harus dalam alamat proyek. Gunakan 'Impor\" untuk " +"membuka scene tersebut, kemudian simpan di dalam alamat proyek." + +#: tools/editor/editor_node.cpp +msgid "Error loading scene." +msgstr "Gagal memuat scene." + +#: tools/editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "Scene '%s' memiliki dependensi yang rusak:" + +#: tools/editor/editor_node.cpp +msgid "Save Layout" +msgstr "Simpan Penampilan" + +#: tools/editor/editor_node.cpp +msgid "Delete Layout" +msgstr "Hapus Penampilan" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Default" +msgstr "Bawaan" + +#: tools/editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "Pilih Tab Scene" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s)" +msgstr "%d file lagi" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s) or folder(s)" +msgstr "%d file atau folder lagi" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Scene" +msgstr "Suasana" + +#: tools/editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "Pergi ke scene yang dibuka sebelumnya." + +#: tools/editor/editor_node.cpp +msgid "Fullscreen Mode" +msgstr "Mode Layar Penuh" + +#: tools/editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "Mode Tanpa Gangguan" + +#: tools/editor/editor_node.cpp +msgid "Next tab" +msgstr "Tab selanjutnya" + +#: tools/editor/editor_node.cpp +msgid "Previous tab" +msgstr "Tab sebelumnya" + +#: tools/editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "Operasi dengan file scene." + +#: tools/editor/editor_node.cpp +msgid "New Scene" +msgstr "Scene Baru" + +#: tools/editor/editor_node.cpp +msgid "New Inherited Scene.." +msgstr "Scene Turunan Baru.." + +#: tools/editor/editor_node.cpp +msgid "Open Scene.." +msgstr "Buka Scene.." + +#: tools/editor/editor_node.cpp +msgid "Save Scene" +msgstr "Simpan Scene" + +#: tools/editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Goto Prev. Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Recent" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Filter Files.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Convert To.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Translatable Strings.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "MeshLibrary.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "TileSet.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Redo" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Run Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import assets to the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Tools" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export the project to many platforms." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Play" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause the scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stop" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Debug options" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Settings" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Install Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "About" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Alerts when an external resource has changed." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Always" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Save As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Object properties." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Password:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Version:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Start Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Fixed Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp +msgid "Time:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Please wait for scan to complete." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Current scene must be saved to re-import." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Save & Re-Import" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import Changed Resources" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: tools/editor/editor_settings.cpp +msgid "Default (Same as Editor)" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: tools/editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "No bit masks to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must be a complete resource path." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must exist." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Save path is empty!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Import BitMasks" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Target Path:" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Accept" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Bit Mask" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No source font file!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No target font resource!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"Invalid file extension.\n" +"Please use .fnt." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Can't load/process source font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Couldn't save font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Dest Resource:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "The quick brown fox jumps over the lazy dog." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Test:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Options:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Font Import" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"This file is already a Godot font file, please supply a BMFont type file " +"instead." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Failed opening as BMFont file." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font custom source." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "No meshes to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Single Mesh Import" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Source Mesh(es):" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Surface %d" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "No samples to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Import Audio Samples" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Source Sample(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Audio Sample" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "New Clip" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Animation Options" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Flags" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Bake FPS:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Optimizer" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Linear Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angular Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angle" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Clips" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Start(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "End(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Filters" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error importing scene." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import 3D Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source Scene:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Same as Target Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Shared" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Target Texture Folder:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Post-Process Script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Custom Root Node Type:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Auto" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "The Following Files are Missing:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Anyway" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import & Open" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Edited scene has not been saved, open imported scene anyway?" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Importing Scene.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Running Custom Script.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error running post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Can't import a file over itself:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't localize path: %s (already local)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Saving.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "3D Scene Animation" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Uncompressed" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossless (PNG)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossy (WebP)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress (VRAM)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Format" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Compression Quality (WebP):" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Options" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Please specify some files!" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "At least one file needed for Atlas." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Error importing:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Only one file is required for large texture." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Max Texture Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for Atlas (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cell Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Textures (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Base Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 2D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 3D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "2D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "3D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "" +"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " +"the project." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Crop empty space." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Load Source Image" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Slicing" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Inserting" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Saving" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save large texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Build Atlas For:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Loading Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't load image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Converting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cropping Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Blitting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save atlas image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save converted texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid translation source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Column" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No items to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No target path!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translations" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Couldn't import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translation" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Source CSV:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Ignore First Row" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Compress" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Add to Project (engine.cfg)" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Languages:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Translation" +msgstr "" + +#: tools/editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Node" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Invalid animation name!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Animation name already exists!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to copy!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation resource on clipboard!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to edit!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create new animation in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save As" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Target Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Rename" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations.." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters.." +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing %d Triangles:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Light Baker Setup:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing Geometry" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Fixing Lights" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Making BVH" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Light Octree" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Octree Texture" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Transfer to Lightmaps:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Allocating Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Baking Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Post-Processing Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Reset the lightmap octree baking process (start over)." +msgstr "" + +#: tools/editor/plugins/camera_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Pivot" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom (%):" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Expand to Parent" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Reset" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Set.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchor" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set a Value" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap (Pixels):" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Creating Mesh Library" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh.." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image.." +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Set Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Mesh" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Node" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Clear Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Positions:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Fill:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Surface" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: tools/editor/plugins/rich_text_editor_plugin.cpp +msgid "Parse BBCode" +msgstr "" + +#: tools/editor/plugins/sample_editor_plugin.cpp +msgid "Length:" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Open Sample File(s)" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "ERROR: Couldn't load sample!" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Add Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Rename Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Delete Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "16 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "8 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stereo" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Mono" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "File" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_editor.cpp +msgid "New" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Window" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Left" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Right" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Tutorials" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Open https://godotengine.org at tutorials section." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the class hierarchy." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Lighting" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling to %s%%." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Environment" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "No scene selected to instance!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Instance at Cursor" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Could not instance scene!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog.." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default Light" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default sRGB" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Shadeless" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Default Light Normal:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Ambient Light Color:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Up" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Down" +msgstr "" + +#: tools/editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp +msgid "Options" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Have,Many,Several,Options!" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Style" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase selection" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Find tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Error" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Edit Script Options" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Please export outside the project folder!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error exporting project!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error writing the project PCK!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "No exporter for platform '%s' yet." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Include" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Change Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name can't be empty!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Invalid character in group name!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name already exists!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Add Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Delete Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas Preview" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export Settings" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Target" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export to Platform" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export selected resources (including dependencies)." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all resources in the project." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all files in the project directory." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources to Export:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Action" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert text scenes to binary on export." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep Original" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy, WebP)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for RAM (BC/PVRTC/ETC)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert Images (*.png):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy) Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink All Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Formats:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Groups" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Groups:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Disk" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress RAM" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Lossy Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink By:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Preview Atlas" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Filter:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Select None" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Samples" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sample Conversion Mode: (.wav files):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress (RAM - IMA-ADPCM)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sampling Rate Limit (Hz):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trim" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trailing Silence:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Text" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compiled" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Encryption Key (256-bits as hex):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Project PCK" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export.." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Preset:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, the path must exist!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must not exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Couldn't create engine.cfg in project path." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path (Must Exist):" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "That's a BINGO!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Key " +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Axis" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Invalid action (anything goes but '/' or ':')." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Press a Key.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Left Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Right Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Middle Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Up Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Down Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 6" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 7" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 8" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 9" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Axis Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Toggle Persisting" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Error saving settings." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Settings saved OK." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Remapped Path" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Project Settings (engine.cfg)" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +msgid "Property:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Del" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Copy To Platform.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Input Map" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Device:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Localization" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resources:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Locale" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "AutoLoad" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Plugins" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Preset.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "File.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Dir.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Load" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Couldn't load image" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "On" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Set" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Properties:" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Global" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Sections:" +msgstr "" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Tambahkan Properti Setter" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Metode Publik:" + +#: tools/editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Create New Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Open Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Save Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Resource Tools" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Make Local" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "OK :(" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Ok" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save New Scene As.." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Makes Sense!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Groups" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Connections" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Script" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "" +"This item cannot be made visible because the parent is hidden. Unhide the " +"parent first." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Editable Children" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Load As Placeholder" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Discard Instancing" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear!" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid parent class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid chars:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Parent class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid path!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Could not create script in filesystem." +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "File exists" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Built-In Script" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Create Node Script" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Warning" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Function:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Variable" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Inspector" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Scene Tree:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Object Properties: " +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: tools/editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" + +#~ msgid "" +#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but " +#~ "unsequenced ports were specified." +#~ msgstr "" +#~ "Node modifikasi tidak memiliki _get_output_port_unsequenced(idx,wmem), " +#~ "tetapi port-port unsequenced dispesifikasikan." diff --git a/tools/translations/it.po b/tools/translations/it.po index 83c9d85807..6f268298a7 100644 --- a/tools/translations/it.po +++ b/tools/translations/it.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2016-07-12 23:11+0000\n" +"PO-Revision-Date: 2016-08-29 11:05+0000\n" "Last-Translator: Dario Bonfanti <bonfi.96@hotmail.it>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" @@ -20,10 +20,12 @@ msgstr "" "X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Argomento tipo invalido per convert(), usare le costanti TYPE_*." #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" "Non vi sono abbastanza bytes per i bytes di decodifica, oppure formato " @@ -62,6 +64,288 @@ msgstr "Istanza invalida formato dizionario (script invalido in @path)" msgid "Invalid instance dictionary (invalid subclasses)" msgstr "Istanza invalida formato dizionario (sottoclassi invalide)" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"Un nodo ha ceduto senza memoria di lavoro, si prega di leggere la " +"documentazione riguardo a come cedere in maniera corretta!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"Il nodo ha ceduto, ma non ha ritornato uno stato di funzione nella prima " +"memoria di lavoro." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"Il valore di return deve essere assegnato al primo elemento della memoria di " +"lavoro del nodo! Si prega di aggiustare il nodo." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "Il nodo ha ritornato una sequenza di output invalida: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "Trovato bit di sequenza ma non il nodo nello stack, segnalare il bug!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Overflow dello stack con profondità dello stack: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Funzioni:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Valiabili:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Segnali:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "Il nome non è un identificatore valido:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Nome già in uso da un altro funz/var/segnale:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Rinomina Funzione" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Rinomina Variabile" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Rinomina Segnale" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Aggiungi Funzione" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Aggiungi Variabile" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Aggiungi Segnale" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Rimuovi Funzione" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Rimuovi Variabile" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Modifica Variabile:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Rimuovi Segnale" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Modifica Segnale:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Aggiungi Nodo" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Aggiungi Nodo Figlio" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Aggiungi Nodo(i) Da Albero" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Aggiungi Proprietà Getter" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Aggiungi Proprietà Setter" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Modifica" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Tipo Base:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Membri:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Nodi Disponibili:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Seleziona o crea una funzione per modificare il grafico" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Chiudi" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Modifica Argomenti Segnali:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Modifica Variabile:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Cambia" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Elimina selezionati" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Abilita Breakpoint" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Trova Tipo Nodo" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "Copia Posa" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "Crea Nodo" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Incolla Posa" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "Il tipo di input non è iterabile: " + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "L'iteratore è diventato invalido" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "L'iteratore è diventato invalido: " + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "Nome proprietà indice invalido." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "L'oggetto base non è un Nodo!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "Il percorso non conduce ad un Nodo!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "Nome proprietà indice invalido '%s' nel nodo %s." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": Argomento invalido di tipo: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Argomenti invalidi: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "VariableGet non trovato nello script: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "VariableSet non trovato nello script: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" +"Il nodo personalizato non ha un metodo _step(), impossibile processare il " +"grafico." + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" +"Valore di return invalido da _step(), deve esere intero (seq out), oppure " +"stringa (errore)." + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -207,6 +491,10 @@ msgstr "" "VisibilityEnable2D funziona al meglio quando usato direttamente come " "genitore con il root della scena modificata." +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance non contiene una risorsa BakedLight." + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -281,7 +569,7 @@ msgstr "" msgid "Cancel" msgstr "Annulla" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "OK" @@ -307,8 +595,9 @@ msgstr "Tutti i File (*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "Apri" @@ -431,13 +720,13 @@ msgid "Axis" msgstr "Asse" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "Taglia" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -445,7 +734,7 @@ msgstr "Copia" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -453,7 +742,7 @@ msgid "Paste" msgstr "Incolla" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -467,7 +756,7 @@ msgid "Clear" msgstr "Rimuovi" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "Annulla" @@ -600,9 +889,8 @@ msgid "Duplicate Transposed" msgstr "Duplica Transposto" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Remove Selection" -msgstr "Selezione Frame" +msgstr "Rimuovi Selezione" #: tools/editor/animation_editor.cpp msgid "Continuous" @@ -799,6 +1087,11 @@ msgid "Optimize" msgstr "Ottimizza" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" +"Seleziona un AnimationPlayer dallo Scene Tree per modificare le animazioni." + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "Key" @@ -848,7 +1141,8 @@ msgstr "Cambia Valore Array" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "Cerca:" @@ -902,18 +1196,6 @@ msgstr "Lista Metodi Per '%s':" msgid "Call" msgstr "Chiama" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "Chiudi" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "Lista Metodi:" @@ -964,6 +1246,7 @@ msgstr "Solo Selezione" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -1005,6 +1288,20 @@ msgstr "Richiedi Per Sostituire" msgid "Skip" msgstr "Salta" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Zoom In" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Zoom Out" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Resetta Zoom" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "Riga:" @@ -1094,10 +1391,16 @@ msgid "Create New" msgstr "Crea Nuovo" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "Corrispondenze:" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Descrizione:" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Cerca Rimpiazzo Per:" @@ -1214,8 +1517,9 @@ msgid "Delete selected files?" msgstr "Eliminare i file selezionati?" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "Elimina" @@ -1246,24 +1550,20 @@ msgstr "" "globale esistente." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid Path." -msgstr "Percorso Invalido!" +msgstr "Percorso Invalido." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "File does not exist." -msgstr "File esistente" +msgstr "File non esistente." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." -msgstr "Percorso Risosa" +msgstr "Non è nel percorso risorse." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Add AutoLoad" -msgstr "Aggiungi Autoload" +msgstr "Aggiungi AutoLoad" #: tools/editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" @@ -1290,9 +1590,8 @@ msgid "Enable" msgstr "Abilita" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rearrange Autoloads" -msgstr "Rinomina Autoload" +msgstr "Riordina gli Autoload" #: tools/editor/editor_autoload_settings.cpp msgid "Node Name:" @@ -1366,16 +1665,14 @@ msgid "Focus Path" msgstr "Percorso Di Fuoco" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" -msgstr "Modalità Preferito Su" +msgstr "Sposta Preferito Su" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" -msgstr "Modalità Preferito Giù" +msgstr "Sposta Preferito Giù" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "Preferiti:" @@ -1388,10 +1685,6 @@ msgid "Preview:" msgstr "Anteprima:" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "Impossibile accedere alla subdirectory:" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "ScansionaSorgenti" @@ -1429,25 +1722,13 @@ msgid "Public Methods:" msgstr "Metodi Pubblici:" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "Membri:" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Elementi Tema GUI:" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "Segnali:" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "Costanti:" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Descrizione:" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "Descrizione Metodo:" @@ -1753,7 +2034,6 @@ msgstr "" "(I cambiamenti non salvati saranno persi)" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" msgstr "Scegli una Scena Principale" @@ -1848,9 +2128,8 @@ msgid "Save Scene" msgstr "Salva Scena" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Save all Scenes" -msgstr "Salva Scena" +msgstr "Salva tutte le Scene" #: tools/editor/editor_node.cpp msgid "Close Scene" @@ -1884,7 +2163,7 @@ msgstr "MeshLibrary.." msgid "TileSet.." msgstr "TileSet.." -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "Redo" @@ -1976,9 +2255,8 @@ msgid "Play custom scene" msgstr "Esegui scena personalizzata" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play Custom Scene" -msgstr "Esegui scena personalizzata" +msgstr "Esegui Scena Personalizzata" #: tools/editor/editor_node.cpp msgid "Debug options" @@ -2317,6 +2595,92 @@ msgstr "" "Impossibile aprire file_type_cache.cch per scrittura, non salvo la cache dei " "tipi di file!" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "Stessi file di origine e e destinazione, non faccio nulla." + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" +"Stessi percorsi \n" +"di origine e e destinazione, non faccio nulla." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "Impossibile muovere le directory dentro se stesse." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "Non posso operare su '..'" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "Scegli un Nuovo Nome e Posizione Per:" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "Nessun File selezionato!" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "Istanza" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "Modifica Dipendenze.." + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "Vedi Proprietari.." + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "Copia Percorso" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "Rinomina o Sposta.." + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "Sposta in.." + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "Info" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "Mostra nel File Manager" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "Re-Importa.." + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "Directory Precedente" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "Directory Successiva" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "Re-Scan Filesystem" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "Abilita lo stato della cartella come Preferito" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "Istanzia le scene selezionate come figlie del nodo selezionato." + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "Sposta" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "Aggiungi a Gruppo" @@ -3281,10 +3645,6 @@ msgid "Post-Processing Texture #" msgstr "Texture Post-Processing #" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "BakedLightInstance non contiene una risorsa BakedLight." - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "Bake!" @@ -3348,8 +3708,8 @@ msgid "Paste Pose" msgstr "Incolla Posa" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" -msgstr "Modalità di Selezione(Q)" +msgid "Select Mode" +msgstr "Modalità di Selezione" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -3370,14 +3730,12 @@ msgid "Alt+RMB: Depth list selection" msgstr "Alt+RMB: Selezione Lista Profondità" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "Modalità Movimento (W)" +msgid "Move Mode" +msgstr "Modalità Movimento" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" -msgstr "Modalità Rotazione (E)" +msgid "Rotate Mode" +msgstr "Modalità Rotazione" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3413,14 +3771,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "Ripristina l'abilità dei figli dell'oggetto di essere selezionati." #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "Modifica" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "Usa lo Snap" @@ -3477,14 +3827,6 @@ msgid "View" msgstr "Vista" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "Zoom In" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "Zoom Out" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "Zoom Reset" @@ -3505,9 +3847,8 @@ msgid "Anchor" msgstr "Ancora" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Keys" -msgstr "Inserisci Key" +msgstr "Inserisci Keys" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" @@ -4163,14 +4504,12 @@ msgid "Save Theme As.." msgstr "Salva Tema Come.." #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next script" -msgstr "Crea Script" +msgstr "Script successivo" #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Previous script" -msgstr "Scheda precedente" +msgstr "Script Precedente" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/project_export.cpp @@ -4187,6 +4526,10 @@ msgid "Save All" msgstr "Salva Tutto" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "Ricarica Script Soft" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "Cronologia Succ." @@ -4207,97 +4550,26 @@ msgid "Save Theme As" msgstr "Salva Tema Come" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "Sposta Su" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "Sposta giù" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" -msgstr "Indenta Sinistra" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" -msgstr "Indenta Destra" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" -msgstr "Cambia a Commento" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" -msgstr "Clona Sotto" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" -msgstr "Completa Simbolo" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" -msgstr "Taglia Spazi in Coda" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" -msgstr "Auto Indenta" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" -msgstr "Ricarica Script Soft" +msgid "Close Docs" +msgstr "Chiudi Documentazione" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find.." msgstr "Trova.." #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find Next" msgstr "Trova Successivo" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" -msgstr "Trova Precedente" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." -msgstr "Rimpiazza.." - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." -msgstr "Vai a Funzione.." - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." -msgstr "Vai a Linea.." - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Debug" msgstr "Debug" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" -msgstr "Abilita Breakpoint" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" -msgstr "Rimuovi Tutti i Breakpoints" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" -msgstr "Vai a Breakpoint Successivo" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" -msgstr "Vai a Breakpoint Precedente" - -#: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp msgid "Step Over" msgstr "Step Over" @@ -4334,14 +4606,6 @@ msgid "Move Right" msgstr "Sposta a Destra" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" -msgstr "Aiuto" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" -msgstr "Aiuto Contestuale" - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Tutorials" msgstr "Tutorials" @@ -4398,6 +4662,79 @@ msgstr "Debugger" msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" +"Gli script built-in possono essere modificati solamente quando la scena a " +"cui appartengono è caricata" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "Sposta Su" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "Sposta giù" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "Indenta Sinistra" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "Indenta Destra" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "Cambia a Commento" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Clona Sotto" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "Completa Simbolo" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "Taglia Spazi in Coda" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "Auto Indenta" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "Rimuovi Tutti i Breakpoints" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "Vai a Breakpoint Successivo" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "Vai a Breakpoint Precedente" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "Trova Precedente" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "Rimpiazza.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "Vai a Funzione.." + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "Vai a Linea.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "Aiuto Contestuale" #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Vertex" @@ -4660,57 +4997,56 @@ msgid "Could not instance scene!" msgstr "Impossibile istanziare la scena!" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "Modalità Movimento (W)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "Modalità Rotazione (E)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "Modalità Scala (R)" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom View" -msgstr "Vista dal Basso." +msgstr "Vista dal Basso" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top View" -msgstr "Vista dall'Alto." +msgstr "Vista dall'Alto" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear View" -msgstr "Vista dal Retro." +msgstr "Vista dal Retro" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front View" -msgstr "Vista Frontale." +msgstr "Vista Frontale" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left View" -msgstr "Vista Sinistra." +msgstr "Vista Sinistra" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right View" -msgstr "Vista Destra." +msgstr "Vista Destra" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "" +msgstr "Cambia Vista Prospettiva/Ortogonale" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Insert Animation Key" -msgstr "Incolla Animazione" +msgstr "Inserisci Key Animazione" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Focus Selection" -msgstr "Scala Selezione" +msgstr "Centra a Selezione" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Selection With View" -msgstr "Allinea a vista" +msgstr "Allinea Selezione Con Vista" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform" @@ -5435,15 +5771,12 @@ msgid "Couldn't create engine.cfg in project path." msgstr "Impossibile creare engine.cfg nel percorso di progetto." #: tools/editor/project_manager.cpp -#, fuzzy msgid "The following files failed extraction from package:" -msgstr "" -"I file seguenti sono più recenti su disco.\n" -"Che azione deve essere intrapresa?:" +msgstr "Impossibile estrarre i file seguenti dal pacchetto:" #: tools/editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "Pacchetto Installato Con Successo!" #: tools/editor/project_manager.cpp msgid "Import Existing Project" @@ -5466,14 +5799,12 @@ msgid "Project Path:" msgstr "Percorso Progetto:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install Project:" -msgstr "Progetti Recenti:" +msgstr "Installa Progetto:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install" -msgstr "Istanza" +msgstr "Installa" #: tools/editor/project_manager.cpp msgid "Browse" @@ -5492,11 +5823,11 @@ msgid "Unnamed Project" msgstr "Progetto Senza Nome" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "Sei sicuro di voler aprire più di un progetto?" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "Sei sicuro di voler eseguire più di un progetto?" #: tools/editor/project_manager.cpp @@ -5506,6 +5837,12 @@ msgstr "" "modificati)" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "Stai per esaminare %s cartelle per progetti Godot esistenti. Confermi?" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "Gestione Progetti" @@ -5522,6 +5859,10 @@ msgid "Scan" msgstr "Esamina" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "Scegli una Cartella da Scansionare" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "Nuovo Progetto" @@ -5813,6 +6154,16 @@ msgstr "Globale" msgid "Sections:" msgstr "Sezioni:" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Selezione Punti" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Modalità di Selezione" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "Impossibile eseguire lo strumento di PVRTC:" @@ -5886,6 +6237,10 @@ msgid "No parent to instance a child at." msgstr "Nessun genitore del quale istanziare un figlio." #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "Nessun genitore nel quale istanziare una scena." + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "Errore caricamento scena da %s" @@ -6018,6 +6373,10 @@ msgid "Save Branch as Scene" msgstr "Salva Ramo come Scena" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "Elimina (Senza Conferma)" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "Aggiungi/Crea un Nuovo Nodo" @@ -6029,6 +6388,10 @@ msgstr "" "Istanzia un file scena come Nodo. Crea una scena ereditata se nessun nodo di " "root esiste." +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "Crea un nuovo script per il nodo selezionato." + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -6093,92 +6456,6 @@ msgstr "Libera!" msgid "Select a Node" msgstr "Scegli un Nodo" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Stessi file di origine e e destinazione, non faccio nulla." - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" -"Stessi percorsi \n" -"di origine e e destinazione, non faccio nulla." - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "Impossibile muovere le directory dentro se stesse." - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "Non posso operare su '..'" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Scegli un Nuovo Nome e Posizione Per:" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "Nessun File selezionato!" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "Istanza" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "Modifica Dipendenze.." - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "Vedi Proprietari.." - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "Copia Percorso" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "Rinomina o Sposta.." - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "Sposta in.." - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "Info" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "Mostra nel File Manager" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "Re-Importa.." - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "Directory Precedente" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "Directory Successiva" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "Re-Scan Filesystem" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "Abilita lo stato della cartella come Preferito" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "Istanzia le scene selezionate come figlie del nodo selezionato." - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "Sposta" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "Nome classe genitore invalido" @@ -6415,6 +6692,19 @@ msgstr "Cambia lunghezza Ray Shape" msgid "Change Notifier Extents" msgstr "Cambia Estensione di Notifier" +#~ msgid "" +#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but " +#~ "unsequenced ports were specified." +#~ msgstr "" +#~ "Il nodo personalizzato non ha _get_output_port_unsequenced(idx,wmem), ma " +#~ "le porte unsequenced sono state specificate." + +#~ msgid "Cannot go into subdir:" +#~ msgstr "Impossibile accedere alla subdirectory:" + +#~ msgid "Help" +#~ msgstr "Aiuto" + #~ msgid "Imported Resources" #~ msgstr "Risorse Importate" diff --git a/tools/translations/ja.po b/tools/translations/ja.po index 244f0790e4..1f0c073082 100644 --- a/tools/translations/ja.po +++ b/tools/translations/ja.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2016-06-20 19:30+0000\n" +"PO-Revision-Date: 2016-07-16 08:16+0000\n" "Last-Translator: hopping tappy (たっぴさん) <hopping.tappy@gmail.com>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" @@ -15,14 +15,16 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2.7-dev\n" +"X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp #, fuzzy msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Convert()に対して無効な型の引数です。TYPE_* 定数を使ってください。" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp #, fuzzy msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "デコードバイトのバイトは十分ではありません。または無効な形式です。" @@ -33,15 +35,15 @@ msgstr "ステップ引数はゼロです!" #: modules/gdscript/gd_functions.cpp msgid "Not a script with an instance" -msgstr "" +msgstr "インスタンスを使用していないスクリプトです" #: modules/gdscript/gd_functions.cpp msgid "Not based on a script" -msgstr "" +msgstr "スクリプトに基づいていません" #: modules/gdscript/gd_functions.cpp msgid "Not based on a resource file" -msgstr "" +msgstr "リソースファイルに基づいていません" #: modules/gdscript/gd_functions.cpp #, fuzzy @@ -63,17 +65,300 @@ msgstr "無効なインスタンス辞書形式です (@path で無効なスク msgid "Invalid instance dictionary (invalid subclasses)" msgstr "無効なインスタンス辞書です (無効なサブクラス)" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Functions:" +msgstr "関数を作成" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Rename Function" +msgstr "関数を作成" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Function" +msgstr "関数を作成" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Function" +msgstr "選択しているものを削除" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Variable" +msgstr "無効なキーを削除" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Signal" +msgstr "選択しているものを削除" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Editing Signal:" +msgstr "信号を接続:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Node(s) From Tree" +msgstr "シーンからのノード" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "閉じる" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Edit Signal Arguments:" +msgstr "余分に呼び出し引数を追加します。" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete Selected" +msgstr "選択範囲を複製" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "ノードへのパス:" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite to display frames." msgstr "" +"SpriteFrames リソースを作成または AnimatedSprite フレームを表示するためには " +"'Frames' プロパティに設定する必要があります。" #: scene/2d/canvas_modulate.cpp msgid "" "Only one visible CanvasModulate is allowed per scene (or set of instanced " "scenes). The first created one will work, while the rest will be ignored." msgstr "" +"1 つだけ表示されている CanvasModulate は、シーン (またはインスタンス化された" +"シーンのセット) ごとに許可されます。最初に作成された 1 つが動作する一方、残り" +"の部分は無視されます。" #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -81,91 +366,125 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" +"CollisionPolygon2D は、CollisionObject2D 派生ノードに衝突シェイプを提供するた" +"めにのみ機能します。のみとしてご利用ください Area2D、StaticBody2D、" +"RigidBody2D、KinematicBody2D などの子図形をすることです。" #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "" +msgstr "空の CollisionPolygon2D は、衝突判定を持ちません。" #: scene/2d/collision_shape_2d.cpp +#, fuzzy msgid "" "CollisionShape2D only serves to provide a collision shape to a " "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" +"CollisionShape2D は、CollisionObject2D 派生ノードにコリジョンシェイプを提供す" +"るためにのみ機能します。Area2D、StaticBody2D、RigidBody2D、KinematicBody2D な" +"どの子としてのみご利用ください。" #: scene/2d/collision_shape_2d.cpp msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" +"関数の CollisionShape2D の形状を指定する必要があります。そのためのシェイプリ" +"ソースを作成してください!" #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " "property." -msgstr "" +msgstr "光の形状とテクスチャは、'texture'プロパティに指定します。" #: scene/2d/light_occluder_2d.cpp msgid "" "An occluder polygon must be set (or drawn) for this occluder to take effect." msgstr "" +"この遮蔽を有効にして、オクルーダ ポリゴンを設定 (または描画) する必要がありま" +"す。" #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" -msgstr "" +msgstr "この遮蔽のオクルーダ ポリゴンが空です。多角形を描画してください!" #: scene/2d/navigation_polygon.cpp msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" +"NavigationPolygon リソースを設定または動作するようにこのノード用に作成する必" +"要があります。プロパティを設定するか、ポリゴンを描画してください。" #: scene/2d/navigation_polygon.cpp msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" +"NavigationPolygonInstance は、子または孫 Navigation2D ノードにある必要があり" +"ます。ナビゲーション データのみ提供します。" #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" +"ParallaxLayer ノードは、ParallaxBackground ノードの子として設定されている場合" +"のみ動作します。" #: scene/2d/particles_2d.cpp msgid "Path property must point to a valid Particles2D node to work." msgstr "" +"Path プロパティは、動作するように有効な Particles2D ノードを示す必要がありま" +"す。" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" +"PathFollow2D は、Path2D ノードの子として設定されている場合のみ動作します。" #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." msgstr "" +"Path プロパティは、動作するように有効な Node2D ノードを示す必要があります。" #: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp msgid "" "A SampleLibrary resource must be created or set in the 'samples' property in " "order for SamplePlayer to play sound." msgstr "" +"SampleLibrary リソースは SamplePlayer がサウンドを再生するために作成または " +"'samples' プロパティで設定する必要があります。" #: scene/2d/sprite.cpp msgid "" "Path property must point to a valid Viewport node to work. Such Viewport " "must be set to 'render target' mode." msgstr "" +"Path プロパティは、動作するように有効なビューポート ノードをポイントする必要" +"があります。このようなビューポートは、'render target' モードに設定する必要が" +"あります。" #: scene/2d/sprite.cpp msgid "" "The Viewport set in the path property must be set as 'render target' in " "order for this sprite to work." msgstr "" +"Path プロパティに設定したビューポートは、このスプライトの動作する順序で " +"'render target' として設定する必要があります。" #: scene/2d/visibility_notifier_2d.cpp msgid "" "VisibilityEnable2D works best when used with the edited scene root directly " "as parent." msgstr "" +"VisibilityEnable2D は、親として直接編集されたシーンのルートを使用する場合に最" +"適です。" + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" #: scene/3d/body_shape.cpp msgid "" @@ -173,56 +492,76 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" +"CollisionShape は衝突物由来のノードに衝突形状を提供するのに役立ちます。唯一の" +"彼らに形状を与えることなどエリア、静ボディ、RigidBody、キネマティックボディの" +"子としてそれを使用してください。" #: scene/3d/body_shape.cpp msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it!" msgstr "" +"関数の CollisionShape の形状を指定する必要があります。それのためのシェイプリ" +"ソースを作成してください!" #: scene/3d/collision_polygon.cpp +#, fuzzy msgid "" "CollisionPolygon only serves to provide a collision shape to a " "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" +"CollisionPolygon は、CollisionObject 派生ノードにコリジョンシェイプを提供する" +"ためにのみ機能します。Area、StaticBody、RigidBody、KinematicBody の子としての" +"み利用してください。" #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." -msgstr "" +msgstr "空の CollisionPolygon は、衝突判定を持ちません。" #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." msgstr "" +"このノードを動かすために NavigationMesh リソースを設定または作成する必要があ" +"ります。" #: scene/3d/navigation_mesh.cpp msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" +"NavigationMeshInstance は、ナビゲーションノードの子や孫である必要があります。" +"これはナビゲーションデータのみ提供します。" #: scene/3d/scenario_fx.cpp +#, fuzzy msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +"1 つだけの WorldEnvironment は、シーン (またはインスタンス化されたシーンの" +"セット) ごとに許可されます。" #: scene/3d/spatial_sample_player.cpp msgid "" "A SampleLibrary resource must be created or set in the 'samples' property in " "order for SpatialSamplePlayer to play sound." msgstr "" +"SpatialSamplePlayer でサウンドを再生するためには SampleLibrary リソースを作成" +"または 'samples' プロパティで設定する必要があります。" #: scene/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite3D to display frames." msgstr "" +"SpriteFrames リソースを作成または AnimatedSprite3D フレームを表示するために" +"は 'Frames' プロパティに設定する必要があります。" #: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Cancel" msgstr "キャンセル" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "決定" @@ -240,16 +579,17 @@ msgstr "ファイルが既に存在します。上書きしますか?" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "すべての認識" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Files (*)" -msgstr "" +msgstr "すべてのファイル(*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "開く" @@ -259,7 +599,7 @@ msgstr "ファイルを開く" #: scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "ファイルを開く" #: scene/gui/file_dialog.cpp msgid "Open a Directory" @@ -283,18 +623,18 @@ msgstr "ファイルを保存" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp msgid "Create Folder" -msgstr "" +msgstr "フォルダを作成" #: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp #: tools/editor/editor_file_dialog.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp #: tools/editor/script_create_dialog.cpp msgid "Path:" -msgstr "" +msgstr "Path:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "ディレクトリまたはファイル:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/script_editor_debugger.cpp @@ -372,13 +712,13 @@ msgid "Axis" msgstr "アナログ" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "切り取り" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -386,7 +726,7 @@ msgstr "コピー" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -394,7 +734,7 @@ msgid "Paste" msgstr "貼り付け" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -408,7 +748,7 @@ msgid "Clear" msgstr "削除" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "元に戻す" @@ -419,6 +759,9 @@ msgid "" "functions. Making them visible for editing is fine though, but they will " "hide upon running." msgstr "" +"ポップアップは、popup() または popup*() 関数のいずれかを呼び出す場合を除き、" +"既定では非表示になります。編集のためにそれらを可視化することは可能ですが、彼" +"らは実行時に非表示になります。" #: scene/main/viewport.cpp msgid "" @@ -427,11 +770,15 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" +"このビューポートは、レンダー ターゲットとして設定されていません。その内容を画" +"面に直接表示する場合は、サイズを得ることができるように、コントロールの子をつ" +"くります。それ以外の場合、レンダー ターゲットし、その内部のテクスチャ表示のい" +"くつかのノードに割り当てます。" #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Error initializing FreeType." -msgstr "" +msgstr "FreeType の初期化エラー。" #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp @@ -441,24 +788,24 @@ msgstr "不明なフォント形式です。" #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Error loading font." -msgstr "" +msgstr "フォント読み込みエラー。" #: scene/resources/dynamic_font.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Invalid font size." -msgstr "" +msgstr "無効なフォント サイズです。" #: tools/editor/animation_editor.cpp msgid "Disabled" -msgstr "" +msgstr "無効" #: tools/editor/animation_editor.cpp msgid "All Selection" -msgstr "" +msgstr "すべて選択" #: tools/editor/animation_editor.cpp msgid "Move Add Key" -msgstr "" +msgstr "追加したキーを移動" #: tools/editor/animation_editor.cpp msgid "Anim Change Transition" @@ -486,80 +833,80 @@ msgstr "" #: tools/editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "" +msgstr "Anim トラックを上に移動" #: tools/editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "" +msgstr "Anim トラックを下に移動" #: tools/editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "" +msgstr "Anim トラックを削除" #: tools/editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "" +msgstr "これにトランジションを設定:" #: tools/editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "" +msgstr "Anim トラック名の変更" #: tools/editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "" +msgstr "Anim トラック補間の変更" #: tools/editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "Anim トラック値モード変更" #: tools/editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "" +msgstr "ノード カーブを編集" #: tools/editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "" +msgstr "選択曲線を編集" #: tools/editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "" +msgstr "Anim キー削除" #: tools/editor/animation_editor.cpp #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "" +msgstr "選択範囲を複製" #: tools/editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "" +msgstr "複製を転置" #: tools/editor/animation_editor.cpp msgid "Remove Selection" -msgstr "" +msgstr "選択しているものを削除" #: tools/editor/animation_editor.cpp msgid "Continuous" -msgstr "" +msgstr "継続的" #: tools/editor/animation_editor.cpp msgid "Discrete" -msgstr "" +msgstr "離散" #: tools/editor/animation_editor.cpp msgid "Trigger" -msgstr "" +msgstr "トリガー" #: tools/editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "" +msgstr "Anim キーを追加" #: tools/editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "" +msgstr "Anim キーの移動" #: tools/editor/animation_editor.cpp msgid "Scale Selection" -msgstr "" +msgstr "スケールの選択" #: tools/editor/animation_editor.cpp msgid "Scale From Cursor" @@ -567,36 +914,36 @@ msgstr "" #: tools/editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "" +msgstr "次のステップへ" #: tools/editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "" +msgstr "前のステップへ" #: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp msgid "Linear" -msgstr "" +msgstr "Linear" #: tools/editor/animation_editor.cpp #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Constant" -msgstr "" +msgstr "Constant" #: tools/editor/animation_editor.cpp msgid "In" -msgstr "" +msgstr "In" #: tools/editor/animation_editor.cpp msgid "Out" -msgstr "" +msgstr "Out" #: tools/editor/animation_editor.cpp msgid "In-Out" -msgstr "" +msgstr "In-Out" #: tools/editor/animation_editor.cpp msgid "Out-In" -msgstr "" +msgstr "Out-In" #: tools/editor/animation_editor.cpp msgid "Transitions" @@ -604,19 +951,19 @@ msgstr "" #: tools/editor/animation_editor.cpp msgid "Optimize Animation" -msgstr "" +msgstr "アニメーションの最適化" #: tools/editor/animation_editor.cpp msgid "Clean-Up Animation" -msgstr "" +msgstr "アニメーションをクリーンアップ" #: tools/editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "" +msgstr "%s の新しいトラックを作成し、キーを挿入しますか?" #: tools/editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "" +msgstr "新しい %d トラックを作成し、キーを挿入しますか?" #: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -625,203 +972,208 @@ msgstr "" #: tools/editor/plugins/particles_editor_plugin.cpp #: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp msgid "Create" -msgstr "" +msgstr "作成" #: tools/editor/animation_editor.cpp msgid "Anim Create & Insert" -msgstr "" +msgstr "Anim の作成・挿入" #: tools/editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "" +msgstr "Anim トラック ・ キーを挿入" #: tools/editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "" +msgstr "Anim キーを挿入" #: tools/editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "" +msgstr "Anim Len を変更" #: tools/editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "" +msgstr "Anim Loop を変更" #: tools/editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "Anim は、型指定された値のキーを作成" #: tools/editor/animation_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "Anim 挿入" #: tools/editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "" +msgstr "Anim スケールキー" #: tools/editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "" +msgstr "Anim コールトラックを追加" #: tools/editor/animation_editor.cpp msgid "Animation zoom." -msgstr "" +msgstr "アニメーション 拡大。" #: tools/editor/animation_editor.cpp msgid "Length (s):" -msgstr "" +msgstr "長さ:" #: tools/editor/animation_editor.cpp msgid "Animation length (in seconds)." -msgstr "" +msgstr "アニメーションの長さ (単位は秒)。" #: tools/editor/animation_editor.cpp msgid "Step (s):" -msgstr "" +msgstr "ステップ:" #: tools/editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." -msgstr "" +msgstr "カーソル ステップ スナップ (単位は秒)。" #: tools/editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "" +msgstr "アニメーションのループを有効/無効。" #: tools/editor/animation_editor.cpp msgid "Add new tracks." -msgstr "" +msgstr "新しいトラックを追加。" #: tools/editor/animation_editor.cpp msgid "Move current track up." -msgstr "" +msgstr "現在のトラックに移動します。" #: tools/editor/animation_editor.cpp msgid "Move current track down." -msgstr "" +msgstr "現在のトラックを下へ移動します。" #: tools/editor/animation_editor.cpp msgid "Remove selected track." -msgstr "" +msgstr "選択したトラックを削除します。" #: tools/editor/animation_editor.cpp msgid "Track tools" -msgstr "" +msgstr "トラック ツール" #: tools/editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "" +msgstr "それらをクリックすることで、個々のキーの編集を有効にします。" #: tools/editor/animation_editor.cpp msgid "Anim. Optimizer" -msgstr "" +msgstr "アニメーションのオプティマイザー" #: tools/editor/animation_editor.cpp msgid "Max. Linear Error:" -msgstr "" +msgstr "最大。線形エラー:" #: tools/editor/animation_editor.cpp msgid "Max. Angular Error:" -msgstr "" +msgstr "最大。角度エラー:" #: tools/editor/animation_editor.cpp msgid "Max Optimizable Angle:" -msgstr "" +msgstr "最大最適化角度:" #: tools/editor/animation_editor.cpp msgid "Optimize" +msgstr "最適化" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." msgstr "" #: tools/editor/animation_editor.cpp msgid "Key" -msgstr "" +msgstr "キー" #: tools/editor/animation_editor.cpp msgid "Transition" -msgstr "" +msgstr "遷移" #: tools/editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "" +msgstr "スケールの比率:" #: tools/editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "" +msgstr "ノード内の関数を呼び出しますか?" #: tools/editor/animation_editor.cpp msgid "Remove invalid keys" -msgstr "" +msgstr "無効なキーを削除" #: tools/editor/animation_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "" +msgstr "未解決や空のトラックを削除" #: tools/editor/animation_editor.cpp msgid "Clean-up all animations" -msgstr "" +msgstr "すべてのアニメーションをクリーンアップ" #: tools/editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "" +msgstr "クリーン アップ アニメーション(元に戻せません!)" #: tools/editor/animation_editor.cpp msgid "Clean-Up" -msgstr "" +msgstr "クリーンアップ" #: tools/editor/array_property_edit.cpp msgid "Resize Array" -msgstr "" +msgstr "配列のサイズを変更" #: tools/editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "" +msgstr "配列の値の種類の変更" #: tools/editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "" +msgstr "配列の値を変更" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" -msgstr "" +msgstr "検索:" #: tools/editor/asset_library_editor_plugin.cpp msgid "Sort:" -msgstr "" +msgstr "並べ替え:" #: tools/editor/asset_library_editor_plugin.cpp msgid "Reverse" -msgstr "" +msgstr "逆" #: tools/editor/asset_library_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Category:" -msgstr "" +msgstr "カテゴリー:" #: tools/editor/asset_library_editor_plugin.cpp msgid "All" -msgstr "" +msgstr "すべて" #: tools/editor/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "" +msgstr "サイト:" #: tools/editor/asset_library_editor_plugin.cpp msgid "Support.." -msgstr "" +msgstr "サポート." #: tools/editor/asset_library_editor_plugin.cpp msgid "Official" -msgstr "" +msgstr "公式" #: tools/editor/asset_library_editor_plugin.cpp msgid "Community" -msgstr "" +msgstr "コミュニティ" #: tools/editor/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "" +msgstr "テスト中" #: tools/editor/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -829,106 +1181,95 @@ msgstr "" #: tools/editor/call_dialog.cpp msgid "Method List For '%s':" -msgstr "" +msgstr "'%s' のメソッド一覧:" #: tools/editor/call_dialog.cpp msgid "Call" -msgstr "" - -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "" +msgstr "呼び出し" #: tools/editor/call_dialog.cpp msgid "Method List:" -msgstr "" +msgstr "メソッド一覧:" #: tools/editor/call_dialog.cpp msgid "Arguments:" -msgstr "" +msgstr "引数:" #: tools/editor/call_dialog.cpp msgid "Return:" -msgstr "" +msgstr "戻り値:" #: tools/editor/code_editor.cpp msgid "Go to Line" -msgstr "" +msgstr "行に移動" #: tools/editor/code_editor.cpp msgid "Line Number:" -msgstr "" +msgstr "行番号:" #: tools/editor/code_editor.cpp msgid "No Matches" -msgstr "" +msgstr "一致なし" #: tools/editor/code_editor.cpp msgid "Replaced %d Ocurrence(s)." -msgstr "" +msgstr "%d 箇所を置換しました。" #: tools/editor/code_editor.cpp msgid "Replace" -msgstr "" +msgstr "置換" #: tools/editor/code_editor.cpp msgid "Replace All" -msgstr "" +msgstr "すべて置換" #: tools/editor/code_editor.cpp msgid "Match Case" -msgstr "" +msgstr "大文字と小文字" #: tools/editor/code_editor.cpp msgid "Whole Words" -msgstr "" +msgstr "単語全体" #: tools/editor/code_editor.cpp msgid "Selection Only" -msgstr "" +msgstr "選択範囲のみ" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" -msgstr "" +msgstr "検索" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp msgid "Find" -msgstr "" +msgstr "検索" #: tools/editor/code_editor.cpp msgid "Next" -msgstr "" +msgstr "次" #: tools/editor/code_editor.cpp msgid "Replaced %d ocurrence(s)." -msgstr "" +msgstr "%d 箇所を置換しました。" #: tools/editor/code_editor.cpp msgid "Not found!" -msgstr "" +msgstr "見つかりません!" #: tools/editor/code_editor.cpp msgid "Replace By" -msgstr "" +msgstr "置換" #: tools/editor/code_editor.cpp msgid "Case Sensitive" -msgstr "" +msgstr "大文字小文字を区別" #: tools/editor/code_editor.cpp msgid "Backwards" -msgstr "" +msgstr "後方" #: tools/editor/code_editor.cpp msgid "Prompt On Replace" @@ -936,11 +1277,25 @@ msgstr "" #: tools/editor/code_editor.cpp msgid "Skip" +msgstr "スキップ" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" msgstr "" #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" -msgstr "" +msgstr "ライン:" #: tools/editor/code_editor.cpp msgid "Col:" @@ -948,11 +1303,11 @@ msgstr "" #: tools/editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "" +msgstr "対象となるノードのメソッドを指定する必要があります!" #: tools/editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "" +msgstr "ノードに接続します。" #: tools/editor/connections_dialog.cpp #: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp @@ -960,18 +1315,19 @@ msgstr "" #: tools/editor/plugins/theme_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Add" -msgstr "" +msgstr "追加" #: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp #: tools/editor/plugins/animation_tree_editor_plugin.cpp #: tools/editor/plugins/theme_editor_plugin.cpp #: tools/editor/project_manager.cpp msgid "Remove" -msgstr "" +msgstr "削除" #: tools/editor/connections_dialog.cpp +#, fuzzy msgid "Add Extra Call Argument:" -msgstr "" +msgstr "余分に呼び出し引数を追加します。" #: tools/editor/connections_dialog.cpp msgid "Extra Call Arguments:" @@ -979,11 +1335,11 @@ msgstr "" #: tools/editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "" +msgstr "ノードへのパス:" #: tools/editor/connections_dialog.cpp msgid "Make Function" -msgstr "" +msgstr "関数を作成" #: tools/editor/connections_dialog.cpp msgid "Deferred" @@ -995,15 +1351,15 @@ msgstr "" #: tools/editor/connections_dialog.cpp msgid "Connect" -msgstr "" +msgstr "接続" #: tools/editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "" +msgstr "'%s' を '%s' に接続" #: tools/editor/connections_dialog.cpp msgid "Connecting Signal:" -msgstr "" +msgstr "信号を接続:" #: tools/editor/connections_dialog.cpp msgid "Create Subscription" @@ -1027,10 +1383,16 @@ msgid "Create New" msgstr "" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -1044,6 +1406,8 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" +"シーン '%s' は現在編集中です。\n" +"再読み込みしない限り、変更は反映されません。" #: tools/editor/dependency_editor.cpp msgid "" @@ -1101,7 +1465,7 @@ msgstr "" #: tools/editor/dependency_editor.cpp msgid "Scene failed to load due to missing dependencies:" -msgstr "" +msgstr "依存関係が不足しているのためシーンを読み込めませんでした。" #: tools/editor/dependency_editor.cpp msgid "Open Anyway" @@ -1140,8 +1504,9 @@ msgid "Delete selected files?" msgstr "" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "" @@ -1230,7 +1595,7 @@ msgstr "" #: tools/editor/editor_data.cpp msgid "Updating Scene" -msgstr "" +msgstr "シーンを更新" #: tools/editor/editor_data.cpp msgid "Storing local changes.." @@ -1238,7 +1603,7 @@ msgstr "" #: tools/editor/editor_data.cpp msgid "Updating scene.." -msgstr "" +msgstr "シーンを更新しています.." #: tools/editor/editor_dir_dialog.cpp msgid "Choose a Directory" @@ -1288,7 +1653,7 @@ msgstr "" msgid "Move Favorite Down" msgstr "" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "" @@ -1301,10 +1666,6 @@ msgid "Preview:" msgstr "" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "" @@ -1342,25 +1703,13 @@ msgid "Public Methods:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "" @@ -1414,8 +1763,9 @@ msgid "Importing:" msgstr "" #: tools/editor/editor_node.cpp +#, fuzzy msgid "Node From Scene" -msgstr "" +msgstr "シーンからのノード" #: tools/editor/editor_node.cpp #: tools/editor/plugins/animation_player_editor_plugin.cpp @@ -1447,7 +1797,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Saving Scene" -msgstr "" +msgstr "シーンを保存" #: tools/editor/editor_node.cpp msgid "Analyzing" @@ -1458,9 +1808,12 @@ msgid "Creating Thumbnail" msgstr "" #: tools/editor/editor_node.cpp +#, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." msgstr "" +"シーンを保存できませんでした。おそらく依存関係 (インスタンス) を満たせていま" +"せん。" #: tools/editor/editor_node.cpp msgid "Failed to load resource." @@ -1536,8 +1889,9 @@ msgid "Open in Help" msgstr "" #: tools/editor/editor_node.cpp +#, fuzzy msgid "There is no defined scene to run." -msgstr "" +msgstr "実行する定義済みのシーンはありません。" #: tools/editor/editor_node.cpp msgid "" @@ -1554,15 +1908,21 @@ msgid "" msgstr "" #: tools/editor/editor_node.cpp +#, fuzzy msgid "" "Selected scene '%s' is not a scene file, select a valid one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"選択したシーン '%s' は、シーン ファイルではありません、有効なものを選択してい" +"ますか?\n" +"'アプリケーション' カテゴリの下の'プロジェクトの設定'で変更できます。" #: tools/editor/editor_node.cpp +#, fuzzy msgid "Current scene was never saved, please save it prior to running." msgstr "" +"現在のシーンが保存されていませんでした、それ以前の実行中に保存してください。" #: tools/editor/editor_node.cpp msgid "Could not start subprocess!" @@ -1570,7 +1930,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Open Scene" -msgstr "" +msgstr "シーンを開く" #: tools/editor/editor_node.cpp msgid "Open Base Scene" @@ -1618,11 +1978,11 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Quit" -msgstr "" +msgstr "終了" #: tools/editor/editor_node.cpp msgid "Exit the editor?" -msgstr "" +msgstr "エディターを終了しますか?" #: tools/editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1778,7 +2138,7 @@ msgstr "" msgid "TileSet.." msgstr "" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "" @@ -1797,7 +2157,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Quit to Project List" -msgstr "" +msgstr "終了してプロジェクトリストを開く" #: tools/editor/editor_node.cpp msgid "Import assets to the project." @@ -2189,6 +2549,90 @@ msgstr "" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -3144,10 +3588,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "" @@ -3211,8 +3651,9 @@ msgid "Paste Pose" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" -msgstr "" +#, fuzzy +msgid "Select Mode" +msgstr "すべて選択" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -3231,13 +3672,12 @@ msgid "Alt+RMB: Depth list selection" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "" +#, fuzzy +msgid "Move Mode" +msgstr "追加したキーを移動" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +msgid "Rotate Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3272,14 +3712,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "" @@ -3336,14 +3768,6 @@ msgid "View" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "" @@ -4041,6 +4465,10 @@ msgid "Save All" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "" @@ -4061,194 +4489,187 @@ msgid "Save Theme As" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "" +#, fuzzy +msgid "Close Docs" +msgstr "閉じる" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" +msgid "Debug" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" +#: tools/editor/script_editor_debugger.cpp +msgid "Break" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" +msgid "Keep Debugger Open" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find.." +msgid "Window" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Next" +msgid "Move Left" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" +msgid "Move Right" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." +msgid "Tutorials" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." +msgid "Open https://godotengine.org at tutorials section." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." +msgid "Classes" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Debug" +msgid "Search the class hierarchy." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" +msgid "Search the reference documentation." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" +msgid "Go to previous edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" +msgid "Go to next edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" +msgid "Create Script" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Reload" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Break" +msgid "Resave" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp -msgid "Continue" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Keep Debugger Open" +msgid "Debugger" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Window" +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Left" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Right" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Tutorials" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Open https://godotengine.org at tutorials section." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Classes" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the reference documentation." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to previous edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to next edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Create Script" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"The following files are newer on disk.\n" -"What action should be taken?:" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Reload" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Resave" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Debugger" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" msgstr "" #: tools/editor/plugins/shader_editor_plugin.cpp @@ -4512,6 +4933,14 @@ msgid "Could not instance scene!" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "" @@ -5326,11 +5755,11 @@ msgid "Unnamed Project" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "" #: tools/editor/project_manager.cpp @@ -5338,6 +5767,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "" @@ -5354,12 +5789,16 @@ msgid "Scan" msgstr "" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "" #: tools/editor/project_manager.cpp msgid "Exit" -msgstr "" +msgstr "終了" #: tools/editor/project_settings.cpp msgid "Key " @@ -5645,6 +6084,16 @@ msgstr "" msgid "Sections:" msgstr "" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "すべて選択" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "すべて選択" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "" @@ -5718,6 +6167,10 @@ msgid "No parent to instance a child at." msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "" @@ -5846,6 +6299,11 @@ msgid "Save Branch as Scene" msgstr "" #: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete (No Confirm)" +msgstr "確認してください。" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "" @@ -5855,6 +6313,10 @@ msgid "" "exists." msgstr "" +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5917,90 +6379,6 @@ msgstr "" msgid "Select a Node" msgstr "" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "" diff --git a/tools/translations/ko.po b/tools/translations/ko.po index 0e174ea054..72d9fc1167 100644 --- a/tools/translations/ko.po +++ b/tools/translations/ko.po @@ -2,13 +2,13 @@ # Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community # This file is distributed under the same license as the Godot source code. # -# volzhs <volzhs@gmail.com>, 2016. +# 박한얼 (volzhs) <volzhs@gmail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2016-06-28 11:49+0000\n" +"PO-Revision-Date: 2016-08-17 10:07+0000\n" "Last-Translator: 박한얼 <volzhs@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" @@ -17,14 +17,16 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2.7-dev\n" +"X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" "convert()하기 위한 인자 타입이 유효하지 않습니다, TYPE_* 상수를 사용하세요." #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "디코딩할 바이트가 모자라거나, 유효하지 않은 형식입니다." @@ -62,6 +64,278 @@ msgstr "" msgid "Invalid instance dictionary (invalid subclasses)" msgstr "유효하지 않은 인스턴스 Dictionary (서브클래스가 유효하지 않음)" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "함수:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "변수:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "시그널:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "함수명 변경" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "변수명 변경" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "시그널명 변경" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "함수 추가" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "변수 추가" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "시그널 추가" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "함수 제거" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "변수 제거" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "변수 편집:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "시그널 제거" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "시그널 편집:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "노드 추가" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "자식 노드 추가" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "트리에서 노드 추가" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "편집" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "기본 타입:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "멤버:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "가능한 노드:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "닫기" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "시그널 인자 편집:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "변수 편집:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "변경" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "선택 항목 삭제" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "중단점 토글" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "노드 타입 찾기" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "포즈 복사" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "노드 생성" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "포즈 붙여넣기" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "유요하지 않은 인덱스 속성명." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "노드를 지칭하는 경로가 아닙니다!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": 유효하지 않은 인자 타입: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": 유효하지 인자: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -192,6 +466,10 @@ msgstr "" "VisibilityEnable2D는 편집 씬의 루트의 하위 노드로 추가할 때 가장 잘 동작합니" "다." +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance가 BakedLight 리소스를 가지고 있지 않습니다." + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -263,7 +541,7 @@ msgstr "" msgid "Cancel" msgstr "취소" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "확인" @@ -289,8 +567,9 @@ msgstr "모든 파일 (*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "열기" @@ -413,13 +692,13 @@ msgid "Axis" msgstr "축" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "잘라내기" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -427,7 +706,7 @@ msgstr "복사하기" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -435,7 +714,7 @@ msgid "Paste" msgstr "붙여넣기" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -449,7 +728,7 @@ msgid "Clear" msgstr "지우기" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "되돌리기" @@ -581,9 +860,8 @@ msgid "Duplicate Transposed" msgstr "선택된 트랙에 복제" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Remove Selection" -msgstr "선택항목 화면 꽉차게 표시" +msgstr "선택 삭제" #: tools/editor/animation_editor.cpp msgid "Continuous" @@ -780,6 +1058,10 @@ msgid "Optimize" msgstr "최적화" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "키" @@ -829,7 +1111,8 @@ msgstr "배열 값 변경" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "검색:" @@ -883,18 +1166,6 @@ msgstr "'%s' 함수 목록:" msgid "Call" msgstr "호출" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "닫기" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "함수 목록:" @@ -945,6 +1216,7 @@ msgstr "선택영역만" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -986,6 +1258,20 @@ msgstr "변경 시 알림" msgid "Skip" msgstr "건너뛰기" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "확대" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "축소" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "라인:" @@ -1075,10 +1361,16 @@ msgid "Create New" msgstr "새로 만들기" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "일치:" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "설명:" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "대체할 대상 찾기:" @@ -1194,8 +1486,9 @@ msgid "Delete selected files?" msgstr "선택된 파일들을 삭제하시겠습니까?" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "삭제" @@ -1222,22 +1515,18 @@ msgid "Invalid name. Must not collide with an existing global constant name." msgstr "유효하지 않은 이름입니다. 전역 상수 이름과 충돌하지 않아야 합니다." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid Path." -msgstr "경로가 유효하지 않습니다!" +msgstr "유효하지 않은 경로." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "File does not exist." -msgstr "파일이 존재함" +msgstr "파일이 존재하지 않습니다." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." -msgstr "리소스 경로" +msgstr "리소스 경로가 아닙니다." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Add AutoLoad" msgstr "자동 로드 추가" @@ -1266,9 +1555,8 @@ msgid "Enable" msgstr "활성화" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rearrange Autoloads" -msgstr "자동 로드 이름 변경" +msgstr "자동 로드 위치 변경" #: tools/editor/editor_autoload_settings.cpp msgid "Node Name:" @@ -1342,16 +1630,14 @@ msgid "Focus Path" msgstr "경로 포커스" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" -msgstr "즐겨찾기 위로" +msgstr "즐겨찾기 위로 이동" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" -msgstr "즐겨찾기 아래로" +msgstr "즐겨찾기 아래로 이동" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "즐겨찾기:" @@ -1364,10 +1650,6 @@ msgid "Preview:" msgstr "미리보기:" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "하위 디렉토리로 이동할 수 없습니다:" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "소스 조사" @@ -1405,25 +1687,13 @@ msgid "Public Methods:" msgstr "공개 함수:" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "멤버:" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "GUI 테마 항목:" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "시그널:" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "상수:" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "설명:" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "함수 설명:" @@ -1723,7 +1993,6 @@ msgstr "" "(저장하지 않은 변경사항은 사라집니다.)" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" msgstr "메인 씬 선택" @@ -1817,9 +2086,8 @@ msgid "Save Scene" msgstr "씬 저장" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Save all Scenes" -msgstr "씬 저장" +msgstr "모든 씬 저장" #: tools/editor/editor_node.cpp msgid "Close Scene" @@ -1853,7 +2121,7 @@ msgstr "메쉬 라이브러리.." msgid "TileSet.." msgstr "타일 셋.." -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "다시 실행" @@ -1945,9 +2213,8 @@ msgid "Play custom scene" msgstr "다른 씬 실행" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play Custom Scene" -msgstr "다른 씬 실행" +msgstr "커스텀 씬 실행" #: tools/editor/editor_node.cpp msgid "Debug options" @@ -2285,6 +2552,90 @@ msgstr "노드에서 가져오기:" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "file_type_cache.cch를 열수 없어서, 파일 타입 캐쉬를 저장하지 않습니다!" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "소스와 대상 파일이 동일하여, 무시됩니다." + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "소스와 대상 경로가 동일하여, 무시됩니다." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "디렉토리를 자신으로 이동할 수 없습니다." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "'..'에 수행할 수 없음" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "새로운 이름과 위치를 고르세요:" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "파일이 선택되지 않았습니다!" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "인스턴스" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "종속 관계 편집.." + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "소유자 보기.." + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "경로 복사" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "이름 변경 또는 이동.." + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "이동.." + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "정보" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "파일 매니저에서 보기" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "다시 가져오기.." + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "이전 디렉토리" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "다음 디렉토리" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "파일 시스템 재검사" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "즐겨찾기로 설정 토글" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "선택된 씬을 선택된 노드의 자식으로 인스턴스 합니다." + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "이동" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "그룹에 추가" @@ -2393,7 +2744,9 @@ msgstr "리소스 경로:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "The quick brown fox jumps over the lazy dog." -msgstr "The quick brown fox jumps over the lazy dog." +msgstr "" +"The quick brown fox jumps over the lazy dog.\n" +"다람쥐 헌 쳇바퀴에 타고파." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Test:" @@ -3245,10 +3598,6 @@ msgid "Post-Processing Texture #" msgstr "텍스쳐 후처리 중 #" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "BakedLightInstance가 BakedLight 리소스를 가지고 있지 않습니다." - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "굽기!" @@ -3312,8 +3661,8 @@ msgid "Paste Pose" msgstr "포즈 붙여넣기" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" -msgstr "선택 모드 (Q)" +msgid "Select Mode" +msgstr "선택 모드" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -3332,14 +3681,12 @@ msgid "Alt+RMB: Depth list selection" msgstr "알트+우클릭: 겹친 오브젝트 선택" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "이동 모드 (W)" +msgid "Move Mode" +msgstr "이동 모드" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" -msgstr "회전 모드 (E)" +msgid "Rotate Mode" +msgstr "회전 모드" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3375,14 +3722,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "오브젝트의 자식노드가 선택될 수 있도록 복원합니다." #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "편집" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "스냅 사용" @@ -3439,14 +3778,6 @@ msgid "View" msgstr "보기" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "확대" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "축소" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "확대 초기화" @@ -3467,7 +3798,6 @@ msgid "Anchor" msgstr "앵커" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Keys" msgstr "키 삽입" @@ -4123,14 +4453,12 @@ msgid "Save Theme As.." msgstr "테마 다른 이름으로 저장.." #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next script" -msgstr "스크립트 만들기" +msgstr "다음 스크립트" #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Previous script" -msgstr "이전 탭" +msgstr "이전 스크립트" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/project_export.cpp @@ -4147,6 +4475,10 @@ msgid "Save All" msgstr "모두 저장" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "스크립트 다시 로드" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "이전 히스토리" @@ -4167,97 +4499,26 @@ msgid "Save Theme As" msgstr "테마 다른 이름으로 저장" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "위로 이동" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "아래로 이동" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" -msgstr "내어쓰기" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" -msgstr "들여쓰기" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" -msgstr "주석 토글" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" -msgstr "아래로 복제" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" -msgstr "자동 완성" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" -msgstr "후행 공백 문자 제거" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" -msgstr "자동 들여쓰기" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" -msgstr "스크립트 다시 로드" +msgid "Close Docs" +msgstr "문서 닫기" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find.." msgstr "찾기.." #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find Next" msgstr "다음 찾기" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" -msgstr "이전 찾기" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." -msgstr "변경.." - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." -msgstr "함수로 이동.." - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." -msgstr "라인으로 이동.." - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Debug" msgstr "디버그" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" -msgstr "중단점 토글" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" -msgstr "중단점 모두 삭제" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" -msgstr "다음 중단점으로 이동" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" -msgstr "이전 중단점으로 이동" - -#: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp msgid "Step Over" msgstr "한 단계식 코드 실행" @@ -4294,14 +4555,6 @@ msgid "Move Right" msgstr "오른쪽으로 이동" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" -msgstr "도움말" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" -msgstr "도움말 보기" - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Tutorials" msgstr "튜토리얼" @@ -4357,7 +4610,78 @@ msgstr "디버거" #: tools/editor/plugins/script_editor_plugin.cpp msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" +msgstr "내장 스크립트는 종속된 씬이 열린 상태에서만 편집이 가능합니다" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "위로 이동" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "아래로 이동" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "내어쓰기" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "들여쓰기" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "주석 토글" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "아래로 복제" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "자동 완성" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "후행 공백 문자 제거" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "자동 들여쓰기" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "중단점 모두 삭제" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "다음 중단점으로 이동" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "이전 중단점으로 이동" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "이전 찾기" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "변경.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "함수로 이동.." + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "라인으로 이동.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "도움말 보기" #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Vertex" @@ -4620,57 +4944,56 @@ msgid "Could not instance scene!" msgstr "씬을 인스턴스 할 수 없습니다!" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "이동 모드 (W)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "회전 모드 (E)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "크기조절 모드 (R)" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom View" -msgstr "아랫면 보기." +msgstr "하단 뷰" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top View" -msgstr "윗면 보기." +msgstr "상단 뷰" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear View" -msgstr "뒷면 보기." +msgstr "후면 뷰" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front View" -msgstr "정면 보기." +msgstr "정면 뷰" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left View" -msgstr "왼쪽면 보기." +msgstr "좌측 뷰" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right View" -msgstr "오른쪽면 보기." +msgstr "우측 뷰" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "" +msgstr "원근/직교 뷰 전환" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Insert Animation Key" -msgstr "애니메이션 붙여넣기" +msgstr "애니메이션 키 삽입" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Focus Selection" -msgstr "선택키 스케일 조절" +msgstr "선택 포커스" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Selection With View" -msgstr "뷰에 정렬" +msgstr "선택 항목을 뷰에 정렬" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform" @@ -5391,15 +5714,12 @@ msgid "Couldn't create engine.cfg in project path." msgstr "프로젝트 경로에 engine.cfg를 생성할 수 없습니다." #: tools/editor/project_manager.cpp -#, fuzzy msgid "The following files failed extraction from package:" -msgstr "" -"다음의 파일들이 디스크상 더 최신입니다.\n" -"어떤 작업을 수행하시겠습니까?:" +msgstr "다음의 파일들을 패키지로부터 추출하는데 실패했습니다:" #: tools/editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "패키지가 성공적으로 설치되었습니다!" #: tools/editor/project_manager.cpp msgid "Import Existing Project" @@ -5422,14 +5742,12 @@ msgid "Project Path:" msgstr "프로젝트 경로:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install Project:" -msgstr "최근 프로젝트:" +msgstr "프로젝트 설치:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install" -msgstr "인스턴스" +msgstr "설치" #: tools/editor/project_manager.cpp msgid "Browse" @@ -5448,11 +5766,11 @@ msgid "Unnamed Project" msgstr "이름없는 프로젝트" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "두개 이상의 프로젝트를 열려는 것이 확실합니까?" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "두개 이상의 프로젝트를 실행하려는 것이 확실합니까?" #: tools/editor/project_manager.cpp @@ -5461,6 +5779,12 @@ msgstr "" "목록에서 프로젝트를 제거하시겠습니까? (폴더와 파일들은 남아있게 됩니다.)" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "프로젝트 매니저" @@ -5477,6 +5801,10 @@ msgid "Scan" msgstr "스캔" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "스캔할 폴더를 선택하세요" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "새 프로젝트" @@ -5746,7 +6074,7 @@ msgstr "이미지를 로드할 수 없음" #: tools/editor/property_editor.cpp msgid "Bit %d, val %d." -msgstr "Bit %d, val %d." +msgstr "비트 %d, 값 %d." #: tools/editor/property_editor.cpp msgid "On" @@ -5768,6 +6096,16 @@ msgstr "Global" msgid "Sections:" msgstr "부문:" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "포인트 선택" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "선택 모드" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "PVRTC 도구를 실행할 수 없습니다:" @@ -5841,6 +6179,10 @@ msgid "No parent to instance a child at." msgstr "선택된 부모 노드가 없어서 자식노드를 인스턴스할 수 없습니다." #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "씬을 인스턴스할 수 있는 부모가 없습니다." + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "'%s' 로부터 씬 로딩 중 에러" @@ -5970,6 +6312,10 @@ msgid "Save Branch as Scene" msgstr "선택 노드를 다른 씬으로 저장" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "삭제 (확인 없음)" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "새 노드 추가/생성" @@ -5980,6 +6326,10 @@ msgid "" msgstr "" "씬 파일을 노드로 추가합니다. 루트 노드가 없을 경우, 상속씬으로 만들어집니다." +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "선택된 노드에 새로운 스크립트를 생성합니다." + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -6044,90 +6394,6 @@ msgstr "없앴습니다!" msgid "Select a Node" msgstr "노드 선택" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "소스와 대상 파일이 동일하여, 무시됩니다." - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "소스와 대상 경로가 동일하여, 무시됩니다." - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "디렉토리를 자신으로 이동할 수 없습니다." - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "'..'에 수행할 수 없음" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "새로운 이름과 위치를 고르세요:" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "파일이 선택되지 않았습니다!" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "인스턴스" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "종속 관계 편집.." - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "소유자 보기.." - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "경로 복사" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "이름 변경 또는 이동.." - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "이동.." - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "정보" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "파일 매니저에서 보기" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "다시 가져오기.." - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "이전 디렉토리" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "다음 디렉토리" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "파일 시스템 재검사" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "즐겨찾기로 설정 토글" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "선택된 씬을 선택된 노드의 자식으로 인스턴스 합니다." - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "이동" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "유요하지 않은 부모 클래스명" @@ -6364,6 +6630,12 @@ msgstr "Ray Shape 길이 변경" msgid "Change Notifier Extents" msgstr "Notifier 범위 변경" +#~ msgid "Cannot go into subdir:" +#~ msgstr "하위 디렉토리로 이동할 수 없습니다:" + +#~ msgid "Help" +#~ msgstr "도움말" + #~ msgid "Imported Resources" #~ msgstr "가져온 리소스" diff --git a/tools/translations/nb.po b/tools/translations/nb.po new file mode 100644 index 0000000000..41903096cf --- /dev/null +++ b/tools/translations/nb.po @@ -0,0 +1,6516 @@ +# Norwegian Bokmål translation of the Godot Engine editor +# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community +# This file is distributed under the same license as the Godot source code. +# +# Jørgen Aarmo Lund <jorgen.aarmo@gmail.com>, 2016. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2016-08-29 19:46+0000\n" +"Last-Translator: Jørgen Aarmo Lund <jorgen.aarmo@gmail.com>\n" +"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/godot-" +"engine/godot/nb/>\n" +"Language: nb\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.8-dev\n" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "Ugyldig argument til convert(), bruk TYPE_*-konstantene." + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "step argument is zero!" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Not a script with an instance" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a script" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a resource file" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" + +#: scene/2d/particles_2d.cpp +msgid "Path property must point to a valid Particles2D node to work." +msgstr "" + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "" + +#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SamplePlayer to play sound." +msgstr "" + +#: scene/2d/sprite.cpp +msgid "" +"Path property must point to a valid Viewport node to work. Such Viewport " +"must be set to 'render target' mode." +msgstr "" + +#: scene/2d/sprite.cpp +msgid "" +"The Viewport set in the path property must be set as 'render target' in " +"order for this sprite to work." +msgstr "" + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + +#: scene/3d/body_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/body_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" + +#: scene/3d/spatial_sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SpatialSamplePlayer to play sound." +msgstr "" + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" + +#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Cancel" +msgstr "" + +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp +msgid "OK" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Recognized" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Files (*)" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Open" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Save a File" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Create Folder" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/editor_file_dialog.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Path:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Directories & Files:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "File:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Filter:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Name:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Could not create folder." +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Must use a valid extension." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "" + +#: scene/gui/input_action.cpp +msgid "Ctrl+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Meta+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Device" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Button" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Left Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Right Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Middle Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Up." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Down." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Axis" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Cut" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Copy" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Paste" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "Select All" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/rich_text_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Clear" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Undo" +msgstr "" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font size." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Disabled" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "All Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Add Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transition" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Value" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Call" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Continuous" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Discrete" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Trigger" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "" + +#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp +msgid "Linear" +msgstr "" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "In" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Out" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "In-Out" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Out-In" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Transitions" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "" + +#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/particles_editor_plugin.cpp +#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp +msgid "Create" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Length (s):" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Step (s):" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move current track up." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move current track down." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Track tools" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim. Optimizer" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Optimize" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Transition" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Category:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Method List For '%s':" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Call" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Method List:" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Arguments:" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Return:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Go to Line" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Line Number:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "No Matches" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d Ocurrence(s)." +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace All" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Match Case" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Whole Words" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Selection Only" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Search" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +msgid "Find" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Next" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d ocurrence(s)." +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Not found!" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace By" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Case Sensitive" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Backwards" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Prompt On Replace" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Skip" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Col:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Add" +msgstr "" + +#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Remove" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Make Function" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Deferred" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Create Subscription" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect.." +msgstr "" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "" + +#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp +msgid "Signals" +msgstr "" + +#: tools/editor/create_dialog.cpp +msgid "Create New" +msgstr "" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Matches:" +msgstr "" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Resource" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp +msgid "Path" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Scene failed to load due to missing dependencies:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Open Anyway" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Owns" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Name" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "List:" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating Scene" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Storing local changes.." +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating scene.." +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "" + +#: tools/editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Class List:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Search Classes" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp +msgid "Class:" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Inherited by:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Brief Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Public Methods:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Constants:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Method Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Search Text" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Added:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Removed:" +msgstr "" + +#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp +msgid "Error saving atlas:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Could not save atlas subtexture:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Storing File:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Packing" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Exporting for %s" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Setting Up.." +msgstr "" + +#: tools/editor/editor_log.cpp +msgid " Output:" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Importing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Importing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Node From Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Error saving resource!" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Save Resource As.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "I see.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error while saving." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Saving Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Analyzing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Failed to load resource." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Loading Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Params" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Paste Params" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Built-In" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open in Help" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in later in \"Project Settings\" under the " +"'application' category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Script.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Yes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close scene? (Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Please save the scene first." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Translatable Strings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Run Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Open Project Manager? \n" +"(Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "Ugh" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error loading scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Default" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s) or folder(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Fullscreen Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Next tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Inherited Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Goto Prev. Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Recent" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Filter Files.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Convert To.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Translatable Strings.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "MeshLibrary.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "TileSet.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Redo" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Run Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import assets to the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Tools" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export the project to many platforms." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Play" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause the scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stop" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Debug options" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Settings" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Install Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "About" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Alerts when an external resource has changed." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Always" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Save As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Object properties." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Password:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Version:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Start Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Fixed Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp +msgid "Time:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Please wait for scan to complete." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Current scene must be saved to re-import." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Save & Re-Import" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import Changed Resources" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: tools/editor/editor_settings.cpp +msgid "Default (Same as Editor)" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: tools/editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "No bit masks to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must be a complete resource path." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must exist." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Save path is empty!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Import BitMasks" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Target Path:" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Accept" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Bit Mask" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No source font file!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No target font resource!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"Invalid file extension.\n" +"Please use .fnt." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Can't load/process source font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Couldn't save font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Dest Resource:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "The quick brown fox jumps over the lazy dog." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Test:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Options:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Font Import" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"This file is already a Godot font file, please supply a BMFont type file " +"instead." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Failed opening as BMFont file." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font custom source." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "No meshes to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Single Mesh Import" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Source Mesh(es):" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Surface %d" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "No samples to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Import Audio Samples" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Source Sample(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Audio Sample" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "New Clip" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Animation Options" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Flags" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Bake FPS:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Optimizer" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Linear Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angular Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angle" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Clips" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Start(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "End(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Filters" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error importing scene." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import 3D Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source Scene:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Same as Target Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Shared" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Target Texture Folder:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Post-Process Script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Custom Root Node Type:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Auto" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "The Following Files are Missing:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Anyway" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import & Open" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Edited scene has not been saved, open imported scene anyway?" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Importing Scene.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Running Custom Script.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error running post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Can't import a file over itself:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't localize path: %s (already local)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Saving.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "3D Scene Animation" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Uncompressed" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossless (PNG)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossy (WebP)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress (VRAM)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Format" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Compression Quality (WebP):" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Options" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Please specify some files!" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "At least one file needed for Atlas." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Error importing:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Only one file is required for large texture." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Max Texture Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for Atlas (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cell Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Textures (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Base Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 2D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 3D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "2D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "3D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "" +"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " +"the project." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Crop empty space." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Load Source Image" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Slicing" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Inserting" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Saving" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save large texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Build Atlas For:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Loading Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't load image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Converting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cropping Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Blitting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save atlas image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save converted texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid translation source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Column" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No items to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No target path!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translations" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Couldn't import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translation" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Source CSV:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Ignore First Row" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Compress" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Add to Project (engine.cfg)" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Languages:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Translation" +msgstr "" + +#: tools/editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Node" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Invalid animation name!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Animation name already exists!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to copy!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation resource on clipboard!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to edit!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create new animation in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save As" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Target Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Rename" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations.." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters.." +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing %d Triangles:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Light Baker Setup:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing Geometry" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Fixing Lights" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Making BVH" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Light Octree" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Octree Texture" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Transfer to Lightmaps:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Allocating Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Baking Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Post-Processing Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Reset the lightmap octree baking process (start over)." +msgstr "" + +#: tools/editor/plugins/camera_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Pivot" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom (%):" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Expand to Parent" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Reset" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Set.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchor" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set a Value" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap (Pixels):" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Creating Mesh Library" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh.." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image.." +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Set Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Mesh" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Node" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Clear Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Positions:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Fill:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Surface" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: tools/editor/plugins/rich_text_editor_plugin.cpp +msgid "Parse BBCode" +msgstr "" + +#: tools/editor/plugins/sample_editor_plugin.cpp +msgid "Length:" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Open Sample File(s)" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "ERROR: Couldn't load sample!" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Add Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Rename Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Delete Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "16 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "8 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stereo" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Mono" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "File" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_editor.cpp +msgid "New" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Window" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Left" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Right" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Tutorials" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Open https://godotengine.org at tutorials section." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the class hierarchy." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Lighting" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling to %s%%." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Environment" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "No scene selected to instance!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Instance at Cursor" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Could not instance scene!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog.." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default Light" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default sRGB" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Shadeless" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Default Light Normal:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Ambient Light Color:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Up" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Down" +msgstr "" + +#: tools/editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp +msgid "Options" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Have,Many,Several,Options!" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Style" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase selection" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Find tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Error" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Edit Script Options" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Please export outside the project folder!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error exporting project!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error writing the project PCK!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "No exporter for platform '%s' yet." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Include" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Change Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name can't be empty!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Invalid character in group name!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name already exists!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Add Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Delete Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas Preview" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export Settings" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Target" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export to Platform" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export selected resources (including dependencies)." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all resources in the project." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all files in the project directory." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources to Export:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Action" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert text scenes to binary on export." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep Original" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy, WebP)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for RAM (BC/PVRTC/ETC)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert Images (*.png):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy) Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink All Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Formats:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Groups" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Groups:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Disk" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress RAM" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Lossy Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink By:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Preview Atlas" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Filter:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Select None" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Samples" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sample Conversion Mode: (.wav files):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress (RAM - IMA-ADPCM)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sampling Rate Limit (Hz):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trim" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trailing Silence:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Text" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compiled" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Encryption Key (256-bits as hex):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Project PCK" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export.." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Preset:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, the path must exist!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must not exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Couldn't create engine.cfg in project path." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path (Must Exist):" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "That's a BINGO!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Key " +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Axis" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Invalid action (anything goes but '/' or ':')." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Press a Key.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Left Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Right Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Middle Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Up Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Down Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 6" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 7" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 8" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 9" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Axis Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Toggle Persisting" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Error saving settings." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Settings saved OK." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Remapped Path" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Project Settings (engine.cfg)" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +msgid "Property:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Del" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Copy To Platform.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Input Map" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Device:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Localization" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resources:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Locale" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "AutoLoad" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Plugins" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Preset.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "File.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Dir.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Load" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Couldn't load image" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "On" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Set" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Properties:" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Global" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Sections:" +msgstr "" + +#: tools/editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: tools/editor/property_selector.cpp +msgid "Select Method" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Create New Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Open Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Save Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Resource Tools" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Make Local" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "OK :(" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Ok" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save New Scene As.." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Makes Sense!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Groups" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Connections" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Script" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "" +"This item cannot be made visible because the parent is hidden. Unhide the " +"parent first." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Editable Children" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Load As Placeholder" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Discard Instancing" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear!" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid parent class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid chars:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Parent class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid path!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Could not create script in filesystem." +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "File exists" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Built-In Script" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Create Node Script" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Warning" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Function:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Variable" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Inspector" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Scene Tree:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Object Properties: " +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: tools/editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" diff --git a/tools/translations/pl.po b/tools/translations/pl.po new file mode 100644 index 0000000000..23966ce78c --- /dev/null +++ b/tools/translations/pl.po @@ -0,0 +1,6654 @@ +# Polish translation of the Godot Engine editor +# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community +# This file is distributed under the same license as the Godot source code. +# +# Adrian Węcławski <weclawskiadrian@gmail.com>, 2016. +# Daniel Lewan <vision360.daniel@gmail.com>, 2016. +# Kamil Lewan <lewan.kamil@gmail.com>, 2016. +# Karol Walasek <coreconviction@gmail.com>, 2016. +# Mietek Szcześniak <ravaging@go2.pl>, 2016. +# Rafal Brozio <rafal.brozio@gmail.com>, 2016. +# siatek papieros <sbigneu@gmail.com>, 2016. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2016-08-16 18:01+0000\n" +"Last-Translator: Mietek Szcześniak <ravaging@go2.pl>\n" +"Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" +"godot/pl/>\n" +"Language: pl\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 2.8-dev\n" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "Niepoprawny typ argumentu funkcji convert(), użyj stałej TYPE_*." + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "Brak miejsca dla bajtów dekodujących, lub zły format." + +#: modules/gdscript/gd_functions.cpp +msgid "step argument is zero!" +msgstr "argument kroku jest zerowy!" + +#: modules/gdscript/gd_functions.cpp +msgid "Not a script with an instance" +msgstr "Nie jest to skrypt z instancją" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a script" +msgstr "Nie bazuje na skrypcie" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a resource file" +msgstr "Nie bazuje na pliku zasobów" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "Niepoprawna instancja formatu słownika (brak @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" +"Niepoprawna instancja formatu słownika (nie można wczytać skryptu w @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "Niepoprawna instancja formatu słownika (niepoprawny skrypt w @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "Niepoprawna instancja słownika (niepoprawne podklasy)" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"Zwrócona wartość musi być przypisana do pierwszego elementu węzła pamięci " +"roboczej! Proszę naprawić swój węzeł." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "Węzeł zwrócił niewłaściwą sekwencję wyjściową: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Przepełnienie stosu z głębokością stosu: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Funkcje:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Zmienne:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Sygnały:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "Nazwa nie jest prawidłowym identyfikatorem:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Nazwa jest już użyta przez inną funkcję/zmienną/sygnał:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Zmień nazwę funkcji" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Zmień nawę zmiennej" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Zmień nazwę sygnału" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Dodaj funkcję" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Dodaj zmienną" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Dodaj sygnał" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Usuń funkcję" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Usuń zmienną" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Edytuj zmienną:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Usuń sygnał" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Edytuj sygnał:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Dodaj węzeł" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Dodaj dziecko węzła" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Dodaj węzeł(y) z drzewa" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Edycja" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Typ bazowy:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Członkowie:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Dostępne węzły:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Wybierz lub utwórz funkcję, aby edytować wykres" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Zamknij" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Edytuj argumenty sygnału:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Edytuj zmienną:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Zmień" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Usuń zaznaczone" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Przełącz pułapkę" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Znajdź typ węzła" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "Skopiuj Pozę" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "Utwórz węzeł" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Wklej Pozę" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +#, fuzzy +msgid "Invalid index property name." +msgstr "Nieprawidłowa nazwa klasy bazowej" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "Obiekt bazowy nie jest węzłem!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "Ścieżka nie prowadzi do węzła!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "Nieprawidłowy indeks we właściwości '%s' węzła %s." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ":nieprawidłowy argument typu: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ":nieprawidłowe argumenty: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "Nie znaleziono VariableGet w skrypcie: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "Nie znaleziono VariableSet w skrypcie: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" +"Aby AnimatedSprite pokazywał poszczególne klatki, pole Frames musi zawierać " +"odpowiedni zasób SpriteFrames." + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" +"Tylko jeden CanvasModulate jest dozwolony na scenie (lub zestawie " +"zinstancjonowanych scen) Tylko pierwszy CanvasModulate zadziała, przy czym " +"pozostałe będą zignorowane." + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionPolygon2D służy jedynie do określenia kształtu kolizji dla jednego " +"z obiektów dziedziczących z CollisionObject2D. Używaj go tylko jako dziecko " +"obiektów typu Area2D, StaticBody2D, RigidBody2D, KinematicBody2D itd." + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "Pusty CollisionPolygon2D nie ma wpływu na kolizje." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionShape2D służy jedynie do określenia kształtu kolizji dla jednego z " +"obiektów dziedziczących z CollisionObject2D. Używaj go tylko jako dziecko " +"obiektów typu Area2D, StaticBody2D, RigidBody2D, KinematicBody2D itd." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" +"Zasób shape jest niezbędny do działania CollisionPolygon2D. Proszę utworzyć " +"zasób shape!" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "" +"Tekstura z kształtem promieni światła musi być dodana do pola Tekstura." + +#: scene/2d/light_occluder_2d.cpp +#, fuzzy +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" +"Poligon zasłaniający musi być ustawiony (lub narysowany) aby Occluder " +"zadziałał." + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "Poligon zasłaniający jest pusty. Proszę narysować poligon!" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" +"Zasób typu NavigationPolygon musi być ustawiony lub utworzony, aby ten węzeł " +"zadziałał." + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" +"NavigationPolygonInstance musi być dzieckiem lub wnukiem węzła Navigation2D. " +"Udostępnia on potrzebne dane nawigacyjne." + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" +"Węzeł typu ParallaxLayer zadziała, jeśli będzie dzieckiem węzła " +"ParallaxBackground." + +#: scene/2d/particles_2d.cpp +msgid "Path property must point to a valid Particles2D node to work." +msgstr "" +"Żeby zadziałało, pole Path musi wskazywać na istniejący węzeł Particles2D." + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "PathFollow2D zadziała tylko wtedy, gdy będzie dzieckiem węzeł Path2D." + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "Żeby zadziałało, pole Path musi wskazywać na istniejący węzeł Node2D." + +#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SamplePlayer to play sound." +msgstr "" +"Zasób typu SampleLibrary musi być dodany jako pole Samples, aby SamplePlayer " +"mógł odtwarzać dźwięk." + +#: scene/2d/sprite.cpp +#, fuzzy +msgid "" +"Path property must point to a valid Viewport node to work. Such Viewport " +"must be set to 'render target' mode." +msgstr "" +"Aby zadziałało, pole Path musi wskazywać na obiekt Viewport, który ma " +"zaznaczoną opcję trybu Render Target." + +#: scene/2d/sprite.cpp +msgid "" +"The Viewport set in the path property must be set as 'render target' in " +"order for this sprite to work." +msgstr "" +"Pole trybu Render Target musi być ustawione w Viewport wskazywanym przez " +"pole Path, aby ten Sprite mógł zadziałać." + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" +"VisibilityEnable2D działa najlepiej, gdy jest bezpośrednio pod korzeniem " +"aktualnie edytowanej sceny." + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + +#: scene/3d/body_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" +"CollisionShape służy jedynie do określenia kształtu kolizji dla jednego z " +"węzłów dziedziczących z CollisionObject. Używaj go tylko jako dziecko węzłów " +"typu Area, StaticBody, RigidBody, KinematicBody itd." + +#: scene/3d/body_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" +"Kształt musi być określony dla CollisionShape, aby spełniał swoje zadanie. " +"Utwórz zasób typu CollisionShape w odpowiednim polu obiektu!" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" +"CollisionPolygon służy jedynie do określenia kształtu kolizji dla jednego z " +"obiektów dziedziczących z CollisionObject. Używaj go tylko jako dziecko " +"obiektów typu Area, StaticBody, RigidBody, KinematicBody itd." + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "Pusty CollisionPolygon nie wpływa na efekty kolizji." + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" +"Zasób typu NavigationMesh musi być ustawiony w odpowiednim polu, aby ten " +"węzeł zadziałał." + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" +"NavigationMeshInstance musi być dzieckiem lub wnukiem węzła typu Navigation. " +"Udostępnia on tylko dane nawigacyjne." + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" +"Tylko jeden WorldEnvironment jest dozwolony na scenę (lub zestaw " +"zinstancjonowanych scen)." + +#: scene/3d/spatial_sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SpatialSamplePlayer to play sound." +msgstr "" +"Zasób SampleLibrary musi być ustawiony jako wartość właściwości 'samples' " +"żeby SpatialSamplePlayer odtwarzał dźwięk." + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" +"Zasób SpriteFrames musi być ustawiony jako wartość właściwości 'Frames' żeby " +"AnimatedSprite3D wyświetlał klatki." + +#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Cancel" +msgstr "Anuluj" + +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp +msgid "OK" +msgstr "OK" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "Alarm!" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "Proszę potwierdzić..." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "Plik istnieje, nadpisać?" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Recognized" +msgstr "Wszystkie rozpoznane" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Files (*)" +msgstr "Wszystkie pliki (*)" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Open" +msgstr "Otwórz" + +#: scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "Otwórz plik" + +#: scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "Otwórz plik(i)" + +#: scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "Otwórz katalog" + +#: scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "Otwórz plik lub katalog" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save" +msgstr "Zapisz" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Save a File" +msgstr "Zapisz plik" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Create Folder" +msgstr "Utwórz katalog" + +#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/editor_file_dialog.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Path:" +msgstr "Ścieżka:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Directories & Files:" +msgstr "Katalogi i pliki:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "File:" +msgstr "Plik:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Filter:" +msgstr "Filtr:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Name:" +msgstr "Nazwa:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Could not create folder." +msgstr "Nie można utworzyć katalogu." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Must use a valid extension." +msgstr "Rozszerzenie musi być poprawne." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "Shift+" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "Alt+" + +#: scene/gui/input_action.cpp +msgid "Ctrl+" +msgstr "Ctrl+" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Meta+" +msgstr "Meta+" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Device" +msgstr "Urządzenie" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Button" +msgstr "Przycisk" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Left Button." +msgstr "Lewy przycisk." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Right Button." +msgstr "Prawy przycisk." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Middle Button." +msgstr "Środkowy przycisk." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Up." +msgstr "Kółko myszy w górę." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Down." +msgstr "Kółko myszy w dół." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Axis" +msgstr "Oś" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Cut" +msgstr "Wytnij" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Copy" +msgstr "Kopiuj" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Paste" +msgstr "Wklej" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "Select All" +msgstr "Zaznacz wszystko" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/rich_text_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Clear" +msgstr "Wyczyść" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Undo" +msgstr "Cofnij" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" +"Popup będzie domyślnie ukryty dopóki nie wywołasz popup() lub dowolnej " +"funkcji popup*(). Ustawienie go jako widoczny jest przydatne do edycji, ale " +"zostanie ukryty po uruchomieniu." + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" +"Ten Viewport nie jest ustawiony jako Render Target. Jeśli chcesz wyświetlić " +"jego zawartość na ekranie dodaj go jako dziecko węzła typu Control, aby " +"otrzymał jakiś rozmiar. W przeciwnym wypadku ustawi opcję RenderTarget i " +"przyporządkuj jego teksturę dla któregoś węzła." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error initializing FreeType." +msgstr "Błąd przy inicjalizacji FreeType." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Unknown font format." +msgstr "Nieznany format fontu." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error loading font." +msgstr "Błąd ładowania fonta." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font size." +msgstr "Niepoprawny rozmiar fonta." + +#: tools/editor/animation_editor.cpp +msgid "Disabled" +msgstr "Wyłączone" + +#: tools/editor/animation_editor.cpp +msgid "All Selection" +msgstr "Wszystkie zaznaczenia" + +#: tools/editor/animation_editor.cpp +msgid "Move Add Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Anim Change Transition" +msgstr "Animacja przejścia" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "Animacja transformacji" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Value" +msgstr "Animacja wartości" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Call" +msgstr "Animacja - wywołanie funkcji" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "Dodaj ścieżkę animacji" + +#: tools/editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "Duplikuj klucze" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "Usuń animację" + +#: tools/editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "Ustaw przejścia na:" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "Zmień nazwę animacji" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "Zmień funkcję interpolacji animacji" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "Zmień tryb wartości animacji" + +#: tools/editor/animation_editor.cpp +#, fuzzy +msgid "Edit Node Curve" +msgstr "Edytuj krzywe" + +#: tools/editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "Usuń klucze animacji" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "Duplikuj zaznaczone" + +#: tools/editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "Duplikuj transponowane" + +#: tools/editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "Usuń zaznaczone" + +#: tools/editor/animation_editor.cpp +msgid "Continuous" +msgstr "Ciągłe" + +#: tools/editor/animation_editor.cpp +msgid "Discrete" +msgstr "Dyskretne" + +#: tools/editor/animation_editor.cpp +msgid "Trigger" +msgstr "Wyzwalacz" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "Dodaj klucz animacji" + +#: tools/editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "Skaluj zaznaczone" + +#: tools/editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "Przejdź do następnego kroku" + +#: tools/editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "Przejdź do poprzedniego kroku" + +#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp +msgid "Linear" +msgstr "Liniowe" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "Stałe" + +#: tools/editor/animation_editor.cpp +msgid "In" +msgstr "We." + +#: tools/editor/animation_editor.cpp +msgid "Out" +msgstr "Wy." + +#: tools/editor/animation_editor.cpp +msgid "In-Out" +msgstr "We-Wy" + +#: tools/editor/animation_editor.cpp +msgid "Out-In" +msgstr "Wy-We" + +#: tools/editor/animation_editor.cpp +msgid "Transitions" +msgstr "Przejścia" + +#: tools/editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "Optymalizuj animację" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "Wyczyść animację" + +#: tools/editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "Stworzyć NOWĄ ścieżkę dla %s i wstawić klatkę kluczową?" + +#: tools/editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "Utworzyć NOWĄ ścieżkę i dodać klatkę kluczową?" + +#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/particles_editor_plugin.cpp +#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp +msgid "Create" +msgstr "Utwórz" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "Zmień długość animacji" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "Zmień pętlę animacji" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert" +msgstr "Wstaw animację" + +#: tools/editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "Dodaj ścieżkę wywołania funkcji" + +#: tools/editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "Powiększenie animacji." + +#: tools/editor/animation_editor.cpp +msgid "Length (s):" +msgstr "Długość:" + +#: tools/editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "Długość animacji (w sekundach)." + +#: tools/editor/animation_editor.cpp +msgid "Step (s):" +msgstr "Krok:" + +#: tools/editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "Krok kursora (sekundy)." + +#: tools/editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "Włącz/Wyłącz zapętlenie animacji." + +#: tools/editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "Dodaj nowe ścieżki." + +#: tools/editor/animation_editor.cpp +msgid "Move current track up." +msgstr "Przesuń wybraną ścieżkę do góry." + +#: tools/editor/animation_editor.cpp +msgid "Move current track down." +msgstr "Przesuń wybraną ścieżkę w dół." + +#: tools/editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "Usuń wybraną ścieżkę." + +#: tools/editor/animation_editor.cpp +msgid "Track tools" +msgstr "Narzędzia ścieżki" + +#: tools/editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "Włączenie edycji pojedynczych kluczy poprzez kliknięcie na nie." + +#: tools/editor/animation_editor.cpp +msgid "Anim. Optimizer" +msgstr "Optymalizator animacji" + +#: tools/editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "Maks. błąd liniowy:" + +#: tools/editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "Maks. błąd kątowy:" + +#: tools/editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Optimize" +msgstr "Zoptymalizuj" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Key" +msgstr "Klucz" + +#: tools/editor/animation_editor.cpp +msgid "Transition" +msgstr "Przejście" + +#: tools/editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "Z którego węzła wywołać funkcję?" + +#: tools/editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "Usuń wadliwe klucze" + +#: tools/editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "Wyczyść wszystkie animacje" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "Oczyść animacje (NIE MOŻNA COFNĄĆ!)" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up" +msgstr "Oczyść" + +#: tools/editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "Zmień rozmiar Tablicy" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "Zmień Typ Tablicy" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "Zmień Wartość Tablicy" + +#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Szukaj:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Sortuj:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Odwróć" + +#: tools/editor/asset_library_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Category:" +msgstr "Kategoria:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Wszystko" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Źródło:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Wsparcie.." + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Oficjalny" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Społeczność" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Testowanie" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Method List For '%s':" +msgstr "Lista metod '%s':" + +#: tools/editor/call_dialog.cpp +msgid "Call" +msgstr "Wywołanie" + +#: tools/editor/call_dialog.cpp +msgid "Method List:" +msgstr "Lista metod:" + +#: tools/editor/call_dialog.cpp +msgid "Arguments:" +msgstr "Argumenty:" + +#: tools/editor/call_dialog.cpp +msgid "Return:" +msgstr "Zwraca:" + +#: tools/editor/code_editor.cpp +msgid "Go to Line" +msgstr "Idź do lini" + +#: tools/editor/code_editor.cpp +msgid "Line Number:" +msgstr "Numer linii:" + +#: tools/editor/code_editor.cpp +msgid "No Matches" +msgstr "Nie znaleziono" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d Ocurrence(s)." +msgstr "Zastąpiono %d wystąpień." + +#: tools/editor/code_editor.cpp +msgid "Replace" +msgstr "Zastąp" + +#: tools/editor/code_editor.cpp +msgid "Replace All" +msgstr "Zastąp wszystkie" + +#: tools/editor/code_editor.cpp +msgid "Match Case" +msgstr "Uwzględnij wielkość liter" + +#: tools/editor/code_editor.cpp +msgid "Whole Words" +msgstr "Całe słowa" + +#: tools/editor/code_editor.cpp +msgid "Selection Only" +msgstr "Tylko zaznaczenie" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Search" +msgstr "Szukaj" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +msgid "Find" +msgstr "Szukaj" + +#: tools/editor/code_editor.cpp +msgid "Next" +msgstr "Następny" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d ocurrence(s)." +msgstr "Zastąpiono %d wystąpień." + +#: tools/editor/code_editor.cpp +msgid "Not found!" +msgstr "Nie znaleziono!" + +#: tools/editor/code_editor.cpp +msgid "Replace By" +msgstr "Zastąp przez" + +#: tools/editor/code_editor.cpp +msgid "Case Sensitive" +msgstr "Z uwzględnieniem wielkości liter" + +#: tools/editor/code_editor.cpp +msgid "Backwards" +msgstr "Wstecz" + +#: tools/editor/code_editor.cpp +msgid "Prompt On Replace" +msgstr "Zaptytaj przy zastąpieniu" + +#: tools/editor/code_editor.cpp +msgid "Skip" +msgstr "Pomiń" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Przybliż" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Oddal" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Wyzeruj przybliżenie" + +#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "Linia:" + +#: tools/editor/code_editor.cpp +msgid "Col:" +msgstr "Kolumna:" + +#: tools/editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "Wybierz metodę w wybranym węźle!" + +#: tools/editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "Podłączanie Do Węzła:" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Add" +msgstr "Dodaj" + +#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Remove" +msgstr "Usuń" + +#: tools/editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "Dodaj dodatkowy argument wywołania funkcji:" + +#: tools/editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "Dodatkowe argumenty wywołania:" + +#: tools/editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "Ścieżka do węzła:" + +#: tools/editor/connections_dialog.cpp +msgid "Make Function" +msgstr "Utwórz funkcję" + +#: tools/editor/connections_dialog.cpp +#, fuzzy +msgid "Deferred" +msgstr "Odroczone" + +#: tools/editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "Wywołaj raz" + +#: tools/editor/connections_dialog.cpp +msgid "Connect" +msgstr "Połącz" + +#: tools/editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "Połącz '%s' z '%s'" + +#: tools/editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "Połączony sygnał:" + +#: tools/editor/connections_dialog.cpp +msgid "Create Subscription" +msgstr "Utwórz subskrypcje" + +#: tools/editor/connections_dialog.cpp +msgid "Connect.." +msgstr "Połącz.." + +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "Rozłącz" + +#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp +msgid "Signals" +msgstr "Sygnały" + +#: tools/editor/create_dialog.cpp +msgid "Create New" +msgstr "Utwórz nowy" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Matches:" +msgstr "Pasujące:" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Opis:" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "Znajdź i zamień:" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "Zależności:" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies" +msgstr "Zależności" + +#: tools/editor/dependency_editor.cpp +msgid "Resource" +msgstr "Zasoby" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp +msgid "Path" +msgstr "Ścieżka" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "Zależności:" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "Napraw uszkodzone" + +#: tools/editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "Edytor zależnośći" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "Szukaj zastępczego zasobu:" + +#: tools/editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "Właściciele:" + +#: tools/editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" +"Usuwany plik jest wymagany przez inne zasoby do działania.\n" +"Usunąć mimo to? (Nie można tego cofnąć)" + +#: tools/editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Usunąć wybrane pliki z projektu? (Nie można tego cofnąć)" + +#: tools/editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "Błąd ładowania:" + +#: tools/editor/dependency_editor.cpp +msgid "Scene failed to load due to missing dependencies:" +msgstr "Scena nie została wczytana z powodu brakujących zależności:" + +#: tools/editor/dependency_editor.cpp +msgid "Open Anyway" +msgstr "Otwórz Pomimo" + +#: tools/editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "Jaka działanie powinno zostać podjęte?" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "Napraw zależności" + +#: tools/editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "Błędy ładowania!" + +#: tools/editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "Permanentnie usuń %d obiekt(ów) (Nie można tego cofnąć)" + +#: tools/editor/dependency_editor.cpp +msgid "Owns" +msgstr "Posiada" + +#: tools/editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "Zasoby bez jawnych właścicieli:" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "Eksplorator osieroconych zasobów" + +#: tools/editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "Usunąć zaznaczone pliki?" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "Usuń" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "Niewłaściwa nazwa." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "Dopuszczalne znaki:" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "" +"Niepoprawna nazwa. Nie może być taka sama jak istniejąca klasa silnika." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "Niepoprawna nazwa. Nie może być taka sama jak wbudowany typ." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "Niepoprawna nazwa. Nie może być taka sama jak nazwa globalnej stałej." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "Niewłaściwa ścieżka." + +#: tools/editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "Plik nie istnieje." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "Dodaj AutoLoad" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "Autoload '%s' już istnieje!" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "Zmień nazwę Autoload" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "Usuń Autoload" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "Włącz" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "Nazwa węzła:" + +#: tools/editor/editor_autoload_settings.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Name" +msgstr "Nazwa" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "Singleton" + +#: tools/editor/editor_autoload_settings.cpp +msgid "List:" +msgstr "Lista:" + +#: tools/editor/editor_data.cpp +msgid "Updating Scene" +msgstr "Aktualizowanie Sceny" + +#: tools/editor/editor_data.cpp +msgid "Storing local changes.." +msgstr "Zachowywanie lokalnych zmian.." + +#: tools/editor/editor_data.cpp +msgid "Updating scene.." +msgstr "Aktualizacja sceny .." + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "Wybierz Katalog" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "Wybierz" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "Wróć" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "Dalej" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "W górę" + +#: tools/editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "Odśwież" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "Przełącz ukryte pliki" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "Ustaw jako ulubione" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "Przełącz tryby" + +#: tools/editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "Przesuń Ulubiony w górę" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "Przesuń Ulubiony w dół" + +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "Ulubione:" + +#: tools/editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "Ostatnie:" + +#: tools/editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "Podgląd:" + +#: tools/editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "Przeszukaj źródła" + +#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Wyszukaj w Pomocy" + +#: tools/editor/editor_help.cpp +msgid "Class List:" +msgstr "List Klas:" + +#: tools/editor/editor_help.cpp +msgid "Search Classes" +msgstr "Przeszukaj klasy" + +#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp +msgid "Class:" +msgstr "Klasa:" + +#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "Dziedziczy:" + +#: tools/editor/editor_help.cpp +msgid "Inherited by:" +msgstr "Dziedziczone przez:" + +#: tools/editor/editor_help.cpp +msgid "Brief Description:" +msgstr "Krótki opis:" + +#: tools/editor/editor_help.cpp +msgid "Public Methods:" +msgstr "Metody Publiczne:" + +#: tools/editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "Elementy motywu GUI:" + +#: tools/editor/editor_help.cpp +msgid "Constants:" +msgstr "Stałe:" + +#: tools/editor/editor_help.cpp +msgid "Method Description:" +msgstr "Opis Metody:" + +#: tools/editor/editor_help.cpp +msgid "Search Text" +msgstr "Wyszukaj w tekście" + +#: tools/editor/editor_import_export.cpp +msgid "Added:" +msgstr "Dodane:" + +#: tools/editor/editor_import_export.cpp +msgid "Removed:" +msgstr "Usunięte:" + +#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp +msgid "Error saving atlas:" +msgstr "Błąd podczas zapisywania atlasu:" + +#: tools/editor/editor_import_export.cpp +msgid "Could not save atlas subtexture:" +msgstr "Nie udało się zapisać tekstury atlasu:" + +#: tools/editor/editor_import_export.cpp +msgid "Storing File:" +msgstr "Zapisywanie Pliku:" + +#: tools/editor/editor_import_export.cpp +msgid "Packing" +msgstr "Pakowanie" + +#: tools/editor/editor_import_export.cpp +msgid "Exporting for %s" +msgstr "Exportowanie do %s" + +#: tools/editor/editor_import_export.cpp +msgid "Setting Up.." +msgstr "Konfigurowanie .." + +#: tools/editor/editor_log.cpp +msgid " Output:" +msgstr " Konsola:" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Importing" +msgstr "Prze-Importowanie" + +#: tools/editor/editor_node.cpp +msgid "Importing:" +msgstr "Importowanie:" + +#: tools/editor/editor_node.cpp +msgid "Node From Scene" +msgstr "Węzeł ze Sceny" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Error saving resource!" +msgstr "Błąd podczas zapisu zasobu!" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Save Resource As.." +msgstr "Zapisz zasób jako..." + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "I see.." +msgstr "Widzę.." + +#: tools/editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "Nie można otworzyć pliku do zapisu:" + +#: tools/editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "Nieznany format pliku:" + +#: tools/editor/editor_node.cpp +msgid "Error while saving." +msgstr "Błąd podczas zapisywania." + +#: tools/editor/editor_node.cpp +msgid "Saving Scene" +msgstr "Zapisywanie Sceny" + +#: tools/editor/editor_node.cpp +msgid "Analyzing" +msgstr "Analizowanie" + +#: tools/editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "Tworzenie Miniatury" + +#: tools/editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." +msgstr "" +"Nie udało się zapisać sceny. Najprawdopodobniej pewne zależności nie są " +"spełnione." + +#: tools/editor/editor_node.cpp +msgid "Failed to load resource." +msgstr "Nie udało się wczytać zasobu." + +#: tools/editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "Nie udało się wczytać MeshLibrary do połączenia!" + +#: tools/editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "Błąd podczas zapisywania MeshLibrary!" + +#: tools/editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "Nie udało się wczytać TileSet do połączenia!" + +#: tools/editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "Błąd podczas zapisywania TileSet!" + +#: tools/editor/editor_node.cpp +msgid "Can't open export templates zip." +msgstr "Nie można otworzyć pliku zip szablonów eksportu." + +#: tools/editor/editor_node.cpp +msgid "Loading Export Templates" +msgstr "Ładowanie szablonów eksportu" + +#: tools/editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "Błąd podczas zapisu layoutu!" + +#: tools/editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "Domyślny layout edytora został nadpisany." + +#: tools/editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "Nie znaleziono nazwy layoutu!" + +#: tools/editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "Przywrócono domyślny layout do ustawień bazowych." + +#: tools/editor/editor_node.cpp +msgid "Copy Params" +msgstr "Kopiuj parametry" + +#: tools/editor/editor_node.cpp +msgid "Paste Params" +msgstr "Wklej parametry" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "Wklej zasób" + +#: tools/editor/editor_node.cpp +msgid "Copy Resource" +msgstr "Kopiuj zasób" + +#: tools/editor/editor_node.cpp +#, fuzzy +msgid "Make Built-In" +msgstr "Skrypt wbudowany" + +#: tools/editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open in Help" +msgstr "Otwórz w Pomocy" + +#: tools/editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "Nie ma zdefiniowanej sceny do uruchomienia." + +#: tools/editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in later in \"Project Settings\" under the " +"'application' category." +msgstr "" +"Nie zdefiniowano głównej sceny, chcesz jakąś wybrać?\n" +"Można to później zmienić w \"Ustawienia projektu\" w kategorii \"aplikacja\"." + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" +"Wybrana scena '%s' nie istnieje, wybrać poprawną? \n" +"Można to później zmienić w \"Ustawienia projektu\" w kategorii \"aplikacja\"." + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" +"Wybrany plik '%s' nie jest sceną, wybrać poprawny?\n" +"Można to później zmienić w \"Ustawienia projektu\" w kategorii \"aplikacja\"." + +#: tools/editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" +"Aktualna scena nie została zapisana, proszę zapisać scenę przed " +"uruchomieniem." + +#: tools/editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "Nie można było uruchomić podprocesu!" + +#: tools/editor/editor_node.cpp +msgid "Open Scene" +msgstr "Otwórz scenę" + +#: tools/editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "Otwórz scenę bazową" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Scene.." +msgstr "Szybkie otwieranie sceny.." + +#: tools/editor/editor_node.cpp +msgid "Quick Open Script.." +msgstr "Szybkie otwieranie skryptu.." + +#: tools/editor/editor_node.cpp +msgid "Yes" +msgstr "Tak" + +#: tools/editor/editor_node.cpp +msgid "Close scene? (Unsaved changes will be lost)" +msgstr "Zamknąć scenę? (Niezapisane zmiany zostaną utracone)" + +#: tools/editor/editor_node.cpp +msgid "Save Scene As.." +msgstr "Zapisz scenę jako.." + +#: tools/editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "Ta scena nie została zapisana. Zapisać przed uruchomieniem?" + +#: tools/editor/editor_node.cpp +msgid "Please save the scene first." +msgstr "Proszę najpierw zapisać scenę." + +#: tools/editor/editor_node.cpp +msgid "Save Translatable Strings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "Eksportuj bibliotekę Meshów" + +#: tools/editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "Eksportuj TileSet" + +#: tools/editor/editor_node.cpp +msgid "Quit" +msgstr "Wyjdź" + +#: tools/editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "Zamknąć edytor?" + +#: tools/editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "Aktualna scena nie została zapisana. Otworzyć mimo to?" + +#: tools/editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "Nie można przeładować sceny która nie została zapisana." + +#: tools/editor/editor_node.cpp +msgid "Revert" +msgstr "Przywróć" + +#: tools/editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "Tego nie można cofnąć. Przywrócić mimo to?" + +#: tools/editor/editor_node.cpp +msgid "Quick Run Scene.." +msgstr "Szybkie uruchomienie sceny.." + +#: tools/editor/editor_node.cpp +msgid "" +"Open Project Manager? \n" +"(Unsaved changes will be lost)" +msgstr "" +"Otworzyć Menedżer Projektów?\n" +"(Niezapisane zmiany zostaną utracone)" + +#: tools/editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "Wybierz główną scenę" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "Ugh" +msgstr "Błąd" + +#: tools/editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" +"Błąd podczas ładowania sceny. Musi ona znajdować się wewnątrz folderu " +"projektu. Użyj narzędzia \"Importuj\" aby zapisać scenę wewnątrz tego " +"projektu." + +#: tools/editor/editor_node.cpp +msgid "Error loading scene." +msgstr "Błąd ładowania sceny." + +#: tools/editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "Scena '%s' ma niespełnione zależności:" + +#: tools/editor/editor_node.cpp +msgid "Save Layout" +msgstr "Zapisz layout" + +#: tools/editor/editor_node.cpp +msgid "Delete Layout" +msgstr "Usuń layout" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Default" +msgstr "Domyślny" + +#: tools/editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "Przełącz Zakładkę Sceny" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s)" +msgstr "Pozostało %d plików" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s) or folder(s)" +msgstr "Pozostało %d plików lub folderów" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Scene" +msgstr "Scena" + +#: tools/editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "Idź do poprzednio otwartej sceny." + +#: tools/editor/editor_node.cpp +msgid "Fullscreen Mode" +msgstr "Pełny ekran" + +#: tools/editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "Tryb bez rozproszeń" + +#: tools/editor/editor_node.cpp +msgid "Next tab" +msgstr "Następna zakładka" + +#: tools/editor/editor_node.cpp +msgid "Previous tab" +msgstr "Poprzednia zakładka" + +#: tools/editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "Operacja na plikach sceny." + +#: tools/editor/editor_node.cpp +msgid "New Scene" +msgstr "Nowa scena" + +#: tools/editor/editor_node.cpp +msgid "New Inherited Scene.." +msgstr "Nowa odziedziczona scena.." + +#: tools/editor/editor_node.cpp +msgid "Open Scene.." +msgstr "Otwórz scenę.." + +#: tools/editor/editor_node.cpp +msgid "Save Scene" +msgstr "Zapisz scenę" + +#: tools/editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "Zapisz wszystkie sceny" + +#: tools/editor/editor_node.cpp +msgid "Close Scene" +msgstr "Zamknij scenę" + +#: tools/editor/editor_node.cpp +msgid "Close Goto Prev. Scene" +msgstr "Zamknij i przejdź do poprzedniej sceny" + +#: tools/editor/editor_node.cpp +msgid "Open Recent" +msgstr "Ostatnio otwierane" + +#: tools/editor/editor_node.cpp +msgid "Quick Filter Files.." +msgstr "Szybkie filtry plików.." + +#: tools/editor/editor_node.cpp +msgid "Convert To.." +msgstr "Konwertuje na.." + +#: tools/editor/editor_node.cpp +msgid "Translatable Strings.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "MeshLibrary.." +msgstr "MeshLibrary..." + +#: tools/editor/editor_node.cpp +msgid "TileSet.." +msgstr "TileSet..." + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Redo" +msgstr "Ponów" + +#: tools/editor/editor_node.cpp +msgid "Run Script" +msgstr "Uruchom skrypt" + +#: tools/editor/editor_node.cpp +msgid "Project Settings" +msgstr "Ustawienia projektu" + +#: tools/editor/editor_node.cpp +msgid "Revert Scene" +msgstr "Resetuj scenę" + +#: tools/editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "Wyjdź do Listy Projektów" + +#: tools/editor/editor_node.cpp +msgid "Import assets to the project." +msgstr "Importuj zasoby do projektu." + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Import" +msgstr "Importuj" + +#: tools/editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Tools" +msgstr "Narzędzia" + +#: tools/editor/editor_node.cpp +msgid "Export the project to many platforms." +msgstr "Eksportuj projekt na inne platformy." + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export" +msgstr "Eksport" + +#: tools/editor/editor_node.cpp +msgid "Play the project." +msgstr "Uruchom projekt." + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Play" +msgstr "Uruchom" + +#: tools/editor/editor_node.cpp +msgid "Pause the scene" +msgstr "Zapauzuj scenę" + +#: tools/editor/editor_node.cpp +msgid "Pause Scene" +msgstr "Zapauzuj scenę" + +#: tools/editor/editor_node.cpp +msgid "Stop the scene." +msgstr "Zatrzymaj scene." + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stop" +msgstr "Stop" + +#: tools/editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "Uruchom aktualnie edytowaną scenę." + +#: tools/editor/editor_node.cpp +msgid "Play Scene" +msgstr "Odtwórz Scene" + +#: tools/editor/editor_node.cpp +msgid "Play custom scene" +msgstr "Uruchom niestandardową scenę" + +#: tools/editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "Uruchom niestandardową scenę" + +#: tools/editor/editor_node.cpp +msgid "Debug options" +msgstr "Opcje debugowania" + +#: tools/editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "Uruchom z użyciem zdalnego debugowania" + +#: tools/editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" +"Podczas eksportu lub uruchomienia aplikacja wynikowa spróbuje połączyć się z " +"adresem IP tego komputera w celu debugowania." + +#: tools/editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" +"Gdy ta opcja jest zaznaczona, eksportowanie utworzy jak najmniejszy plik " +"wykonywalny.\n" +"System plików będzie udostępniony przez ten edytor poprzez sieć.\n" +"Na Androidzie eksport użyje kabla USB dla lepszej wydajności. Opcja ta " +"znacznie przyspiesza testowanie dużych gier." + +#: tools/editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "Widoczne kształty kolizji" + +#: tools/editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" +"Kształty kolizji i promienie raycast (2D i 3D) będą widoczne, jeśli ta opcja " +"będzie zaznaczona." + +#: tools/editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "Widoczna nawigacja" + +#: tools/editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" +"Kształty i poligony nawigacyjne będą widoczne, jeśli ta opcja będzie " +"zaznaczona." + +#: tools/editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "Synchronizuj zmiany w scenie" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" +"Wszelkie zmiany sceny w edytorze będą odtworzone w uruchomionej grze na " +"urządzeniu zdalnym. Opcja ta działa szybciej na sieciowych systemach plików." + +#: tools/editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "Synchronizuj zmiany skryptów" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" +"Wszelkie zmiany skryptów będą synchronizowane z urządzeniem zdalnym " +"(działające instancje będą zrestartowane). Opcja ta działa szybciej z " +"użyciem sieciowych systemów plików." + +#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Settings" +msgstr "Ustawienia" + +#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "Ustawienia edytora" + +#: tools/editor/editor_node.cpp +msgid "Editor Layout" +msgstr "Layout edytora" + +#: tools/editor/editor_node.cpp +msgid "Install Export Templates" +msgstr "Zainstaluj Szablony Eksportu" + +#: tools/editor/editor_node.cpp +msgid "About" +msgstr "O programie" + +#: tools/editor/editor_node.cpp +msgid "Alerts when an external resource has changed." +msgstr "Powiadomienie o zmianie stanu zasobu zewnętrznego." + +#: tools/editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "Ikona obraca się, gdy okno edytora jest odrysowywane!" + +#: tools/editor/editor_node.cpp +msgid "Update Always" +msgstr "Zawsze Odświeżaj" + +#: tools/editor/editor_node.cpp +msgid "Update Changes" +msgstr "Odśwież Zmiany" + +#: tools/editor/editor_node.cpp +msgid "Inspector" +msgstr "Inspektor" + +#: tools/editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "Utwórz nowy zasób wewnątrz pamięci i edytuj go." + +#: tools/editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "Wczytaj istniejący zasób i edytuj go." + +#: tools/editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "Zapisz aktualnie edytowany zasób." + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Save As.." +msgstr "Zapisz jako..." + +#: tools/editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "Idź do poprzedniego edytowanego obiektu w historii." + +#: tools/editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "Idź do następnego edytowanego obiektu w historii." + +#: tools/editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "Historia ostatnio edytowanych obiektów." + +#: tools/editor/editor_node.cpp +msgid "Object properties." +msgstr "Właściwości obiektu." + +#: tools/editor/editor_node.cpp +msgid "FileSystem" +msgstr "System plików" + +#: tools/editor/editor_node.cpp +msgid "Output" +msgstr "Konsola" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import" +msgstr "Prze-Importuj" + +#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Odśwież" + +#: tools/editor/editor_node.cpp +msgid "Thanks from the Godot community!" +msgstr "Podziękowania od społeczności Godot'a!" + +#: tools/editor/editor_node.cpp +msgid "Thanks!" +msgstr "Dzięki!" + +#: tools/editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "Zaimportuj Szablony z pliku ZIP" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export Project" +msgstr "Wyeksportuj projekt" + +#: tools/editor/editor_node.cpp +msgid "Export Library" +msgstr "Wyeksportuj biblioteke" + +#: tools/editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "Połącz z Istniejącym" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Password:" +msgstr "Hasło:" + +#: tools/editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "Otwórz i Uruchom Skrypt" + +#: tools/editor/editor_node.cpp +msgid "Load Errors" +msgstr "Wczytaj błędy" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "Zainstalowane wtyczki:" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Version:" +msgstr "Wersja:" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "Autor:" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "Status:" + +#: tools/editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "Zatrzymaj profilowanie" + +#: tools/editor/editor_profiler.cpp +msgid "Start Profiling" +msgstr "Rozpocznij profilowanie" + +#: tools/editor/editor_profiler.cpp +msgid "Measure:" +msgstr "Zmierzono:" + +#: tools/editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "Czas ramki (sek)" + +#: tools/editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "Średni Czas (sek)" + +#: tools/editor/editor_profiler.cpp +msgid "Frame %" +msgstr "% Ramek" + +#: tools/editor/editor_profiler.cpp +msgid "Fixed Frame %" +msgstr "% Ramek Fixed" + +#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp +msgid "Time:" +msgstr "Czas:" + +#: tools/editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "Włącznie" + +#: tools/editor/editor_profiler.cpp +#, fuzzy +msgid "Self" +msgstr "Ten obiekt" + +#: tools/editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "Klatka #:" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Please wait for scan to complete." +msgstr "Proszę poczekać na zakończenie skanowania." + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Current scene must be saved to re-import." +msgstr "Bieżąca scena musi być zapisana aby ponownie zaimportować." + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Save & Re-Import" +msgstr "Zapisz i Prze-Importuj" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import Changed Resources" +msgstr "Zaimportuj ponownie zmienione zasoby" + +#: tools/editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "Wpisz swoją logikę w metodzie _run()." + +#: tools/editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "Edytowana scena już istnieje." + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "Nie udało się utworzyć instancji skryptu:" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "Zapomniałeś nazwy 'narzędzia' ?" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "Nie można uruchomić skryptu:" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "Zapomniałeś metody '_run'?" + +#: tools/editor/editor_settings.cpp +msgid "Default (Same as Editor)" +msgstr "Damyślny(Same as Editor)" + +#: tools/editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "Wybierz węzły do importu" + +#: tools/editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "Ścieżka sceny:" + +#: tools/editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "Zaimportuj z węzła:" + +#: tools/editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" +"Nie udało się otworzyć pliku file_type_cache.cch do zapisu, pamięć podręczna " +"typu plików nie będzie zapisana!" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" +"Ścieżki źródłowa i docelowa są takie same, żadna akcja nie została wykonana." + +#: tools/editor/filesystem_dock.cpp +#, fuzzy +msgid "Can't move directories to within themselves." +msgstr "Nie możesz przenieść danego katalogu do jego wnętrza." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "Wybierz nową nazwę i lokację dla:" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "Nie wybrano pliku!" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "Instancja" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "Edytuj Zależności..." + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "Pokaż właścicieli.." + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "Skopiuj Ścieżkę" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "Zmień nazwę lub Przenieś..." + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "Przenieś Do..." + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "Informacje" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "Pokaż w menadżerze plików" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "Importuj ponownie.." + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "Poprzedni katalog" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "Następny folder" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "Przeskanuj system plików ponownie" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "Ustaw folder jako ulubiony" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "Utwórz instancje wybranej sceny/scen jako dziecko wybranego węzła." + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "Przenieś" + +#: tools/editor/groups_editor.cpp +msgid "Add to Group" +msgstr "Dodaj do Grupy" + +#: tools/editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "Usuń z Grupy" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "No bit masks to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path is empty." +msgstr "Docelowa ścieżka jest pusta." + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must be a complete resource path." +msgstr "Ścieżka docelowa musi być bezwzględna." + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must exist." +msgstr "Docelowa ścieżka musi istnieć." + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Save path is empty!" +msgstr "Ścieżka zapisu jest pusta!" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Import BitMasks" +msgstr "Importuj BitMasks" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s):" +msgstr "Źródło tekstury:" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Target Path:" +msgstr "Ścieżka docelowa:" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Accept" +msgstr "Akceptuj" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Bit Mask" +msgstr "BitMask" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No source font file!" +msgstr "Brak pliku źródłowego czcionki!" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No target font resource!" +msgstr "Brak docelowego zasobu czcionki!" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"Invalid file extension.\n" +"Please use .fnt." +msgstr "" +"Błędne rozszerzenie pliku.\n" +"Proszę użyć .fnt." + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Can't load/process source font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Couldn't save font." +msgstr "Nie udało się zapisać czcionki." + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font:" +msgstr "Źródło czcionki:" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font Size:" +msgstr "Wielkość oryginalna czcionki:" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Dest Resource:" +msgstr "Wielkość docelowa czcionki:" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "The quick brown fox jumps over the lazy dog." +msgstr "ŻżŹźĆćŃńĄąŁłĘęÓó." + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Test:" +msgstr "Test:" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Options:" +msgstr "Opcje:" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Font Import" +msgstr "Import czcionki" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"This file is already a Godot font file, please supply a BMFont type file " +"instead." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Failed opening as BMFont file." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font custom source." +msgstr "Nie rozpoznano typu czcionki." + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "Czcionka" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "No meshes to import!" +msgstr "Brak siatek do zaimportowania!" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Single Mesh Import" +msgstr "Importuj Mesh" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Source Mesh(es):" +msgstr "Źródło Mesh:" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Siatka" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Surface %d" +msgstr "Powierzchnia %d" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "No samples to import!" +msgstr "Brak sampli do importu!" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Import Audio Samples" +msgstr "Importuj pliki dźwiękowe" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Source Sample(s):" +msgstr "Źródło dźwięku:" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Audio Sample" +msgstr "Dźwięk" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "New Clip" +msgstr "Nowy klip" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Animation Options" +msgstr "Opcje animacji" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Flags" +msgstr "Flagi" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Bake FPS:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Optimizer" +msgstr "Optymalizator" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Linear Error" +msgstr "Maksymalny błąd liniowy" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angular Error" +msgstr "Maksymalny błąd kątowy" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angle" +msgstr "Maksymalny Kąt" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Clips" +msgstr "Klipy" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Start(s)" +msgstr "Start" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "End(s)" +msgstr "Koniec" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "Pętla" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Filters" +msgstr "Filtry" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source path is empty." +msgstr "Ścieżka źródłowa jest pusta." + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script." +msgstr "Nie udało się wczytać skryptu po imporcie." + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import." +msgstr "Niepoprawny/uszkodzony skrypt post-importu." + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error importing scene." +msgstr "Błąd podczas wczytywania sceny." + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import 3D Scene" +msgstr "Zaimportuj Scene 3D" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source Scene:" +msgstr "Scena źródłowa:" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Same as Target Scene" +msgstr "Taki sam jak scena docelowa" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Shared" +msgstr "Współdzielone" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Target Texture Folder:" +msgstr "Docelowy folder tekstur:" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Post-Process Script:" +msgstr "Skrypt do wywołania po imporcie:" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Custom Root Node Type:" +msgstr "Niestandardowy typ węzła głównego:" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Auto" +msgstr "Automatyczny" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "The Following Files are Missing:" +msgstr "Brakuje następujących plików:" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Anyway" +msgstr "Zaimportuj Pomimo" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import & Open" +msgstr "Importuj i Otwórz" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Edited scene has not been saved, open imported scene anyway?" +msgstr "" +"Edytowana sceny nie została zapisana. Otworzyć importowaną scenę mimo tego?" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import Scene" +msgstr "Importuj Scene" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Importing Scene.." +msgstr "Importowanie Sceny.." + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Running Custom Script.." +msgstr "Uruchamiam skrypt..." + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script:" +msgstr "Nie udało się wczytać skryptu po imporcie:" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" +"Pojawiły się błędy podczas uruchamiania skryptu po imporcie (sprawdź " +"konsolę):" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error running post-import script:" +msgstr "Błąd podczas uruchamiania skryptu po imporcie:" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Image:" +msgstr "Zaimportuj Obraz:" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Can't import a file over itself:" +msgstr "Nie można zaimportować pliku wewnątrz siebie samego:" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't localize path: %s (already local)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Saving.." +msgstr "Zapisywanie.." + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "3D Scene Animation" +msgstr "Scena animacji 3D" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Uncompressed" +msgstr "Nieskompresowany" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossless (PNG)" +msgstr "Bezstratna Kompresja (PNG)" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossy (WebP)" +msgstr "Kompresja Stratna (WebP)" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress (VRAM)" +msgstr "Skompresuj (VRAM)" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Format" +msgstr "Format Tekstury" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Compression Quality (WebP):" +msgstr "Jakość Kompresji Textury (WebP):" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Options" +msgstr "Opcje Tekstury" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Please specify some files!" +msgstr "Proszę podać kilka plików !" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "At least one file needed for Atlas." +msgstr "Co najmniej jeden plik potrzebny do \"Atlas'u\"." + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Error importing:" +msgstr "Błąd importowania:" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Only one file is required for large texture." +msgstr "Tylko jeden plik jest wymagany dla dużych tekstur." + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Max Texture Size:" +msgstr "Maksymalny rozmiar tekstury:" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for Atlas (2D)" +msgstr "Zaimportuj Tekstury z \"Atlas'u\" (2D)" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cell Size:" +msgstr "Rozmiar komórki:" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Large Texture" +msgstr "Duża Tekstura" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Textures (2D)" +msgstr "Zaimportuj Duże Tekstury (2D)" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture" +msgstr "Źródłowa Tekstura" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Base Atlas Texture" +msgstr "Bazowa tekstura \"Atlas'u\"" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s)" +msgstr "Tekstura(y) źródłowe" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 2D" +msgstr "Importuj tekstury dla 2D" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 3D" +msgstr "Importuj tekstury dla 3D" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures" +msgstr "Zaimportuj Textury" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "2D Texture" +msgstr "Tekstura 2D" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "3D Texture" +msgstr "Tekstura 3D" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Atlas Texture" +msgstr "Tekstura \"Atlas'u\"" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "" +"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " +"the project." +msgstr "" +"UWAGA: Importowanie tekstur 2D nie jest wymagane. Po prostu skopiuj pliki " +"png/jpg do folderu projektu." + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Crop empty space." +msgstr "Przytnij pusty obszar." + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture" +msgstr "Tekstura" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Texture" +msgstr "Importuj dużą teksturę" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Load Source Image" +msgstr "Wczytaj obrazek źródłowy" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Slicing" +msgstr "Przycinanie" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Inserting" +msgstr "Wstawianie" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Saving" +msgstr "Zapisywanie" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save large texture:" +msgstr "Nie udało się zapisać dużej tekstury:" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Build Atlas For:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Loading Image:" +msgstr "Ładowanie obrazu:" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't load image:" +msgstr "Nie można załadować obrazu:" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Converting Images" +msgstr "Konwersja obrazków" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cropping Images" +msgstr "Przycinanie obrazków" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Blitting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save atlas image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save converted texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid source!" +msgstr "Wadliwe źródło!" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid translation source!" +msgstr "Nieprawidłowe źródło tłumaczenia!" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Column" +msgstr "Kolumna" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Language" +msgstr "Język" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No items to import!" +msgstr "Brak elementów do importu!" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No target path!" +msgstr "Brak ścieżki docelowej!" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translations" +msgstr "Importuj tłumaczenia" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Couldn't import!" +msgstr "Nie można zaimportować!" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translation" +msgstr "Importuj tłumaczenie" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Source CSV:" +msgstr "Źródłowy CSV:" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Ignore First Row" +msgstr "Ignoruj pierwszy wiersz" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Compress" +msgstr "Skompresuj" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Add to Project (engine.cfg)" +msgstr "Dodaj do projektu (engine.cfg)" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Languages:" +msgstr "Zaimportuj Język:" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Translation" +msgstr "Tłumaczenie" + +#: tools/editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Node" +msgstr "Węzeł" + +#: tools/editor/node_dock.cpp +msgid "Groups" +msgstr "Grupy" + +#: tools/editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "Wybierz węzeł do edycji sygnałów i grup." + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "Ustaw automatycznie" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "Nowa nazwa animacji:" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "Nowa animacja" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "Zmień nazwę animacji:" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "Usuń animację" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Invalid animation name!" +msgstr "BŁĄD: błędna nazwa animacji!" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Animation name already exists!" +msgstr "BŁĄD: animacja o takiej nazwie już istnieje!" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "Zmień nazwę animacji" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "Dodaj animację" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "Wczytaj animację" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "Duplikuj animacje" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to copy!" +msgstr "BŁĄD: Brak animacji do skopiowania!" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation resource on clipboard!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "Wklejona animacja" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "Wklej animację" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to edit!" +msgstr "BŁĄD: Brak animacji do edycji!" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "Odtwórz zaznaczoną animację od tyłu z aktualnej poz. (A)" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "Zatrzymaj animację (S)" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "Uruchom animację od początku (Shift+D)" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "Uruchom animację od aktualnej pozycji (D)" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "Pozycja animacji (sekundy)." + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create new animation in player." +msgstr "Stwórz nową animację." + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "Załaduj animację z dysku." + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "Załaduj animacje z dysku." + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +msgstr "Zapisz wybraną animacje" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save As" +msgstr "Zapisz jako" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "Wyświetl listę animacji w odtwarzaczu." + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "Auto odtwarzanie po załadowaniu" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Target Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "Narzędzia do animacji" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "Skopiuj animacje" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "Utwórz nową animację" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "Nazwa animacji:" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp +msgid "Error!" +msgstr "Błąd!" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "Animacja" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "Nowa nazwa:" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "Skala:" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "Mix" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "Automatyczny Restart:" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "Restart(y):" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "Start!" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "Czas X-Fade (s):" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "Bieżący:" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "Dodaj Wejście" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Rename" +msgstr "Zmień nazwę" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations.." +msgstr "Zaimportuj animacje.." + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters.." +msgstr "Filtry.." + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing %d Triangles:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Light Baker Setup:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing Geometry" +msgstr "Parsowanie Geometrii" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Fixing Lights" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Making BVH" +msgstr "Tworzenie BVH" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Light Octree" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Octree Texture" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Transfer to Lightmaps:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Allocating Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Baking Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Post-Processing Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Reset the lightmap octree baking process (start over)." +msgstr "" + +#: tools/editor/plugins/camera_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Preview" +msgstr "Podgląd" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "Konfiguruj krokowanie" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "Offset siatki:" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +msgstr "Krok siatki:" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "Offset obrotu:" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "Krok obrotu:" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Pivot" +msgstr "Przesuń pivot" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "Edytuj łańcuch IK" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +msgstr "Edytuj CanvasItem" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "Zmień zakotwiczenie" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom (%):" +msgstr "Powiększenie (%):" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "Wklej Pozę" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "Tryb zaznaczenia" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "Przeciągnij: Obróć" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "Alt+Przeciągnij: Przesuń" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" +"Wciśnij 'v' by Zmienić Pivot, 'Shift+v' by Przesunąć Pivot (podczas " +"poruszania)." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "Tryb przesuwania" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "Tryb Rotacji" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "Kliknij by zmienić środek obrotu obiektu." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "Tryb przesuwania" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "Zablokuj wybrany obiekt w miejscu (nie można go przesuwać)." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Odblokuj wybrany obiekt (można go przesuwać)." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "Zablokuj selekcję węzłów podrzędnych." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "Odblokuj selekcję węzłów podrzędnych." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Użyj przyciągania" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Pokaż kratownicę" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "Użyj kroków obrotu" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "Konfiguruj krokowanie.." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "Użyj krokowania na poziomie pikseli" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Expand to Parent" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton.." +msgstr "Szkielet.." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "Utwórz Kości" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "Wyczyść Kości" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "Utwórz Łańcuch IK" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "Wyczyść Łańcuch IK" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "Widok" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Reset" +msgstr "Wyzeruj przybliżenie" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Set.." +msgstr "Ustaw przybliżenie..." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "Wyśrodkowywanie na zaznaczeniu" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "Powiększ do zaznaczenia" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchor" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "Wstaw Klucze" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "Wstaw Klucz" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "Skopiuj Pozę" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "Wyczyść Pozę" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set a Value" +msgstr "Ustaw Wartość" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap (Pixels):" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Utwórz Polygon" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Creating Mesh Library" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Thumbnail.." +msgstr "Miniatura.." + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "Usuń element %d?" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "Dodaj element" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "Usuń zaznaczony element" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "Import ze sceny" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "Aktualizuj ze sceny" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "Element %d" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "Elementy" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "Edytor listy elementów" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "Stwórz Occluder Polygon" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "Edytuj istniejący polygon:" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "LMB: Przesuń Punkt." + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "RMB: Wymaż Punkt." + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh.." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "Oś-X" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "Oś-Y" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "Oś-Z" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "Błąd wczytywania obrazu:" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image.." +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Set Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "Generuj AABB" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Mesh" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Node" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Clear Emitter" +msgstr "Wyczyść Emiter" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "Utwórz Emiter" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Positions:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Fill:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Surface" +msgstr "Powierzchnia" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "Głośność" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "Zaznacz Punkty" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "Shift+Drag: Zaznacz Punkty Kontrolne" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "Klik: Dodaj Punkt" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "Prawy Klik: Usuń Punkt" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "Zaznacz Punkty Kontrolne (Shift+Drag)" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "Dodaj Punkt (w pustym miejscu)" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "Podziel Segment (na krzywej)" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "Usuń Punkt" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "Zamknij krzywą" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "Punkt Krzywej #" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "Podziel Ścieżkę" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "Usuń punkt ścieżki" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "Utwórz Mapę UV" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "Przekształć Mapę UV" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "Wielokąt 2D UV Edytor" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "Przesuń Punkt" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "Ctrl: Obróć" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "Shift: Przesuń wszystko" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "Shift+Ctrl: Skaluj" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "Przesuń Wielokąt" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "Obróć Wielokąt" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "Skaluj Wielokąt" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "Wielokąt->UV" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "UV->Wielokąt" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "Wyczyść UV" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "Kratownica" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "BŁĄD: Nie można wczytać zasobu!" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "Dodaj Zasób" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "Zmień nazwę Zasobu" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "Usuń zasób" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "Wczytaj Zasób" + +#: tools/editor/plugins/rich_text_editor_plugin.cpp +msgid "Parse BBCode" +msgstr "" + +#: tools/editor/plugins/sample_editor_plugin.cpp +msgid "Length:" +msgstr "Długość:" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Open Sample File(s)" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "ERROR: Couldn't load sample!" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Add Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Rename Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Delete Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "16 Bits" +msgstr "16 Bits" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "8 Bits" +msgstr "8 Bits" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stereo" +msgstr "Stereo" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Mono" +msgstr "Mono" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Format" +msgstr "Format" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Pitch" +msgstr "Wysokość" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "Błąd podczas zapisywania motywu" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "Błąd zapisywania" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "Błąd importowania motywu" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "Błąd importowania" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "Zaimportuj motyw" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As.." +msgstr "Zapisz motyw jako.." + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "Następny skrypt" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "Poprzedni skrypt" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "File" +msgstr "Plik" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_editor.cpp +msgid "New" +msgstr "Nowy" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "Zapisz wszystko" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "Przeładuj motyw" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "Zapisz motyw" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "Zapisz motyw jako" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "Zamknij pliki pomocy" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." +msgstr "Znajdź.." + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" +msgstr "Znajdź następny" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "Debug" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "Kontynuuj" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "Pozostaw Debugger otwarty" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Window" +msgstr "Okno" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Left" +msgstr "Przesuń w lewo" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Right" +msgstr "Przesuń w prawo" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Tutorials" +msgstr "Poradniki" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Open https://godotengine.org at tutorials section." +msgstr "Otwórz https://godotengine.org na sekcji poradników." + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "Klasy" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the class hierarchy." +msgstr "Szukaj w hierarchii klas." + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "Przejdź do poprzednio edytowanego dokumentu." + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "Przejdź do następnego edytowanego dokumentu." + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "Utwórz Skrypt" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "Przeładuj" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "Zapisz ponownie" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "Debugger" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "Przesuń w górę" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "Przesuń w dół" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "Wcięcie w lewo" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "Wcięcie w prawo" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "Ustaw komentarz" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "Usuń wszystkie pułapki" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "Przejdź do następnej pułapki" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "Przejdź do poprzedniej pułapki" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "Znajdź poprzedni" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "Zamień.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "Przejdź do funkcji.." + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "Przejdź do linii.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "Pomoc kontekstowa" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Vertex" +msgstr "Wierzchołek" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Lighting" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "Zmień Wartość Domyślną" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "Zmień komentarz" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "Usuń węzeł Shader Graph" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "Usuń węzeł(y) Shader Graph" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling to %s%%." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "Tył" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "Przód" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Environment" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "No scene selected to instance!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Instance at Cursor" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Could not instance scene!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "Tryb Przesuwania (W)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "Tryb Rotacji (E)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "Wstaw klucz animacji" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog.." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default Light" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default sRGB" +msgstr "Użyj domyślnie sRGB" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Shadeless" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Default Light Normal:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Ambient Light Color:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "Obrót (stopnie):" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "Dodaj pusty" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "Zmień FPS animacji" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "(pusty)" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "Animacje" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "Prędkość (FPS):" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "Dodaj pusty (wcześniej)" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "Dodaj pusty (później)" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Up" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Down" +msgstr "" + +#: tools/editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "<żaden>" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "Krok:" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "Nie mogę zapisać motywu do pliku:" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "Dodaj wszystkie elementy" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "Dodaj wszystko" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "Usuń element" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "Utwórz pusty szablon" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "CheckBox Radio1" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "CheckBox Radio2" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "Element" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "Ma" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "Wiele" + +#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp +msgid "Options" +msgstr "Opcje" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Have,Many,Several,Options!" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Type:" +msgstr "Typ:" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "Ikona" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Style" +msgstr "Styl" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "Kolor" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "Duplikuj" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase selection" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Find tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "Zaznacz" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "Obróć o 0 stopni" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "Obróć o 90 stopni" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "Obróć o 180 stopni" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "Obróć o 270 stopni" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +msgstr "Nazwa elementu lub ID:" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "Utwórz ze sceny?" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "Połącz ze sceny?" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "Utwórz ze sceny" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "Połącz ze sceny" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Error" +msgstr "Błąd" + +#: tools/editor/project_export.cpp +msgid "Edit Script Options" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Please export outside the project folder!" +msgstr "Eksportuj poza folderem projektu!" + +#: tools/editor/project_export.cpp +msgid "Error exporting project!" +msgstr "Błąd przy eksporcie projektu!" + +#: tools/editor/project_export.cpp +msgid "Error writing the project PCK!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "No exporter for platform '%s' yet." +msgstr "Brak jeszcze eksportu dla platformy '%s'." + +#: tools/editor/project_export.cpp +msgid "Include" +msgstr "Zawiera" + +#: tools/editor/project_export.cpp +msgid "Change Image Group" +msgstr "Zmień grupę obrazków" + +#: tools/editor/project_export.cpp +msgid "Group name can't be empty!" +msgstr "Nazwa grupy nie może być pusta!" + +#: tools/editor/project_export.cpp +msgid "Invalid character in group name!" +msgstr "Nieprawidłowy znak w nazwie grupy!" + +#: tools/editor/project_export.cpp +msgid "Group name already exists!" +msgstr "Nazwa grupy już istnieje!" + +#: tools/editor/project_export.cpp +msgid "Add Image Group" +msgstr "Dodaj grupę obrazków" + +#: tools/editor/project_export.cpp +msgid "Delete Image Group" +msgstr "Usuń grupę obrazków" + +#: tools/editor/project_export.cpp +msgid "Atlas Preview" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export Settings" +msgstr "Opcje eksportu projektu" + +#: tools/editor/project_export.cpp +msgid "Target" +msgstr "Cel" + +#: tools/editor/project_export.cpp +msgid "Export to Platform" +msgstr "Eksportuj na platformę" + +#: tools/editor/project_export.cpp +msgid "Resources" +msgstr "Zasoby" + +#: tools/editor/project_export.cpp +msgid "Export selected resources (including dependencies)." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all resources in the project." +msgstr "Eksportuj wszystkie zasoby w projekcie." + +#: tools/editor/project_export.cpp +msgid "Export all files in the project directory." +msgstr "Eksportuj wszystkie pliki w katalogu projektu." + +#: tools/editor/project_export.cpp +msgid "Export Mode:" +msgstr "Tryb eksportu:" + +#: tools/editor/project_export.cpp +msgid "Resources to Export:" +msgstr "Zasoby do eksportu:" + +#: tools/editor/project_export.cpp +msgid "Action" +msgstr "Akcja" + +#: tools/editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert text scenes to binary on export." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images" +msgstr "Obrazki" + +#: tools/editor/project_export.cpp +msgid "Keep Original" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy, WebP)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for RAM (BC/PVRTC/ETC)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert Images (*.png):" +msgstr "Konwertuj obrazki (*.png):" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy) Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink All Images:" +msgstr "Zmniejsz wszystkie obrazki:" + +#: tools/editor/project_export.cpp +msgid "Compress Formats:" +msgstr "Format kompresji:" + +#: tools/editor/project_export.cpp +msgid "Image Groups" +msgstr "Grupy obrazków" + +#: tools/editor/project_export.cpp +msgid "Groups:" +msgstr "Grupy:" + +#: tools/editor/project_export.cpp +msgid "Compress Disk" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress RAM" +msgstr "Kompresja RAM" + +#: tools/editor/project_export.cpp +msgid "Compress Mode:" +msgstr "Tryb kompresji:" + +#: tools/editor/project_export.cpp +msgid "Lossy Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink By:" +msgstr "Zmniejsz o:" + +#: tools/editor/project_export.cpp +msgid "Preview Atlas" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Filter:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images:" +msgstr "Obrazki:" + +#: tools/editor/project_export.cpp +msgid "Select None" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group" +msgstr "Grupa" + +#: tools/editor/project_export.cpp +msgid "Samples" +msgstr "Sample" + +#: tools/editor/project_export.cpp +msgid "Sample Conversion Mode: (.wav files):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep" +msgstr "Bez zmian" + +#: tools/editor/project_export.cpp +msgid "Compress (RAM - IMA-ADPCM)" +msgstr "Kompresja (RAM - IMA-ADPCM)" + +#: tools/editor/project_export.cpp +msgid "Sampling Rate Limit (Hz):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trim" +msgstr "Przytnij" + +#: tools/editor/project_export.cpp +msgid "Trailing Silence:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script" +msgstr "Skrypt" + +#: tools/editor/project_export.cpp +msgid "Script Export Mode:" +msgstr "Tryb eksportu skryptów:" + +#: tools/editor/project_export.cpp +msgid "Text" +msgstr "Tekst" + +#: tools/editor/project_export.cpp +msgid "Compiled" +msgstr "Skompilowany" + +#: tools/editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "Zaszyfrowany (podaj klucz poniżej)" + +#: tools/editor/project_export.cpp +msgid "Script Encryption Key (256-bits as hex):" +msgstr "Klucz szyfrujący skryptu (256-bit jako hex):" + +#: tools/editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "Eksport PCK/Zip" + +#: tools/editor/project_export.cpp +msgid "Export Project PCK" +msgstr "Eksport projektu PCK" + +#: tools/editor/project_export.cpp +msgid "Export.." +msgstr "Eksport.." + +#: tools/editor/project_export.cpp +msgid "Project Export" +msgstr "Eksport projektu" + +#: tools/editor/project_export.cpp +msgid "Export Preset:" +msgstr "Szablon eksportu:" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, the path must exist!" +msgstr "Niepoprawna ścieżka projektu, ścieżka musi istnieć!" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must not exist." +msgstr "Niepoprawna ścieżka projektu, engine.cfg nie może istnieć." + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must exist." +msgstr "Niepoprawna ścieżka projektu, engine.cfg musi istnieć." + +#: tools/editor/project_manager.cpp +msgid "Imported Project" +msgstr "Zaimportowano projekt" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "Niepoprawna ścieżka projektu (zmienić cokolwiek?)." + +#: tools/editor/project_manager.cpp +msgid "Couldn't create engine.cfg in project path." +msgstr "Nie można było utworzyć engine.cfg w ścieżce projektu." + +#: tools/editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "Pakiet zastał zainstalowany poprawnie!" + +#: tools/editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "Importuj istniejący projekt" + +#: tools/editor/project_manager.cpp +msgid "Project Path (Must Exist):" +msgstr "Ścieżka projektu (musi istnieć):" + +#: tools/editor/project_manager.cpp +msgid "Project Name:" +msgstr "Nazwa projektu:" + +#: tools/editor/project_manager.cpp +msgid "Create New Project" +msgstr "Utwórz nowy projekt" + +#: tools/editor/project_manager.cpp +msgid "Project Path:" +msgstr "Ścieżka do projektu:" + +#: tools/editor/project_manager.cpp +msgid "Install Project:" +msgstr "Zainstaluj projekt:" + +#: tools/editor/project_manager.cpp +msgid "Install" +msgstr "Instaluj" + +#: tools/editor/project_manager.cpp +msgid "Browse" +msgstr "Szukaj" + +#: tools/editor/project_manager.cpp +msgid "New Game Project" +msgstr "Nowy projekt gry" + +#: tools/editor/project_manager.cpp +msgid "That's a BINGO!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "Projekt bez nazwy" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "Czy jesteś pewny że chcesz otworzyć więcej niż jeden projekt?" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "Czy jesteś pewny że chcesz uruchomić więcej niż jeden projekt?" + +#: tools/editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Manager" +msgstr "Menedżer projektów" + +#: tools/editor/project_manager.cpp +msgid "Project List" +msgstr "Lista projektów" + +#: tools/editor/project_manager.cpp +msgid "Run" +msgstr "Uruchom" + +#: tools/editor/project_manager.cpp +msgid "Scan" +msgstr "Skanuj" + +#: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "Wybierz folder do skanowania" + +#: tools/editor/project_manager.cpp +msgid "New Project" +msgstr "Nowy projekt" + +#: tools/editor/project_manager.cpp +msgid "Exit" +msgstr "Wyjdź" + +#: tools/editor/project_settings.cpp +msgid "Key " +msgstr "Klawisz " + +#: tools/editor/project_settings.cpp +msgid "Joy Button" +msgstr "Przycisk joysticka" + +#: tools/editor/project_settings.cpp +msgid "Joy Axis" +msgstr "Oś joysticka" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button" +msgstr "Przycisk myszy" + +#: tools/editor/project_settings.cpp +msgid "Invalid action (anything goes but '/' or ':')." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action '%s' already exists!" +msgstr "Akcja %s już istnieje!" + +#: tools/editor/project_settings.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Press a Key.." +msgstr "Naciśnij klawisz.." + +#: tools/editor/project_settings.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Left Button" +msgstr "Lewy guzik" + +#: tools/editor/project_settings.cpp +msgid "Right Button" +msgstr "Prawy guzik" + +#: tools/editor/project_settings.cpp +msgid "Middle Button" +msgstr "Środkowy guzik" + +#: tools/editor/project_settings.cpp +msgid "Wheel Up Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Down Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 6" +msgstr "Przycisk 6" + +#: tools/editor/project_settings.cpp +msgid "Button 7" +msgstr "Przycisk 7" + +#: tools/editor/project_settings.cpp +msgid "Button 8" +msgstr "Przycisk 8" + +#: tools/editor/project_settings.cpp +msgid "Button 9" +msgstr "Przycisk 9" + +#: tools/editor/project_settings.cpp +msgid "Joystick Axis Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Toggle Persisting" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Error saving settings." +msgstr "Błąd zapisu ustawień." + +#: tools/editor/project_settings.cpp +msgid "Settings saved OK." +msgstr "Ustawienia zapisane pomyślnie." + +#: tools/editor/project_settings.cpp +msgid "Add Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Remapped Path" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Project Settings (engine.cfg)" +msgstr "Ustawienia projektu (engine.cfg)" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "General" +msgstr "Ogólny" + +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +msgid "Property:" +msgstr "Właściwość:" + +#: tools/editor/project_settings.cpp +msgid "Del" +msgstr "Usuń" + +#: tools/editor/project_settings.cpp +msgid "Copy To Platform.." +msgstr "Kopiuj na platformę..." + +#: tools/editor/project_settings.cpp +msgid "Input Map" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action:" +msgstr "Akcja:" + +#: tools/editor/project_settings.cpp +msgid "Device:" +msgstr "Urządzenie:" + +#: tools/editor/project_settings.cpp +msgid "Index:" +msgstr "Indeks:" + +#: tools/editor/project_settings.cpp +msgid "Localization" +msgstr "Lokalizacja" + +#: tools/editor/project_settings.cpp +msgid "Translations" +msgstr "Tłumaczenia" + +#: tools/editor/project_settings.cpp +msgid "Translations:" +msgstr "Tłumaczenia:" + +#: tools/editor/project_settings.cpp +msgid "Add.." +msgstr "Dodaj.." + +#: tools/editor/project_settings.cpp +msgid "Remaps" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resources:" +msgstr "Zasoby:" + +#: tools/editor/project_settings.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Locale" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "AutoLoad" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Plugins" +msgstr "Wtyczki" + +#: tools/editor/property_editor.cpp +msgid "Preset.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Zero" +msgstr "Zero" + +#: tools/editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "File.." +msgstr "Plik.." + +#: tools/editor/property_editor.cpp +msgid "Dir.." +msgstr "Katalog.." + +#: tools/editor/property_editor.cpp +msgid "Load" +msgstr "Wczytaj" + +#: tools/editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "Błąd wczytania pliku: Brak zasobu!" + +#: tools/editor/property_editor.cpp +msgid "Couldn't load image" +msgstr "Nie można wczytać obrazu" + +#: tools/editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "On" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Set" +msgstr "Ustaw" + +#: tools/editor/property_editor.cpp +msgid "Properties:" +msgstr "Właściwości:" + +#: tools/editor/property_editor.cpp +msgid "Global" +msgstr "Globalne" + +#: tools/editor/property_editor.cpp +msgid "Sections:" +msgstr "" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Zaznacz Punkty" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Tryb zaznaczenia" + +#: tools/editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Create New Resource" +msgstr "Utwórz nowy zasób" + +#: tools/editor/resources_dock.cpp +msgid "Open Resource" +msgstr "Otwórz zasób" + +#: tools/editor/resources_dock.cpp +msgid "Save Resource" +msgstr "Zapisz zasób" + +#: tools/editor/resources_dock.cpp +msgid "Resource Tools" +msgstr "Narzędzia zasobów" + +#: tools/editor/resources_dock.cpp +msgid "Make Local" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "Aktualna scena" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "Główna scena" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "Argumenty głównej sceny:" + +#: tools/editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "Ustawienia uruchomienia sceny" + +#: tools/editor/scene_tree_dock.cpp +msgid "OK :(" +msgstr "OK :(" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "Błąd przy ładowaniu sceny z %s" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Ok" +msgstr "Ok" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "Duplikuj węzeł(y)" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "Usuń węzeł(y)?" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "Ta operacja nie może zostać wykonana bez sceny." + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save New Scene As.." +msgstr "Zapisz nową scenę jako ..." + +#: tools/editor/scene_tree_dock.cpp +msgid "Makes Sense!" +msgstr "To ma sens!" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "Usuń węzeł(y)" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "Utwórz węzeł" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "Błąd podczas zapisywania sceny." + +#: tools/editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Groups" +msgstr "Edytuj grupy" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Connections" +msgstr "Edytuj Połączenia" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "Usuń węzeł (węzły)" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "Dodaj dziecko węzła" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Instancjonuj dziecko sceny" + +#: tools/editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "Zmień typ" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Script" +msgstr "Dodaj skrypt" + +#: tools/editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "Dołącz ze sceny" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "Zapisz gałąź jako scenę" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "Usuń (bez potwierdzenie)" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "Dodaj/Utwórz nowy węzeł" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "Utwórz nowy skrypt dla zaznaczonego węzła." + +#: tools/editor/scene_tree_editor.cpp +msgid "" +"This item cannot be made visible because the parent is hidden. Unhide the " +"parent first." +msgstr "" +"Ten obiekt nie może być widoczny ponieważ jego rodzic jest ukryty. Odkryj " +"najpierw rodzica." + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Instancja:" + +#: tools/editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "Nieprawidłowa nazwa węzła, następujące znaki są niedozwolone:" + +#: tools/editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "Zmień nazwę węzła" + +#: tools/editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "Drzewo sceny (węzły):" + +#: tools/editor/scene_tree_editor.cpp +msgid "Editable Children" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Load As Placeholder" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Discard Instancing" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Otwórz w edytorze" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance" +msgstr "Wyczyść dziedziczenie" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "Wyczyścić dziedziczenie? (Nie można cofnąć!)" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear!" +msgstr "Czysto!" + +#: tools/editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "Wybierz węzeł" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid parent class name" +msgstr "Nieprawidłowa nazwa klasy bazowej" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid chars:" +msgstr "Poprawne znaki:" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "Niepoprawna nazwa klasy" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid name" +msgstr "Poprawna nazwa" + +#: tools/editor/script_create_dialog.cpp +msgid "N/A" +msgstr "N/A" + +#: tools/editor/script_create_dialog.cpp +msgid "Class name is invalid!" +msgstr "Nazwa klasy jest niepoprawna!" + +#: tools/editor/script_create_dialog.cpp +msgid "Parent class name is invalid!" +msgstr "Nazwa klasy nadrzędnej jest niepoprawna!" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid path!" +msgstr "Niepoprawna ścieżka!" + +#: tools/editor/script_create_dialog.cpp +msgid "Could not create script in filesystem." +msgstr "Nie można było utworzyć skryptu w systemie plików." + +#: tools/editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "Ścieżka jest pusta" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "Ścieżka nie jest lokalna" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "Niepoprawna ścieżka bazowa" + +#: tools/editor/script_create_dialog.cpp +msgid "File exists" +msgstr "Plik Istnieje" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "Niepoprawne rozszerzenie" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid path" +msgstr "Poprawna ścieżka" + +#: tools/editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "Nazwa klasy:" + +#: tools/editor/script_create_dialog.cpp +msgid "Built-In Script" +msgstr "Wbudowany skrypt" + +#: tools/editor/script_create_dialog.cpp +msgid "Create Node Script" +msgstr "Utwórz skrypt dla węzła" + +#: tools/editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "Bajty:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Warning" +msgstr "Ostrzeżenie" + +#: tools/editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "Błąd:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "Źródło:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Function:" +msgstr "Funkcja:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "Błędy" + +#: tools/editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "Połączono z procesem potomnym" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "Sprawdź poprzednią instancję" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "Sprawdź następną instancję" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "Ramki stosu" + +#: tools/editor/script_editor_debugger.cpp +msgid "Variable" +msgstr "Zmienna" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "Błędy:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "Śledzenie stosu (jeśli dotyczy):" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Inspector" +msgstr "Zdalny inspektor" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Scene Tree:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Object Properties: " +msgstr "Właściwości zdalnego obiektu: " + +#: tools/editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "Profiler" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "Monitor" + +#: tools/editor/script_editor_debugger.cpp +msgid "Value" +msgstr "Wartość" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "Monitory" + +#: tools/editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "Zużycie pamięci wideo według zasobów:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "Całkowity:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "Pamięć wideo" + +#: tools/editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "Ścieżka zasobu" + +#: tools/editor/script_editor_debugger.cpp +msgid "Type" +msgstr "Typ" + +#: tools/editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "Użycie" + +#: tools/editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "Różne" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "Kliknięta kontrolka:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "Typ klikniętej kontrolki:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "Ustaw z drzewa" + +#: tools/editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "Skróty" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "Zmień promień światła" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "Zmień Pole Widzenia Kamery" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "Zmień rozmiar kamery" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "Zmień promień Sphere Shape" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "Zmień rozmiar Box Shape" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "Zmień średnicę Capsule Shape" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "Zmień wysokośc Capsule Shape" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "Zmień długość Ray Shape" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" + +#~ msgid "Cannot go into subdir:" +#~ msgstr "Nie można iść do podkatalogu:" + +#~ msgid "Help" +#~ msgstr "Pomoc" diff --git a/tools/translations/pt_BR.po b/tools/translations/pt_BR.po index bca193bdf8..0b80ed2b0e 100644 --- a/tools/translations/pt_BR.po +++ b/tools/translations/pt_BR.po @@ -2,6 +2,7 @@ # Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community # This file is distributed under the same license as the Godot source code. # +# António Sarmento <antonio.luis.sarmento@gmail.com>, 2016. # George Marques <george@gmarqu.es>, 2016. # Joaquim Ferreira <joaquimferreira1996@bol.com.br>, 2016. # @@ -9,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2016-07-12 12:59+0000\n" -"Last-Translator: Danilo Castro <danilo.moreira94@gmail.com>\n" +"PO-Revision-Date: 2016-08-11 15:38+0000\n" +"Last-Translator: António Sarmento <antonio.luis.sarmento@gmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -21,10 +22,12 @@ msgstr "" "X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Argumento de tipo inválido para convert(), use constantes TYPE_*." #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Não há bytes suficientes para decodificar, ou o formato é inválido." @@ -62,6 +65,284 @@ msgstr "Formato de dicionário de instância inválido (script inválido em @pat msgid "Invalid instance dictionary (invalid subclasses)" msgstr "Dicionário de instância inválido (subclasses inválidas)" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Funções:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Variáveis:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Sinais:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Renomear Função" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Rename Variable" +msgstr "Renomear Amostra" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Renomear Sinal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Adicionar Função" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Adicionar Variável" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Adicionar Sinal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Remover Função" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Remover Variável" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Editando Variável:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Remover Sinal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Editando Sinal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Adicionar Nó" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Adicionar Nó Filho" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Node(s) From Tree" +msgstr "Nó a Partir de Cena" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Editar" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Base Type:" +msgstr "Tipo de Dados:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Membros:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Nós Disponíveis:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Fechar" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Editar Argumentos do Sinal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Editar Variável:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Alterar" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Excluir Selecionados" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Alternar Ponto de interrupção" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Localizar Tipo de Nó" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "Copiar Pose" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "Criar Nó" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Colar Pose" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +#, fuzzy +msgid "Invalid index property name." +msgstr "Nome de classe pai inválido" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +#, fuzzy +msgid "Path does not lead Node!" +msgstr "O caminho não é local" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +#, fuzzy +msgid ": Invalid argument of type: " +msgstr "Nome de classe pai inválido" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Argumentos inválidos: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -200,6 +481,10 @@ msgstr "" "VisibilityEnable2D funciona melhor quando usado como filho direto da raiz da " "cena atualmente editada." +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance não contém um recurso BakedLight ." + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -273,7 +558,7 @@ msgstr "" msgid "Cancel" msgstr "Cancelar" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "OK" @@ -299,8 +584,9 @@ msgstr "Todos os Arquivos (*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "Abrir" @@ -423,13 +709,13 @@ msgid "Axis" msgstr "Eixo" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "Recortar" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -437,7 +723,7 @@ msgstr "Copiar" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -445,7 +731,7 @@ msgid "Paste" msgstr "Colar" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -459,7 +745,7 @@ msgid "Clear" msgstr "Limpar" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "Desfazer" @@ -592,9 +878,8 @@ msgid "Duplicate Transposed" msgstr "Duplicar Transposto" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Remove Selection" -msgstr "Seleção de Quadros" +msgstr "Remover Seleção" #: tools/editor/animation_editor.cpp msgid "Continuous" @@ -791,6 +1076,10 @@ msgid "Optimize" msgstr "Otimizar" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "Chave" @@ -840,7 +1129,8 @@ msgstr "Alterar Valor do Vetor" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "Pesquisar:" @@ -894,18 +1184,6 @@ msgstr "Lista de Métodos para \"%s\":" msgid "Call" msgstr "Chamar" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "Fechar" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "Lista de Métodos:" @@ -956,6 +1234,7 @@ msgstr "Apenas na Seleção" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -997,6 +1276,20 @@ msgstr "Perguntar ao Substituir" msgid "Skip" msgstr "Pular" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Ampliar Mais" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Ampliar Menos" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "Linha:" @@ -1086,10 +1379,16 @@ msgid "Create New" msgstr "Criar Novo" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "Combinações:" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Descrição:" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Buscar Substituição Para:" @@ -1206,8 +1505,9 @@ msgid "Delete selected files?" msgstr "Excluir os arquivos selecionados?" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "Excluir" @@ -1235,22 +1535,18 @@ msgstr "" "engine." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid Path." -msgstr "Caminho inválido!" +msgstr "Caminho inválido." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "File does not exist." -msgstr "O arquivo existe" +msgstr "O arquivo não existe." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." -msgstr "Caminho do recurso" +msgstr "Não está no caminho de recursos." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Add AutoLoad" msgstr "Adicionar Autoload" @@ -1279,9 +1575,8 @@ msgid "Enable" msgstr "Habilitar" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rearrange Autoloads" -msgstr "Renomear Autoload" +msgstr "Reordenar Autoloads" #: tools/editor/editor_autoload_settings.cpp msgid "Node Name:" @@ -1355,16 +1650,14 @@ msgid "Focus Path" msgstr "Focar no Caminho" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" msgstr "Mover Favorito Acima" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" msgstr "Mover Favorito Abaixo" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "Favoritos:" @@ -1377,10 +1670,6 @@ msgid "Preview:" msgstr "Previsualização:" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "Não é possível ir ao subdiretório:" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "BuscarFontes" @@ -1418,25 +1707,13 @@ msgid "Public Methods:" msgstr "Métodos Públicos:" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "Membros:" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Itens do Tema de GUI:" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "Sinais:" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "Constantes:" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Descrição:" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "Descrição do Método:" @@ -1740,7 +2017,6 @@ msgstr "" "(Mudanças não salvas serão perdidas)" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" msgstr "Escolha uma Cena Principal" @@ -1834,9 +2110,8 @@ msgid "Save Scene" msgstr "Salvar Cena" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Save all Scenes" -msgstr "Salvar Cena" +msgstr "Salvar todas as Cenas" #: tools/editor/editor_node.cpp msgid "Close Scene" @@ -1870,7 +2145,7 @@ msgstr "MeshLibrary..." msgid "TileSet.." msgstr "TileSet..." -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "Refazer" @@ -1962,7 +2237,6 @@ msgid "Play custom scene" msgstr "Rodar outra cena" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play Custom Scene" msgstr "Rodar outra cena" @@ -2303,6 +2577,90 @@ msgstr "" "Não pode abrir file_type_cache.cch para escrita, cache de tipos de arquivo " "não salvo!" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "Mesmos arquivos de destino e origem, nada a fazer." + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "Mesmo caminhos de destino e origem, nada a fazer." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "Não é possível mover diretórios para dentro de si mesmos." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "Não é possível operar em \"..\"" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "Escolha Novo Nome e Localização Para:" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "Nenhum arquivo selecionado!" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "Instanciar" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "Editar Dependências.." + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "Visualizar Proprietários..." + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "Copiar Caminho" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "Renomear ou Mover..." + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "Mover Para..." + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "Informação" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "Mostrar no Gerenciador de Arquivos" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "Re-importar..." + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "Diretório Anterior" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "Próximo Diretório" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "Re-escanear Arquivos de Sistema" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "Alternar status da pasta como Favorito" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "Instancia a(s) cena(s) selecionada como filho do nó selecionado." + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "Mover" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "Adicionar ao Grupo" @@ -3269,10 +3627,6 @@ msgid "Post-Processing Texture #" msgstr "Pós-Processando Textura nº" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "BakedLightInstance não contém um recurso BakedLight ." - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "Precalcular!" @@ -3336,7 +3690,8 @@ msgid "Paste Pose" msgstr "Colar Pose" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" +#, fuzzy +msgid "Select Mode" msgstr "Modo de Seleção (Q)" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3358,13 +3713,13 @@ msgid "Alt+RMB: Depth list selection" msgstr "Alt+RMB: Lista de seleção de profundidade" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" +#, fuzzy +msgid "Move Mode" msgstr "Modo Mover (W)" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +#, fuzzy +msgid "Rotate Mode" msgstr "Modo Rotacionar" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3401,14 +3756,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "Restaura a habilidade dos filhos do objeto de serem selecionados." #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "Editar" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "Usar Snap" @@ -3465,14 +3812,6 @@ msgid "View" msgstr "Visualizar" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "Ampliar Mais" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "Ampliar Menos" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "Restaurar Ampliação" @@ -3493,9 +3832,8 @@ msgid "Anchor" msgstr "Âncora" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Keys" -msgstr "Inserir Chave" +msgstr "Inserir Chaves" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" @@ -4150,14 +4488,12 @@ msgid "Save Theme As.." msgstr "Salvar Tema Como..." #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next script" -msgstr "Criar Script" +msgstr "Próximo Script" #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Previous script" -msgstr "Guia anterior" +msgstr "Script anterior" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/project_export.cpp @@ -4174,6 +4510,10 @@ msgid "Save All" msgstr "Salvar Tudo" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "Recarregar Script (suave)" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "Anterior no Histórico" @@ -4194,97 +4534,26 @@ msgid "Save Theme As" msgstr "Salvar Tema Como" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "Mover para Cima" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "Mover para Baixo" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" -msgstr "Recuar Esquerda" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" -msgstr "Recuar Direita" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" -msgstr "Alternar Comentário" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" -msgstr "Clonar Abaixo" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" -msgstr "Completar Símbolo" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" -msgstr "Apagar Espaços em Branco" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" -msgstr "Auto Recuar" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" -msgstr "Recarregar Script (suave)" +msgid "Close Docs" +msgstr "Fechar Docs" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find.." msgstr "Localizar..." #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find Next" msgstr "Localizar próximo" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" -msgstr "Encontrar Anterior" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." -msgstr "Substituir..." - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." -msgstr "Ir para Função..." - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." -msgstr "Ir para linha..." - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Debug" msgstr "Depurar" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" -msgstr "Alternar Ponto de interrupção" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" -msgstr "Remover Todos os Pontos de Interrupção" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" -msgstr "Ir ao Próximo Ponto de Interrupção" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" -msgstr "Ir ao Ponto de Interrupção Anterior" - -#: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp msgid "Step Over" msgstr "Passo por cima" @@ -4321,14 +4590,6 @@ msgid "Move Right" msgstr "Mover para Direita" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" -msgstr "Ajuda" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" -msgstr "Ajuda Contextual" - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Tutorials" msgstr "Tutoriais" @@ -4385,6 +4646,79 @@ msgstr "Depurador" msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" +"Scripts embutidos só podem ser editados quando a cena a qual pertencem está " +"carregada" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "Mover para Cima" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "Mover para Baixo" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "Recuar Esquerda" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "Recuar Direita" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "Alternar Comentário" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Clonar Abaixo" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "Completar Símbolo" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "Apagar Espaços em Branco" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "Auto Recuar" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "Remover Todos os Pontos de Interrupção" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "Ir ao Próximo Ponto de Interrupção" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "Ir ao Ponto de Interrupção Anterior" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "Encontrar Anterior" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "Substituir..." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "Ir para Função..." + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "Ir para linha..." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "Ajuda Contextual" #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Vertex" @@ -4647,57 +4981,56 @@ msgid "Could not instance scene!" msgstr "Não foi possível instanciar cena!" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "Modo Mover (W)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "Modo Rotacionar" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "Modo Escala (R)" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom View" -msgstr "Visão inferior." +msgstr "Visão inferior" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top View" -msgstr "Visão Superior." +msgstr "Visão Superior" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear View" -msgstr "Visão Traseira." +msgstr "Visão Traseira" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front View" -msgstr "Visão Frontal." +msgstr "Visão Frontal" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left View" -msgstr "Visão Esquerda." +msgstr "Visão Esquerda" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right View" -msgstr "Visão Direita." +msgstr "Visão Direita" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "" +msgstr "Alternar visão Perspectiva/Ortogonal" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Insert Animation Key" -msgstr "Colar Animação" +msgstr "Inserir Chanve de Animação" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Focus Selection" -msgstr "Mudar Escala da Seleção" +msgstr "Focar Seleção" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Selection With View" -msgstr "Alinhar com Visão" +msgstr "Alinhar Seleção com Visualização" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform" @@ -5422,15 +5755,12 @@ msgid "Couldn't create engine.cfg in project path." msgstr "Não se pôde criar engine.cfg no caminho do projeto." #: tools/editor/project_manager.cpp -#, fuzzy msgid "The following files failed extraction from package:" -msgstr "" -"Os seguintes arquivos são mais recentes no disco.\n" -"Que ação deve ser tomada?:" +msgstr "Os arquivos a seguir falharam ao serem extraídos do pacote:" #: tools/editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "Pacote Instalado com Sucesso!" #: tools/editor/project_manager.cpp msgid "Import Existing Project" @@ -5453,14 +5783,12 @@ msgid "Project Path:" msgstr "Caminho do Projeto:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install Project:" -msgstr "Projetos Recentes:" +msgstr "Instalar Projeto:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install" -msgstr "Instanciar" +msgstr "Instalar" #: tools/editor/project_manager.cpp msgid "Browse" @@ -5479,11 +5807,13 @@ msgid "Unnamed Project" msgstr "Projeto Sem Nome" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +#, fuzzy +msgid "Are you sure to open more than one project?" msgstr "Tem certeza de que quer abrir mais de um projeto?" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +#, fuzzy +msgid "Are you sure to run more than one project?" msgstr "Tem certeza de que quer rodar mais de um projeto?" #: tools/editor/project_manager.cpp @@ -5491,6 +5821,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "Remover projeto da lista? (O conteúdo da pasta não será modificado)" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "Gerenciador de Projetos" @@ -5507,6 +5843,11 @@ msgid "Scan" msgstr "Escanear" #: tools/editor/project_manager.cpp +#, fuzzy +msgid "Select a Folder to Scan" +msgstr "Selecione uma Pasta para Scanear" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "Novo Projeto" @@ -5798,6 +6139,16 @@ msgstr "Global" msgid "Sections:" msgstr "Seções:" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Selecionar Pontos" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Modo de Seleção (Q)" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "Não se pôde executar a ferramenta PVRTC:" @@ -5871,6 +6222,11 @@ msgid "No parent to instance a child at." msgstr "Sem nó pai onde instanciar um filho." #: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "No parent to instance the scenes at." +msgstr "Sem nó pai onde instanciar um filho." + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "Erro ao carregar cena de %s" @@ -6003,6 +6359,10 @@ msgid "Save Branch as Scene" msgstr "Salvar Ramo como Cena" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "Excluir (Sem Confirmação)" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "Adicionar/Criar um Novo Nó" @@ -6014,6 +6374,10 @@ msgstr "" "Instanciar um arquivo de cena como um Nó. Criar uma cena herdada se não " "existe um nó raiz." +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "Criar um script novo para o nó selecionado." + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -6078,90 +6442,6 @@ msgstr "Limpar!" msgid "Select a Node" msgstr "Selecione um Nó" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Mesmos arquivos de destino e origem, nada a fazer." - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "Mesmo caminhos de destino e origem, nada a fazer." - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "Não é possível mover diretórios para dentro de si mesmos." - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "Não é possível operar em \"..\"" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Escolha Novo Nome e Localização Para:" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "Nenhum arquivo selecionado!" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "Instanciar" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar Dependências.." - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "Visualizar Proprietários..." - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "Copiar Caminho" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "Renomear ou Mover..." - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "Mover Para..." - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "Informação" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "Mostrar no Gerenciador de Arquivos" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "Re-importar..." - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "Diretório Anterior" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "Próximo Diretório" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "Re-escanear Arquivos de Sistema" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "Alternar status da pasta como Favorito" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "Instancia a(s) cena(s) selecionada como filho do nó selecionado." - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "Mover" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "Nome de classe pai inválido" @@ -6398,6 +6678,12 @@ msgstr "Mudar o tamanho do Shape Ray" msgid "Change Notifier Extents" msgstr "Alterar a Extensão do Notificador" +#~ msgid "Cannot go into subdir:" +#~ msgstr "Não é possível ir ao subdiretório:" + +#~ msgid "Help" +#~ msgstr "Ajuda" + #~ msgid "Imported Resources" #~ msgstr "Recursos Importados" diff --git a/tools/translations/pt_PT.po b/tools/translations/pt_PT.po new file mode 100644 index 0000000000..21792d3857 --- /dev/null +++ b/tools/translations/pt_PT.po @@ -0,0 +1,6529 @@ +# Portuguese (Portugal) translation of the Godot Engine editor +# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community +# This file is distributed under the same license as the Godot source code. +# +# António Sarmento <antonio.luis.sarmento@gmail.com>, 2016. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2016-08-11 15:42+0000\n" +"Last-Translator: António Sarmento <antonio.luis.sarmento@gmail.com>\n" +"Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/" +"godot-engine/godot/pt_PT/>\n" +"Language: pt_PT\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 2.8-dev\n" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "Tipo de argumento inválido para convert(), use constantes TYPE_*." + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "" +"Número de bytes insuficientes para descodificar, ou o formato é inválido." + +#: modules/gdscript/gd_functions.cpp +msgid "step argument is zero!" +msgstr "o argumento \"step\" é zero!" + +#: modules/gdscript/gd_functions.cpp +msgid "Not a script with an instance" +msgstr "Não é um script com uma instância" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a script" +msgstr "Não é baseado num script" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a resource file" +msgstr "Não é baseado num ficheiro de recurso" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "Formato de dicionário de instância inválido (falta @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" +"Formato de dicionário de instância inválido (não foi possível carregar o " +"script em @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "Formato de dicionário de instância inválido (script inválido em @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "Dicionário de instância inválido (subclasses inválidas)" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"Um nó fez yield sem memória para usar, por favor leia os documentos para " +"saber como fazer yield correctamente!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"O nó fez yield, mas não retornou um estado de função na primeira memória de " +"trabalho." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"O valor de retorno deve ser atribuído ao primeiro elemento da memória de " +"trabalho de nós! Corrija o seu nó por favor." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "O nó retornou uma sequência de saída (output) incorrecta: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" +"A sequência foi encontrada mas não o nó na pilha (stack), faça report de bug!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Stack overflow com a profundidade da pilha (stack): " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Funções:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Variáveis:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Sinais:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "O nome não é um identificador válido:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Este nome já está a ser usado por outro func/var/signal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Alterar nome da Função" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Alterar nome da Variável" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Alterar nome do Sinal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Adicionar Função" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Adicionar Variável" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Adicionar Sinal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Remover Função" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Remover Variável" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "A editar Variável:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Remover Sinal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "A editar Sinal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Adicionar Nó" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Adicionar Nó" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Adicionar Nó da Árvore" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Adicionar propriedade Getter" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Adicionar propriedade Setter" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Editar" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Tipo de Base:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Membros:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Nós Disponíveis:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Seleccione ou crie uma função para editar o grafo" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Fechar" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Editar Argumentos do Sinal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Editar Variável:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Alterar" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Apagar Seleccionados" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Accionar Breakpoint" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Encontrar Tipo de Nó" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "Tipo de Input não iterável: " + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "O iterador tornou-se inválido" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "O iterador tornou-se inválido: " + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "Nome de índice propriedade inválido." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "Objecto de base não é un Nó!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "Caminho não aponta para nenhum Nó!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "Nome de propriedade índice '%s' inválido em nó %s." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": Argumento inválido de tipo: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Argumentos inválidos: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" + +#: scene/2d/particles_2d.cpp +msgid "Path property must point to a valid Particles2D node to work." +msgstr "" + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "" + +#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SamplePlayer to play sound." +msgstr "" + +#: scene/2d/sprite.cpp +msgid "" +"Path property must point to a valid Viewport node to work. Such Viewport " +"must be set to 'render target' mode." +msgstr "" + +#: scene/2d/sprite.cpp +msgid "" +"The Viewport set in the path property must be set as 'render target' in " +"order for this sprite to work." +msgstr "" + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + +#: scene/3d/body_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/body_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" + +#: scene/3d/spatial_sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SpatialSamplePlayer to play sound." +msgstr "" + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" + +#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Cancel" +msgstr "" + +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp +msgid "OK" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Recognized" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Files (*)" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Open" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Save a File" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Create Folder" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/editor_file_dialog.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Path:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Directories & Files:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "File:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Filter:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Name:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Could not create folder." +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Must use a valid extension." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "" + +#: scene/gui/input_action.cpp +msgid "Ctrl+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Meta+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Device" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Button" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Left Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Right Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Middle Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Up." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Down." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Axis" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Cut" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Copy" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Paste" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "Select All" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/rich_text_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Clear" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Undo" +msgstr "" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font size." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Disabled" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "All Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Add Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transition" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Value" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Call" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Continuous" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Discrete" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Trigger" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "" + +#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp +msgid "Linear" +msgstr "" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "In" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Out" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "In-Out" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Out-In" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Transitions" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "" + +#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/particles_editor_plugin.cpp +#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp +msgid "Create" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Length (s):" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Step (s):" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move current track up." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move current track down." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Track tools" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim. Optimizer" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Optimize" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Transition" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Category:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Method List For '%s':" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Call" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Method List:" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Arguments:" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Return:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Go to Line" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Line Number:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "No Matches" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d Ocurrence(s)." +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace All" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Match Case" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Whole Words" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Selection Only" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Search" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +msgid "Find" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Next" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d ocurrence(s)." +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Not found!" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace By" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Case Sensitive" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Backwards" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Prompt On Replace" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Skip" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Col:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Add" +msgstr "" + +#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Remove" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Make Function" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Deferred" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Create Subscription" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect.." +msgstr "" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "" + +#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp +msgid "Signals" +msgstr "" + +#: tools/editor/create_dialog.cpp +msgid "Create New" +msgstr "" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Matches:" +msgstr "" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Resource" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp +msgid "Path" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Scene failed to load due to missing dependencies:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Open Anyway" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Owns" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Name" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "List:" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating Scene" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Storing local changes.." +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating scene.." +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "" + +#: tools/editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Class List:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Search Classes" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp +msgid "Class:" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Inherited by:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Brief Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Public Methods:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Constants:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Method Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Search Text" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Added:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Removed:" +msgstr "" + +#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp +msgid "Error saving atlas:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Could not save atlas subtexture:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Storing File:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Packing" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Exporting for %s" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Setting Up.." +msgstr "" + +#: tools/editor/editor_log.cpp +msgid " Output:" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Importing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Importing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Node From Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Error saving resource!" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Save Resource As.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "I see.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error while saving." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Saving Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Analyzing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Failed to load resource." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Loading Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Params" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Paste Params" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Built-In" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open in Help" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in later in \"Project Settings\" under the " +"'application' category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Script.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Yes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close scene? (Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Please save the scene first." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Translatable Strings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Run Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Open Project Manager? \n" +"(Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "Ugh" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error loading scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Default" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s) or folder(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Fullscreen Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Next tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Inherited Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Goto Prev. Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Recent" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Filter Files.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Convert To.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Translatable Strings.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "MeshLibrary.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "TileSet.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Redo" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Run Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import assets to the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Tools" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export the project to many platforms." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Play" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause the scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stop" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Debug options" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Settings" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Install Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "About" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Alerts when an external resource has changed." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Always" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Save As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Object properties." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Password:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Version:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Start Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Fixed Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp +msgid "Time:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Please wait for scan to complete." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Current scene must be saved to re-import." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Save & Re-Import" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import Changed Resources" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: tools/editor/editor_settings.cpp +msgid "Default (Same as Editor)" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: tools/editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "No bit masks to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must be a complete resource path." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must exist." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Save path is empty!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Import BitMasks" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Target Path:" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Accept" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Bit Mask" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No source font file!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No target font resource!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"Invalid file extension.\n" +"Please use .fnt." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Can't load/process source font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Couldn't save font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Dest Resource:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "The quick brown fox jumps over the lazy dog." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Test:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Options:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Font Import" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"This file is already a Godot font file, please supply a BMFont type file " +"instead." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Failed opening as BMFont file." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font custom source." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "No meshes to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Single Mesh Import" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Source Mesh(es):" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Surface %d" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "No samples to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Import Audio Samples" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Source Sample(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Audio Sample" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "New Clip" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Animation Options" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Flags" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Bake FPS:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Optimizer" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Linear Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angular Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angle" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Clips" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Start(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "End(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Filters" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error importing scene." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import 3D Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source Scene:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Same as Target Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Shared" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Target Texture Folder:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Post-Process Script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Custom Root Node Type:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Auto" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "The Following Files are Missing:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Anyway" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import & Open" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Edited scene has not been saved, open imported scene anyway?" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Importing Scene.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Running Custom Script.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error running post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Can't import a file over itself:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't localize path: %s (already local)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Saving.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "3D Scene Animation" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Uncompressed" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossless (PNG)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossy (WebP)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress (VRAM)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Format" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Compression Quality (WebP):" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Options" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Please specify some files!" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "At least one file needed for Atlas." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Error importing:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Only one file is required for large texture." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Max Texture Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for Atlas (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cell Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Textures (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Base Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 2D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 3D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "2D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "3D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "" +"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " +"the project." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Crop empty space." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Load Source Image" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Slicing" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Inserting" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Saving" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save large texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Build Atlas For:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Loading Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't load image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Converting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cropping Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Blitting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save atlas image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save converted texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid translation source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Column" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No items to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No target path!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translations" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Couldn't import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translation" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Source CSV:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Ignore First Row" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Compress" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Add to Project (engine.cfg)" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Languages:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Translation" +msgstr "" + +#: tools/editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Node" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Invalid animation name!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Animation name already exists!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to copy!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation resource on clipboard!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to edit!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create new animation in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save As" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Target Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Rename" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations.." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters.." +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing %d Triangles:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Light Baker Setup:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing Geometry" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Fixing Lights" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Making BVH" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Light Octree" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Octree Texture" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Transfer to Lightmaps:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Allocating Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Baking Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Post-Processing Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Reset the lightmap octree baking process (start over)." +msgstr "" + +#: tools/editor/plugins/camera_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Pivot" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom (%):" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Expand to Parent" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Reset" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Set.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchor" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set a Value" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap (Pixels):" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Creating Mesh Library" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh.." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image.." +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Set Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Mesh" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Node" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Clear Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Positions:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Fill:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Surface" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: tools/editor/plugins/rich_text_editor_plugin.cpp +msgid "Parse BBCode" +msgstr "" + +#: tools/editor/plugins/sample_editor_plugin.cpp +msgid "Length:" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Open Sample File(s)" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "ERROR: Couldn't load sample!" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Add Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Rename Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Delete Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "16 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "8 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stereo" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Mono" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "File" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_editor.cpp +msgid "New" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Window" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Left" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Right" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Tutorials" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Open https://godotengine.org at tutorials section." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the class hierarchy." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Lighting" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling to %s%%." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Environment" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "No scene selected to instance!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Instance at Cursor" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Could not instance scene!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog.." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default Light" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default sRGB" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Shadeless" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Default Light Normal:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Ambient Light Color:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Up" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Down" +msgstr "" + +#: tools/editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp +msgid "Options" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Have,Many,Several,Options!" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Style" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase selection" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Find tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Error" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Edit Script Options" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Please export outside the project folder!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error exporting project!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error writing the project PCK!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "No exporter for platform '%s' yet." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Include" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Change Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name can't be empty!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Invalid character in group name!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name already exists!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Add Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Delete Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas Preview" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export Settings" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Target" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export to Platform" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export selected resources (including dependencies)." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all resources in the project." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all files in the project directory." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources to Export:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Action" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert text scenes to binary on export." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep Original" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy, WebP)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for RAM (BC/PVRTC/ETC)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert Images (*.png):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy) Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink All Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Formats:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Groups" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Groups:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Disk" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress RAM" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Lossy Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink By:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Preview Atlas" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Filter:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Select None" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Samples" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sample Conversion Mode: (.wav files):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress (RAM - IMA-ADPCM)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sampling Rate Limit (Hz):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trim" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trailing Silence:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Text" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compiled" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Encryption Key (256-bits as hex):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Project PCK" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export.." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Preset:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, the path must exist!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must not exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Couldn't create engine.cfg in project path." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path (Must Exist):" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "That's a BINGO!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Key " +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Axis" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Invalid action (anything goes but '/' or ':')." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Press a Key.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Left Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Right Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Middle Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Up Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Down Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 6" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 7" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 8" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 9" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Axis Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Toggle Persisting" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Error saving settings." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Settings saved OK." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Remapped Path" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Project Settings (engine.cfg)" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +msgid "Property:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Del" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Copy To Platform.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Input Map" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Device:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Localization" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resources:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Locale" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "AutoLoad" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Plugins" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Preset.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "File.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Dir.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Load" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Couldn't load image" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "On" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Set" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Properties:" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Global" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Sections:" +msgstr "" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Adicionar propriedade Setter" + +#: tools/editor/property_selector.cpp +msgid "Select Method" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Create New Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Open Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Save Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Resource Tools" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Make Local" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "OK :(" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Ok" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save New Scene As.." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Makes Sense!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Groups" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Connections" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Script" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "" +"This item cannot be made visible because the parent is hidden. Unhide the " +"parent first." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Editable Children" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Load As Placeholder" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Discard Instancing" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear!" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid parent class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid chars:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Parent class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid path!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Could not create script in filesystem." +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "File exists" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Built-In Script" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Create Node Script" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Warning" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Function:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Variable" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Inspector" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Scene Tree:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Object Properties: " +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: tools/editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" diff --git a/tools/translations/ro.po b/tools/translations/ro.po new file mode 100644 index 0000000000..8e0dc574be --- /dev/null +++ b/tools/translations/ro.po @@ -0,0 +1,6510 @@ +# Romanian translation of the Godot Engine editor +# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community +# This file is distributed under the same license as the Godot source code. +# +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"Language: ro\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "step argument is zero!" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Not a script with an instance" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a script" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a resource file" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" + +#: scene/2d/particles_2d.cpp +msgid "Path property must point to a valid Particles2D node to work." +msgstr "" + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "" + +#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SamplePlayer to play sound." +msgstr "" + +#: scene/2d/sprite.cpp +msgid "" +"Path property must point to a valid Viewport node to work. Such Viewport " +"must be set to 'render target' mode." +msgstr "" + +#: scene/2d/sprite.cpp +msgid "" +"The Viewport set in the path property must be set as 'render target' in " +"order for this sprite to work." +msgstr "" + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + +#: scene/3d/body_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/body_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" + +#: scene/3d/spatial_sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SpatialSamplePlayer to play sound." +msgstr "" + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" + +#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Cancel" +msgstr "" + +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp +msgid "OK" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Recognized" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Files (*)" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Open" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Save a File" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Create Folder" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/editor_file_dialog.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Path:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Directories & Files:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "File:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Filter:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Name:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Could not create folder." +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Must use a valid extension." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "" + +#: scene/gui/input_action.cpp +msgid "Ctrl+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Meta+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Device" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Button" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Left Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Right Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Middle Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Up." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Down." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Axis" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Cut" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Copy" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Paste" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "Select All" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/rich_text_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Clear" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Undo" +msgstr "" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font size." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Disabled" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "All Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Add Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transition" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Value" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Call" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Continuous" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Discrete" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Trigger" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "" + +#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp +msgid "Linear" +msgstr "" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "In" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Out" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "In-Out" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Out-In" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Transitions" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "" + +#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/particles_editor_plugin.cpp +#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp +msgid "Create" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Length (s):" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Step (s):" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move current track up." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move current track down." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Track tools" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim. Optimizer" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Optimize" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Transition" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Category:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Method List For '%s':" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Call" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Method List:" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Arguments:" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Return:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Go to Line" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Line Number:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "No Matches" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d Ocurrence(s)." +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace All" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Match Case" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Whole Words" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Selection Only" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Search" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +msgid "Find" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Next" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d ocurrence(s)." +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Not found!" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace By" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Case Sensitive" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Backwards" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Prompt On Replace" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Skip" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Col:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Add" +msgstr "" + +#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Remove" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Make Function" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Deferred" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Create Subscription" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect.." +msgstr "" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "" + +#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp +msgid "Signals" +msgstr "" + +#: tools/editor/create_dialog.cpp +msgid "Create New" +msgstr "" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Matches:" +msgstr "" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Resource" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp +msgid "Path" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Scene failed to load due to missing dependencies:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Open Anyway" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Owns" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Name" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "List:" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating Scene" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Storing local changes.." +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating scene.." +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "" + +#: tools/editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Class List:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Search Classes" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp +msgid "Class:" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Inherited by:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Brief Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Public Methods:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Constants:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Method Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Search Text" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Added:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Removed:" +msgstr "" + +#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp +msgid "Error saving atlas:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Could not save atlas subtexture:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Storing File:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Packing" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Exporting for %s" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Setting Up.." +msgstr "" + +#: tools/editor/editor_log.cpp +msgid " Output:" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Importing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Importing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Node From Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Error saving resource!" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Save Resource As.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "I see.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error while saving." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Saving Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Analyzing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Failed to load resource." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Loading Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Params" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Paste Params" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Built-In" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open in Help" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in later in \"Project Settings\" under the " +"'application' category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Script.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Yes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close scene? (Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Please save the scene first." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Translatable Strings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Run Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Open Project Manager? \n" +"(Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "Ugh" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error loading scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Default" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s) or folder(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Fullscreen Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Next tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Inherited Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Goto Prev. Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Recent" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Filter Files.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Convert To.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Translatable Strings.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "MeshLibrary.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "TileSet.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Redo" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Run Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import assets to the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Tools" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export the project to many platforms." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Play" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause the scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stop" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Debug options" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Settings" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Install Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "About" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Alerts when an external resource has changed." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Always" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Save As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Object properties." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Password:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Version:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Start Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Fixed Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp +msgid "Time:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Please wait for scan to complete." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Current scene must be saved to re-import." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Save & Re-Import" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import Changed Resources" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: tools/editor/editor_settings.cpp +msgid "Default (Same as Editor)" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: tools/editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "No bit masks to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must be a complete resource path." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must exist." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Save path is empty!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Import BitMasks" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Target Path:" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Accept" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Bit Mask" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No source font file!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No target font resource!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"Invalid file extension.\n" +"Please use .fnt." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Can't load/process source font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Couldn't save font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Dest Resource:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "The quick brown fox jumps over the lazy dog." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Test:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Options:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Font Import" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"This file is already a Godot font file, please supply a BMFont type file " +"instead." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Failed opening as BMFont file." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font custom source." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "No meshes to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Single Mesh Import" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Source Mesh(es):" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Surface %d" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "No samples to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Import Audio Samples" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Source Sample(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Audio Sample" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "New Clip" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Animation Options" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Flags" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Bake FPS:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Optimizer" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Linear Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angular Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angle" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Clips" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Start(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "End(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Filters" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error importing scene." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import 3D Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source Scene:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Same as Target Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Shared" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Target Texture Folder:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Post-Process Script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Custom Root Node Type:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Auto" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "The Following Files are Missing:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Anyway" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import & Open" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Edited scene has not been saved, open imported scene anyway?" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Importing Scene.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Running Custom Script.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error running post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Can't import a file over itself:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't localize path: %s (already local)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Saving.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "3D Scene Animation" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Uncompressed" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossless (PNG)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossy (WebP)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress (VRAM)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Format" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Compression Quality (WebP):" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Options" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Please specify some files!" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "At least one file needed for Atlas." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Error importing:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Only one file is required for large texture." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Max Texture Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for Atlas (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cell Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Textures (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Base Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 2D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 3D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "2D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "3D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "" +"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " +"the project." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Crop empty space." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Load Source Image" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Slicing" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Inserting" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Saving" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save large texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Build Atlas For:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Loading Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't load image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Converting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cropping Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Blitting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save atlas image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save converted texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid translation source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Column" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No items to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No target path!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translations" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Couldn't import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translation" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Source CSV:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Ignore First Row" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Compress" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Add to Project (engine.cfg)" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Languages:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Translation" +msgstr "" + +#: tools/editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Node" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Invalid animation name!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Animation name already exists!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to copy!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation resource on clipboard!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to edit!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create new animation in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save As" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Target Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Rename" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations.." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters.." +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing %d Triangles:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Light Baker Setup:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing Geometry" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Fixing Lights" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Making BVH" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Light Octree" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Octree Texture" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Transfer to Lightmaps:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Allocating Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Baking Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Post-Processing Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Reset the lightmap octree baking process (start over)." +msgstr "" + +#: tools/editor/plugins/camera_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Pivot" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom (%):" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Expand to Parent" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Reset" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Set.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchor" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set a Value" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap (Pixels):" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Creating Mesh Library" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh.." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image.." +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Set Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Mesh" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Node" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Clear Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Positions:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Fill:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Surface" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: tools/editor/plugins/rich_text_editor_plugin.cpp +msgid "Parse BBCode" +msgstr "" + +#: tools/editor/plugins/sample_editor_plugin.cpp +msgid "Length:" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Open Sample File(s)" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "ERROR: Couldn't load sample!" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Add Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Rename Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Delete Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "16 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "8 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stereo" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Mono" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "File" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_editor.cpp +msgid "New" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Window" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Left" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Right" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Tutorials" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Open https://godotengine.org at tutorials section." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the class hierarchy." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Lighting" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling to %s%%." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Environment" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "No scene selected to instance!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Instance at Cursor" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Could not instance scene!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog.." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default Light" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default sRGB" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Shadeless" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Default Light Normal:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Ambient Light Color:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Up" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Down" +msgstr "" + +#: tools/editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp +msgid "Options" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Have,Many,Several,Options!" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Style" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase selection" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Find tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Error" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Edit Script Options" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Please export outside the project folder!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error exporting project!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error writing the project PCK!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "No exporter for platform '%s' yet." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Include" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Change Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name can't be empty!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Invalid character in group name!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name already exists!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Add Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Delete Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas Preview" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export Settings" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Target" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export to Platform" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export selected resources (including dependencies)." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all resources in the project." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all files in the project directory." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources to Export:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Action" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert text scenes to binary on export." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep Original" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy, WebP)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for RAM (BC/PVRTC/ETC)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert Images (*.png):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy) Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink All Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Formats:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Groups" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Groups:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Disk" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress RAM" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Lossy Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink By:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Preview Atlas" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Filter:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Select None" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Samples" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sample Conversion Mode: (.wav files):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress (RAM - IMA-ADPCM)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sampling Rate Limit (Hz):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trim" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trailing Silence:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Text" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compiled" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Encryption Key (256-bits as hex):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Project PCK" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export.." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Preset:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, the path must exist!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must not exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Couldn't create engine.cfg in project path." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path (Must Exist):" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "That's a BINGO!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Key " +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Axis" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Invalid action (anything goes but '/' or ':')." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Press a Key.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Left Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Right Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Middle Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Up Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Down Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 6" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 7" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 8" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 9" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Axis Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Toggle Persisting" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Error saving settings." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Settings saved OK." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Remapped Path" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Project Settings (engine.cfg)" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +msgid "Property:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Del" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Copy To Platform.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Input Map" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Device:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Localization" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resources:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Locale" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "AutoLoad" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Plugins" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Preset.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "File.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Dir.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Load" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Couldn't load image" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "On" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Set" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Properties:" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Global" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Sections:" +msgstr "" + +#: tools/editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: tools/editor/property_selector.cpp +msgid "Select Method" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Create New Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Open Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Save Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Resource Tools" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Make Local" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "OK :(" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Ok" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save New Scene As.." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Makes Sense!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Groups" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Connections" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Script" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "" +"This item cannot be made visible because the parent is hidden. Unhide the " +"parent first." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Editable Children" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Load As Placeholder" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Discard Instancing" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear!" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid parent class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid chars:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Parent class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid path!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Could not create script in filesystem." +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "File exists" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Built-In Script" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Create Node Script" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Warning" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Function:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Variable" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Inspector" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Scene Tree:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Object Properties: " +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: tools/editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" diff --git a/tools/translations/ru.po b/tools/translations/ru.po index 6575252a3f..7b047d9a1e 100644 --- a/tools/translations/ru.po +++ b/tools/translations/ru.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2016-07-01 17:28+0000\n" +"PO-Revision-Date: 2016-08-17 20:35+0000\n" "Last-Translator: DimOkGamer <dimokgamer@gmail.com>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" @@ -20,13 +20,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 2.7-dev\n" +"X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Неверный тип аргумента для convert(), используйте TYPE_* константы." #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Не хватает байтов для декодирования байтов, или неверный формат." @@ -63,6 +65,287 @@ msgstr "Недопустимый формат экземпляра словар msgid "Invalid instance dictionary (invalid subclasses)" msgstr "Недопустимый экземпляр словаря (неверные подклассы)" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"Узел покинут без рабочей памяти, пожалуйста, прочитайте документацию о том, " +"как правильно выходить!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"Узел покинут, но не возвращает состояние функции в первой рабочей памяти." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"Возвращаемое значение должно быть присвоено первому элементу узла рабочей " +"памяти! Исправьте узел пожалуйста." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "Узел вернул ошибочную последовательность: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" +"Найдена последовательность бит, но не узел в стеке, сообщение об ошибке!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Переполнение стека с глубиной стека: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Функции:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Переменные:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Сигналы:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "Имя не является допустимым идентификатором:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Имя уже используется другой функцией/переменной/сигналом:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Переименовать функцию" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Переименовать переменную" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Переименовать сигнал" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Добавить функцию" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Добавить переменную" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Добавить сигнал" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Удалить функцию" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Удалить переменную" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Редактирование переменной:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Удалить сигнал" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Редактирование сигнала:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Добавить узел" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Добавить дочерний узел" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Добавить узел(узлы) из дерева" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Добавить получающее свойство" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Добавить устанавливающее свойство" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Редактировать" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Базовый тип:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Участники:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Доступные узлы:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Выберите или создайте функцию для редактирования графа" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Закрыть" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Редактирование аргументов сигнала:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Редактировать переменную:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Изменить" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Удалить выделенное" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Точка остановки" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Найти тип узла" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "Копировать позу" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "Создать узел" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Вставить позу" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "Входной тип не итерируемый: " + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "Итератор стал недействительным" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "Итератор стал недействительным: " + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "Неверный индекс свойства имени." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "Базовый объект не является узлом!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "Путь не приводит к узлу!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "Неправильный индекс свойства имени '%s' в узле %s." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": Недопустимый аргумент типа: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Недопустимые аргументы: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "VariableGet не найден в скрипте: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "VariableSet не найден в скрипте: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" +"Пользовательский узел не имеет метода _step(), не возможно обрабатывать граф." + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" +"Недопустимое значение, возвращаемое _step(), должно быть целое число(seq " +"out) или строка (error)." + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -205,6 +488,10 @@ msgstr "" "VisibilityEnable2D работает наилучшим образом при использовании корня " "редактируемой сцены, как прямого родителя." +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance не содержит BakedLight ресурс." + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -277,7 +564,7 @@ msgstr "" msgid "Cancel" msgstr "Отмена" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "Ок" @@ -303,8 +590,9 @@ msgstr "Все файлы (*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "Открыть" @@ -427,13 +715,13 @@ msgid "Axis" msgstr "Ось" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "Вырезать" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -441,7 +729,7 @@ msgstr "Копировать" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -449,7 +737,7 @@ msgid "Paste" msgstr "Вставить" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -463,7 +751,7 @@ msgid "Clear" msgstr "Очистить" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "Отменить" @@ -597,9 +885,8 @@ msgid "Duplicate Transposed" msgstr "Дублировать перемещённый" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Remove Selection" -msgstr "Кадрировать выбранное" +msgstr "Убрать выделение" #: tools/editor/animation_editor.cpp msgid "Continuous" @@ -796,6 +1083,10 @@ msgid "Optimize" msgstr "Оптимизировать" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "Выберите AnimationPlayer из дерева сцены для редактирования анимаций." + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "Ключ" @@ -845,7 +1136,8 @@ msgstr "Изменить значение массива" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "Поиск:" @@ -899,18 +1191,6 @@ msgstr "Список способ для '%s':" msgid "Call" msgstr "Вызов" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "Закрыть" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "Список методов:" @@ -961,6 +1241,7 @@ msgstr "Только выделять" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -1002,6 +1283,20 @@ msgstr "Подтверждение замены" msgid "Skip" msgstr "Пропустить" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Приблизить" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Отдалить" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Сбросить приближение" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "Стр:" @@ -1091,10 +1386,16 @@ msgid "Create New" msgstr "Создать новый" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "Совпадения:" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Описание:" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Поиск замены для:" @@ -1210,8 +1511,9 @@ msgid "Delete selected files?" msgstr "Удалить выбранные файлы?" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "Удалить" @@ -1242,22 +1544,18 @@ msgstr "" "константы." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid Path." -msgstr "Недопустимый путь!" +msgstr "Недопустимый путь." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "File does not exist." -msgstr "Файл существует" +msgstr "Файл не существует." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." -msgstr "Путь ресурса" +msgstr "Не в пути ресурсов." #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Add AutoLoad" msgstr "Добавлена автозагрузка" @@ -1286,9 +1584,8 @@ msgid "Enable" msgstr "Включить" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rearrange Autoloads" -msgstr "Переименовать автозагрузку" +msgstr "Перестановка автозагрузок" #: tools/editor/editor_autoload_settings.cpp msgid "Node Name:" @@ -1362,16 +1659,14 @@ msgid "Focus Path" msgstr "Фокус на пути" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" -msgstr "Избранное по порядку" +msgstr "Переместить избранное вверх" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" -msgstr "Избранное в обратном порядке" +msgstr "Переместить избранное вниз" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "Избранное:" @@ -1384,10 +1679,6 @@ msgid "Preview:" msgstr "Предпросмотр:" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "Невозможно перейти в подпапку:" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "Просканировать исходники" @@ -1425,25 +1716,13 @@ msgid "Public Methods:" msgstr "Список методов:" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "Участники:" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Тема элементов GUI:" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "Сигналы:" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "Константы:" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Описание:" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "Описание методов:" @@ -1747,7 +2026,6 @@ msgstr "" "(Несохранённые изменения будут потеряны.)" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" msgstr "Выберите главную сцену" @@ -1842,9 +2120,8 @@ msgid "Save Scene" msgstr "Сохранить сцену" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Save all Scenes" -msgstr "Сохранить сцену" +msgstr "Сохранить все сцены" #: tools/editor/editor_node.cpp msgid "Close Scene" @@ -1878,7 +2155,7 @@ msgstr "Библиотека полисеток.." msgid "TileSet.." msgstr "Набор тайлов.." -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "Повторить" @@ -1970,9 +2247,8 @@ msgid "Play custom scene" msgstr "Запустить выборочную сцену" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play Custom Scene" -msgstr "Запустить выборочную сцену" +msgstr "Запустить произвольную сцену" #: tools/editor/editor_node.cpp msgid "Debug options" @@ -2311,6 +2587,90 @@ msgstr "" "Невозможно открыть file_type_cache.cch для записи. Не будет сохранён кэш " "типов файлов!" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "Файл назначения и исходный файлы совпадают, нечего делать." + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "Путь назначения и исходный пути совпадают, нечего делать." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "Невозможно переместить каталоги внутрь себя." + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "Невозможно работать с '..'" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "Выберете новое имя и расположение для:" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "Файлы не выбраны!" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "Добавить экземпляр" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "Редактировать зависимости.." + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "Просмотреть владельцев.." + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "Копировать путь" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "Переименовать или Переместить.." + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "Переместить в.." + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "Информация" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "Просмотреть в проводнике" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "Переимпортировать.." + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "Предыдущий каталог" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "Следующий каталог" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "Повторное сканирование файловой системы" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "Переключить статус папки как избранной" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "Добавить выбранную сцену(сцены), как потомка выбранного узла." + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "Переместить" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "Добавить в группу" @@ -3279,10 +3639,6 @@ msgid "Post-Processing Texture #" msgstr "Пост-обработка текстуры #" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "BakedLightInstance не содержит BakedLight ресурс." - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "Запечь!" @@ -3346,8 +3702,8 @@ msgid "Paste Pose" msgstr "Вставить позу" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" -msgstr "Режим выделения (Q)" +msgid "Select Mode" +msgstr "Режим выделения" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -3368,14 +3724,12 @@ msgid "Alt+RMB: Depth list selection" msgstr "Alt+ПКМ: Список выбора глубины" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "Режим перемещения (W)" +msgid "Move Mode" +msgstr "Режим перемещения" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" -msgstr "Режим поворота (E)" +msgid "Rotate Mode" +msgstr "Режим поворота" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp @@ -3411,14 +3765,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "Восстанавливает возможность выбора потомков объекта." #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "Редактировать" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "Использовать привязку" @@ -3475,14 +3821,6 @@ msgid "View" msgstr "Обзор" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "Приблизить" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "Отдалить" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "Сбросить масштаб" @@ -3503,9 +3841,8 @@ msgid "Anchor" msgstr "Привязка" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Keys" -msgstr "Вставить ключ" +msgstr "Вставить ключи" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" @@ -4159,14 +4496,12 @@ msgid "Save Theme As.." msgstr "Сохранить тему как.." #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next script" -msgstr "Создать скрипт" +msgstr "Следующий скрипт" #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Previous script" -msgstr "Предыдущая вкладка" +msgstr "Предыдущий сценарий" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/project_export.cpp @@ -4183,6 +4518,10 @@ msgid "Save All" msgstr "Сохранить всё" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "Мягко перезагрузить скрипты" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "Предыдущий файл" @@ -4203,97 +4542,26 @@ msgid "Save Theme As" msgstr "Сохранить тему как" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "Переместить вверх" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "Переместить вниз" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" -msgstr "Убрать отступ слева" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" -msgstr "Добавить отступ" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" -msgstr "Переключить комментарий" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" -msgstr "Копировать вниз" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" -msgstr "Список автозавершения" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" -msgstr "Удаление пробелов в конце строк" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" -msgstr "Автоотступ" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" -msgstr "Мягко перезагрузить скрипты" +msgid "Close Docs" +msgstr "Закрыть документацию" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find.." msgstr "Найти.." #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find Next" msgstr "Найти следующее" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" -msgstr "Найти предыдущее" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." -msgstr "Заменить.." - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." -msgstr "Перейти к функции.." - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." -msgstr "Перейти к строке.." - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Debug" msgstr "Отладка" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" -msgstr "Точка остановки" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" -msgstr "Удалить все точки остановок" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" -msgstr "Перейти к следующей точке остановки" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" -msgstr "Перейти к предыдущей точке остановки" - -#: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp msgid "Step Over" msgstr "Шаг через" @@ -4330,14 +4598,6 @@ msgid "Move Right" msgstr "Двигать вправо" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" -msgstr "Справка" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" -msgstr "Контекстная справка" - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Tutorials" msgstr "Уроки" @@ -4394,6 +4654,79 @@ msgstr "Отладчик" msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" +"Встроенные скрипты могут быть изменены только, когда сцена, которой они " +"принадлежат, загружена" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "Переместить вверх" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "Переместить вниз" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "Убрать отступ слева" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "Добавить отступ" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "Переключить комментарий" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Копировать вниз" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "Список автозавершения" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "Удаление пробелов в конце строк" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "Автоотступ" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "Удалить все точки остановок" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "Перейти к следующей точке остановки" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "Перейти к предыдущей точке остановки" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "Найти предыдущее" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "Заменить.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "Перейти к функции.." + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "Перейти к строке.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "Контекстная справка" #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Vertex" @@ -4656,57 +4989,56 @@ msgid "Could not instance scene!" msgstr "Не возможно добавить сцену!" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "Режим перемещения (W)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "Режим поворота (E)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "Режим масштабирования (R)" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom View" -msgstr "Вид Снизу." +msgstr "Вид Снизу" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top View" -msgstr "Вид сверху." +msgstr "Вид сверху" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear View" -msgstr "Вид сзади." +msgstr "Вид сзади" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front View" -msgstr "Вид спереди." +msgstr "Вид спереди" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left View" -msgstr "Вид слева." +msgstr "Вид слева" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right View" -msgstr "Вид справа." +msgstr "Вид справа" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "" +msgstr "Переключить перспективный/ортогональный вид" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Insert Animation Key" -msgstr "Вставить анимацию" +msgstr "Вставить ключ анимации" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Focus Selection" -msgstr "Масштаб выбранного промежутка" +msgstr "Показать выбранное" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Selection With View" -msgstr "Совместить с видом" +msgstr "Совместить выбранное с видом" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform" @@ -5429,15 +5761,12 @@ msgid "Couldn't create engine.cfg in project path." msgstr "Не могу создать engine.cfg в папке проекта." #: tools/editor/project_manager.cpp -#, fuzzy msgid "The following files failed extraction from package:" -msgstr "" -"Следующие файлы новее на диске.\n" -"Какие меры должны быть приняты?:" +msgstr "Следующие файлы не удалось извлечения из пакета:" #: tools/editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "Пакет успешно установлен!" #: tools/editor/project_manager.cpp msgid "Import Existing Project" @@ -5460,14 +5789,12 @@ msgid "Project Path:" msgstr "Путь к проекту:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install Project:" -msgstr "Последние проекты:" +msgstr "Установить проект:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install" -msgstr "Добавить экземпляр" +msgstr "Установить" #: tools/editor/project_manager.cpp msgid "Browse" @@ -5486,11 +5813,11 @@ msgid "Unnamed Project" msgstr "Безымянный проект" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" -msgstr "Вы уверены, что открыть несколько проектов?" +msgid "Are you sure to open more than one project?" +msgstr "Вы уверены, что хотите открыть более одного проекта?" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "Вы уверены, что хотите запустить более одного проекта?" #: tools/editor/project_manager.cpp @@ -5498,6 +5825,14 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "Удалить проект из списка? (Содержимое папки не будет изменено)" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" +"Вы собираетесь сканировать %s папки для существующих проектов Godot. " +"Подтверждаете?" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "Менеджер проектов" @@ -5514,6 +5849,10 @@ msgid "Scan" msgstr "Сканировать" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "Выбрать папку для сканирования" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "Новый проект" @@ -5805,6 +6144,16 @@ msgstr "Глобальные" msgid "Sections:" msgstr "Разделы:" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Выбрать точки" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Режим выделения" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "Невозможно запустить PVRTC инструмент:" @@ -5880,6 +6229,10 @@ msgid "No parent to instance a child at." msgstr "Нет родителя для добавления потомка." #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "Нет родителя для добавления сюда сцены." + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "Ошибка при загрузке сцены из %s" @@ -6012,6 +6365,10 @@ msgid "Save Branch as Scene" msgstr "Сохранить ветку, как сцену" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "Удалить (без подтверждения)" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "Добавить/создать новый узел" @@ -6023,6 +6380,10 @@ msgstr "" "Добавить файл сцены как узел. Создаёт наследуемую сцену, если корневой узел " "не существует." +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "Создать новый скрипт для выбранного узла." + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -6087,90 +6448,6 @@ msgstr "Очистить!" msgid "Select a Node" msgstr "Выбрать узел" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Файл назначения и исходный файлы совпадают, нечего делать." - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "Путь назначения и исходный пути совпадают, нечего делать." - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "Невозможно переместить каталоги внутрь себя." - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "Невозможно работать с '..'" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Выберете новое имя и расположение для:" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "Файлы не выбраны!" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "Добавить экземпляр" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "Редактировать зависимости.." - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "Просмотреть владельцев.." - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "Копировать путь" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "Переименовать или Переместить.." - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "Переместить в.." - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "Информация" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "Просмотреть в проводнике" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "Переимпортировать.." - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "Предыдущий каталог" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "Следующий каталог" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "Повторное сканирование файловой системы" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "Переключить статус папки как избранной" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "Добавить выбранную сцену(сцены), как потомка выбранного узла." - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "Переместить" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "Недопустимое имя вышестоящего класса" @@ -6407,6 +6684,19 @@ msgstr "Изменена длинна луча" msgid "Change Notifier Extents" msgstr "Изменены границы уведомителя" +#~ msgid "" +#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but " +#~ "unsequenced ports were specified." +#~ msgstr "" +#~ "Пользовательский узел не имеет _get_output_port_unsequenced(idx,wmem), но " +#~ "неупорядоченные порты были указаны." + +#~ msgid "Cannot go into subdir:" +#~ msgstr "Невозможно перейти в подпапку:" + +#~ msgid "Help" +#~ msgstr "Справка" + #~ msgid "Imported Resources" #~ msgstr "Импортированные ресурсы" diff --git a/tools/translations/sk.po b/tools/translations/sk.po index eaba6f1752..4f3175ddd8 100644 --- a/tools/translations/sk.po +++ b/tools/translations/sk.po @@ -18,10 +18,12 @@ msgstr "" "X-Generator: Weblate 2.7-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Chybný argument convert(), použite TYPE_* konštanty." #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Nedostatok bajtov na dekódovanie, možný chybný formát." @@ -57,6 +59,279 @@ msgstr "" msgid "Invalid instance dictionary (invalid subclasses)" msgstr "" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Signály:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Rename Function" +msgstr "Všetky vybrané" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Signal" +msgstr "Signály:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Function" +msgstr "Všetky vybrané" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Signal" +msgstr "Všetky vybrané" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Editing Signal:" +msgstr "Signály:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Vložiť" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -168,6 +443,10 @@ msgid "" "as parent." msgstr "" +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -223,7 +502,7 @@ msgstr "" msgid "Cancel" msgstr "" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "" @@ -249,8 +528,9 @@ msgstr "" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "Otvoriť" @@ -373,13 +653,13 @@ msgid "Axis" msgstr "Os" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -387,7 +667,7 @@ msgstr "Kopírovať" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -395,7 +675,7 @@ msgid "Paste" msgstr "Vložiť" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -409,7 +689,7 @@ msgid "Clear" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "Späť" @@ -734,6 +1014,10 @@ msgid "Optimize" msgstr "" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "" @@ -783,7 +1067,8 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "" @@ -837,18 +1122,6 @@ msgstr "" msgid "Call" msgstr "" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "" @@ -899,6 +1172,7 @@ msgstr "" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -940,6 +1214,20 @@ msgstr "" msgid "Skip" msgstr "" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "" @@ -1029,10 +1317,16 @@ msgid "Create New" msgstr "" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Popis:" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -1142,8 +1436,9 @@ msgid "Delete selected files?" msgstr "" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "" @@ -1290,7 +1585,7 @@ msgstr "" msgid "Move Favorite Down" msgstr "" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "" @@ -1303,10 +1598,6 @@ msgid "Preview:" msgstr "" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "" @@ -1344,25 +1635,13 @@ msgid "Public Methods:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "Signály:" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "Konštanty:" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Popis:" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "" @@ -1780,7 +2059,7 @@ msgstr "" msgid "TileSet.." msgstr "" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "" @@ -2191,6 +2470,90 @@ msgstr "" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -3146,10 +3509,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "" @@ -3213,7 +3572,7 @@ msgid "Paste Pose" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" +msgid "Select Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3233,13 +3592,11 @@ msgid "Alt+RMB: Depth list selection" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" +msgid "Move Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +msgid "Rotate Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3274,14 +3631,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "" @@ -3338,14 +3687,6 @@ msgid "View" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "" @@ -4044,6 +4385,10 @@ msgid "Save All" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "" @@ -4064,194 +4409,186 @@ msgid "Save Theme As" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" +msgid "Close Docs" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" +msgid "Debug" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" +#: tools/editor/script_editor_debugger.cpp +msgid "Break" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" +msgid "Keep Debugger Open" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find.." +msgid "Window" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Next" +msgid "Move Left" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" +msgid "Move Right" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." +msgid "Tutorials" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." +msgid "Open https://godotengine.org at tutorials section." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." +msgid "Classes" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Debug" +msgid "Search the class hierarchy." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" +msgid "Search the reference documentation." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" +msgid "Go to previous edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" +msgid "Go to next edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" +msgid "Create Script" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Reload" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Break" +msgid "Resave" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp -msgid "Continue" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Keep Debugger Open" +msgid "Debugger" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Window" +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Left" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Right" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Tutorials" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Open https://godotengine.org at tutorials section." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Classes" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the reference documentation." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to previous edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to next edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Create Script" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"The following files are newer on disk.\n" -"What action should be taken?:" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Reload" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Resave" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Debugger" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" msgstr "" #: tools/editor/plugins/shader_editor_plugin.cpp @@ -4515,6 +4852,14 @@ msgid "Could not instance scene!" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "" @@ -5332,11 +5677,11 @@ msgid "Unnamed Project" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "" #: tools/editor/project_manager.cpp @@ -5344,6 +5689,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "" @@ -5360,6 +5711,10 @@ msgid "Scan" msgstr "" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "" @@ -5651,6 +6006,14 @@ msgstr "" msgid "Sections:" msgstr "" +#: tools/editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: tools/editor/property_selector.cpp +msgid "Select Method" +msgstr "" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "" @@ -5724,6 +6087,10 @@ msgid "No parent to instance a child at." msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "" @@ -5852,6 +6219,10 @@ msgid "Save Branch as Scene" msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "" @@ -5861,6 +6232,10 @@ msgid "" "exists." msgstr "" +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5923,90 +6298,6 @@ msgstr "" msgid "Select a Node" msgstr "" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "" diff --git a/tools/translations/sl.po b/tools/translations/sl.po new file mode 100644 index 0000000000..33a9bc3e23 --- /dev/null +++ b/tools/translations/sl.po @@ -0,0 +1,6548 @@ +# Slovenian translation of the Godot Engine editor +# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community +# This file is distributed under the same license as the Godot source code. +# +# matevž lapajne <sivar.lapajne@gmail.com>, 2016. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2016-08-12 09:47+0000\n" +"Last-Translator: matevž lapajne <sivar.lapajne@gmail.com>\n" +"Language-Team: Slovenian <https://hosted.weblate.org/projects/godot-engine/" +"godot/sl/>\n" +"Language: sl\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3;\n" +"X-Generator: Weblate 2.8-dev\n" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "Neveljavena vrsta argumenta za convert(), uporabite TYPE_* konstanto." + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "Ni dovolj pomnilnika za dekodiranje bajtov, ali neveljaven format." + +#: modules/gdscript/gd_functions.cpp +msgid "step argument is zero!" +msgstr "stopnja argumenta je nič!" + +#: modules/gdscript/gd_functions.cpp +msgid "Not a script with an instance" +msgstr "To ni skripta z instanco" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a script" +msgstr "Ne temelji na skripti" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a resource file" +msgstr "Ne temelji na datoteki virov" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "Neveljaven primer formata slovarja (manjka @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" +"Neveljaven primer formata slovarja (ni mogoče naložiti skripte iz @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "Neveljaven primer formata slovarja (neveljavna skripta v @path)" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "Neveljaven primer slovarja (neveljavni podrazredi)" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"Node je bil sprejet brez potrebnega pomnilnika, pravilen postopek je opisan " +"v dokumentaciji!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" +"Node pridobljen, vendar se ne vrne v funkcijalno stanje v prvem delavnem " +"spominu." + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" +"Vrnjena vrednost mora biti dodeljena prvemu elementu v node-delavnemu " +"spominu! Prosim, da popraviš node." + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "Node je vrnil napačno zaporedje na izhodu: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "Zaporedni bit najden, vendar ne node v skladu, prijavi napako!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "Sklad prepoln z stack depth: " + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Funkcije:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Spremenljivke:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Signali:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "Ime ni pravilen identifikator:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Ime že uporablja druga funkcija/sprem/signal:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Preimenuj Funkcijo" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Preimenuj Spremenljivko" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Preimenuj Signal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Dodaj Funkcijo" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Dodaj Spremenljivko" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Dodaj Signal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Odstrani Funkcijo" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Odstrani Spremenljivko" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Urejanje Spremenljivke:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Odstrani Signal" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Urejanje Signala:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Dodaj Node" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Dodaj Node" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Dodaj Node(e) iz Drevesa" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Dodaj Getter Lastnost" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Dodaj Setter Lastnost" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Uredi" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Osnovni Tip:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Člani:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "Na voljo Nodes:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "Izberi ali ustvari funkcijo za urejanje grafa" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Zapri" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "Uredi Argumente Signala:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Uredi Spremenljivko:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Spremeni" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Izbriši Izbrano" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "Preklopi na Zaustavitev" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "Najdi Node Type" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "Vhodni tip ni spremenljiv: " + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "Iterator je bil neveljaven" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "Iterator je neveljaven: " + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "Neveljaven indeks lastnosti imena." + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "Osnovni objekt ni Node!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "Pot ne vodi do Node!" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "Neveljaven indeks lastnosti imena '%s' v node %s." + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ": Neveljaven argument od tipa: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ": Neveljavni argumenti: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "VariableGet ni najden v skripti: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "VariableSet ni najden v skripti: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "Custom node nima _step() metode, grafa ni mogoče obdelati." + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" +"Neveljavna vrnitev vrednosti od _step(), mora biti število (seq out), ali " +"string (error)." + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" +"Vir SpriteFrame mora biti ustvarjen ali nastavljen v 'Frames' lastnosti z " +"namenom, da AnimatedSprite prikaže sličice." + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" +"Le en viden CanvasModulate je dovoljen na sceno (ali niz instanciranih " +"scen). Prvi ustvarjen se bo uporabil, medtem ko bodo drugi prezrti." + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionPolygon2D služi le, da zagotavlja collision obliko nodu " +"CollisionObject2D, ki izhaja iz njega. Naprošamo vas, da ga uporabite le kot " +"otroka od Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. da jim " +"date obliko." + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "Prazen CollisionPolygon2D nima vpliva na collision." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" +"CollisionShape2D služi le, da zagotavlja collision obliko nodu " +"CollisionObject2D, ki izhaja iz njega. Naprošamo vas, da ga uporabite le kot " +"otroka od Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. da jim " +"date obliko." + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" + +#: scene/2d/particles_2d.cpp +msgid "Path property must point to a valid Particles2D node to work." +msgstr "" + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "" + +#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SamplePlayer to play sound." +msgstr "" + +#: scene/2d/sprite.cpp +msgid "" +"Path property must point to a valid Viewport node to work. Such Viewport " +"must be set to 'render target' mode." +msgstr "" + +#: scene/2d/sprite.cpp +msgid "" +"The Viewport set in the path property must be set as 'render target' in " +"order for this sprite to work." +msgstr "" + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + +#: scene/3d/body_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/body_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" + +#: scene/3d/spatial_sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SpatialSamplePlayer to play sound." +msgstr "" + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" + +#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Cancel" +msgstr "" + +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp +msgid "OK" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Recognized" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Files (*)" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Open" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Save a File" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Create Folder" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/editor_file_dialog.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Path:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Directories & Files:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "File:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Filter:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Name:" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Could not create folder." +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Must use a valid extension." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "" + +#: scene/gui/input_action.cpp +msgid "Ctrl+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Meta+" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Device" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Button" +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Left Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Right Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Middle Button." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Up." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Down." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Axis" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Cut" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Copy" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Paste" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "Select All" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/rich_text_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Clear" +msgstr "" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Undo" +msgstr "" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font size." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Disabled" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "All Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Add Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transition" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Value" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Call" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Continuous" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Discrete" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Trigger" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "" + +#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp +msgid "Linear" +msgstr "" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "In" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Out" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "In-Out" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Out-In" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Transitions" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "" + +#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/particles_editor_plugin.cpp +#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp +msgid "Create" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Length (s):" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Step (s):" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move current track up." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move current track down." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Track tools" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim. Optimizer" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Optimize" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Transition" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Category:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Method List For '%s':" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Call" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Method List:" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Arguments:" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Return:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Go to Line" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Line Number:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "No Matches" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d Ocurrence(s)." +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace All" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Match Case" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Whole Words" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Selection Only" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Search" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +msgid "Find" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Next" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d ocurrence(s)." +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Not found!" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace By" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Case Sensitive" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Backwards" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Prompt On Replace" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Skip" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Col:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Add" +msgstr "" + +#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Remove" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Make Function" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Deferred" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Create Subscription" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect.." +msgstr "" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "" + +#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp +msgid "Signals" +msgstr "" + +#: tools/editor/create_dialog.cpp +msgid "Create New" +msgstr "" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Matches:" +msgstr "" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Resource" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp +msgid "Path" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Scene failed to load due to missing dependencies:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Open Anyway" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Owns" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Name" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "List:" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating Scene" +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Storing local changes.." +msgstr "" + +#: tools/editor/editor_data.cpp +msgid "Updating scene.." +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "" + +#: tools/editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Class List:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Search Classes" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp +msgid "Class:" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Inherited by:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Brief Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Public Methods:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Constants:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Method Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Search Text" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Added:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Removed:" +msgstr "" + +#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp +msgid "Error saving atlas:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Could not save atlas subtexture:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Storing File:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Packing" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Exporting for %s" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Setting Up.." +msgstr "" + +#: tools/editor/editor_log.cpp +msgid " Output:" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Importing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Importing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Node From Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Error saving resource!" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Save Resource As.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "I see.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error while saving." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Saving Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Analyzing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Failed to load resource." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Loading Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Params" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Paste Params" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Resource" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Built-In" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open in Help" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in later in \"Project Settings\" under the " +"'application' category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Script.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Yes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close scene? (Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Please save the scene first." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Translatable Strings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Run Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Open Project Manager? \n" +"(Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "Ugh" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error loading scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Default" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s) or folder(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Fullscreen Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Next tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Inherited Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Goto Prev. Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Recent" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Filter Files.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Convert To.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Translatable Strings.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "MeshLibrary.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "TileSet.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Redo" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Run Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import assets to the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Tools" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export the project to many platforms." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Play" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause the scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stop" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Debug options" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Settings" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Install Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "About" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Alerts when an external resource has changed." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Always" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Save As.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Object properties." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Password:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Version:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Start Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Fixed Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp +msgid "Time:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Please wait for scan to complete." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Current scene must be saved to re-import." +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Save & Re-Import" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import Changed Resources" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: tools/editor/editor_settings.cpp +msgid "Default (Same as Editor)" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: tools/editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: tools/editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "No bit masks to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must be a complete resource path." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must exist." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Save path is empty!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Import BitMasks" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Target Path:" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Accept" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Bit Mask" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No source font file!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No target font resource!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"Invalid file extension.\n" +"Please use .fnt." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Can't load/process source font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Couldn't save font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Dest Resource:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "The quick brown fox jumps over the lazy dog." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Test:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Options:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Font Import" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"This file is already a Godot font file, please supply a BMFont type file " +"instead." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Failed opening as BMFont file." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font custom source." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "No meshes to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Single Mesh Import" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Source Mesh(es):" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Surface %d" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "No samples to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Import Audio Samples" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Source Sample(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Audio Sample" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "New Clip" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Animation Options" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Flags" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Bake FPS:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Optimizer" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Linear Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angular Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angle" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Clips" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Start(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "End(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Filters" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error importing scene." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import 3D Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source Scene:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Same as Target Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Shared" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Target Texture Folder:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Post-Process Script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Custom Root Node Type:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Auto" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "The Following Files are Missing:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Anyway" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import & Open" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Edited scene has not been saved, open imported scene anyway?" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Importing Scene.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Running Custom Script.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error running post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Can't import a file over itself:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't localize path: %s (already local)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Saving.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "3D Scene Animation" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Uncompressed" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossless (PNG)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossy (WebP)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress (VRAM)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Format" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Compression Quality (WebP):" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Options" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Please specify some files!" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "At least one file needed for Atlas." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Error importing:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Only one file is required for large texture." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Max Texture Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for Atlas (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cell Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Textures (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Base Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 2D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 3D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "2D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "3D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "" +"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " +"the project." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Crop empty space." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Load Source Image" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Slicing" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Inserting" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Saving" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save large texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Build Atlas For:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Loading Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't load image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Converting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cropping Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Blitting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save atlas image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save converted texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid translation source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Column" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No items to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No target path!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translations" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Couldn't import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translation" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Source CSV:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Ignore First Row" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Compress" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Add to Project (engine.cfg)" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Languages:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Translation" +msgstr "" + +#: tools/editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Node" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Invalid animation name!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Animation name already exists!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to copy!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation resource on clipboard!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to edit!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create new animation in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save As" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Target Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Rename" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations.." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters.." +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing %d Triangles:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Light Baker Setup:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing Geometry" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Fixing Lights" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Making BVH" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Light Octree" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Octree Texture" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Transfer to Lightmaps:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Allocating Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Baking Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Post-Processing Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Reset the lightmap octree baking process (start over)." +msgstr "" + +#: tools/editor/plugins/camera_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Pivot" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom (%):" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Expand to Parent" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Reset" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Set.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchor" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set a Value" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap (Pixels):" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Creating Mesh Library" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh.." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image.." +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Set Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Mesh" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Node" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Clear Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Positions:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Fill:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Surface" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: tools/editor/plugins/rich_text_editor_plugin.cpp +msgid "Parse BBCode" +msgstr "" + +#: tools/editor/plugins/sample_editor_plugin.cpp +msgid "Length:" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Open Sample File(s)" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "ERROR: Couldn't load sample!" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Add Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Rename Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Delete Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "16 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "8 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stereo" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Mono" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "File" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_editor.cpp +msgid "New" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Window" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Left" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Right" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Tutorials" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Open https://godotengine.org at tutorials section." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the class hierarchy." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Lighting" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling to %s%%." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Environment" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "No scene selected to instance!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Instance at Cursor" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Could not instance scene!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog.." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default Light" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default sRGB" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Shadeless" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Default Light Normal:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Ambient Light Color:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Up" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Down" +msgstr "" + +#: tools/editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp +msgid "Options" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Have,Many,Several,Options!" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Style" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase selection" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Find tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Error" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Edit Script Options" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Please export outside the project folder!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error exporting project!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error writing the project PCK!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "No exporter for platform '%s' yet." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Include" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Change Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name can't be empty!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Invalid character in group name!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name already exists!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Add Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Delete Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas Preview" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export Settings" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Target" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export to Platform" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export selected resources (including dependencies)." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all resources in the project." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all files in the project directory." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources to Export:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Action" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert text scenes to binary on export." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep Original" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy, WebP)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for RAM (BC/PVRTC/ETC)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert Images (*.png):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy) Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink All Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Formats:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Groups" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Groups:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Disk" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress RAM" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Lossy Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink By:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Preview Atlas" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Filter:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Select None" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Samples" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sample Conversion Mode: (.wav files):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress (RAM - IMA-ADPCM)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sampling Rate Limit (Hz):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trim" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trailing Silence:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Text" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compiled" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Encryption Key (256-bits as hex):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Project PCK" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export.." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Preset:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, the path must exist!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must not exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Couldn't create engine.cfg in project path." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path (Must Exist):" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "That's a BINGO!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Key " +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Axis" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Invalid action (anything goes but '/' or ':')." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Press a Key.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Left Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Right Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Middle Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Up Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Down Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 6" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 7" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 8" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 9" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Axis Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Toggle Persisting" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Error saving settings." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Settings saved OK." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Remapped Path" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Project Settings (engine.cfg)" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +msgid "Property:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Del" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Copy To Platform.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Input Map" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Device:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Localization" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resources:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Locale" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "AutoLoad" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Plugins" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Preset.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "File.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Dir.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Load" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Couldn't load image" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "On" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Set" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Properties:" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Global" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Sections:" +msgstr "" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Dodaj Setter Lastnost" + +#: tools/editor/property_selector.cpp +msgid "Select Method" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Create New Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Open Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Save Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Resource Tools" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Make Local" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "OK :(" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Ok" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save New Scene As.." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Makes Sense!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Groups" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Connections" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Script" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "" +"This item cannot be made visible because the parent is hidden. Unhide the " +"parent first." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Editable Children" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Load As Placeholder" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Discard Instancing" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear!" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid parent class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid chars:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid name" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Parent class name is invalid!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid path!" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Could not create script in filesystem." +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "File exists" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid path" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Built-In Script" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Create Node Script" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Warning" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Function:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Variable" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Inspector" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Scene Tree:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Object Properties: " +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: tools/editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" + +#~ msgid "" +#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but " +#~ "unsequenced ports were specified." +#~ msgstr "" +#~ "Custom node nima _get_output_port_unsequenced(idx,wmem), vendar " +#~ "nezaporedni porti so bili določeni." diff --git a/tools/translations/tools.pot b/tools/translations/tools.pot index 383f22afd6..c86586a055 100644 --- a/tools/translations/tools.pot +++ b/tools/translations/tools.pot @@ -12,10 +12,12 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -51,6 +53,273 @@ msgstr "" msgid "Invalid instance dictionary (invalid subclasses)" msgstr "" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -155,6 +424,10 @@ msgid "" "as parent." msgstr "" +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -210,7 +483,7 @@ msgstr "" msgid "Cancel" msgstr "" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "" @@ -236,8 +509,9 @@ msgstr "" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "" @@ -360,13 +634,13 @@ msgid "Axis" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -374,7 +648,7 @@ msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -382,7 +656,7 @@ msgid "Paste" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -396,7 +670,7 @@ msgid "Clear" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "" @@ -720,6 +994,10 @@ msgid "Optimize" msgstr "" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "" @@ -769,7 +1047,8 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "" @@ -823,18 +1102,6 @@ msgstr "" msgid "Call" msgstr "" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "" @@ -885,6 +1152,7 @@ msgstr "" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -926,6 +1194,20 @@ msgstr "" msgid "Skip" msgstr "" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "" @@ -1015,10 +1297,16 @@ msgid "Create New" msgstr "" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -1128,8 +1416,9 @@ msgid "Delete selected files?" msgstr "" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "" @@ -1276,7 +1565,7 @@ msgstr "" msgid "Move Favorite Down" msgstr "" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "" @@ -1289,10 +1578,6 @@ msgid "Preview:" msgstr "" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "" @@ -1330,25 +1615,13 @@ msgid "Public Methods:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "" @@ -1765,7 +2038,7 @@ msgstr "" msgid "TileSet.." msgstr "" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "" @@ -2176,6 +2449,90 @@ msgstr "" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -3131,10 +3488,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "" @@ -3198,7 +3551,7 @@ msgid "Paste Pose" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" +msgid "Select Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3218,13 +3571,11 @@ msgid "Alt+RMB: Depth list selection" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" +msgid "Move Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +msgid "Rotate Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3259,14 +3610,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "" @@ -3323,14 +3666,6 @@ msgid "View" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "" @@ -4028,6 +4363,10 @@ msgid "Save All" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "" @@ -4048,194 +4387,186 @@ msgid "Save Theme As" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" +msgid "Close Docs" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" +msgid "Debug" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" +#: tools/editor/script_editor_debugger.cpp +msgid "Break" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" +msgid "Keep Debugger Open" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find.." +msgid "Window" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Next" +msgid "Move Left" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" +msgid "Move Right" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." +msgid "Tutorials" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." +msgid "Open https://godotengine.org at tutorials section." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." +msgid "Classes" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Debug" +msgid "Search the class hierarchy." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" +msgid "Search the reference documentation." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" +msgid "Go to previous edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" +msgid "Go to next edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" +msgid "Create Script" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Reload" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Break" +msgid "Resave" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp -msgid "Continue" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Keep Debugger Open" +msgid "Debugger" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Window" +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Left" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Right" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Tutorials" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Open https://godotengine.org at tutorials section." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Classes" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the reference documentation." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to previous edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to next edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Create Script" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"The following files are newer on disk.\n" -"What action should be taken?:" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Reload" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Resave" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Debugger" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" msgstr "" #: tools/editor/plugins/shader_editor_plugin.cpp @@ -4499,6 +4830,14 @@ msgid "Could not instance scene!" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "" @@ -5313,11 +5652,11 @@ msgid "Unnamed Project" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "" #: tools/editor/project_manager.cpp @@ -5325,6 +5664,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "" @@ -5341,6 +5686,10 @@ msgid "Scan" msgstr "" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "" @@ -5632,6 +5981,14 @@ msgstr "" msgid "Sections:" msgstr "" +#: tools/editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: tools/editor/property_selector.cpp +msgid "Select Method" +msgstr "" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "" @@ -5705,6 +6062,10 @@ msgid "No parent to instance a child at." msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "" @@ -5833,6 +6194,10 @@ msgid "Save Branch as Scene" msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "" @@ -5842,6 +6207,10 @@ msgid "" "exists." msgstr "" +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5904,90 +6273,6 @@ msgstr "" msgid "Select a Node" msgstr "" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "" diff --git a/tools/translations/tr.po b/tools/translations/tr.po new file mode 100644 index 0000000000..0c27abe7c5 --- /dev/null +++ b/tools/translations/tr.po @@ -0,0 +1,6543 @@ +# Turkish translation of the Godot Engine editor +# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community +# This file is distributed under the same license as the Godot source code. +# +# Enes Kaya Öcal <ekayaocal@hotmail.com>, 2016. +# M. Yavuz Uzun <myavuzuzun@yandex.com>, 2016. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2016-08-18 00:13+0000\n" +"Last-Translator: M. Yavuz Uzun <myavuzuzun@yandex.com>\n" +"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" +"godot/tr/>\n" +"Language: tr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 2.8-dev\n" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "" + +#: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "step argument is zero!" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Not a script with an instance" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a script" +msgstr "Bir koda bağlı değil" + +#: modules/gdscript/gd_functions.cpp +msgid "Not based on a resource file" +msgstr "Bir kaynak dosyasına bağlı değil" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "" + +#: modules/gdscript/gd_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "Çalışan hafıza olmadan düğüm yerleştirilmiş, lütfen belgeleri okuyun!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Fonksiyonlar:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "Değişkenler:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "Sinyaller:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "İsim doğru bir belirleyici değil:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "Ad zaten başka bir fonksiyon/değişken/sinyal tarafından kullanılıyor:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "Fonksiyonu Yeniden İsimlendir" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "Değişkeni Yeniden İsimlendir" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "Sinyali Yeniden İsimlendir" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "Fonksiyon Ekle" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "Değişken Ekle" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "Sinyal Ekle" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "Fonksiyonu Kaldır" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "Değişkeni Kaldır" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "Değişken Düzenleniyor:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "Sinyali Kaldır" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "Sinyal Düzenleniyor:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Düğüm Ekle" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "Düğüm Ekle" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "Ağaçtan Düğüm(ler) Ekle" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "Alıcı Özellik Ekle" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "Düzenleyici Özellik Ekle" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "Düzenle" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "Taban Tipi:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "Üyeler:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "Kapat" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "Değişkeni Düzenle:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "Değiştir" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "Seçilenleri Sil" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "Kaynağı Kopyala" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "Kaynağı Yapıştır" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +#, fuzzy +msgid "Invalid index property name." +msgstr "Geçersiz ebeveyn sınıf adı" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +#, fuzzy +msgid ": Invalid argument of type: " +msgstr "Geçersiz ebeveyn sınıf adı" + +#: modules/visual_script/visual_script_nodes.cpp +#, fuzzy +msgid ": Invalid arguments: " +msgstr "Geçersiz ebeveyn sınıf adı" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" + +#: scene/2d/particles_2d.cpp +msgid "Path property must point to a valid Particles2D node to work." +msgstr "" + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "" + +#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SamplePlayer to play sound." +msgstr "" + +#: scene/2d/sprite.cpp +msgid "" +"Path property must point to a valid Viewport node to work. Such Viewport " +"must be set to 'render target' mode." +msgstr "" + +#: scene/2d/sprite.cpp +msgid "" +"The Viewport set in the path property must be set as 'render target' in " +"order for this sprite to work." +msgstr "" + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" + +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + +#: scene/3d/body_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/body_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" + +#: scene/3d/spatial_sample_player.cpp +msgid "" +"A SampleLibrary resource must be created or set in the 'samples' property in " +"order for SpatialSamplePlayer to play sound." +msgstr "" + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" + +#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Cancel" +msgstr "İptal" + +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp +msgid "OK" +msgstr "Tamam" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "Uyarı!" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "Lütfen doğrulayınız..." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "Dosya mevcut. Üzerine yazılsın mı?" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Recognized" +msgstr "" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "All Files (*)" +msgstr "Tüm dosyalar (*)" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Open" +msgstr "Aç" + +#: scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "Bir Dosya Aç" + +#: scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "Dosya(ları) aç" + +#: scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "Bir klasör aç" + +#: scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "Bir dosya yada klasör aç" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save" +msgstr "Kaydet" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Save a File" +msgstr "Dosyayı kaydet" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Create Folder" +msgstr "Yeni klasör" + +#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/editor_file_dialog.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Path:" +msgstr "Dosya yolu:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Directories & Files:" +msgstr "Klasörler & Dosyalar:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "File:" +msgstr "Dosya:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Filter:" +msgstr "Filtre:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Name:" +msgstr "İsim:" + +#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp +#: tools/editor/editor_file_dialog.cpp +msgid "Could not create folder." +msgstr "Klasör oluşturulamadı." + +#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp +msgid "Must use a valid extension." +msgstr "Gecerli bir uzantı kullanılmalı." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "Shift+" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "Alt+" + +#: scene/gui/input_action.cpp +msgid "Ctrl+" +msgstr "Ctrl+" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Meta+" +msgstr "Meta+" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Device" +msgstr "Cihaz" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Button" +msgstr "Buton" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Left Button." +msgstr "Sol tuş." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Right Button." +msgstr "Sağ tuş." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Middle Button." +msgstr "Orta tuş." + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Up." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Wheel Down." +msgstr "" + +#: scene/gui/input_action.cpp tools/editor/project_settings.cpp +msgid "Axis" +msgstr "Eksen" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Cut" +msgstr "Kes" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Copy" +msgstr "Kopyala" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp +msgid "Paste" +msgstr "Yapıştır" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "Select All" +msgstr "Hepsini seç" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/rich_text_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Clear" +msgstr "Temizle" + +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Undo" +msgstr "Geri" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Unknown font format." +msgstr "Bilinmeyen yazıtipi türü." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Error loading font." +msgstr "Yazı tipi yüklerken hata." + +#: scene/resources/dynamic_font.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font size." +msgstr "Geçersiz yazı tipi boyutu." + +#: tools/editor/animation_editor.cpp +msgid "Disabled" +msgstr "Devre dışı" + +#: tools/editor/animation_editor.cpp +msgid "All Selection" +msgstr "Tüm seçilenler" + +#: tools/editor/animation_editor.cpp +msgid "Move Add Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transition" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Value" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Change Call" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "Seçimi Kaldır" + +#: tools/editor/animation_editor.cpp +msgid "Continuous" +msgstr "Kesintisiz" + +#: tools/editor/animation_editor.cpp +msgid "Discrete" +msgstr "Ayrık" + +#: tools/editor/animation_editor.cpp +msgid "Trigger" +msgstr "Tetikleyici" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "Sonraki Adıma Git" + +#: tools/editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "Önceki Adıma Git" + +#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp +msgid "Linear" +msgstr "Doğrusal" + +#: tools/editor/animation_editor.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "Sabit" + +#: tools/editor/animation_editor.cpp +msgid "In" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Out" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "In-Out" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Out-In" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Transitions" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "" + +#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/particles_editor_plugin.cpp +#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp +msgid "Create" +msgstr "Oluştur" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Insert" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Length (s):" +msgstr "Uzunluk (lar):" + +#: tools/editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "Animasyon uzunluğu (saniye)." + +#: tools/editor/animation_editor.cpp +msgid "Step (s):" +msgstr "Adım (lar):" + +#: tools/editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "Animasyon tekrarını Aç/Kapat." + +#: tools/editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move current track up." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Move current track down." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Track tools" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Anim. Optimizer" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Optimize" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Key" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Transition" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "" + +#: tools/editor/animation_editor.cpp +msgid "Clean-Up" +msgstr "" + +#: tools/editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "Diziyi Yeniden Boyutlandır" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "Dizinin türünü degistir" + +#: tools/editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp +#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +#: tools/editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Ara:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Sırala:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Tersi" + +#: tools/editor/asset_library_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Category:" +msgstr "Kategori:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Hepsi" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Site:" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Destek..." + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Resmi" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Topluluk" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: tools/editor/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Method List For '%s':" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Call" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Method List:" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Arguments:" +msgstr "" + +#: tools/editor/call_dialog.cpp +msgid "Return:" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Go to Line" +msgstr "Satıra Git" + +#: tools/editor/code_editor.cpp +msgid "Line Number:" +msgstr "Satır numarası:" + +#: tools/editor/code_editor.cpp +msgid "No Matches" +msgstr "Eşleşme Bulunamadı" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d Ocurrence(s)." +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Replace All" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Match Case" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Whole Words" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Selection Only" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Search" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp +msgid "Find" +msgstr "Bul" + +#: tools/editor/code_editor.cpp +msgid "Next" +msgstr "İleri" + +#: tools/editor/code_editor.cpp +msgid "Replaced %d ocurrence(s)." +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Not found!" +msgstr "Bulunamadı!" + +#: tools/editor/code_editor.cpp +msgid "Replace By" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Case Sensitive" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Backwards" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Prompt On Replace" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Skip" +msgstr "Geç" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "Yakınlaştır" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "Uzaklaştır" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + +#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "Satır:" + +#: tools/editor/code_editor.cpp +msgid "Col:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "Düğüme bağlan:" + +#: tools/editor/connections_dialog.cpp +#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp +msgid "Add" +msgstr "Ekle" + +#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Remove" +msgstr "Kaldır" + +#: tools/editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Make Function" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Deferred" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Create Subscription" +msgstr "" + +#: tools/editor/connections_dialog.cpp +msgid "Connect.." +msgstr "Bağlan..." + +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "Bağlantıyı kes" + +#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp +msgid "Signals" +msgstr "" + +#: tools/editor/create_dialog.cpp +msgid "Create New" +msgstr "Yeni oluştur" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp +msgid "Matches:" +msgstr "Eşleşmeler:" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Açıklama:" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" +"'%s' Sahnesi şuanda düzenleniyor.\n" +"Tekrar yüklenene kadar değişiklikler etki etmeyecek." + +#: tools/editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies" +msgstr "Bağımlılık" + +#: tools/editor/dependency_editor.cpp +msgid "Resource" +msgstr "Kaynak" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp +#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp +msgid "Path" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" +"Kaldırılmakta olan dosyalar başka dosyaların çalışması için gerekli.\n" +"Yine de kaldırmak istiyor musunuz?(Geri alınamaz)" + +#: tools/editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Seçili dosyaları projeden kaldır? (Geri alınamaz)" + +#: tools/editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "Yüklerken hata:" + +#: tools/editor/dependency_editor.cpp +msgid "Scene failed to load due to missing dependencies:" +msgstr "" +"Sahnede ki kayıp bağımlılıklar yüzünden sahneyi yükleme başarısız oldu:" + +#: tools/editor/dependency_editor.cpp +msgid "Open Anyway" +msgstr "Yinede Aç" + +#: tools/editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "Bağımlılıkları düzelt" + +#: tools/editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "Yüklemede hata!" + +#: tools/editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "%d Öğeleri kalıcı olarak sil? (No undo!)" + +#: tools/editor/dependency_editor.cpp +msgid "Owns" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: tools/editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "Seçili dosyaları sil?" + +#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/item_list_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "Sil" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "Geçersiz isim." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "Gecerli karakterler:" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "Geçersiz isim. Motora kullanılan sınıf adları kullanılamaz." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "Geçersiz isim. İsim , evrensel sabit isimleriyle aynı olamaz." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "Gecersiz Yol." + +#: tools/editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "Dosya mevcut değil." + +#: tools/editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "Kaynak yolunda degil." + +#: tools/editor/editor_autoload_settings.cpp +#, fuzzy +msgid "Add AutoLoad" +msgstr "AutoLoad ekle" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "Etkin" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "Düğüm adı:" + +#: tools/editor/editor_autoload_settings.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Name" +msgstr "İsim" + +#: tools/editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "Tekil (Singleton)" + +#: tools/editor/editor_autoload_settings.cpp +msgid "List:" +msgstr "Liste:" + +#: tools/editor/editor_data.cpp +msgid "Updating Scene" +msgstr "Sahne Güncelleniyor" + +#: tools/editor/editor_data.cpp +msgid "Storing local changes.." +msgstr "Yerel değişiklikler kayıt ediliyor.." + +#: tools/editor/editor_data.cpp +msgid "Updating scene.." +msgstr "Sahne güncelleniyor.." + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "Dizin Seç" + +#: tools/editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "Seç" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "Geri dön" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "İleri Git" + +#: tools/editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "Yukarı Git" + +#: tools/editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "Yenile" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "" + +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "Favoriler:" + +#: tools/editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "Yakın zamanda:" + +#: tools/editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "Ön izleme:" + +#: tools/editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Yardım Ara" + +#: tools/editor/editor_help.cpp +msgid "Class List:" +msgstr "Sınıf Listesi:" + +#: tools/editor/editor_help.cpp +msgid "Search Classes" +msgstr "Sınıfları Ara" + +#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp +msgid "Class:" +msgstr "Sınıf:" + +#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Inherited by:" +msgstr "Tarafından miras alındı:" + +#: tools/editor/editor_help.cpp +msgid "Brief Description:" +msgstr "" + +#: tools/editor/editor_help.cpp +msgid "Public Methods:" +msgstr "Public Metodlar:" + +#: tools/editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "Arayüz Tema Öğeleri:" + +#: tools/editor/editor_help.cpp +msgid "Constants:" +msgstr "Sabitler:" + +#: tools/editor/editor_help.cpp +msgid "Method Description:" +msgstr "Metot Açıklaması:" + +#: tools/editor/editor_help.cpp +msgid "Search Text" +msgstr "Yazı Ara" + +#: tools/editor/editor_import_export.cpp +msgid "Added:" +msgstr "Eklenen:" + +#: tools/editor/editor_import_export.cpp +msgid "Removed:" +msgstr "Silinen:" + +#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp +msgid "Error saving atlas:" +msgstr "Atlas kaydedilirken hata oluştu:" + +#: tools/editor/editor_import_export.cpp +msgid "Could not save atlas subtexture:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Storing File:" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Packing" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Exporting for %s" +msgstr "" + +#: tools/editor/editor_import_export.cpp +msgid "Setting Up.." +msgstr "" + +#: tools/editor/editor_log.cpp +msgid " Output:" +msgstr " Çıktı:" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Importing" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Importing:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Node From Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Error saving resource!" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/resources_dock.cpp +msgid "Save Resource As.." +msgstr "Kaynağı Farklı Kaydet.." + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "I see.." +msgstr "Anlıyorum.." + +#: tools/editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "Dosya yazmak için açılamıyor:" + +#: tools/editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "Talep edilen dosya formatı bilinmiyor:" + +#: tools/editor/editor_node.cpp +msgid "Error while saving." +msgstr "Kaydedilirken hata oluştu." + +#: tools/editor/editor_node.cpp +msgid "Saving Scene" +msgstr "Sahne Kaydediliyor" + +#: tools/editor/editor_node.cpp +msgid "Analyzing" +msgstr "Analiz Ediliyor" + +#: tools/editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "Küçük Resim Oluşturuluyor" + +#: tools/editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Failed to load resource." +msgstr "Kaynak yüklenirken hata oluştu." + +#: tools/editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Loading Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "Düzen kaydedilmeye çalışılırken hata oluştu!" + +#: tools/editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Copy Params" +msgstr "Parametreleri Kopyala" + +#: tools/editor/editor_node.cpp +msgid "Paste Params" +msgstr "Parametreleri Yapıştır" + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "Kaynağı Yapıştır" + +#: tools/editor/editor_node.cpp +msgid "Copy Resource" +msgstr "Kaynağı Kopyala" + +#: tools/editor/editor_node.cpp +#, fuzzy +msgid "Make Built-In" +msgstr "Göm" + +#: tools/editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "Alt Kaynakları Eşsiz Yap" + +#: tools/editor/editor_node.cpp +msgid "Open in Help" +msgstr "Yardımda Aç" + +#: tools/editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "Çalıştırmak için herhangi bir sahne seçilmedi." + +#: tools/editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in later in \"Project Settings\" under the " +"'application' category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "Mevcut sahne hiç kaydedilmedi,lütfen çalıştırmadan önce kaydediniz." + +#: tools/editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "Alt işlem başlatılamadı!" + +#: tools/editor/editor_node.cpp +msgid "Open Scene" +msgstr "Sahneyi Aç" + +#: tools/editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "Ana Sahneyi Aç" + +#: tools/editor/editor_node.cpp +msgid "Quick Open Scene.." +msgstr "Sahneyi Hızlı Aç.." + +#: tools/editor/editor_node.cpp +msgid "Quick Open Script.." +msgstr "Betiği Hızlı Aç.." + +#: tools/editor/editor_node.cpp +msgid "Yes" +msgstr "Evet" + +#: tools/editor/editor_node.cpp +msgid "Close scene? (Unsaved changes will be lost)" +msgstr "Sahneyi kapat? (Kaydedilmemiş değişiklikler yok olacak)" + +#: tools/editor/editor_node.cpp +msgid "Save Scene As.." +msgstr "Sahneyi Farklı Kaydet.." + +#: tools/editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "Sahne hiç kaydedilmedi. Çalıştırmadan önce kaydedilsin mi?" + +#: tools/editor/editor_node.cpp +msgid "Please save the scene first." +msgstr "Lütfen önce sahneyi kaydediniz." + +#: tools/editor/editor_node.cpp +msgid "Save Translatable Strings" +msgstr "Çevirilebilir Metinleri Kaydet" + +#: tools/editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Revert" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Run Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Open Project Manager? \n" +"(Unsaved changes will be lost)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp +msgid "Ugh" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Error loading scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Default" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "%d more file(s) or folder(s)" +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Fullscreen Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Next tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "New Inherited Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Scene.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Close Goto Prev. Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Open Recent" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quick Filter Files.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Convert To.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Translatable Strings.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "MeshLibrary.." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "TileSet.." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Redo" +msgstr "Geri" + +#: tools/editor/editor_node.cpp +#, fuzzy +msgid "Run Script" +msgstr "Betiği Çalıştır" + +#: tools/editor/editor_node.cpp +msgid "Project Settings" +msgstr "Proje Ayarları" + +#: tools/editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "Proje Listesine Git" + +#: tools/editor/editor_node.cpp +msgid "Import assets to the project." +msgstr "" + +#: tools/editor/editor_node.cpp +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Import" +msgstr "İçe Aktar" + +#: tools/editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Tools" +msgstr "Araçlar" + +#: tools/editor/editor_node.cpp +msgid "Export the project to many platforms." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export" +msgstr "Dışa Aktar" + +#: tools/editor/editor_node.cpp +msgid "Play the project." +msgstr "Projeyi oynat." + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Play" +msgstr "Oynat" + +#: tools/editor/editor_node.cpp +msgid "Pause the scene" +msgstr "Sahneyi duraklat" + +#: tools/editor/editor_node.cpp +msgid "Pause Scene" +msgstr "Sahneyi Duraklat" + +#: tools/editor/editor_node.cpp +msgid "Stop the scene." +msgstr "Sahneyi durdur." + +#: tools/editor/editor_node.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stop" +msgstr "Durdur" + +#: tools/editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "Düzenlenmiş sahneyi oynat." + +#: tools/editor/editor_node.cpp +msgid "Play Scene" +msgstr "Sahneyi Oynat" + +#: tools/editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Debug options" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Settings" +msgstr "Ayarlar" + +#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "Editör Ayarları" + +#: tools/editor/editor_node.cpp +msgid "Editor Layout" +msgstr "Editör Düzeni" + +#: tools/editor/editor_node.cpp +msgid "Install Export Templates" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "About" +msgstr "Hakkında" + +#: tools/editor/editor_node.cpp +msgid "Alerts when an external resource has changed." +msgstr "Harici kaynaklar da değişme olursa uyarır." + +#: tools/editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Update Always" +msgstr "Sürekli Güncelle" + +#: tools/editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +msgid "Save As.." +msgstr "Farklı Kaydet.." + +#: tools/editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Object properties." +msgstr "Nesne özellikleri." + +#: tools/editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Thanks from the Godot community!" +msgstr "Godot Topluluğu Teşekkürler Eder!" + +#: tools/editor/editor_node.cpp +msgid "Thanks!" +msgstr "Teşekkürler!" + +#: tools/editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: tools/editor/editor_node.cpp tools/editor/project_export.cpp +msgid "Password:" +msgstr "Şifre:" + +#: tools/editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: tools/editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Version:" +msgstr "Sürüm:" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "Yazar:" + +#: tools/editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "Durum:" + +#: tools/editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Start Profiling" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Fixed Frame %" +msgstr "" + +#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp +msgid "Time:" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: tools/editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Please wait for scan to complete." +msgstr "Tarama için bitmesini bekleyin." + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Current scene must be saved to re-import." +msgstr "Yeniden içe aktarmak için şimdiki sahneyi kaydet." + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Save & Re-Import" +msgstr "Kaydet & Yeniden İçe Aktar" + +#: tools/editor/editor_reimport_dialog.cpp +msgid "Re-Import Changed Resources" +msgstr "Değiştirilmiş Kaynakları Yeniden İçe Aktar" + +#: tools/editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: tools/editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "Betik çalıştırılamadı:" + +#: tools/editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: tools/editor/editor_settings.cpp +msgid "Default (Same as Editor)" +msgstr "" + +#: tools/editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "Düğüm(leri) içe Aktarmak için Seç" + +#: tools/editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "Sahne Yolu:" + +#: tools/editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "Düğümden İçe Aktar:" + +#: tools/editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "Aynı dosya kaynağı ve hedefi, bir şey yapılmayacak." + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "Hiçbir Dosya Seçilmedi!" + +#: tools/editor/filesystem_dock.cpp +#, fuzzy +msgid "Instance" +msgstr "Örnek" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "Bağımlılıkları Düzenle.." + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "Sahipleri Görüntüle.." + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "Dosya Yolunu Kopyala" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "İsim Değiştir veya Taşı.." + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "Şuraya Taşı.." + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "Bilgi" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "Dosya Yöneticisinde Göster" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "Sıradaki Dizin" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "Dosya Sistemini Tekrar Tara" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "Taşı" + +#: tools/editor/groups_editor.cpp +msgid "Add to Group" +msgstr "Gruba Ekle" + +#: tools/editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "Gruptan Kaldır" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "No bit masks to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path is empty." +msgstr "Hedef dosya yolu boş." + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must be a complete resource path." +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Target path must exist." +msgstr "Hedef dosya yolu mevcut olmalı." + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Save path is empty!" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Import BitMasks" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Target Path:" +msgstr "Hedef Dosya Yolu :" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Accept" +msgstr "Kabul" + +#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp +msgid "Bit Mask" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No source font file!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "No target font resource!" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"Invalid file extension.\n" +"Please use .fnt." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Can't load/process source font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Couldn't save font." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Source Font Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Dest Resource:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "The quick brown fox jumps over the lazy dog." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Test:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Options:" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Font Import" +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "" +"This file is already a Godot font file, please supply a BMFont type file " +"instead." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Failed opening as BMFont file." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +msgid "Invalid font custom source." +msgstr "" + +#: tools/editor/io_plugins/editor_font_import_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "No meshes to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Single Mesh Import" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Source Mesh(es):" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp +msgid "Surface %d" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "No samples to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Import Audio Samples" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Source Sample(s):" +msgstr "" + +#: tools/editor/io_plugins/editor_sample_import_plugin.cpp +msgid "Audio Sample" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "New Clip" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Animation Options" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Flags" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Bake FPS:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Optimizer" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Linear Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angular Error" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Max Angle" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Clips" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Start(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "End(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Filters" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source path is empty." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error importing scene." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import 3D Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Source Scene:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Same as Target Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Shared" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Target Texture Folder:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Post-Process Script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Custom Root Node Type:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Auto" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "The Following Files are Missing:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Anyway" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import & Open" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Edited scene has not been saved, open imported scene anyway?" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Importing Scene.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Running Custom Script.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Error running post-import script:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Import Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Can't import a file over itself:" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Couldn't localize path: %s (already local)" +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "Saving.." +msgstr "" + +#: tools/editor/io_plugins/editor_scene_import_plugin.cpp +msgid "3D Scene Animation" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Uncompressed" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossless (PNG)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress Lossy (WebP)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Compress (VRAM)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Format" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Compression Quality (WebP):" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture Options" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Please specify some files!" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "At least one file needed for Atlas." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Error importing:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Only one file is required for large texture." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Max Texture Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for Atlas (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cell Size:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Textures (2D)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Base Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Source Texture(s)" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 2D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures for 3D" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Textures" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "2D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "3D Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Atlas Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "" +"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " +"the project." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Crop empty space." +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Import Large Texture" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Load Source Image" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Slicing" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Inserting" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Saving" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save large texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Build Atlas For:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Loading Image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't load image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Converting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Cropping Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Blitting Images" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save atlas image:" +msgstr "" + +#: tools/editor/io_plugins/editor_texture_import_plugin.cpp +msgid "Couldn't save converted texture:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Invalid translation source!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Column" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +#: tools/editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No items to import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "No target path!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translations" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Couldn't import!" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Translation" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Source CSV:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Ignore First Row" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Compress" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Add to Project (engine.cfg)" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Import Languages:" +msgstr "" + +#: tools/editor/io_plugins/editor_translation_import_plugin.cpp +msgid "Translation" +msgstr "" + +#: tools/editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Node" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: tools/editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "Yeni Animasyon" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "Animasyonun adını değiştir:" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "Animasyonu Kaldır" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Invalid animation name!" +msgstr "HATA: Geçersiz animasyon adı!" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Animation name already exists!" +msgstr "HATA: Bu animasyonun adı zaten var!" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "Animasyonu Yeniden İsimlendir" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "Animasyon Ekle" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "Animasyon Yükle" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "Animasyonu Yeniden Çıkar" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to copy!" +msgstr "HATA: Kopyalamak için bir animasyon yok!" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation resource on clipboard!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to edit!" +msgstr "HATA: Düzenlemek için bir animasyon yok!" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create new animation in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Save As" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Target Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Rename" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations.." +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: tools/editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters.." +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing %d Triangles:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Light Baker Setup:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Parsing Geometry" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Fixing Lights" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Making BVH" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Light Octree" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Creating Octree Texture" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Transfer to Lightmaps:" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Allocating Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Baking Triangle #" +msgstr "" + +#: tools/editor/plugins/baked_light_baker.cpp +msgid "Post-Processing Texture #" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: tools/editor/plugins/baked_light_editor_plugin.cpp +msgid "Reset the lightmap octree baking process (start over)." +msgstr "" + +#: tools/editor/plugins/camera_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Pivot" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom (%):" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Select Mode" +msgstr "Bir Düğüm Seç" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Move Mode" +msgstr "Şuraya Taşı.." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Expand to Parent" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton.." +msgstr "İskelet.." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Reset" +msgstr "Yakınlaştırmayı Sıfırla" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Set.." +msgstr "Yakınlaştırmayı Ayarla.." + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchor" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set a Value" +msgstr "Değeri Ata" + +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap (Pixels):" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: tools/editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: tools/editor/plugins/color_ramp_editor_plugin.cpp +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Creating Mesh Library" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: tools/editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh.." +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: tools/editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: tools/editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image.." +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Set Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: tools/editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Mesh" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter From Node" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Clear Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Positions:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Emission Fill:" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Surface" +msgstr "" + +#: tools/editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: tools/editor/plugins/path_2d_editor_plugin.cpp +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Pos" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: tools/editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: tools/editor/plugins/rich_text_editor_plugin.cpp +msgid "Parse BBCode" +msgstr "" + +#: tools/editor/plugins/sample_editor_plugin.cpp +msgid "Length:" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Open Sample File(s)" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "ERROR: Couldn't load sample!" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Add Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Rename Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Delete Sample" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "16 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "8 Bits" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Stereo" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Mono" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: tools/editor/plugins/sample_library_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/project_export.cpp +msgid "File" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_editor.cpp +msgid "New" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#, fuzzy +msgid "Close Docs" +msgstr "Kapat" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Window" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Left" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Move Right" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Tutorials" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Open https://godotengine.org at tutorials section." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the class hierarchy." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Lighting" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: tools/editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling to %s%%." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Environment" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "No scene selected to instance!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Instance at Cursor" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Could not instance scene!" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog.." +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default Light" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Use Default sRGB" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Display Shadeless" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Default Light Normal:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Ambient Light Color:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Up" +msgstr "" + +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Down" +msgstr "" + +#: tools/editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: tools/editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp +msgid "Options" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Have,Many,Several,Options!" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Style" +msgstr "" + +#: tools/editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase selection" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Find tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "" + +#: tools/editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: tools/editor/plugins/tile_set_editor_plugin.cpp +#: tools/editor/script_editor_debugger.cpp +msgid "Error" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Edit Script Options" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Please export outside the project folder!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error exporting project!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Error writing the project PCK!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "No exporter for platform '%s' yet." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Include" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Change Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name can't be empty!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Invalid character in group name!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group name already exists!" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Add Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Delete Image Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas Preview" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export Settings" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Target" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export to Platform" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export selected resources (including dependencies)." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all resources in the project." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export all files in the project directory." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Resources to Export:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Action" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert text scenes to binary on export." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep Original" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy, WebP)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for RAM (BC/PVRTC/ETC)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Convert Images (*.png):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress for Disk (Lossy) Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink All Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Formats:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Groups" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Groups:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Disk" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress RAM" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Lossy Quality:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Atlas:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Shrink By:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Preview Atlas" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Image Filter:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Images:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Select None" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Group" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Samples" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sample Conversion Mode: (.wav files):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Keep" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compress (RAM - IMA-ADPCM)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Sampling Rate Limit (Hz):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trim" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Trailing Silence:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Export Mode:" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Text" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Compiled" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Script Encryption Key (256-bits as hex):" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Project PCK" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export.." +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: tools/editor/project_export.cpp +msgid "Export Preset:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, the path must exist!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must not exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path, engine.cfg must exist." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Couldn't create engine.cfg in project path." +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path (Must Exist):" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "That's a BINGO!" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: tools/editor/project_manager.cpp +#, fuzzy +msgid "Select a Folder to Scan" +msgstr "Bir Düğüm Seç" + +#: tools/editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: tools/editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Key " +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joy Axis" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Invalid action (anything goes but '/' or ':')." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "Press a Key.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Left Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Right Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Middle Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Up Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Wheel Down Button" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 6" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 7" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 8" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Button 9" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Axis Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Joystick Button Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Input Action" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Toggle Persisting" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Error saving settings." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Settings saved OK." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Translation" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add Remapped Path" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Project Settings (engine.cfg)" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +msgid "Property:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Del" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Copy To Platform.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Input Map" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Action:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Device:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Index:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Localization" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Translations:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Add.." +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Resources:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Locale" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "AutoLoad" +msgstr "" + +#: tools/editor/project_settings.cpp +msgid "Plugins" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Preset.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "File.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Dir.." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Load" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Couldn't load image" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "On" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Set" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Properties:" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Global" +msgstr "" + +#: tools/editor/property_editor.cpp +msgid "Sections:" +msgstr "" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "Düzenleyici Özellik Ekle" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "Bir Düğüm Seç" + +#: tools/editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: tools/editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: tools/editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Create New Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Open Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Save Resource" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Resource Tools" +msgstr "" + +#: tools/editor/resources_dock.cpp +msgid "Make Local" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: tools/editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "OK :(" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Ok" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save New Scene As.." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Makes Sense!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Groups" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Edit Connections" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Add Script" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete (No Confirm)" +msgstr "Lütfen doğrulayınız..." + +#: tools/editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "" +"This item cannot be made visible because the parent is hidden. Unhide the " +"parent first." +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Editable Children" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Load As Placeholder" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Discard Instancing" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Editörde Aç" + +#: tools/editor/scene_tree_editor.cpp +#, fuzzy +msgid "Clear Inheritance" +msgstr "Mirası Temizle" + +#: tools/editor/scene_tree_editor.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: tools/editor/scene_tree_editor.cpp +#, fuzzy +msgid "Clear!" +msgstr "Temiz!" + +#: tools/editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "Bir Düğüm Seç" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid parent class name" +msgstr "Geçersiz ebeveyn sınıf adı" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid chars:" +msgstr "Geçerli karakterler:" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "Geçersiz sınıf adı" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid name" +msgstr "Uygun ad" + +#: tools/editor/script_create_dialog.cpp +#, fuzzy +msgid "N/A" +msgstr "Uygulanamaz" + +#: tools/editor/script_create_dialog.cpp +msgid "Class name is invalid!" +msgstr "Sınıf adı geçersiz!" + +#: tools/editor/script_create_dialog.cpp +msgid "Parent class name is invalid!" +msgstr "Ebeveyn sınıf adı geçersiz!" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid path!" +msgstr "Geçersiz yol!" + +#: tools/editor/script_create_dialog.cpp +msgid "Could not create script in filesystem." +msgstr "" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "Dosya yolu boş" + +#: tools/editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: tools/editor/script_create_dialog.cpp +#, fuzzy +msgid "Invalid base path" +msgstr "Geçersiz üst yol" + +#: tools/editor/script_create_dialog.cpp +msgid "File exists" +msgstr "Dosya mevcut" + +#: tools/editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "Geçersiz uzantı" + +#: tools/editor/script_create_dialog.cpp +msgid "Valid path" +msgstr "Geçerli yol" + +#: tools/editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "Sınıf Adı:" + +#: tools/editor/script_create_dialog.cpp +msgid "Built-In Script" +msgstr "Gömme Betik" + +#: tools/editor/script_create_dialog.cpp +msgid "Create Node Script" +msgstr "Düğüm Betiği Oluştur" + +#: tools/editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "Baytlar:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Warning" +msgstr "Uyarı" + +#: tools/editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "Hata:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "Kaynak:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Function:" +msgstr "Fonksiyon:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "Hatalar" + +#: tools/editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Variable" +msgstr "Değişken" + +#: tools/editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "Hatalar:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Inspector" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Scene Tree:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Remote Object Properties: " +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "Ekran" + +#: tools/editor/script_editor_debugger.cpp +msgid "Value" +msgstr "Değer" + +#: tools/editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "Ekranlar" + +#: tools/editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "Kaynağa Göre Video Belleği Kullanımının Listesi:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "Toplam:" + +#: tools/editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "Video Belleği" + +#: tools/editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "Kaynak Yolu" + +#: tools/editor/script_editor_debugger.cpp +msgid "Type" +msgstr "Tür" + +#: tools/editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "Kullanım" + +#: tools/editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: tools/editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: tools/editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "Kısayollar" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "Işın Çapını Değiştir" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "Kamera Boyutunu Değiştir" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "Küresel Şeklin Çapını Değiştir" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "Kübik Şekli Genislet" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "Kapsülün Çapını Değiştir" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "Kapsülün yüksekliğini değiştir" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: tools/editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" diff --git a/tools/translations/ur_PK.po b/tools/translations/ur_PK.po index ae35068cb1..0ac56d847b 100644 --- a/tools/translations/ur_PK.po +++ b/tools/translations/ur_PK.po @@ -18,11 +18,13 @@ msgstr "" "X-Generator: Weblate 2.7-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" ".استمال کیجۓ TYPE_* constants .کے لیے غلط ہیں convert() دیے گئے ارگمنٹس." #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "یا تو ڈیکوڈ کرنے کے لئے بائیٹس کم ہیں یا پھر ناقص فارمیٹ ھے." @@ -58,6 +60,276 @@ msgstr "" msgid "Invalid instance dictionary (invalid subclasses)" msgstr "" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Rename Function" +msgstr ".تمام کا انتخاب" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Function" +msgstr ".تمام کا انتخاب" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Signal" +msgstr ".تمام کا انتخاب" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -162,6 +434,10 @@ msgid "" "as parent." msgstr "" +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -217,7 +493,7 @@ msgstr "" msgid "Cancel" msgstr "" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "" @@ -243,8 +519,9 @@ msgstr "" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "" @@ -367,13 +644,13 @@ msgid "Axis" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -381,7 +658,7 @@ msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -389,7 +666,7 @@ msgid "Paste" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -403,7 +680,7 @@ msgid "Clear" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "" @@ -728,6 +1005,10 @@ msgid "Optimize" msgstr "" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "" @@ -777,7 +1058,8 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "" @@ -831,18 +1113,6 @@ msgstr "" msgid "Call" msgstr "" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "" @@ -893,6 +1163,7 @@ msgstr "" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -934,6 +1205,20 @@ msgstr "" msgid "Skip" msgstr "" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "" @@ -1023,10 +1308,16 @@ msgid "Create New" msgstr "" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -1136,8 +1427,9 @@ msgid "Delete selected files?" msgstr "" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "" @@ -1287,7 +1579,7 @@ msgstr "پسندیدہ اوپر منتقل کریں" msgid "Move Favorite Down" msgstr "پسندیدہ نیچے منتقل کریں" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "" @@ -1300,10 +1592,6 @@ msgid "Preview:" msgstr "" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "" @@ -1341,25 +1629,13 @@ msgid "Public Methods:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "" @@ -1777,7 +2053,7 @@ msgstr "" msgid "TileSet.." msgstr "" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "" @@ -2188,6 +2464,90 @@ msgstr "" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -3143,10 +3503,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "" @@ -3210,7 +3566,7 @@ msgid "Paste Pose" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" +msgid "Select Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3230,13 +3586,12 @@ msgid "Alt+RMB: Depth list selection" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "" +#, fuzzy +msgid "Move Mode" +msgstr "ایکشن منتقل کریں" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +msgid "Rotate Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3271,14 +3626,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "" @@ -3335,14 +3682,6 @@ msgid "View" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "" @@ -4041,6 +4380,10 @@ msgid "Save All" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "" @@ -4061,194 +4404,186 @@ msgid "Save Theme As" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" +msgid "Close Docs" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" +msgid "Debug" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" +#: tools/editor/script_editor_debugger.cpp +msgid "Break" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" +msgid "Keep Debugger Open" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find.." +msgid "Window" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Next" +msgid "Move Left" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" +msgid "Move Right" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." +msgid "Tutorials" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." +msgid "Open https://godotengine.org at tutorials section." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." +msgid "Classes" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Debug" +msgid "Search the class hierarchy." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" +msgid "Search the reference documentation." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" +msgid "Go to previous edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" +msgid "Go to next edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" +msgid "Create Script" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Reload" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Break" +msgid "Resave" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp -msgid "Continue" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Keep Debugger Open" +msgid "Debugger" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Window" +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Left" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Right" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Tutorials" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Open https://godotengine.org at tutorials section." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Classes" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the reference documentation." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to previous edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to next edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Create Script" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"The following files are newer on disk.\n" -"What action should be taken?:" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Reload" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Resave" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Debugger" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" msgstr "" #: tools/editor/plugins/shader_editor_plugin.cpp @@ -4512,6 +4847,14 @@ msgid "Could not instance scene!" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "" @@ -5328,11 +5671,11 @@ msgid "Unnamed Project" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "" #: tools/editor/project_manager.cpp @@ -5340,6 +5683,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "" @@ -5356,6 +5705,10 @@ msgid "Scan" msgstr "" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "" @@ -5647,6 +6000,14 @@ msgstr "" msgid "Sections:" msgstr "" +#: tools/editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: tools/editor/property_selector.cpp +msgid "Select Method" +msgstr "" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "" @@ -5720,6 +6081,10 @@ msgid "No parent to instance a child at." msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "" @@ -5848,6 +6213,10 @@ msgid "Save Branch as Scene" msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "" @@ -5857,6 +6226,10 @@ msgid "" "exists." msgstr "" +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5919,90 +6292,6 @@ msgstr "" msgid "Select a Node" msgstr "" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "" diff --git a/tools/translations/zh_CN.po b/tools/translations/zh_CN.po index e852bac75f..a53d4ba4ed 100644 --- a/tools/translations/zh_CN.po +++ b/tools/translations/zh_CN.po @@ -2,15 +2,18 @@ # Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community # This file is distributed under the same license as the Godot source code. # -# Geequlim <geequlim@gmail.com>, 2016. # 纯洁的坏蛋 <tqj.zyy@gmail.com>, 2016. +# 孤月蓝风 <trlanfeng@foxmail.com>, 2016. +# Geequlim <geequlim@gmail.com>, 2016. +# Luo Jun <vipsbpig@gmail.com>, 2016. +# wanfang liu <wanfang.liu@gmail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2016-06-25 17:02+0000\n" -"Last-Translator: 纯洁的坏蛋 <tqj.zyy@gmail.com>\n" +"PO-Revision-Date: 2016-08-23 09:17+0000\n" +"Last-Translator: 孤月蓝风 <trlanfeng@foxmail.com>\n" "Language-Team: Chinese (China) <https://hosted.weblate.org/projects/godot-" "engine/godot/zh_CN/>\n" "Language: zh_CN\n" @@ -18,15 +21,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2.7-dev\n" +"X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "" +msgstr "convert函数参数类型非法,请传入以“TYPE_”打头的常量。" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" +msgstr "没有足够的字节来解码或格式不正确。" #: modules/gdscript/gd_functions.cpp msgid "step argument is zero!" @@ -49,18 +54,311 @@ msgid "Invalid instance dictionary format (missing @path)" msgstr "实例字典格式不正确(缺少@path)" #: modules/gdscript/gd_functions.cpp -#, fuzzy msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "实例字典格式不正确(无法加载脚本@path)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "" +msgstr "实例字典格式不正确(无效脚本@path)" #: modules/gdscript/gd_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "非法的字典实例(派生类非法)" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" +"一个节点在无工作内存的情况下被yielded,请阅读文档来查看如何适当的yield!" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "节点已yielded,但并没有在第一个工作内存中返回一个函数状态。" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "节点工作内存的第一个节点的返回值必须已赋值!请修正你的节点。" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "节点返回了一个无效的连续输出: " + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "在非堆栈中的节点中找到连续bit,报告bug!" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "堆栈深度溢出: " + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Functions:" +msgstr "函数:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "变量:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "事件:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Name is not a valid identifier:" +msgstr "名称不是有效的标识符:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Name already in use by another func/var/signal:" +msgstr "名称已经被其他的函数/变量/信号占用:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "重命名函数" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "重命名变量" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Rename Signal" +msgstr "重命名信号" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Function" +msgstr "添加函数" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Variable" +msgstr "添加变量" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Signal" +msgstr "添加信号" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Function" +msgstr "移除函数" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Variable" +msgstr "移除变量" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Editing Variable:" +msgstr "编辑变量:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Signal" +msgstr "移除信号" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Editing Signal:" +msgstr "连接事件:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Node" +msgstr "添加子节点" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "添加子节点" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Node(s) From Tree" +msgstr "从场景导入节点" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "添加访问器属性" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "添加设置器" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "编辑" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "基础类型:" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "成员:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "有效节点:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Select or create a function to edit graph" +msgstr "在 edit graph 中选择或者建立一个函数" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "关闭" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Edit Signal Arguments:" +msgstr "额外调用参数:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Edit Variable:" +msgstr "变量" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Change" +msgstr "更改类型" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete Selected" +msgstr "删除选中的文件?" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "切换断点" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Find Node Type" +msgstr "查找下一项" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Copy Nodes" +msgstr "拷贝姿势" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Cut Nodes" +msgstr "新节点" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "粘贴姿势" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "输入类型不可迭代: " + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "迭代器失效" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "迭代器失效: " + +#: modules/visual_script/visual_script_func_nodes.cpp +#, fuzzy +msgid "Invalid index property name." +msgstr "基类名称非法" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "基础对象不是一个节点!" + +#: modules/visual_script/visual_script_func_nodes.cpp +#, fuzzy +msgid "Path does not lead Node!" +msgstr "必须是项目路径" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "节点%s的'%s'为无效索引属性名。" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr ":无效参数类型: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr ":无效参数: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "脚本中未找到VariableGet: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "脚本中未找到VariableSet: " + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." msgstr "" +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "_step()的返回值无效,必须是整形(seq out),或字符串(error)。" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -182,6 +480,10 @@ msgid "" "as parent." msgstr "VisibilityEnable2D类型的节点用于场景的根节点才能获得最好的效果。" +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "BakedLightInstance未包含BakedLight资源。" + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -248,7 +550,7 @@ msgstr "" msgid "Cancel" msgstr "取消" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "好的" @@ -274,8 +576,9 @@ msgstr "所有文件(*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "打开" @@ -316,20 +619,20 @@ msgstr "新建目录" #: tools/editor/io_plugins/editor_font_import_plugin.cpp #: tools/editor/script_create_dialog.cpp msgid "Path:" -msgstr "路径:" +msgstr "路径:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Directories & Files:" -msgstr "目录|文件:" +msgstr "目录|文件:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/script_editor_debugger.cpp msgid "File:" -msgstr "文件:" +msgstr "文件:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Filter:" -msgstr "筛选:" +msgstr "筛选:" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp @@ -398,13 +701,13 @@ msgid "Axis" msgstr "轴" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "剪切" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -412,7 +715,7 @@ msgstr "复制" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -420,7 +723,7 @@ msgid "Paste" msgstr "粘贴" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -434,7 +737,7 @@ msgid "Clear" msgstr "清除" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "撤销" @@ -489,7 +792,7 @@ msgstr "所有选项" #: tools/editor/animation_editor.cpp msgid "Move Add Key" -msgstr "" +msgstr "移动已添加关键帧" #: tools/editor/animation_editor.cpp msgid "Anim Change Transition" @@ -529,19 +832,21 @@ msgstr "移除轨道" #: tools/editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "设置过渡效果:" +msgstr "设置过渡效果:" #: tools/editor/animation_editor.cpp msgid "Anim Track Rename" msgstr "重命名轨道" #: tools/editor/animation_editor.cpp +#, fuzzy msgid "Anim Track Change Interpolation" -msgstr "" +msgstr "轨道修改为插值模式" #: tools/editor/animation_editor.cpp +#, fuzzy msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "轨道修改为值模式" #: tools/editor/animation_editor.cpp msgid "Edit Node Curve" @@ -565,23 +870,20 @@ msgid "Duplicate Transposed" msgstr "复制并转置" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Remove Selection" -msgstr "最大化显示选中节点" +msgstr "移除选中项" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Continuous" -msgstr "继续" +msgstr "连续" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Discrete" -msgstr "删除事件连接" +msgstr "分离" #: tools/editor/animation_editor.cpp msgid "Trigger" -msgstr "" +msgstr "触发器" #: tools/editor/animation_editor.cpp msgid "Anim Add Key" @@ -618,19 +920,19 @@ msgstr "常量" #: tools/editor/animation_editor.cpp msgid "In" -msgstr "" +msgstr "缓入" #: tools/editor/animation_editor.cpp msgid "Out" -msgstr "" +msgstr "缓出" #: tools/editor/animation_editor.cpp msgid "In-Out" -msgstr "" +msgstr "缓入缓出" #: tools/editor/animation_editor.cpp msgid "Out-In" -msgstr "" +msgstr "反缓入缓出" #: tools/editor/animation_editor.cpp msgid "Transitions" @@ -682,8 +984,9 @@ msgid "Change Anim Loop" msgstr "修改动画循环" #: tools/editor/animation_editor.cpp +#, fuzzy msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "创建输入值的动画关键帧" #: tools/editor/animation_editor.cpp msgid "Anim Insert" @@ -703,7 +1006,7 @@ msgstr "动画时间缩放" #: tools/editor/animation_editor.cpp msgid "Length (s):" -msgstr "时长(秒):" +msgstr "时长(秒):" #: tools/editor/animation_editor.cpp msgid "Animation length (in seconds)." @@ -715,7 +1018,7 @@ msgstr "步长(秒)" #: tools/editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." -msgstr "" +msgstr "步进吸附(秒)" #: tools/editor/animation_editor.cpp msgid "Enable/Disable looping in animation." @@ -750,22 +1053,27 @@ msgid "Anim. Optimizer" msgstr "优化动画" #: tools/editor/animation_editor.cpp +#, fuzzy msgid "Max. Linear Error:" -msgstr "" +msgstr "最大线性错误:" #: tools/editor/animation_editor.cpp msgid "Max. Angular Error:" -msgstr "最大角错误:" +msgstr "最大角错误:" #: tools/editor/animation_editor.cpp msgid "Max Optimizable Angle:" -msgstr "调整最大的角度:" +msgstr "调整最大的角度:" #: tools/editor/animation_editor.cpp msgid "Optimize" msgstr "优化" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "在场景树中选择一个AnimationPlayer来编辑动画。" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "键" @@ -815,14 +1123,15 @@ msgstr "修改数组值" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" -msgstr "搜索:" +msgstr "搜索:" #: tools/editor/asset_library_editor_plugin.cpp msgid "Sort:" -msgstr "排序:" +msgstr "排序:" #: tools/editor/asset_library_editor_plugin.cpp msgid "Reverse" @@ -831,7 +1140,7 @@ msgstr "反选" #: tools/editor/asset_library_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Category:" -msgstr "分类:" +msgstr "分类:" #: tools/editor/asset_library_editor_plugin.cpp msgid "All" @@ -839,7 +1148,7 @@ msgstr "全部" #: tools/editor/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "站点:" +msgstr "站点:" #: tools/editor/asset_library_editor_plugin.cpp msgid "Support.." @@ -869,29 +1178,17 @@ msgstr "%s的方法列表" msgid "Call" msgstr "调用" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "关闭" - #: tools/editor/call_dialog.cpp msgid "Method List:" -msgstr "方法列表:" +msgstr "方法列表:" #: tools/editor/call_dialog.cpp msgid "Arguments:" -msgstr "参数:" +msgstr "参数:" #: tools/editor/call_dialog.cpp msgid "Return:" -msgstr "返回:" +msgstr "返回:" #: tools/editor/code_editor.cpp msgid "Go to Line" @@ -899,7 +1196,7 @@ msgstr "转到行" #: tools/editor/code_editor.cpp msgid "Line Number:" -msgstr "行号:" +msgstr "行号:" #: tools/editor/code_editor.cpp msgid "No Matches" @@ -907,7 +1204,7 @@ msgstr "无匹配项" #: tools/editor/code_editor.cpp msgid "Replaced %d Ocurrence(s)." -msgstr "" +msgstr "替换了%d项" #: tools/editor/code_editor.cpp msgid "Replace" @@ -923,7 +1220,7 @@ msgstr "大小写匹配" #: tools/editor/code_editor.cpp msgid "Whole Words" -msgstr "" +msgstr "全字匹配" #: tools/editor/code_editor.cpp msgid "Selection Only" @@ -931,6 +1228,7 @@ msgstr "仅选中" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -946,7 +1244,7 @@ msgstr "下一项" #: tools/editor/code_editor.cpp msgid "Replaced %d ocurrence(s)." -msgstr "" +msgstr "替换了%d项。" #: tools/editor/code_editor.cpp msgid "Not found!" @@ -972,22 +1270,35 @@ msgstr "更换时提示" msgid "Skip" msgstr "跳过" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "放大" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "缩小" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "重置缩放" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" -msgstr "行:" +msgstr "行:" #: tools/editor/code_editor.cpp msgid "Col:" -msgstr "列:" +msgstr "列:" #: tools/editor/connections_dialog.cpp msgid "Method in target Node must be specified!" msgstr "必须设置方法的对象节点!" #: tools/editor/connections_dialog.cpp -#, fuzzy msgid "Connect To Node:" -msgstr "连接到节点:" +msgstr "连接到节点:" #: tools/editor/connections_dialog.cpp #: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp @@ -1006,29 +1317,28 @@ msgstr "移除" #: tools/editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "" +msgstr "添加附加调用参数:" #: tools/editor/connections_dialog.cpp -#, fuzzy msgid "Extra Call Arguments:" -msgstr "参数:" +msgstr "额外调用参数:" #: tools/editor/connections_dialog.cpp -#, fuzzy msgid "Path to Node:" -msgstr "节点路径:" +msgstr "节点路径:" #: tools/editor/connections_dialog.cpp msgid "Make Function" msgstr "创建方法" #: tools/editor/connections_dialog.cpp +#, fuzzy msgid "Deferred" -msgstr "" +msgstr "延时" #: tools/editor/connections_dialog.cpp msgid "Oneshot" -msgstr "" +msgstr "单次" #: tools/editor/connections_dialog.cpp msgid "Connect" @@ -1039,13 +1349,13 @@ msgid "Connect '%s' to '%s'" msgstr "连接'%s'到'%s'" #: tools/editor/connections_dialog.cpp -#, fuzzy msgid "Connecting Signal:" -msgstr "事件:" +msgstr "连接事件:" #: tools/editor/connections_dialog.cpp +#, fuzzy msgid "Create Subscription" -msgstr "" +msgstr "创建订阅" #: tools/editor/connections_dialog.cpp msgid "Connect.." @@ -1065,17 +1375,23 @@ msgid "Create New" msgstr "新建" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" -msgstr "匹配项:" +msgstr "匹配项:" + +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "描述:" #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "搜索替换:" +msgstr "搜索替换:" #: tools/editor/dependency_editor.cpp msgid "Dependencies For:" -msgstr "依赖项:" +msgstr "依赖项:" #: tools/editor/dependency_editor.cpp msgid "" @@ -1104,7 +1420,7 @@ msgstr "路径" #: tools/editor/dependency_editor.cpp msgid "Dependencies:" -msgstr "依赖:" +msgstr "依赖:" #: tools/editor/dependency_editor.cpp msgid "Fix Broken" @@ -1116,11 +1432,11 @@ msgstr "依赖编辑器" #: tools/editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "查找替换资源:" +msgstr "查找替换资源:" #: tools/editor/dependency_editor.cpp msgid "Owners Of:" -msgstr "拥有者:" +msgstr "拥有者:" #: tools/editor/dependency_editor.cpp msgid "" @@ -1135,11 +1451,11 @@ msgstr "确定从项目中删除文件(此操作无法撤销)?" #: tools/editor/dependency_editor.cpp msgid "Error loading:" -msgstr "加载出错:" +msgstr "加载出错:" #: tools/editor/dependency_editor.cpp msgid "Scene failed to load due to missing dependencies:" -msgstr "加载场景失败,找不到以下依赖项目:" +msgstr "加载场景失败,找不到以下依赖项目:" #: tools/editor/dependency_editor.cpp msgid "Open Anyway" @@ -1167,7 +1483,7 @@ msgstr "拥有对象" #: tools/editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "没有指定所属关系的资源:" +msgstr "没有指定所属关系的资源:" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp msgid "Orphan Resource Explorer" @@ -1178,18 +1494,19 @@ msgid "Delete selected files?" msgstr "删除选中的文件?" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "删除" #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "名称非法:" +msgstr "名称非法:" #: tools/editor/editor_autoload_settings.cpp msgid "Valid characters:" -msgstr "字符合法:" +msgstr "字符合法:" #: tools/editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." @@ -1204,22 +1521,18 @@ msgid "Invalid name. Must not collide with an existing global constant name." msgstr "名称非法,与已存在的全局常量名称冲突。" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid Path." msgstr "路径非法!" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "File does not exist." -msgstr "文件已存在" +msgstr "文件不存在" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." -msgstr "资源路径" +msgstr "不在资源路径下" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Add AutoLoad" msgstr "添加Autoload" @@ -1248,13 +1561,12 @@ msgid "Enable" msgstr "启用" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rearrange Autoloads" -msgstr "移除Autoload" +msgstr "重排序Autoload" #: tools/editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "节点名称:" +msgstr "节点名称:" #: tools/editor/editor_autoload_settings.cpp #: tools/editor/io_plugins/editor_scene_import_plugin.cpp @@ -1265,11 +1577,11 @@ msgstr "名称" #: tools/editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "单例" +msgstr "Singleton" #: tools/editor/editor_autoload_settings.cpp msgid "List:" -msgstr "列表:" +msgstr "列表:" #: tools/editor/editor_data.cpp msgid "Updating Scene" @@ -1293,52 +1605,47 @@ msgstr "选择" #: tools/editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "" +msgstr "后退" #: tools/editor/editor_file_dialog.cpp msgid "Go Forward" -msgstr "" +msgstr "前进" #: tools/editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "" +msgstr "上一级" #: tools/editor/editor_file_dialog.cpp msgid "Refresh" -msgstr "" +msgstr "刷新" #: tools/editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "" +msgstr "切换显示隐藏文件" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Favorite" -msgstr "切换断点" +msgstr "切换收藏" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Mode" -msgstr "切换注释" +msgstr "切换模式" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Focus Path" -msgstr "拷贝路径" +msgstr "设置路径焦点" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" -msgstr "收藏:" +msgstr "向上移动收藏" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" -msgstr "向下移动" +msgstr "向下移动收藏" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" -msgstr "收藏:" +msgstr "收藏:" #: tools/editor/editor_file_dialog.cpp msgid "Recent:" @@ -1349,12 +1656,8 @@ msgid "Preview:" msgstr "预览" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "无法打开目录:" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" -msgstr "" +msgstr "扫描源文件" #: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp msgid "Search Help" @@ -1370,48 +1673,36 @@ msgstr "搜索类型" #: tools/editor/editor_help.cpp tools/editor/property_editor.cpp msgid "Class:" -msgstr "类:" +msgstr "类:" #: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp #: tools/editor/script_create_dialog.cpp msgid "Inherits:" -msgstr "基类:" +msgstr "基类:" #: tools/editor/editor_help.cpp msgid "Inherited by:" -msgstr "派生类:" +msgstr "派生类:" #: tools/editor/editor_help.cpp msgid "Brief Description:" -msgstr "简介:" +msgstr "简介:" #: tools/editor/editor_help.cpp msgid "Public Methods:" -msgstr "公共方法:" - -#: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "成员:" +msgstr "公共方法:" #: tools/editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "GUI主题:" - -#: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "事件:" +msgstr "GUI主题:" #: tools/editor/editor_help.cpp msgid "Constants:" -msgstr "常量:" - -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "描述:" +msgstr "常量:" #: tools/editor/editor_help.cpp msgid "Method Description:" -msgstr "方法描述:" +msgstr "方法描述:" #: tools/editor/editor_help.cpp msgid "Search Text" @@ -1419,23 +1710,23 @@ msgstr "搜索文本" #: tools/editor/editor_import_export.cpp msgid "Added:" -msgstr "已添加:" +msgstr "已添加:" #: tools/editor/editor_import_export.cpp msgid "Removed:" -msgstr "已移除:" +msgstr "已移除:" #: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp msgid "Error saving atlas:" -msgstr "保存贴图集出错:" +msgstr "保存贴图集出错:" #: tools/editor/editor_import_export.cpp msgid "Could not save atlas subtexture:" -msgstr "无法保存精灵集子贴图:" +msgstr "无法保存精灵集子贴图:" #: tools/editor/editor_import_export.cpp msgid "Storing File:" -msgstr "文件排序:" +msgstr "文件排序:" #: tools/editor/editor_import_export.cpp msgid "Packing" @@ -1459,11 +1750,11 @@ msgstr "重新导入" #: tools/editor/editor_node.cpp msgid "Importing:" -msgstr "导入:" +msgstr "导入:" #: tools/editor/editor_node.cpp msgid "Node From Scene" -msgstr "" +msgstr "从场景导入节点" #: tools/editor/editor_node.cpp #: tools/editor/plugins/animation_player_editor_plugin.cpp @@ -1483,11 +1774,11 @@ msgstr "好吧.." #: tools/editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "无法以可写模式打开文件:" +msgstr "无法以可写模式打开文件:" #: tools/editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "未知的文件类型请求:" +msgstr "未知的文件类型请求:" #: tools/editor/editor_node.cpp msgid "Error while saving." @@ -1588,7 +1879,6 @@ msgid "There is no defined scene to run." msgstr "没有设置要执行的场景。" #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select one?\n" "You can change it later in later in \"Project Settings\" under the " @@ -1598,7 +1888,6 @@ msgstr "" "请在项目设置的application分类下设置选择主场景。" #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "Selected scene '%s' does not exist, select a valid one?\n" "You can change it later in \"Project Settings\" under the 'application' " @@ -1608,13 +1897,12 @@ msgstr "" "请在项目设置的application分类下设置选择主场景。" #: tools/editor/editor_node.cpp -#, fuzzy msgid "" "Selected scene '%s' is not a scene file, select a valid one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"尚未定义主场景。\n" +"选中的%s场景并非一个场景文件,请选择合法的场景。\n" "请在项目设置的application分类下设置选择主场景。" #: tools/editor/editor_node.cpp @@ -1708,9 +1996,8 @@ msgid "" msgstr "退出到项目管理窗口(未保存的修改将丢失)?" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" -msgstr "主场景" +msgstr "选择主场景" #: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp msgid "Ugh" @@ -1729,7 +2016,7 @@ msgstr "加载场景出错。" #: tools/editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "场景%s的依赖已被破坏:" +msgstr "场景%s的依赖已被破坏:" #: tools/editor/editor_node.cpp msgid "Save Layout" @@ -1766,21 +2053,19 @@ msgstr "前往上一个打开的场景。" #: tools/editor/editor_node.cpp msgid "Fullscreen Mode" -msgstr "" +msgstr "全屏模式" #: tools/editor/editor_node.cpp msgid "Distraction Free Mode" msgstr "" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Next tab" msgstr "下一项" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Previous tab" -msgstr "上一个目录:" +msgstr "上一个目录:" #: tools/editor/editor_node.cpp msgid "Operations with scene files." @@ -1803,9 +2088,8 @@ msgid "Save Scene" msgstr "保存场景" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Save all Scenes" -msgstr "保存场景" +msgstr "保存所有场景" #: tools/editor/editor_node.cpp msgid "Close Scene" @@ -1839,7 +2123,7 @@ msgstr "MeshLibrary.." msgid "TileSet.." msgstr "砖块集.." -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "重做" @@ -1931,7 +2215,6 @@ msgid "Play custom scene" msgstr "运行自定义场景" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play Custom Scene" msgstr "运行自定义场景" @@ -2142,7 +2425,7 @@ msgstr "加载错误" #: tools/editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "已安装插件:" +msgstr "已安装插件:" #: tools/editor/editor_plugin_settings.cpp msgid "Version:" @@ -2166,7 +2449,7 @@ msgstr "开始" #: tools/editor/editor_profiler.cpp msgid "Measure:" -msgstr "测量:" +msgstr "测量:" #: tools/editor/editor_profiler.cpp msgid "Frame Time (sec)" @@ -2186,7 +2469,7 @@ msgstr "物理速度" #: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp msgid "Time:" -msgstr "时间:" +msgstr "时间:" #: tools/editor/editor_profiler.cpp msgid "Inclusive" @@ -2198,7 +2481,7 @@ msgstr "" #: tools/editor/editor_profiler.cpp msgid "Frame #:" -msgstr "帧序号:" +msgstr "帧序号:" #: tools/editor/editor_reimport_dialog.cpp msgid "Please wait for scan to complete." @@ -2226,7 +2509,7 @@ msgstr "已经存在一个正在编辑的场景。" #: tools/editor/editor_run_script.cpp msgid "Couldn't instance script:" -msgstr "无法实例化脚本:" +msgstr "无法实例化脚本:" #: tools/editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" @@ -2234,7 +2517,7 @@ msgstr "您是否遗漏了tool关键字?" #: tools/editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "无法执行脚本:" +msgstr "无法执行脚本:" #: tools/editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" @@ -2250,16 +2533,100 @@ msgstr "选择要导入的节点" #: tools/editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "场景路径:" +msgstr "场景路径:" #: tools/editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "从节点中导入:" +msgstr "从节点中导入:" #: tools/editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "无法以可写方式打开file_type_cache.cch!" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "源文件和目标文件相同,操作忽略。" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "源路径和目标路径相同,操作忽略。" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "无法将目录移动到自身下。" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "无法对'..'引用操作。" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "选择新名称和路径:" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "没有选中任何文件!" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "创建实例节点" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "编辑依赖.." + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "查看所有者" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "拷贝路径" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "移动或重命名" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "移动" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "信息" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "在资源管理器中打开" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "重新导入.." + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "上一个目录:" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "下一个目录:" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "重新扫描文件系统" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "收藏目录" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "将选中的场景实例为选中节点的子节点。" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "移动" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "添加到分组" @@ -2306,7 +2673,7 @@ msgstr "导入BitMask" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Source Texture(s):" -msgstr "源贴图:" +msgstr "源贴图:" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp @@ -2315,7 +2682,7 @@ msgstr "源贴图:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Target Path:" -msgstr "目标路径:" +msgstr "目标路径:" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_font_import_plugin.cpp @@ -2354,15 +2721,15 @@ msgstr "无法保存字体。" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Source Font:" -msgstr "源字体文件:" +msgstr "源字体文件:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Source Font Size:" -msgstr "源字体大小:" +msgstr "源字体大小:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Dest Resource:" -msgstr "目标资源:" +msgstr "目标资源:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "The quick brown fox jumps over the lazy dog." @@ -2372,14 +2739,14 @@ msgstr "" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Test:" -msgstr "测试:" +msgstr "测试:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp #: tools/editor/io_plugins/editor_sample_import_plugin.cpp #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Options:" -msgstr "选项:" +msgstr "选项:" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Font Import" @@ -2414,7 +2781,7 @@ msgstr "导入单个Mesh" #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp msgid "Source Mesh(es):" -msgstr "源Mesh:" +msgstr "源Mesh:" #: tools/editor/io_plugins/editor_mesh_import_plugin.cpp #: tools/editor/plugins/mesh_instance_editor_plugin.cpp @@ -2435,7 +2802,7 @@ msgstr "导入声音文件" #: tools/editor/io_plugins/editor_sample_import_plugin.cpp msgid "Source Sample(s):" -msgstr "源音效文件:" +msgstr "源音效文件:" #: tools/editor/io_plugins/editor_sample_import_plugin.cpp msgid "Audio Sample" @@ -2455,7 +2822,7 @@ msgstr "标记" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Bake FPS:" -msgstr "烘培FPS:" +msgstr "烘培FPS:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Optimizer" @@ -2516,7 +2883,7 @@ msgstr "导入3D场景" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Source Scene:" -msgstr "源场景:" +msgstr "源场景:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Same as Target Scene" @@ -2528,7 +2895,7 @@ msgstr "共享的" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Target Texture Folder:" -msgstr "目标贴图目录:" +msgstr "目标贴图目录:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Post-Process Script:" @@ -2536,7 +2903,7 @@ msgstr "" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Custom Root Node Type:" -msgstr "自定义根节点类型:" +msgstr "自定义根节点类型:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Auto" @@ -2544,7 +2911,7 @@ msgstr "自动" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "The Following Files are Missing:" -msgstr "找不到下列文件:" +msgstr "找不到下列文件:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import Anyway" @@ -2585,11 +2952,11 @@ msgstr "" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Import Image:" -msgstr "导入图片:" +msgstr "导入图片:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Can't import a file over itself:" -msgstr "不允许导入文件本身:" +msgstr "不允许导入文件本身:" #: tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't localize path: %s (already local)" @@ -2625,7 +2992,7 @@ msgstr "纹理格式" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Texture Compression Quality (WebP):" -msgstr "高质量(WebP)压缩方式:" +msgstr "高质量(WebP)压缩方式:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Texture Options" @@ -2641,7 +3008,7 @@ msgstr "精灵集至少需要一个文件。" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Error importing:" -msgstr "导入出错:" +msgstr "导入出错:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Only one file is required for large texture." @@ -2649,7 +3016,7 @@ msgstr "大图导入仅支持一个输入文件。" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Max Texture Size:" -msgstr "最大纹理尺寸:" +msgstr "最大纹理尺寸:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures for Atlas (2D)" @@ -2657,7 +3024,7 @@ msgstr "导入2D精灵集" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Cell Size:" -msgstr "单元尺寸:" +msgstr "单元尺寸:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Large Texture" @@ -2669,15 +3036,15 @@ msgstr "导入2D大图" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Source Texture" -msgstr "源贴图:" +msgstr "源贴图:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Base Atlas Texture" -msgstr "" +msgstr "基础图集纹理" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Source Texture(s)" -msgstr "源贴图:" +msgstr "源贴图:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Import Textures for 2D" @@ -2708,7 +3075,7 @@ msgid "" "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " "the project." msgstr "" -"提示:大多数2D贴图并不需要导入操作,只要将png/jpg文件放到项目目录下即可。" +"提示:大多数2D贴图并不需要导入操作,只要将png/jpg文件放到项目目录下即可。" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Crop empty space." @@ -2740,19 +3107,19 @@ msgstr "正在保存文件" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Couldn't save large texture:" -msgstr "无法保存大图:" +msgstr "无法保存大图:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Build Atlas For:" -msgstr "使用以下图片生成精灵集:" +msgstr "使用以下图片生成精灵集:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Loading Image:" -msgstr "加载图片中:" +msgstr "加载图片中:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Couldn't load image:" -msgstr "无法加载图片:" +msgstr "无法加载图片:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Converting Images" @@ -2768,11 +3135,11 @@ msgstr "" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Couldn't save atlas image:" -msgstr "无法保存精灵集图片:" +msgstr "无法保存精灵集图片:" #: tools/editor/io_plugins/editor_texture_import_plugin.cpp msgid "Couldn't save converted texture:" -msgstr "无法保存转换的贴图:" +msgstr "无法保存转换的贴图:" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Invalid source!" @@ -2789,7 +3156,7 @@ msgstr "列" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp #: tools/editor/script_create_dialog.cpp msgid "Language" -msgstr "语言:" +msgstr "语言:" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "No items to import!" @@ -2813,7 +3180,7 @@ msgstr "导入语言翻译" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Source CSV:" -msgstr "源CSV文件:" +msgstr "源CSV文件:" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Ignore First Row" @@ -2829,7 +3196,7 @@ msgstr "添加到项目(engine.cfg)" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Import Languages:" -msgstr "导入语言:" +msgstr "导入语言:" #: tools/editor/io_plugins/editor_translation_import_plugin.cpp msgid "Translation" @@ -2845,7 +3212,7 @@ msgstr "节点" #: tools/editor/node_dock.cpp msgid "Groups" -msgstr "分组:" +msgstr "分组:" #: tools/editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." @@ -2857,7 +3224,7 @@ msgstr "切换AutoPlay" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "新动画名称:" +msgstr "新动画名称:" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" @@ -2865,7 +3232,7 @@ msgstr "新建动画" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "重命名动画:" +msgstr "重命名动画:" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp @@ -2874,11 +3241,11 @@ msgstr "移除动画" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Invalid animation name!" -msgstr "错误:动画名不合法!" +msgstr "错误:动画名不合法!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "错误:已存在同名动画!" +msgstr "错误:已存在同名动画!" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp @@ -2908,11 +3275,11 @@ msgstr "复制动画" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to copy!" -msgstr "错误:没有拷贝的动画!" +msgstr "错误:没有拷贝的动画!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation resource on clipboard!" -msgstr "错误:剪切板中没有动画资源!" +msgstr "错误:剪切板中没有动画资源!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -2924,7 +3291,7 @@ msgstr "粘贴动画" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to edit!" -msgstr "错误:没有选中要编辑的动画!" +msgstr "错误:没有选中要编辑的动画!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -2936,7 +3303,7 @@ msgstr "从结束时间倒放选中动画(Shift+A)" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" -msgstr "" +msgstr "停止动画回放。(S)" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" @@ -2948,18 +3315,18 @@ msgstr "从当前位置播放选中动画(D)" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "动画位置(单位:秒)" +msgstr "动画位置(单位:秒)" #: tools/editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Scale animation playback globally for the node." -msgstr "" +msgstr "节点全局缩放动画回放" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Create new animation in player." msgstr "在播放中创建动画。" #: tools/editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Load animation from disk." msgstr "从磁盘中加载动画。" @@ -2972,7 +3339,6 @@ msgid "Save the current animation" msgstr "保存当前动画" #: tools/editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Save As" msgstr "另存为" @@ -3002,7 +3368,7 @@ msgstr "创建新动画" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" -msgstr "动画名称:" +msgstr "动画名称:" #: tools/editor/plugins/animation_player_editor_plugin.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp @@ -3014,7 +3380,7 @@ msgstr "错误!" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "混合时间:" +msgstr "混合时间:" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" @@ -3031,7 +3397,7 @@ msgstr "动画" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "New name:" -msgstr "新名称:" +msgstr "新名称:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp #: tools/editor/plugins/multimesh_editor_plugin.cpp @@ -3056,15 +3422,15 @@ msgstr "混合" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Auto Restart:" -msgstr "自动重新开始:" +msgstr "自动重新开始:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Restart (s):" -msgstr "重新开始(秒):" +msgstr "重新开始(秒):" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Random Restart (s):" -msgstr "随机开始(秒):" +msgstr "随机开始(秒):" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Start!" @@ -3073,19 +3439,19 @@ msgstr "开始!" #: tools/editor/plugins/animation_tree_editor_plugin.cpp #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Amount:" -msgstr "数量:" +msgstr "数量:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend:" -msgstr "混合:" +msgstr "混合:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 0:" -msgstr "混合0:" +msgstr "混合0:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 1:" -msgstr "混合1:" +msgstr "混合1:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "X-Fade Time (s):" @@ -3093,7 +3459,7 @@ msgstr "" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Current:" -msgstr "当前:" +msgstr "当前:" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Add Input" @@ -3149,7 +3515,7 @@ msgstr "" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "" +msgstr "时间缩放节点" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" @@ -3157,7 +3523,7 @@ msgstr "" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "" +msgstr "过渡节点" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Import Animations.." @@ -3173,7 +3539,7 @@ msgstr "筛选.." #: tools/editor/plugins/baked_light_baker.cpp msgid "Parsing %d Triangles:" -msgstr "正在解析第%d个三角形:" +msgstr "正在解析第%d个三角形:" #: tools/editor/plugins/baked_light_baker.cpp msgid "Triangle #" @@ -3181,7 +3547,7 @@ msgstr "三角形 #" #: tools/editor/plugins/baked_light_baker.cpp msgid "Light Baker Setup:" -msgstr "建立烘培:" +msgstr "建立烘培:" #: tools/editor/plugins/baked_light_baker.cpp msgid "Parsing Geometry" @@ -3220,10 +3586,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "BakedLightInstance未包含BakedLight资源。" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "烘培!" @@ -3238,25 +3600,25 @@ msgstr "预览" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" -msgstr "" +msgstr "设置吸附" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset:" -msgstr "网格偏移量:" +msgstr "网格偏移量:" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Step:" -msgstr "网格大小:" +msgstr "网格大小:" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "旋转偏移量:" +msgstr "旋转偏移量:" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "旋转步长:" +msgstr "旋转步长:" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Pivot" @@ -3287,7 +3649,8 @@ msgid "Paste Pose" msgstr "粘贴姿势" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" +#, fuzzy +msgid "Select Mode" msgstr "选择模式(Q)" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3307,13 +3670,13 @@ msgid "Alt+RMB: Depth list selection" msgstr "Alt+鼠标右键:显示鼠标点击位置下的所有节点列表" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" +#, fuzzy +msgid "Move Mode" msgstr "移动模式(W)" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +#, fuzzy +msgid "Rotate Mode" msgstr "旋转模式(E)" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3348,17 +3711,9 @@ msgid "Restores the object's children's ability to be selected." msgstr "恢复节点的子孙能够被选中。" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "编辑" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" -msgstr "" +msgstr "使用吸附" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/polygon_2d_editor_plugin.cpp @@ -3367,24 +3722,24 @@ msgstr "显示网格" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "" +msgstr "使用旋转吸附" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" -msgstr "" +msgstr "相对吸附" #: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap.." -msgstr "" +msgstr "设置吸附.." #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "" +msgstr "使用像素吸附" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Expand to Parent" -msgstr "" +msgstr "展开父节点" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Skeleton.." @@ -3412,14 +3767,6 @@ msgid "View" msgstr "视图" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "放大" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "缩小" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "重置缩放" @@ -3440,7 +3787,6 @@ msgid "Anchor" msgstr "锚点" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Keys" msgstr "插入关键帧" @@ -3466,7 +3812,7 @@ msgstr "设置值" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap (Pixels):" -msgstr "" +msgstr "吸附(像素):" #: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3565,12 +3911,12 @@ msgstr "添加遮光多边形" #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" -msgstr "编辑已存在的多边形:" +msgstr "编辑已存在的多边形:" #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." -msgstr "鼠标左键:移动点" +msgstr "鼠标左键:移动点" #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp @@ -3580,7 +3926,7 @@ msgstr "Ctrl+鼠标左键:分割视图块" #: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp #: tools/editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." -msgstr "鼠标右键:移除点" +msgstr "鼠标右键:移除点" #: tools/editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" @@ -3696,15 +4042,15 @@ msgstr "" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Couldn't map area." -msgstr "" +msgstr "无法绘制区域。" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "选择源Mesh:" +msgstr "选择源Mesh:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "" +msgstr "选择一个目标曲面:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" @@ -3716,11 +4062,11 @@ msgstr "" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" -msgstr "" +msgstr "目标曲面:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" -msgstr "源Mesh:" +msgstr "源Mesh:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" @@ -3740,15 +4086,15 @@ msgstr "" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" -msgstr "随机旋转:" +msgstr "随机旋转:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Random Tilt:" -msgstr "随机砖块:" +msgstr "随机砖块:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" -msgstr "随机缩放:" +msgstr "随机缩放:" #: tools/editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" @@ -3764,7 +4110,7 @@ msgstr "移除多边形及顶点" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" -msgstr "加载图片出错:" +msgstr "加载图片出错:" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "No pixels with transparency > 128 in image.." @@ -3784,7 +4130,7 @@ msgstr "" #: tools/editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" -msgstr "生成顶点计数:" +msgstr "生成顶点计数:" #: tools/editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." @@ -3867,17 +4213,17 @@ msgstr "选择顶点" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Shift+Drag: Select Control Points" -msgstr "Shift+拖拽:选择控制点" +msgstr "Shift+拖拽:选择控制点" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "鼠标左键:添加点" +msgstr "鼠标左键:添加点" #: tools/editor/plugins/path_2d_editor_plugin.cpp #: tools/editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "鼠标右键:删除点" +msgstr "鼠标右键:删除点" #: tools/editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" @@ -3994,7 +4340,7 @@ msgstr "网格" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "错误:无法加载资源!" +msgstr "错误:无法加载资源!" #: tools/editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" @@ -4024,7 +4370,7 @@ msgstr "解析BBCode" #: tools/editor/plugins/sample_editor_plugin.cpp msgid "Length:" -msgstr "长度:" +msgstr "长度:" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Open Sample File(s)" @@ -4032,7 +4378,7 @@ msgstr "打开声音文件" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "ERROR: Couldn't load sample!" -msgstr "错误:无法加载音效!" +msgstr "错误:无法加载音效!" #: tools/editor/plugins/sample_library_editor_plugin.cpp msgid "Add Sample" @@ -4096,14 +4442,12 @@ msgid "Save Theme As.." msgstr "主题另存为" #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next script" -msgstr "创建脚本" +msgstr "下一个脚本" #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Previous script" -msgstr "上一个目录:" +msgstr "上一个脚本" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/project_export.cpp @@ -4120,6 +4464,10 @@ msgid "Save All" msgstr "全部保存" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "软重载脚本" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "后退" @@ -4140,98 +4488,27 @@ msgid "Save Theme As" msgstr "主题另存为" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "向上移动" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "向下移动" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" -msgstr "向左缩进" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" -msgstr "向右缩进" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" -msgstr "切换注释" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" -msgstr "拷贝到下一行" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" -msgstr "代码补全" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" -msgstr "修剪行后空白" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" -msgstr "自动缩进" - -#: tools/editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Soft Reload Script" -msgstr "重新加载Tool脚本" +msgid "Close Docs" +msgstr "拷贝到下一行" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find.." msgstr "查找.." #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find Next" msgstr "查找下一项" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" -msgstr "查找上一项" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." -msgstr "替换.." - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." -msgstr "前往函数.." - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." -msgstr "前往行.." - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Debug" msgstr "调试" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" -msgstr "切换断点" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" -msgstr "移除所有断点" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" -msgstr "前往下一个断点" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" -msgstr "前往上一个断点" - -#: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp msgid "Step Over" msgstr "单步跳过" @@ -4268,15 +4545,6 @@ msgid "Move Right" msgstr "向右移动" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" -msgstr "帮助" - -#: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Contextual Help" -msgstr "搜索光标位置" - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Tutorials" msgstr "教程" @@ -4314,7 +4582,7 @@ msgid "" "What action should be taken?:" msgstr "" "磁盘中的下列文件已更新。\n" -"请选择执行那项操作?:" +"请选择执行那项操作?:" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Reload" @@ -4334,6 +4602,77 @@ msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "向上移动" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "向下移动" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "向左缩进" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "向右缩进" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "切换注释" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "拷贝到下一行" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "代码补全" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "修剪行后空白" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "自动缩进" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "移除所有断点" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "前往下一个断点" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "前往上一个断点" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "查找上一项" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "替换.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "前往函数.." + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "前往行.." + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "搜索光标位置" + #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Vertex" msgstr "顶点" @@ -4460,11 +4799,11 @@ msgstr "删除Graph Node节点" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Cyclic Connection Link" -msgstr "错误:循环的连接" +msgstr "错误:循环的连接" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Missing Input Connections" -msgstr "错误:缺少输入连接" +msgstr "错误:缺少输入连接" #: tools/editor/plugins/shader_graph_editor_plugin.cpp msgid "Add Shader Graph Node" @@ -4595,6 +4934,14 @@ msgid "Could not instance scene!" msgstr "无法实例化场景!" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "移动模式(W)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "旋转模式(E)" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "缩放模式(R)" @@ -4630,19 +4977,16 @@ msgid "Switch Perspective/Orthogonal view" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Insert Animation Key" -msgstr "粘贴动画" +msgstr "插入动画帧" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Focus Selection" -msgstr "缩放选中项" +msgstr "选中选中项" #: tools/editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Selection With View" -msgstr "所有选项" +msgstr "选中项与视图对齐" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform" @@ -4734,15 +5078,15 @@ msgstr "Viewport设置" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Default Light Normal:" -msgstr "默认光照法线:" +msgstr "默认光照法线:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Ambient Light Color:" -msgstr "环境光颜色:" +msgstr "环境光颜色:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Perspective FOV (deg.):" -msgstr "透视视角(角度):" +msgstr "透视视角(角度):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" @@ -4758,15 +5102,15 @@ msgstr "修改变换" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Translate:" -msgstr "移动:" +msgstr "移动:" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" -msgstr "旋转(角度):" +msgstr "旋转(角度):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale (ratio):" -msgstr "缩放(比率):" +msgstr "缩放(比率):" #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" @@ -4782,7 +5126,7 @@ msgstr "" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" -msgstr "错误:无法加载帧资源!" +msgstr "错误:无法加载帧资源!" #: tools/editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" @@ -4842,57 +5186,51 @@ msgstr "向下" #: tools/editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" -msgstr "StyleBox预览:" +msgstr "StyleBox预览:" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Snap Mode:" -msgstr "运行模式:" +msgstr "吸附模式:" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "<None>" -msgstr "" +msgstr "无" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "Pixel Snap" -msgstr "" +msgstr "像素吸附" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Grid Snap" -msgstr "网格大小:" +msgstr "网格吸附" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "Auto Slice" -msgstr "" +msgstr "自动裁剪" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Offset:" -msgstr "网格偏移量:" +msgstr "网格偏移量:" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Step:" msgstr "步长(秒)" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Separation:" -msgstr "选项:" +msgstr "分隔:" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Texture Region" -msgstr "纹理区域编辑" +msgstr "纹理区域" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region Editor" -msgstr "纹理区域编辑" +msgstr "纹理区域编辑器" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" -msgstr "无法保存主题到文件:" +msgstr "无法保存主题到文件:" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Add All Items" @@ -4916,22 +5254,20 @@ msgid "Remove Class Items" msgstr "移除类项目" #: tools/editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Create Empty Template" -msgstr "创建模板" +msgstr "创建主题模板" #: tools/editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Create Empty Editor Template" -msgstr "创建模板" +msgstr "创建编辑器主题模板" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" -msgstr "" +msgstr "复选框 选项1" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio2" -msgstr "" +msgstr "复选框 选项2" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Item" @@ -4977,11 +5313,11 @@ msgstr "分页3" #: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp #: tools/editor/script_editor_debugger.cpp msgid "Type:" -msgstr "类型:" +msgstr "类型:" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" -msgstr "数据类型:" +msgstr "数据类型:" #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Icon" @@ -5009,28 +5345,24 @@ msgid "Erase TileMap" msgstr "擦除砖块地图" #: tools/editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase selection" msgstr "擦除选中" #: tools/editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find tile" -msgstr "查找下一项" +msgstr "查找砖块" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" msgstr "转置" #: tools/editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Mirror X" -msgstr "沿X轴翻转(A)" +msgstr "沿X轴翻转" #: tools/editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Mirror Y" -msgstr "沿Y轴翻转(S)" +msgstr "沿Y轴翻转" #: tools/editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket" @@ -5062,7 +5394,7 @@ msgstr "旋转270度" #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Could not find tile:" -msgstr "找不到砖块:" +msgstr "找不到砖块:" #: tools/editor/plugins/tile_set_editor_plugin.cpp msgid "Item name or ID:" @@ -5171,11 +5503,11 @@ msgstr "导出项目目录下的所有文件" #: tools/editor/project_export.cpp msgid "Export Mode:" -msgstr "导出模式:" +msgstr "导出模式:" #: tools/editor/project_export.cpp msgid "Resources to Export:" -msgstr "导出的资源:" +msgstr "导出的资源:" #: tools/editor/project_export.cpp msgid "Action" @@ -5220,11 +5552,11 @@ msgstr "高质量(有损)节省磁盘空间" #: tools/editor/project_export.cpp msgid "Shrink All Images:" -msgstr "收缩所有图片:" +msgstr "收缩所有图片:" #: tools/editor/project_export.cpp msgid "Compress Formats:" -msgstr "压缩格式:" +msgstr "压缩格式:" #: tools/editor/project_export.cpp msgid "Image Groups" @@ -5232,7 +5564,7 @@ msgstr "图片分组" #: tools/editor/project_export.cpp msgid "Groups:" -msgstr "分组:" +msgstr "分组:" #: tools/editor/project_export.cpp msgid "Compress Disk" @@ -5244,27 +5576,27 @@ msgstr "节省内存" #: tools/editor/project_export.cpp msgid "Compress Mode:" -msgstr "压缩方式:" +msgstr "压缩方式:" #: tools/editor/project_export.cpp msgid "Lossy Quality:" -msgstr "图片质量:" +msgstr "图片质量:" #: tools/editor/project_export.cpp msgid "Atlas:" -msgstr "精灵集:" +msgstr "精灵集:" #: tools/editor/project_export.cpp msgid "Shrink By:" -msgstr "收缩方式:" +msgstr "收缩方式:" #: tools/editor/project_export.cpp msgid "Preview Atlas" -msgstr "精灵集预览:" +msgstr "精灵集预览:" #: tools/editor/project_export.cpp msgid "Image Filter:" -msgstr "纹理过滤:\t\t" +msgstr "纹理过滤:\t\t" #: tools/editor/project_export.cpp msgid "Images:" @@ -5284,7 +5616,7 @@ msgstr "音效" #: tools/editor/project_export.cpp msgid "Sample Conversion Mode: (.wav files):" -msgstr "音效转换方式(.wav文件):" +msgstr "音效转换方式(.wav文件):" #: tools/editor/project_export.cpp msgid "Keep" @@ -5296,7 +5628,7 @@ msgstr "压缩(RAM - IMA-ADPCM)" #: tools/editor/project_export.cpp msgid "Sampling Rate Limit (Hz):" -msgstr "采样率(Hz):" +msgstr "采样率(Hz):" #: tools/editor/project_export.cpp msgid "Trim" @@ -5312,7 +5644,7 @@ msgstr "脚本" #: tools/editor/project_export.cpp msgid "Script Export Mode:" -msgstr "脚本导出方式:" +msgstr "脚本导出方式:" #: tools/editor/project_export.cpp msgid "Text" @@ -5375,11 +5707,8 @@ msgid "Couldn't create engine.cfg in project path." msgstr "无法在项目目录下创建engine.cfg文件。" #: tools/editor/project_manager.cpp -#, fuzzy msgid "The following files failed extraction from package:" -msgstr "" -"磁盘中的下列文件已更新。\n" -"请选择执行那项操作?:" +msgstr "提取以下文件失败:" #: tools/editor/project_manager.cpp msgid "Package Installed Successfully!" @@ -5395,7 +5724,7 @@ msgstr "项目目录(必须存在)" #: tools/editor/project_manager.cpp msgid "Project Name:" -msgstr "项目名称:" +msgstr "项目名称:" #: tools/editor/project_manager.cpp msgid "Create New Project" @@ -5406,14 +5735,12 @@ msgid "Project Path:" msgstr "项目目录" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install Project:" -msgstr "最近打开的项目:" +msgstr "安装项目:" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Install" -msgstr "创建实例节点" +msgstr "安装" #: tools/editor/project_manager.cpp msgid "Browse" @@ -5432,11 +5759,13 @@ msgid "Unnamed Project" msgstr "未命名项目" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +#, fuzzy +msgid "Are you sure to open more than one project?" msgstr "您确定要打开多个项目吗?" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +#, fuzzy +msgid "Are you sure to run more than one project?" msgstr "您确定要执行多个项目吗?" #: tools/editor/project_manager.cpp @@ -5444,6 +5773,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "移除此项目(项目的文件不受影响)" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "项目管理器" @@ -5460,6 +5795,11 @@ msgid "Scan" msgstr "扫描" #: tools/editor/project_manager.cpp +#, fuzzy +msgid "Select a Folder to Scan" +msgstr "选择一个节点" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "新建" @@ -5481,7 +5821,7 @@ msgstr "摇杆轴" #: tools/editor/project_settings.cpp msgid "Mouse Button" -msgstr "鼠标按键:" +msgstr "鼠标按键:" #: tools/editor/project_settings.cpp msgid "Invalid action (anything goes but '/' or ':')." @@ -5509,7 +5849,7 @@ msgstr "按下一个键.." #: tools/editor/project_settings.cpp msgid "Mouse Button Index:" -msgstr "鼠标按键:" +msgstr "鼠标按键:" #: tools/editor/project_settings.cpp msgid "Left Button" @@ -5613,7 +5953,7 @@ msgstr "一般" #: tools/editor/project_settings.cpp tools/editor/property_editor.cpp msgid "Property:" -msgstr "属性:" +msgstr "属性:" #: tools/editor/project_settings.cpp msgid "Del" @@ -5629,15 +5969,15 @@ msgstr "事件表" #: tools/editor/project_settings.cpp msgid "Action:" -msgstr "动作:" +msgstr "动作:" #: tools/editor/project_settings.cpp msgid "Device:" -msgstr "设备:" +msgstr "设备:" #: tools/editor/project_settings.cpp msgid "Index:" -msgstr "序号:" +msgstr "序号:" #: tools/editor/project_settings.cpp msgid "Localization" @@ -5649,11 +5989,11 @@ msgstr "语言" #: tools/editor/project_settings.cpp msgid "Translations:" -msgstr "语言:" +msgstr "语言:" #: tools/editor/project_settings.cpp msgid "Add.." -msgstr "添加:" +msgstr "添加:" #: tools/editor/project_settings.cpp msgid "Remaps" @@ -5661,11 +6001,11 @@ msgstr "重定向" #: tools/editor/project_settings.cpp msgid "Resources:" -msgstr "资源:" +msgstr "资源:" #: tools/editor/project_settings.cpp msgid "Remaps by Locale:" -msgstr "地区重定向:" +msgstr "地区重定向:" #: tools/editor/project_settings.cpp msgid "Locale" @@ -5684,24 +6024,28 @@ msgid "Preset.." msgstr "预设.." #: tools/editor/property_editor.cpp +#, fuzzy msgid "Ease In" -msgstr "慢速开始" +msgstr "缓入" #: tools/editor/property_editor.cpp +#, fuzzy msgid "Ease Out" -msgstr "慢速结束" +msgstr "缓出" #: tools/editor/property_editor.cpp +#, fuzzy msgid "Zero" -msgstr "" +msgstr "置零" #: tools/editor/property_editor.cpp +#, fuzzy msgid "Easing In-Out" -msgstr "慢速开始和结束" +msgstr "缓入缓出" #: tools/editor/property_editor.cpp msgid "Easing Out-In" -msgstr "" +msgstr "反缓入缓出" #: tools/editor/property_editor.cpp msgid "File.." @@ -5721,7 +6065,7 @@ msgstr "" #: tools/editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "加载文件出错:不是资源文件!" +msgstr "加载文件出错:不是资源文件!" #: tools/editor/property_editor.cpp msgid "Couldn't load image" @@ -5741,7 +6085,7 @@ msgstr "设置" #: tools/editor/property_editor.cpp msgid "Properties:" -msgstr "属性:" +msgstr "属性:" #: tools/editor/property_editor.cpp msgid "Global" @@ -5749,15 +6093,25 @@ msgstr "全局" #: tools/editor/property_editor.cpp msgid "Sections:" -msgstr "选项:" +msgstr "选项:" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "选择顶点" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "选择模式(Q)" #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" -msgstr "无法执行PVPTC工具:" +msgstr "无法执行PVPTC工具:" #: tools/editor/pvrtc_compress.cpp msgid "Can't load back converted image using PVRTC tool:" -msgstr "无法加载使用PVRTC工具转换的图片:" +msgstr "无法加载使用PVRTC工具转换的图片:" #: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp msgid "Reparent Node" @@ -5797,7 +6151,7 @@ msgstr "" #: tools/editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "运行模式:" +msgstr "运行模式:" #: tools/editor/run_settings_dialog.cpp msgid "Current Scene" @@ -5809,7 +6163,7 @@ msgstr "主场景" #: tools/editor/run_settings_dialog.cpp msgid "Main Scene Arguments:" -msgstr "主场景参数:" +msgstr "主场景参数:" #: tools/editor/run_settings_dialog.cpp msgid "Scene Run Settings" @@ -5824,6 +6178,11 @@ msgid "No parent to instance a child at." msgstr "没有选中节点来添加实例。" #: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "No parent to instance the scenes at." +msgstr "没有选中节点来添加实例。" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "从%s加载场景出错!" @@ -5952,6 +6311,11 @@ msgid "Save Branch as Scene" msgstr "将分支保存为场景" #: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete (No Confirm)" +msgstr "请确认..." + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "添加/创建节点" @@ -5961,6 +6325,11 @@ msgid "" "exists." msgstr "实例化场景文件为一个节点,如果没有根节点则创建一个继承自该文件的场景。" +#: tools/editor/scene_tree_dock.cpp +#, fuzzy +msgid "Create a new script for the selected node." +msgstr "将选中的场景实例为选中节点的子节点。" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5977,11 +6346,11 @@ msgstr "切换CanvasItem可见" #: tools/editor/scene_tree_editor.cpp msgid "Instance:" -msgstr "实例:" +msgstr "实例:" #: tools/editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" -msgstr "节点名称非法,不允许包含以下字符:" +msgstr "节点名称非法,不允许包含以下字符:" #: tools/editor/scene_tree_editor.cpp msgid "Rename Node" @@ -5989,7 +6358,7 @@ msgstr "重命名节点" #: tools/editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "场景树:" +msgstr "场景树:" #: tools/editor/scene_tree_editor.cpp msgid "Editable Children" @@ -6023,97 +6392,13 @@ msgstr "清除!" msgid "Select a Node" msgstr "选择一个节点" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "源文件和目标文件相同,操作忽略。" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "源路径和目标路径相同,操作忽略。" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "无法将目录移动到自身下。" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "无法对'..'引用操作。" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "选择新名称和路径:" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "没有选中任何文件!" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "创建实例节点" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "编辑依赖.." - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "查看所有者" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "拷贝路径" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "移动或重命名" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "移动" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "信息" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "在资源管理器中打开" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "重新导入.." - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "上一个目录:" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "下一个目录:" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "重新扫描文件系统" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "收藏目录" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "将选中的场景实例为选中节点的子节点。" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "移动" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "基类名称非法" #: tools/editor/script_create_dialog.cpp msgid "Valid chars:" -msgstr "合法的字符:" +msgstr "合法的字符:" #: tools/editor/script_create_dialog.cpp msgid "Invalid class name" @@ -6169,7 +6454,7 @@ msgstr "路径可用" #: tools/editor/script_create_dialog.cpp msgid "Class Name:" -msgstr "类名:" +msgstr "类名:" #: tools/editor/script_create_dialog.cpp msgid "Built-In Script" @@ -6181,23 +6466,23 @@ msgstr "创建脚本" #: tools/editor/script_editor_debugger.cpp msgid "Bytes:" -msgstr "字节:" +msgstr "字节:" #: tools/editor/script_editor_debugger.cpp msgid "Warning" -msgstr "警告:" +msgstr "警告:" #: tools/editor/script_editor_debugger.cpp msgid "Error:" -msgstr "错误:" +msgstr "错误:" #: tools/editor/script_editor_debugger.cpp msgid "Source:" -msgstr "源:" +msgstr "源:" #: tools/editor/script_editor_debugger.cpp msgid "Function:" -msgstr "函数:" +msgstr "函数:" #: tools/editor/script_editor_debugger.cpp msgid "Errors" @@ -6225,11 +6510,11 @@ msgstr "变量" #: tools/editor/script_editor_debugger.cpp msgid "Errors:" -msgstr "错误:" +msgstr "错误:" #: tools/editor/script_editor_debugger.cpp msgid "Stack Trace (if applicable):" -msgstr "调用堆栈:" +msgstr "调用堆栈:" #: tools/editor/script_editor_debugger.cpp msgid "Remote Inspector" @@ -6237,7 +6522,7 @@ msgstr "远程属性面板" #: tools/editor/script_editor_debugger.cpp msgid "Live Scene Tree:" -msgstr "即时场景树:" +msgstr "即时场景树:" #: tools/editor/script_editor_debugger.cpp msgid "Remote Object Properties: " @@ -6261,11 +6546,11 @@ msgstr "显示" #: tools/editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" -msgstr "占用显存的资源列表:" +msgstr "占用显存的资源列表:" #: tools/editor/script_editor_debugger.cpp msgid "Total:" -msgstr "合计:" +msgstr "合计:" #: tools/editor/script_editor_debugger.cpp msgid "Video Mem" @@ -6289,15 +6574,15 @@ msgstr "杂项" #: tools/editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "点击的控件:" +msgstr "点击的控件:" #: tools/editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "点击的控件类型:" +msgstr "点击的控件类型:" #: tools/editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "实时编辑根节点:" +msgstr "实时编辑根节点:" #: tools/editor/script_editor_debugger.cpp msgid "Set From Tree" @@ -6340,8 +6625,15 @@ msgid "Change Ray Shape Length" msgstr "" #: tools/editor/spatial_editor_gizmos.cpp +#, fuzzy msgid "Change Notifier Extents" -msgstr "" +msgstr "更改通知器级别" + +#~ msgid "Cannot go into subdir:" +#~ msgstr "无法打开目录:" + +#~ msgid "Help" +#~ msgstr "帮助" #~ msgid "Imported Resources" #~ msgstr "已导入的资源" diff --git a/tools/translations/zh_HK.po b/tools/translations/zh_HK.po index 8f98ab1f1e..1d2ab3f8fb 100644 --- a/tools/translations/zh_HK.po +++ b/tools/translations/zh_HK.po @@ -2,24 +2,29 @@ # Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community # This file is distributed under the same license as the Godot source code. # -# Wesley <ZX_WT@ymail.com>, 2016. +# Wesley (zx-wt) <ZX_WT@ymail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2016-05-30 16:42+0800\n" -"Last-Translator: Wesley <ZX_WT@ymail.com>\n" -"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n" +"PO-Revision-Date: 2016-08-13 09:55+0000\n" +"Last-Translator: zx-wt <ZX_WT@ymail.com>\n" +"Language-Team: Chinese (Hong Kong) <https://hosted.weblate.org/projects/" +"godot-engine/godot/zh_HK/>\n" "Language: zh_HK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 2.8-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -55,6 +60,282 @@ msgstr "" msgid "Invalid instance dictionary (invalid subclasses)" msgstr "" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Functions:" +msgstr "行為" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "訊號:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Rename Function" +msgstr "只限選中" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Function" +msgstr "行為" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "新增訊號" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Function" +msgstr "只限選中" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Signal" +msgstr "只限選中" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Editing Signal:" +msgstr "連接" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "新增節點" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Preload Node" +msgstr "新增節點" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "由主幹新增節點" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "編輯" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "關閉" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Change" +msgstr "當改變時更新" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "刪除選中檔案" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Paste Nodes" +msgstr "貼上" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -159,6 +440,10 @@ msgid "" "as parent." msgstr "" +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -212,23 +497,23 @@ msgstr "" #: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Cancel" -msgstr "" +msgstr "取消" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" -msgstr "" +msgstr "OK" #: scene/gui/dialogs.cpp msgid "Alert!" -msgstr "" +msgstr "警告!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "" +msgstr "請確認..." #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "" +msgstr "檔案已存在, 要覆蓋嗎?" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Recognized" @@ -236,33 +521,31 @@ msgstr "" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "All Files (*)" -msgstr "" +msgstr "所有檔案(*)" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "開啟" #: scene/gui/file_dialog.cpp -#, fuzzy msgid "Open a File" -msgstr "儲存檔案" +msgstr "開啟檔案" #: scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "開啟檔案" #: scene/gui/file_dialog.cpp -#, fuzzy msgid "Open a Directory" -msgstr "選擇資料夾" +msgstr "開啟資料夾" #: scene/gui/file_dialog.cpp -#, fuzzy msgid "Open a File or Directory" -msgstr "選擇資料夾" +msgstr "選擇資料夾/檔案" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_node.cpp @@ -285,26 +568,26 @@ msgstr "新增資料夾" #: tools/editor/io_plugins/editor_font_import_plugin.cpp #: tools/editor/script_create_dialog.cpp msgid "Path:" -msgstr "路徑" +msgstr "路徑:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "資料夾和檔案:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/script_editor_debugger.cpp msgid "File:" -msgstr "檔案" +msgstr "檔案:" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Filter:" -msgstr "" +msgstr "篩選:" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Name:" -msgstr "名稱" +msgstr "名稱:" #: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp #: tools/editor/editor_file_dialog.cpp @@ -313,7 +596,7 @@ msgstr "無法新增資料夾" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp msgid "Must use a valid extension." -msgstr "" +msgstr "請用有效的副檔名" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp #: tools/editor/settings_config_dialog.cpp @@ -336,7 +619,7 @@ msgstr "" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Device" -msgstr "" +msgstr "設備" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Button" @@ -344,36 +627,37 @@ msgstr "" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Left Button." -msgstr "" +msgstr "左𨫡" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Right Button." -msgstr "" +msgstr "右𨫡" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Middle Button." -msgstr "" +msgstr "中𨫡" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Wheel Up." -msgstr "" +msgstr "上滾" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp msgid "Wheel Down." -msgstr "" +msgstr "下滾" #: scene/gui/input_action.cpp tools/editor/project_settings.cpp +#, fuzzy msgid "Axis" -msgstr "" +msgstr "中軸" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "剪下" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -381,7 +665,7 @@ msgstr "複製" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -389,7 +673,7 @@ msgid "Paste" msgstr "貼上" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -403,7 +687,7 @@ msgid "Clear" msgstr "清空" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "復原" @@ -445,7 +729,7 @@ msgstr "無效字型" #: tools/editor/animation_editor.cpp msgid "Disabled" -msgstr "" +msgstr "已停用" #: tools/editor/animation_editor.cpp msgid "All Selection" @@ -529,9 +813,8 @@ msgid "Duplicate Transposed" msgstr "" #: tools/editor/animation_editor.cpp -#, fuzzy msgid "Remove Selection" -msgstr "只限選中" +msgstr "移除選項" #: tools/editor/animation_editor.cpp msgid "Continuous" @@ -729,6 +1012,10 @@ msgid "Optimize" msgstr "" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "" @@ -778,7 +1065,8 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "" @@ -817,9 +1105,8 @@ msgid "Community" msgstr "" #: tools/editor/asset_library_editor_plugin.cpp -#, fuzzy msgid "Testing" -msgstr "設定" +msgstr "測試" #: tools/editor/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -833,18 +1120,6 @@ msgstr "" msgid "Call" msgstr "" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "關閉" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "" @@ -895,6 +1170,7 @@ msgstr "只限選中" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -902,7 +1178,7 @@ msgstr "" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp msgid "Find" -msgstr "" +msgstr "查找" #: tools/editor/code_editor.cpp msgid "Next" @@ -922,7 +1198,7 @@ msgstr "替換為" #: tools/editor/code_editor.cpp msgid "Case Sensitive" -msgstr "" +msgstr "符合大小寫" #: tools/editor/code_editor.cpp msgid "Backwards" @@ -936,6 +1212,20 @@ msgstr "" msgid "Skip" msgstr "跳過" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "放大" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "縮小" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "重設縮放比例" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "" @@ -1001,9 +1291,8 @@ msgid "Connect '%s' to '%s'" msgstr "由 '%s' 連到 '%s'" #: tools/editor/connections_dialog.cpp -#, fuzzy msgid "Connecting Signal:" -msgstr "連接" +msgstr "連接訊號:" #: tools/editor/connections_dialog.cpp msgid "Create Subscription" @@ -1020,17 +1309,23 @@ msgstr "中斷" #: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp msgid "Signals" -msgstr "" +msgstr "訊號" #: tools/editor/create_dialog.cpp msgid "Create New" -msgstr "" +msgstr "新增" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -1140,8 +1435,9 @@ msgid "Delete selected files?" msgstr "要刪除選中檔案?" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "刪除" @@ -1166,14 +1462,12 @@ msgid "Invalid name. Must not collide with an existing global constant name." msgstr "" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid Path." -msgstr "有效路徑" +msgstr "有效的路徑" #: tools/editor/editor_autoload_settings.cpp -#, fuzzy msgid "File does not exist." -msgstr "檔案已存在" +msgstr "檔案不存在." #: tools/editor/editor_autoload_settings.cpp msgid "Not in resource path." @@ -1279,9 +1573,8 @@ msgid "Toggle Mode" msgstr "" #: tools/editor/editor_file_dialog.cpp -#, fuzzy msgid "Focus Path" -msgstr "複製" +msgstr "" #: tools/editor/editor_file_dialog.cpp #, fuzzy @@ -1293,7 +1586,7 @@ msgstr "上移" msgid "Move Favorite Down" msgstr "下移" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "" @@ -1303,11 +1596,7 @@ msgstr "最近:" #: tools/editor/editor_file_dialog.cpp msgid "Preview:" -msgstr "預覽" - -#: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "無法進入次要資料夾" +msgstr "預覽:" #: tools/editor/editor_file_system.cpp msgid "ScanSources" @@ -1347,25 +1636,13 @@ msgid "Public Methods:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "" @@ -1416,7 +1693,7 @@ msgstr "" #: tools/editor/editor_node.cpp msgid "Importing:" -msgstr "導入中" +msgstr "導入中:" #: tools/editor/editor_node.cpp msgid "Node From Scene" @@ -1657,9 +1934,8 @@ msgid "" msgstr "" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" -msgstr "儲存場景" +msgstr "選擇主場景" #: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp msgid "Ugh" @@ -1750,9 +2026,8 @@ msgid "Save Scene" msgstr "儲存場景" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Save all Scenes" -msgstr "儲存場景" +msgstr "儲存所有場景" #: tools/editor/editor_node.cpp msgid "Close Scene" @@ -1786,7 +2061,7 @@ msgstr "" msgid "TileSet.." msgstr "" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "重製" @@ -1853,9 +2128,8 @@ msgid "Pause the scene" msgstr "" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pause Scene" -msgstr "儲存場景" +msgstr "暫停場景" #: tools/editor/editor_node.cpp msgid "Stop the scene." @@ -1867,23 +2141,20 @@ msgid "Stop" msgstr "" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play the edited scene." -msgstr "請先儲存場景" +msgstr "運行修改的場景" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play Scene" -msgstr "儲存場景" +msgstr "運行場景" #: tools/editor/editor_node.cpp msgid "Play custom scene" msgstr "" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play Custom Scene" -msgstr "儲存場景" +msgstr "運行場景" #: tools/editor/editor_node.cpp msgid "Debug options" @@ -1946,9 +2217,8 @@ msgid "" msgstr "" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Sync Script Changes" -msgstr "當改變時更新" +msgstr "同步更新腳本" #: tools/editor/editor_node.cpp msgid "" @@ -2192,7 +2462,7 @@ msgstr "" #: tools/editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "場景路徑" +msgstr "場景路徑:" #: tools/editor/editor_sub_scene.cpp msgid "Import From Node:" @@ -2202,6 +2472,90 @@ msgstr "" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "複製路徑" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2910,9 +3264,8 @@ msgid "Save the current animation" msgstr "" #: tools/editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Save As" -msgstr "另存為.." +msgstr "另存為" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3158,10 +3511,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "" @@ -3225,8 +3574,8 @@ msgid "Paste Pose" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" -msgstr "" +msgid "Select Mode" +msgstr "選擇模式" #: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -3245,13 +3594,11 @@ msgid "Alt+RMB: Depth list selection" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" -msgstr "" +msgid "Move Mode" +msgstr "移動模式" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +msgid "Rotate Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3286,14 +3633,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "編輯" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "" @@ -3350,14 +3689,6 @@ msgid "View" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "" @@ -4033,9 +4364,8 @@ msgid "Save Theme As.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next script" -msgstr "下一個" +msgstr "下一個腳本" #: tools/editor/plugins/script_editor_plugin.cpp msgid "Previous script" @@ -4056,6 +4386,10 @@ msgid "Save All" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "" @@ -4076,97 +4410,27 @@ msgid "Save Theme As" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "上移" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" -msgstr "下移" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" -msgstr "" +#, fuzzy +msgid "Close Docs" +msgstr "關閉場景" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Find Next" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Debug" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp msgid "Step Over" msgstr "" @@ -4203,14 +4467,6 @@ msgid "Move Right" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp msgid "Tutorials" msgstr "" @@ -4266,6 +4522,77 @@ msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" +msgstr "上移" + +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" +msgstr "下移" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." +msgstr "" + +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Vertex" msgstr "" @@ -4527,6 +4854,14 @@ msgid "Could not instance scene!" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "" @@ -5342,11 +5677,11 @@ msgid "Unnamed Project" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "" #: tools/editor/project_manager.cpp @@ -5354,6 +5689,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "" @@ -5370,6 +5711,10 @@ msgid "Scan" msgstr "" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "" @@ -5661,6 +6006,16 @@ msgstr "" msgid "Sections:" msgstr "" +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Property" +msgstr "選擇模式" + +#: tools/editor/property_selector.cpp +#, fuzzy +msgid "Select Method" +msgstr "選擇模式" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "" @@ -5734,6 +6089,10 @@ msgid "No parent to instance a child at." msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "" @@ -5862,6 +6221,10 @@ msgid "Save Branch as Scene" msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "" @@ -5871,6 +6234,10 @@ msgid "" "exists." msgstr "" +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5933,91 +6300,6 @@ msgstr "" msgid "Select a Node" msgstr "" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -#, fuzzy -msgid "Copy Path" -msgstr "複製" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "" @@ -6136,7 +6418,7 @@ msgstr "" #: tools/editor/script_editor_debugger.cpp msgid "Errors:" -msgstr "錯誤" +msgstr "錯誤:" #: tools/editor/script_editor_debugger.cpp msgid "Stack Trace (if applicable):" @@ -6255,6 +6537,9 @@ msgstr "" msgid "Change Notifier Extents" msgstr "" +#~ msgid "Cannot go into subdir:" +#~ msgstr "無法進入次要資料夾" + #~ msgid "Edit Connections.." #~ msgstr "編輯連接" diff --git a/tools/translations/zh_TW.po b/tools/translations/zh_TW.po index 1119997c22..9be46b18e8 100644 --- a/tools/translations/zh_TW.po +++ b/tools/translations/zh_TW.po @@ -18,10 +18,12 @@ msgstr "" "X-Generator: Weblate 2.7-dev\n" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: modules/gdscript/gd_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -57,6 +59,273 @@ msgstr "" msgid "Invalid instance dictionary (invalid subclasses)" msgstr "" +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Meta to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/polygon_2d_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +#: tools/editor/project_manager.cpp +msgid "Edit" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp +#: tools/editor/connections_dialog.cpp +#: tools/editor/plugins/animation_player_editor_plugin.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +#: tools/editor/plugins/resource_preloader_editor_plugin.cpp +#: tools/editor/plugins/sample_library_editor_plugin.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/sprite_frames_editor_plugin.cpp +#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp +#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp +msgid "Close" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -167,6 +436,10 @@ msgid "" "as parent." msgstr "" +#: scene/3d/baked_light_instance.cpp +msgid "BakedLightInstance does not contain a BakedLight resource." +msgstr "" + #: scene/3d/body_shape.cpp msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " @@ -222,7 +495,7 @@ msgstr "" msgid "Cancel" msgstr "" -#: scene/gui/dialogs.cpp +#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp msgid "OK" msgstr "" @@ -248,8 +521,9 @@ msgstr "" #: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/filesystem_dock.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Open" msgstr "" @@ -372,13 +646,13 @@ msgid "Axis" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Cut" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp msgid "Copy" @@ -386,7 +660,7 @@ msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/plugins/sprite_frames_editor_plugin.cpp #: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp @@ -394,7 +668,7 @@ msgid "Paste" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_export.cpp msgid "Select All" @@ -408,7 +682,7 @@ msgid "Clear" msgstr "" #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Undo" msgstr "" @@ -732,6 +1006,10 @@ msgid "Optimize" msgstr "" #: tools/editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: tools/editor/animation_editor.cpp msgid "Key" msgstr "" @@ -781,7 +1059,8 @@ msgstr "" #: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp #: tools/editor/editor_help.cpp tools/editor/editor_node.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp #: tools/editor/settings_config_dialog.cpp msgid "Search:" msgstr "" @@ -835,18 +1114,6 @@ msgstr "" msgid "Call" msgstr "" -#: tools/editor/call_dialog.cpp tools/editor/connections_dialog.cpp -#: tools/editor/plugins/animation_player_editor_plugin.cpp -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/resource_preloader_editor_plugin.cpp -#: tools/editor/plugins/sample_library_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/sprite_frames_editor_plugin.cpp -#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp -#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp -msgid "Close" -msgstr "" - #: tools/editor/call_dialog.cpp msgid "Method List:" msgstr "" @@ -897,6 +1164,7 @@ msgstr "" #: tools/editor/code_editor.cpp tools/editor/editor_help.cpp #: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp #: tools/editor/project_settings.cpp msgid "Search" @@ -938,6 +1206,20 @@ msgstr "" msgid "Skip" msgstr "" +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: tools/editor/code_editor.cpp +#: tools/editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: tools/editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + #: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp msgid "Line:" msgstr "" @@ -1027,10 +1309,16 @@ msgid "Create New" msgstr "" #: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp -#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp +#: tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp msgid "Matches:" msgstr "" +#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp +#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: tools/editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -1140,8 +1428,9 @@ msgid "Delete selected files?" msgstr "" #: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp +#: tools/editor/filesystem_dock.cpp #: tools/editor/plugins/item_list_editor_plugin.cpp -#: tools/editor/scenes_dock.cpp +#: tools/editor/scene_tree_dock.cpp msgid "Delete" msgstr "" @@ -1288,7 +1577,7 @@ msgstr "" msgid "Move Favorite Down" msgstr "" -#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp +#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp msgid "Favorites:" msgstr "" @@ -1301,10 +1590,6 @@ msgid "Preview:" msgstr "" #: tools/editor/editor_file_system.cpp -msgid "Cannot go into subdir:" -msgstr "" - -#: tools/editor/editor_file_system.cpp msgid "ScanSources" msgstr "" @@ -1342,25 +1627,13 @@ msgid "Public Methods:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Members:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" #: tools/editor/editor_help.cpp -msgid "Signals:" -msgstr "" - -#: tools/editor/editor_help.cpp msgid "Constants:" msgstr "" -#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - #: tools/editor/editor_help.cpp msgid "Method Description:" msgstr "" @@ -1777,7 +2050,7 @@ msgstr "" msgid "TileSet.." msgstr "" -#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp +#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp #: tools/editor/plugins/shader_editor_plugin.cpp msgid "Redo" msgstr "" @@ -2188,6 +2461,90 @@ msgstr "" msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination files, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Same source and destination paths, doing nothing." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't move directories to within themselves." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Can't operate on '..'" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Pick New Name and Location For:" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "No files selected!" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Rename or Move.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Info" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Import.." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: tools/editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + #: tools/editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -3143,10 +3500,6 @@ msgid "Post-Processing Texture #" msgstr "" #: tools/editor/plugins/baked_light_editor_plugin.cpp -msgid "BakedLightInstance does not contain a BakedLight resource." -msgstr "" - -#: tools/editor/plugins/baked_light_editor_plugin.cpp msgid "Bake!" msgstr "" @@ -3210,7 +3563,7 @@ msgid "Paste Pose" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Select Mode (Q)" +msgid "Select Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3230,13 +3583,11 @@ msgid "Alt+RMB: Depth list selection" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Move Mode (W)" +msgid "Move Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/spatial_editor_plugin.cpp -msgid "Rotate Mode (E)" +msgid "Rotate Mode" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -3271,14 +3622,6 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -#: tools/editor/plugins/polygon_2d_editor_plugin.cpp -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -#: tools/editor/project_manager.cpp -msgid "Edit" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp #: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" msgstr "" @@ -3335,14 +3678,6 @@ msgid "View" msgstr "" #: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom In" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Out" -msgstr "" - -#: tools/editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom Reset" msgstr "" @@ -4040,6 +4375,10 @@ msgid "Save All" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: tools/editor/plugins/script_editor_plugin.cpp msgid "History Prev" msgstr "" @@ -4060,194 +4399,186 @@ msgid "Save Theme As" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Up" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/scene_tree_dock.cpp -msgid "Move Down" +msgid "Close Docs" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Left" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find.." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Indent Right" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Next" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Comment" +msgid "Debug" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Clone Down" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Over" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Complete Symbol" +#: tools/editor/script_editor_debugger.cpp +msgid "Step Into" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Trim Trailing Whitespace" +#: tools/editor/script_editor_debugger.cpp +msgid "Break" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Auto Indent" +#: tools/editor/script_editor_debugger.cpp +msgid "Continue" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Soft Reload Script" +msgid "Keep Debugger Open" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find.." +msgid "Window" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Next" +msgid "Move Left" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Find Previous" +msgid "Move Right" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Replace.." +msgid "Tutorials" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Function.." +msgid "Open https://godotengine.org at tutorials section." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/plugins/shader_editor_plugin.cpp -msgid "Goto Line.." +msgid "Classes" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Debug" +msgid "Search the class hierarchy." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Toggle Breakpoint" +msgid "Search the reference documentation." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Remove All Breakpoints" +msgid "Go to previous edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Next Breakpoint" +msgid "Go to next edited document." msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Goto Previous Breakpoint" +msgid "Create Script" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Reload" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Break" +msgid "Resave" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/script_editor_debugger.cpp -msgid "Continue" -msgstr "" - -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Keep Debugger Open" +msgid "Debugger" msgstr "" #: tools/editor/plugins/script_editor_plugin.cpp -msgid "Window" +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Left" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Up" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Move Right" +#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp +msgid "Move Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Left" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Contextual Help" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Indent Right" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Tutorials" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Open https://godotengine.org at tutorials section." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Clone Down" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Classes" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Search the reference documentation." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Auto Indent" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to previous edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Go to next edited document." +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Create Script" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"The following files are newer on disk.\n" -"What action should be taken?:" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Find Previous" msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Reload" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Replace.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "Resave" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Goto Function.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -#: tools/editor/script_editor_debugger.cpp -msgid "Debugger" +#: tools/editor/plugins/script_text_editor.cpp +#: tools/editor/plugins/shader_editor_plugin.cpp +msgid "Goto Line.." msgstr "" -#: tools/editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +#: tools/editor/plugins/script_text_editor.cpp +msgid "Contextual Help" msgstr "" #: tools/editor/plugins/shader_editor_plugin.cpp @@ -4511,6 +4842,14 @@ msgid "Could not instance scene!" msgstr "" #: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: tools/editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" msgstr "" @@ -5325,11 +5664,11 @@ msgid "Unnamed Project" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to open more than one projects?" +msgid "Are you sure to open more than one project?" msgstr "" #: tools/editor/project_manager.cpp -msgid "Are you sure to run more than one projects?" +msgid "Are you sure to run more than one project?" msgstr "" #: tools/editor/project_manager.cpp @@ -5337,6 +5676,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" #: tools/editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "Project Manager" msgstr "" @@ -5353,6 +5698,10 @@ msgid "Scan" msgstr "" #: tools/editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: tools/editor/project_manager.cpp msgid "New Project" msgstr "" @@ -5644,6 +5993,14 @@ msgstr "" msgid "Sections:" msgstr "" +#: tools/editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: tools/editor/property_selector.cpp +msgid "Select Method" +msgstr "" + #: tools/editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" msgstr "" @@ -5717,6 +6074,10 @@ msgid "No parent to instance a child at." msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Error loading scene from %s" msgstr "" @@ -5845,6 +6206,10 @@ msgid "Save Branch as Scene" msgstr "" #: tools/editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: tools/editor/scene_tree_dock.cpp msgid "Add/Create a New Node" msgstr "" @@ -5854,6 +6219,10 @@ msgid "" "exists." msgstr "" +#: tools/editor/scene_tree_dock.cpp +msgid "Create a new script for the selected node." +msgstr "" + #: tools/editor/scene_tree_editor.cpp msgid "" "This item cannot be made visible because the parent is hidden. Unhide the " @@ -5916,90 +6285,6 @@ msgstr "" msgid "Select a Node" msgstr "" -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Can't operate on '..'" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "No files selected!" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Edit Dependencies.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "View Owners.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Copy Path" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Rename or Move.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move To.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Info" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Import.." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Previous Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Next Directory" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Re-Scan Filesystem" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Toggle folder status as Favorite" -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: tools/editor/scenes_dock.cpp -msgid "Move" -msgstr "" - #: tools/editor/script_create_dialog.cpp msgid "Invalid parent class name" msgstr "" diff --git a/version.py b/version.py index dd80ca1b19..bf1d33c1cf 100644 --- a/version.py +++ b/version.py @@ -1,5 +1,5 @@ short_name="godot" name="Godot Engine" major=2 -minor=1 -status="beta" +minor=2 +status="alpha" |